60行R++代码实现Lisp解释器
Posted jzdwajue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了60行R++代码实现Lisp解释器相关的知识,希望对你有一定的参考价值。
还没有处理lambda、上下文等。有待完好。
main { for putsl(eval(getsl)) } rstr eval(rstr s) { return eval(tokenize(s).split(‘ ‘)) } rstr eval(rbuf<rstr>& v) { if v.get(0)!=‘(‘ return v.get(0) next=find(v.sub(2))+2 switch v.get(1) case ‘+‘ return eval(v.sub(2,next)).toint+eval(v.sub(next,v.count-1)).toint case ‘-‘ return eval(v.sub(2,next)).toint-eval(v.sub(next,v.count-1)).toint case ‘*‘ return eval(v.sub(2,next)).toint*eval(v.sub(next,v.count-1)).toint case ‘/‘ return eval(v.sub(2,next)).toint/eval(v.sub(next,v.count-1)).toint return ‘‘ } int find(rbuf<rstr>& v) { return r_cond(v.get(0)==‘(‘,find_sbk(v)+1,1) } int find_sbk(rbuf<rstr>& v) { count=0 for i in v if ‘(‘==v[i] ++count if ‘)‘==v[i] --count if 0==count return i return v.count } rstr tokenize(rstr s) { rstr ret for i in s if s[i]==`( ret+=‘ ( ‘ elif s[i]==`) ret+=‘ ) ‘ elif s[i]==0xa||s[i]==0xd||s[i]==9 ret+=‘ ‘ else ret+=s[i] return ret }
以上是关于60行R++代码实现Lisp解释器的主要内容,如果未能解决你的问题,请参考以下文章
sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li