真的是最低限度

时间:2010-04-28 17:07:49

标签: lisp turing-complete

所需的最小原语集是什么,以便语言是图灵完整的和lisp变体?

看起来像汽车,cdr和一些流量控制和REPL的东西就足够了。如果有这样的清单会很好。

假设只有3种类型的数据,整数,符号和列表。(如在picolisp中)

4 个答案:

答案 0 :(得分:12)

lambda calculus正在完成。它有一个原始 - lambda。将其转换为lisp语法非常简单。

答案 1 :(得分:6)

Lisp FAQ对此进行了很好的讨论。这取决于你选择的原语。麦卡锡最初的“LISP 1.5程序员手册”有五个功能:CAR,CDR,CONS,EQ和ATOM。

答案 2 :(得分:5)

我认为最小的设定是John McCarthy在原始论文中发表的。

The Roots of Lisp

The code

答案 3 :(得分:2)

实际了解这一点的最好方法是实施它。我使用3个夏天来创建Zozotez,这是一个在Brainfuck上运行的McCarty-ish LISP。

我试图找出我需要的东西,在论坛上你会找到一个说You only need lambda.的帖子。因此,如果你愿意的话,你可以在lambda演算中制作一个完整的LISP。我发现它很有趣,但如果你想要的东西最终会产生副作用并在现实世界中起作用,那么这种方法几乎不可能。

对于图灵完整的LISP,我使用了Paul Grahams explanation of McCarthy's paper,您真正需要的是:

  • 符号评价
  • 特殊表格报价
  • 特殊形式if(或cond)
  • 特殊形式lambda(类似于引用)
  • function eq
  • function atom
  • 功能缺点
  • 功能车
  • function cdr
  • function-dispatch(基本上应用但实际上没有暴露给系统,因此它处理第一个元素是函数的列表)

多数民众赞成10.除此之外,还有一个可以测试的实现,而不仅仅是在绘图板上:

  • 功能阅读
  • function write

多数民众赞成在我的Zozotez我实施了setflambda(匿名的宏观,如lambda)。我可以提供一个实现任何动态绑定lisp(Elisp,picoLisp)的库,但文件I / O除外(因为除了stdin / stdout之外,底层BF不支持它)。

我建议任何人在LISP(not LISP)中实施LISP1解释器,以完全理解语言的实现方式。 LISP语法非常简单,因此它是一个很好的起点。对于所有其他编程语言,如何实现解释器非常相似。例如。在SICP videos中,向导为逻辑语言编写解释器,但结构和如何实现它与lisp解释器非常相似,即使这种语言与Lisp完全不同。