ToriLisp –小鸟的eratz Lisp

2021-01-02 08:20:12

在决定进行副项目时,从花式过渡到应用需要三个因素:目标,动力和时间。

对于我个人来说,时间通常是最大的症结所在,但由于使用了COVID,我今年可能花费的大部分时间都被取消了。但是,动力仍然是一个巨大的症结所在,直到我遇到了几个有助于推动我前进的项目。首先,我在今年早些时候花了一些时间来整理Mary Rose Cook的可爱的Little Lisp解释器代码。考虑到我对Mary以前的项目的了解,Little Lisp的实现既简单又优雅就不足为奇了。但是,我并没有做好准备,因为事实证明,对口译员的黑客攻击是直截了当且令人上瘾的。但是,直到我重新发现William Taysom的古老的类似于Scheme的语言Misp时,我才想到了翻译的形式。在William关于Misp的原始博客文章发表之时,我被他的热情所吸引,并喜欢他发表的语言的实现。 1大约在同一时间,我找到了Paul Graham的原始Arc教程tut.txt,并广泛使用它来指导我下一步的实现。 2除了关于Arc的所有讨论之外,我当然赞赏Arc教程的清晰性和布局,并发现它是使用一点语言的绝佳大纲。

最后,正如你们中的一些人可能知道的那样,我涉足JavaScript的函数编程,甚至还创建了一些库,将js的fp推向了边缘。即Lemonad和下划线贡献者。这些库中的某些想法进入了我自己的解释器,最终将我的代码从Misp,Little Lisp和Arc推到了……其他(我称其为Tori Lisp)-eratz LISP,适合小鸟。

ToriLisp = Litle Lisp + Misp + tut.txt + Lemonad +下划线-contrib +一小撮CLJ

鸟> (让(x 3 y 4)(+(* x 2)(* y 2))));; => 14(def map(λ(fn list)(if(no list)list(cons(fn(first list))(map fn(rest list)))))) (地图(+ 10)'(1 2 3));; => [11、12、13]鸟> ({x y |(/(+ x y)2)} 2 4);; => 3鸟> (len" abc");; => 3鸟> (len {a | a});; => 1鸟> (len +);; => 2鸟> (阅读"(推[1]' Z)");; => ["' quote",1],["' quote","& #39; Z" ]]鸟> (eval(阅读"(push [1]' Z)"));; == ["' Z,1]

如果我想显示功能列表,则可以使用以下列表:3

如果您有兴趣签出该语言,那么ToriLisp Github存储库将提供快速入门,测试套件以及自己的tut.txt。

尽管这些实现方法并没有使Internet存档成为现实。 几年前,我与Taysom先生取得了联系,他很友好地向我发送了代码,但我不愿在未经其批准的情况下公开分享该代码。 ↩ 目前,尽管ToriLisp没有宏,因为它很难添加。 相反,我想从函数字面量和自动循环开始,看看能走多远。 我可能会在以后添加它们,但只有时间能证明。 ↩