近一周,学习Scheme有点上瘾,我对Scheme的兴趣源自其简单的语法,只有成对的()。学习Scheme,加上自己的python编程,能很快的抄出一个Scheme解释器:
https://github.com/zhangyun00...
仔细看程序注释里的论文链接,介绍了绍python实现的scheme子集。我拿来改了改,加了for和while循环,break跳出循环,可以使用元组、列表,字典,class定义类。
运行python ZhScheme.py
ZhScheme> (tuple 1 2) ['tuple', 1, 2] (1, 2) ZhScheme> (list 5 6 6 ) ['list', 5, 6, 6] [5, 6, 6] ZhScheme> (dict (list (list 5 6) (list 56 34 ))) ['dict', ['list', ['list', 5, 6], ['list', 56, 34]]] {5: 6, 56: 34} ZhScheme> (sin 12) ['sin', 12]-0.5365729180004349ZhScheme> (sin 34) ['sin', 34]0.5290826861200238ZhScheme> (list 3 4 5) ['list', 3, 4, 5] (3 4 5) ZhScheme> (list (list 3 4 5) (list 456 45)) ['list', ['list', 3, 4, 5], ['list', 456, 45]] ((3 4 5) (456 45ZhScheme> (define i 4) ['define', 'i', 4] ZhScheme> ii4ZhScheme> (while (< i 23) (begin (print i) (set i (+ i 1))(if (eq? i 12) break)) ) ['while', ['<', 'i', 23], ['begin', ['print', 'i'], ['set', 'i', ['+', 'i', 1]], ['if', ['eq?', 'i', 12], 'break']]]4567891011ZhScheme> (for (set i 23) (< i 45) (set i (+ i 2)) (begin (print i) (if (eq? i3) break))) ['for', ['set', 'i', 23], ['<', 'i', 45], ['set', 'i', ['+', 'i', 2]], ['begin' ['print', 'i'], ['if', ['eq?', 'i', 43], 'break']]]2325272931333537394143ZhScheme> (env) ['env'] variables ... + :- : * : / : > : < : >= : <= : = : not : eq? : equal? : max : min : abs : round : car : at 0x0000cdr : at 0x0000list : at 0x000list-ref : at 0append : len : map : print : exit : Use exit() or Ctrl-Z plus R open : at 0x000call/cc : at 0x00number? : at 0xstring? : at 0xlist? : at 0x00struct? : at 0xdict? : at 0x00int : {} __name__ : math __doc__ : This module is always av mathematical functions defined by th __package__ : __loader__ : , origin='built-in')acos : acosh : asin : asinh : atan : atan2 : atanh : ceil : copysign : cosh : degrees : erfc : exp : expm1 : fabs : factorial : fmod : frexp : fsum : gamma : gcd : hypot : isclose : isnan : ldexp : lgamma : log1p : log10 : log2 : modf : pow : radians : sinh : sqrt : tan : tanh : trunc : pi : 3.141592653589793e : 2.718281828459045tau : 6.283185307179586inf : infnan : nani : 43struct ...
总之,这个scheme的目标是可以调用Python里的各种常用函数,以上env结果中的变量和函数都是你可以使用的。
现在可解释执行,以行为单位的文件了:
python ZhScheme.py test.s
test.s文件内容:
(quote must write code as lines) (+ 2 5) (define i 1)i(if (< i 19) (print (+ i 1))) (while (< i 23) (begin (print i) (set i (+ i 1))(if (eq? i 12) break))) (for (set i 23) (< i 45) (set i (+ i 2)) (begin (print i) (if (eq? i 43) break))) (define f (open test.ss r)) ((. f read)) (define define 12) define (class point (list (list n 2)(list m (lambda x (* 2 x))))) (define x (point)) (. x n) ((. x m) 4)
有在ZhScheme加入静态数据类型的想法,也就是说,除了能define x 12之外,还可以使用 int y 34,定义一个整形变量,如果set y 2.3会导致一个类型错误 -- 把浮点值付给了整型值,多数静态类型语言都是这么做的。
网站栏目:创新互联Python教程:Python实现Scheme
标题路径:http://www.shufengxianlan.com/qtweb/news17/444917.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联