在lisp中自定义'+'(和)函数

Jul*_*ida 6 lisp common-lisp

我正在阅读Paul Graham的Lisots of Lisp,他声称任何lisp功能都可以通过这7个基本功能的组合来构建:quote,atom,eq,cond,cons,car,cdr.

问题:Lisp方言真的完全基于这些功能吗?我们如何使用前面提到的7个原始函数定义'sum'或'plus'函数?例如我们自己的(+ 1 2)功能

注意:我对Lisp完全是新手,但我也开始对这种语言感到非常兴奋.这个问题的目的纯粹是真正的兴趣

Ren*_*nzo 12

作者参考了1960年由图灵奖和Lisp发明人John McCarthy撰写的一篇非常着名的论文"符号表达式的递归函数及其机器计算",其中他将Lisp的语义定义为一种新的计算形式,相当于权力到图灵机.

在论文(以及Lisp 1.5手册)中,麦卡锡描述了语言的解释器,只需使用格雷厄姆提到的七个原始函数即可完全编写.

该语言主要用于符号计算,而论文中提供的解释器仅涉及那些计算,而不依赖于与原子和对不同的数字或其他数据类型.

正如格雷厄姆在Lisp的第11页的一个注释中所说的那样,"通过使用例如n个原子的列表来表示数字n,可以在McCarthy的1960 Lisp中进行算术运算",因此执行求和只相当于附加两个名单.

当然,这种做法效率非常低:它只是为了表明与其他计算形​​式的等价性,并且在真正的解释器/编译器中,整数表示为通常的,并且具有通常的运算符.