Programming languages “这是什么意思?”;Lisp可以自己编写吗;
保罗·格雷厄姆(Paul Graham)写道,但这对我来说似乎一点也不不同寻常或确定 ISTM认为一种编程语言是由两件事定义的:它的编译器或解释器,通过fiat定义该语言的语法和语义;它的标准库,在很大程度上定义了熟练用户在用该语言编写代码时将使用的习惯用法和技术 除了一些特殊的例外,(例如,.NET家族的非C#成员),大多数语言的标准库都是用这种语言编写的,这有两个很好的理由:因为它将共享相同的语法定义、函数调用约定和语言的一般“外观”,因为可能为编程语言编写标准库的人是它的用户,尤其是它的设计者。因此,这里没有什么独特之处;这很标准 再说一次,语言的编译器本身并没有什么独特或不寻常的地方。C编译器是用C编写的。Pascal编译器是用Pascal编写的。Mono的C#编译器是用C#编写的。见鬼,甚至有“自己编写”的实现Programming languages “这是什么意思?”;Lisp可以自己编写吗;,programming-languages,lisp,Programming Languages,Lisp,保罗·格雷厄姆(Paul Graham)写道,但这对我来说似乎一点也不不同寻常或确定 ISTM认为一种编程语言是由两件事定义的:它的编译器或解释器,通过fiat定义该语言的语法和语义;它的标准库,在很大程度上定义了熟练用户在用该语言编写代码时将使用的习惯用法和技术 除了一些特殊的例外,(例如,.NET家族的非C#成员),大多数语言的标准库都是用这种语言编写的,这有两个很好的理由:因为它将共享相同的语法定义、函数调用约定和语言的一般“外观”,因为可能为编程语言编写标准库的人是它的用户,尤其是它的设
那么,Lisp本身编写的不寻常意味着什么呢?Paul的意思可能是,Lisp语法作为Lisp值的表示是标准化和普遍的。也就是说,Lisp程序只是一种特殊的S表达式,编写操纵Lisp代码的Lisp代码非常容易。用Lisp编写一个Lisp解释器是一个特例,它不如对代码和数据具有统一表示的一般能力那么令人兴奋。好吧,您提供的链接确实说明,如果您继续阅读,他将详细回答您的问题 Lisp的不寻常之处——在 事实上,Lisp的定义质量-- 就是它可以自己写。 去理解麦卡锡的意思 这个,我们要追溯他的路线 步骤,用他的数学符号 转换为运行公共Lisp 代码
我刚刚删除了一个很长的回复,这可能在这里是不合适的
但请考虑:
(2) 在这本书中,你可以看到麦卡锡如何描述
eval[e,a]
首先作为一个有趣的理论结果(比通用图灵机更简洁的“通用函数”实现)出现在纸上,而当时该小组正在构建的Lisp语言只有数据结构和基本的本机函数。这个手写函数是由S.R.Russell在机器代码中手工实现的,并开始作为第一个Lisp解释器为他们服务。他并不是说Lisp可以用来编写Lisp编译器。他说这种语言是由它自己的数据结构组成的。因此,虽然不能用C数据结构构建C函数,但可以用Lisp实现。一个程序是由计算机执行的列表组成的,这些列表的作用是创建其他列表,然后执行这些列表,这些列表的作用是创建更多要执行的列表。C没有这个属性。例如,C代码不能处理自己的代码。主要思想是Lisp语言有一个非常小的内核,包含少量函数和