我很好奇。有没有一种最小的LISP,可以在其基础上构建所有其他功能?不用考虑效率——这个问题只是出于优雅的考虑。
如果你在一个外星球上醒来,并被指示构建一个最小的LISP,以后可以在其基础上实现任何你想要的功能,你会包括什么?
编辑:澄清一下。我的意图并不是引发争论,而是考虑实现一个最小的LISP,并想了解我可以达到多少的极简程度,同时仍然允许我实现图灵完备等性质。如果这引起了争议,我相信我会从观察争议中学到我想学的东西。:)谢谢!
我很好奇。有没有一种最小的LISP,可以在其基础上构建所有其他功能?不用考虑效率——这个问题只是出于优雅的考虑。
如果你在一个外星球上醒来,并被指示构建一个最小的LISP,以后可以在其基础上实现任何你想要的功能,你会包括什么?
编辑:澄清一下。我的意图并不是引发争论,而是考虑实现一个最小的LISP,并想了解我可以达到多少的极简程度,同时仍然允许我实现图灵完备等性质。如果这引起了争议,我相信我会从观察争议中学到我想学的东西。:)谢谢!
感谢Paul Graham提供的帮助,以下是John McCarthy原始LISP语言的Common Lisp实现:
它假定了quote
、atom
、eq
、cons
、car
、cdr
和cond
,并定义了null
、and
、not
、append
、list
、pair
、assoc
、eval
、evcon
和evlis
。
Peter Norvig在Python中实现了一个LISP解释器,只用了90行代码,并且他后来的文章详细讨论了你所问的问题。我认为这篇文章值得一读。
我有一种感觉,如果函数调用可以接受任意数量的参数,那么他的“顺序”特殊形式可能可以被省略。
(defun last (lst)
(if (cdr lst)
(last (cdr lst))
(car lst)))
(defun begin (:rest y) (last y))