Lisp PC方案TI实现中的NIL表示

Lisp PC方案TI实现中的NIL表示,lisp,scheme,Lisp,Scheme,我正在使用PC Scheme TI实现和《计算机程序的结构和解释》一书学习LISP。PC方案似乎没有“nil”变量 [VM错误!]当前环境中未定义变量 零 相反,它似乎起了作用。 [55]定义一到四个列表1 2 3 4 一到四 两者的意思相同吗?在PC scheme方言中使用无元素序列的正确方法是什么 谢谢。当你说这种方言没有NIL变量时,你在两个方面是对的。不仅不存在nil,而且它似乎被视为一个普通符号,可以用作变量。它说变量没有定义 在Lisp方言中,nil有一个特殊的含义,nil通常不能用

我正在使用PC Scheme TI实现和《计算机程序的结构和解释》一书学习LISP。PC方案似乎没有“nil”变量

[VM错误!]当前环境中未定义变量 零

相反,它似乎起了作用。 [55]定义一到四个列表1 2 3 4 一到四

两者的意思相同吗?在PC scheme方言中使用无元素序列的正确方法是什么


谢谢。

当你说这种方言没有NIL变量时,你在两个方面是对的。不仅不存在nil,而且它似乎被视为一个普通符号,可以用作变量。它说变量没有定义

在Lisp方言中,nil有一个特殊的含义,nil通常不能用作变量

nil只相当于我的术语中的经典Lisps。我指的是与原始的约翰·麦卡锡口齿不清的祖先或模仿有关的口齿不清。Emacs Lisp和Common Lisp就是这样。经典的Lisp使用nil作为列表终止符:即cons1nil生成列表1

从这个意义上讲,Scheme不是经典的Lisp。没有零。它用作空列表的打印符号,当您希望在表达式中使用该值时,它会被引用,就像非空列表文字一样:'。在方案中,cons 1 nil写为cons 1’。布尔false由标记为f的对象表示。空列表是true而不是false,因此如果'1 2产生1,则与经典Lisp中的2不同。'和f都不是符号

方案也区分大小写。即使在Scheme中有一个变量NIL,它也与NIL无关。您可以将两者都用作变量名

SICP文本在其早期章节中引用了一个名为nil的变量,该变量的值为。方案中没有此类变量;如果你想让这些例子起作用,你必须自己动手。这是教科书中一个不幸的方面

如果您定义了一个变量nil,其值为object',以便SICP中的第2章代码工作,那么它仍然不能像在经典Lisp中那样等效于空列表,因为在经典Lisp中,nil和是符号的等效符号。符号nil本身是空列表,反之亦然。它不是一个仅包含列表的变量的名称。因此引号表达式'nil'的计算结果也是空列表!而在scheme中,“nil”计算为普通符号nil,即使您已将其定义为包含空列表的变量

关于第二个问题,似乎有效,两者的含义是否相同?。上文涵盖了相同的含义方面:不,Scheme中的含义不相同。就其工作而言,请考虑R5RS方案报告的以下报价:

注意:在Lisp的许多方言中,空组合是一个合法的表达。在Scheme中,组合必须至少有一个子表达式,因此不是语法有效的表达式。[4.1.3程序调用]


因此,这种松散地处理生成空列表的有效表达式似乎是行为的PC方案扩展,而不是标准方案。它接受的表达式在语法上不是有效的Scheme表达式。

当您说这种方言没有NIL变量时,您在两个方面是正确的。不仅不存在nil,而且它似乎被视为一个普通符号,可以用作变量。它说变量没有定义

在Lisp方言中,nil有一个特殊的含义,nil通常不能用作变量

nil只相当于我的术语中的经典Lisps。我指的是与原始的约翰·麦卡锡口齿不清的祖先或模仿有关的口齿不清。Emacs Lisp和Common Lisp就是这样。经典的Lisp使用nil作为列表终止符:即cons1nil生成列表1

从这个意义上讲,Scheme不是经典的Lisp。没有零。它用作空列表的打印符号,当您希望在表达式中使用该值时,它会被引用,就像非空列表文字一样:'。在方案中,cons 1 nil写为cons 1’。布尔false由标记为f的对象表示。空列表是true而不是false,因此如果'1 2产生1,则与经典Lisp中的2不同。'和f都不是符号

方案也区分大小写。即使在Scheme中有一个变量NIL,它也与NIL无关。您可以将两者都用作变量名

SICP文本在其早期章节中引用了一个名为nil的变量,该变量的值为。方案中没有此类变量;如果你想让这些例子起作用,你必须自己动手。这是教科书中一个不幸的方面

如果您定义了一个变量nil,其值为object',这样来自SICP的第2章代码就可以工作,那么它仍然不等同于 空列表与经典Lisp中的方式相同,因为在经典Lisp中,nil和是符号的等效符号。符号nil本身是空列表,反之亦然。它不是一个仅包含列表的变量的名称。因此引号表达式'nil'的计算结果也是空列表!而在scheme中,“nil”计算为普通符号nil,即使您已将其定义为包含空列表的变量

关于第二个问题,似乎有效,两者的含义是否相同?。上文涵盖了相同的含义方面:不,Scheme中的含义不相同。就其工作而言,请考虑R5RS方案报告的以下报价:

注意:在Lisp的许多方言中,空组合是一个合法的表达。在Scheme中,组合必须至少有一个子表达式,因此不是语法有效的表达式。[4.1.3程序调用]


因此,这种松散地处理生成空列表的有效表达式似乎是行为的PC方案扩展,而不是标准方案。它接受的表达式在语法上不是有效的Scheme表达式。

我不知道PC Scheme,但如果您想要完全兼容SICP的Scheme实现,可以使用。另外,我不确定PC Scheme是否是一个Scheme,因为它没有nil。TI PC Scheme是一个非常古老的实现。除非您仅限于8088 msdos计算机,否则最好切换到更现代的实现。我不知道PC方案,但如果您想要完全兼容SICP的方案实现,您可以使用。另外,我不确定PC Scheme是否是一个Scheme,因为它没有nil。TI PC Scheme是一个非常古老的实现。除非您仅限于8088 msdos计算机,否则最好切换到更现代的实现。