所需的最小原语集是什么,以便语言是图灵完整的和lisp变体?
看起来像汽车,cdr和一些流量控制和REPL的东西就足够了。如果有这样的清单会很好。
假设只有3种类型的数据,整数,符号和列表。(如在picolisp中)
答案 0 :(得分:12)
lambda calculus正在完成。它有一个原始 - lambda。将其转换为lisp语法非常简单。
答案 1 :(得分:6)
Lisp FAQ对此进行了很好的讨论。这取决于你选择的原语。麦卡锡最初的“LISP 1.5程序员手册”有五个功能:CAR,CDR,CONS,EQ和ATOM。
答案 2 :(得分:5)
答案 3 :(得分:2)
实际了解这一点的最好方法是实施它。我使用3个夏天来创建Zozotez,这是一个在Brainfuck上运行的McCarty-ish LISP。
我试图找出我需要的东西,在论坛上你会找到一个说You only need lambda.的帖子。因此,如果你愿意的话,你可以在lambda演算中制作一个完整的LISP。我发现它很有趣,但如果你想要的东西最终会产生副作用并在现实世界中起作用,那么这种方法几乎不可能。
对于图灵完整的LISP,我使用了Paul Grahams explanation of McCarthy's paper,您真正需要的是:
多数民众赞成10.除此之外,还有一个可以测试的实现,而不仅仅是在绘图板上:
多数民众赞成在我的Zozotez我实施了set
和flambda
(匿名的宏观,如lambda)。我可以提供一个实现任何动态绑定lisp(Elisp,picoLisp)的库,但文件I / O除外(因为除了stdin / stdout之外,底层BF不支持它)。
我建议任何人在LISP
和(not LISP)
中实施LISP1解释器,以完全理解语言的实现方式。 LISP语法非常简单,因此它是一个很好的起点。对于所有其他编程语言,如何实现解释器非常相似。例如。在SICP videos中,向导为逻辑语言编写解释器,但结构和如何实现它与lisp解释器非常相似,即使这种语言与Lisp完全不同。