当前位置: 首页 > 图灵资讯 > 行业资讯> Python实现Scheme

Python实现Scheme

来源:图灵python
时间: 2025-03-04 22:13:38

在过去的一周里,我对学习Scheme有点上瘾。我对Scheme的兴趣来自于它简单的语法,只有成对的()。学习Scheme和自己的Python编程可以快速复制Scheme解释器:

https://github.com/zhangyun000...

仔细查看程序注释中的论文链接,介绍了绍python实现的scheme子集。我用它来改变它,添加for和while循环,break跳出循环,可以使用元组、列表、字典、class定义类。

运行python ZhScheme.py

ZhScheme>(tuple12)
['tuple',1,2]
(1,2)
ZhScheme>(list566)
['list',5,6,6]
[5,6,6]
ZhScheme>(dict(list(list56)(list5634)
['dict',['list',['list',5、6、['list',56,34]]]
{5:6,56:34}
ZhScheme>(sin12)
['sin',12.0.56729180004349ZhSchememe>(sin34)
['sin',34.0.529082661200238ZhSchememe>(list345)
['list',3,4,5]
(345)
ZhScheme>(list(list345)(list45645)
['list',['list',3,4,5],['list',456,45]]
(345)(45645ZhScheme>(definei4)
['define','i',4]
ZhScheme>ii4ZhScheme>(while(<i23)(begin(printi)(seti(+i1))(if(eq?i12)break))
)
['while',['<','i',23],['begin',['print','i'],['set','i',['+','i',1]],
['if',['eq?i12)break))
)
['while',['<','i',23],['begin',['print','i'],['set','i',['+','i',1]],
['if',['eq?','i',12],'break']]]4579101ZhScheme>(for(seti23)(<i45)(seti(+i2))(begin(printi)(if(eq?i3)break)))
['for',['set','i',23],['<','i',45],['set','i',['+','i',['];begin'
['print','i'],['if',['eq?','i',43],'break']]]23227233333333734>(env)
['env']
variables...

+:<built-infunctionadd>-:<built-infunctionsub>*:<built-infunctionmul>/:<built-infunctiontruep>>:<built-infunctiongt><:<built-infunctionlt>>=:<built-infunctionge><=:<built-infunctionle>=:<built-infunctioneq>not:<built-infunctionnot_>eq?:<built-infunctionis_>equal?:<built-infunctioneq>max:<built-infunctionmax>min:<built-infunctionmin>abs:<built-infunctionabs>round:<built-infunctionround>car:<function<lambda>0x000cdr000:<function<lambda>at0x00listtttitttit:<function<lambda>at0x00listtttit-ref:<function<lambda>at0append:<built-infunctionadd>len:<built-infunctionlen>map:<class'map'>
print:<built-infunctionprint>exit:Useexit()orCtrl-ZplusR
open:<function<lambda>at0x000cal/cc:<functionlcalcat00procedure:<built-infunctioncanull?:<built-infunctioncanull?:<function<lambda>at0x0number:<function<lambda>at0xstring?:<function<lambda>at0xlist?:<function<lambda>at0x00struct:<function<lambda>at0xdict?:<function<lambda>at0x00int:{}
__name__:math
__doc__:Thismoduleisalwaysav
mathematicalfunctionsdefinedbyth
__package__:
__loader__:<class'_frozen_impor
__spec__:ModuleSpec(name='math',
orter'>,origin='built-in')acos:<built-infunctionacos>acosh:<built-infunctionacosh>asin:<built-infunctionasin>asinh:<built-infunctionasinh>atan:<built-infunctionatan>atan2:<built-infunctionantan>atanh:<built-infunctionatanh>ceil:<built-infunctionceil>copysign:<built-infunctioncopycos:<built-infunctioncos>cosh:<built-infunctioncosh>degrees:<built-infunctiondegreerf:<built-infunctionerf>erfc:<built-infunctionerfc>exp:<built-infunctionexp>expm1:<built-infunctionexpm1>fabs:<built-infunctionfabs>factorial:<built-infunctionfacfloor:<built-infunctionfloor>fmod:<built-infunctionfmod>frexp:<built-infunctionfrexp>fsum:<built-infunctionfsum>gamma:<built-infunctiongamma>gcd:<built-infunctiongcd>hypot:<built-infunctionhypot>isclose:<built-infunctioniscloisfinite:<built-infunctionisfiisinf:<built-infunctionisinf>isnan:<built-infunctionisnan>ldexp:<built-infunctionldexp>lgamma:<built-infunctionlgammalog:<built-infunctionlog>log1p:<built-infunctionlogp>log10:<built-infunctionlog0>log2:<built-infunctionlog2>modf:<built-infunctionmodf>pow:<built-infunctionpow>radians:<built-infunctionradiasin:<built-infunctionsin>sinh:<built-infunctionsinh>sqrt:<built-infunctionsqrt>tan:<built-infunctiontan>tanh:<built-infunctiontanh>trunc:<built-infunctiontrunc>pi:3.141592653589793e:2.718281828459045tau:6.283185307179586inf:infnan:nani:43struct...

总之,这个scheme的目标是在Python中调用各种常用函数,您可以使用上述env结果中的变量和函数。

现在以行为单位的文件可以解释执行:

python ZhScheme.py test.s

test.s文件内容:

(quotemustwritecodeaslines)

(+25)

(definei1)i(if(<i19)(print(+i1)
(while(<i23)(begin(printi)(seti(+i1))(if(eq?i12)break)))
(for(seti23)(<i45)(seti(+i2))(begin(printi)(if(eq?i43)break)))

(definef(opentest.ssr))
((.fread))

(definedefine12)

define

(classpoint(list(listn2)(listm(lambdax(*2x))
(definex(point))
(.xn)
((.xm)4)

有在ZhScheme中添加静态数据类型的想法,也就是说,除了define外,还可以define x 除了12,也可以使用 int y 如果sett,定义一个整形手术变量 y 2.3会导致类型错误 -- 将浮点值付给整形值,大多数静态语言都是这样做的。