[英]What does 'null?', 'procedure?' and 'symbol?' mean in the following code?
我正在阅读以下文档,以在Python中实现Lisp解释器: http : //norvig.com/lispy.html
在standard_env函数中,已定义了一个字典,用于将某些符号或变量映射到其相应的函数或值。 但是,我无法理解env词典中的以下条目:
env = {}
env.update({
'equal?': op.eq,
'list?': lambda x: isinstance(x,list),
'null?': lambda x: x == [],
'number?': lambda x: isinstance(x, (int, float)),
'procedure?': callable,
'symbol?': lambda x: isinstance(x, str),
})
什么是“?” 最后的关键是什么意思? 您能否提供一些使用这些条目的示例?
语法上?
只是Lisp标识符中允许的许多字符之一。 因此,它只是函数名称的一部分。
按照约定,函数名称以?
结尾?
用于返回布尔值的函数。
具体equal?
检查其两个参数是否相等,是否为null?
检查其参数是否为空列表,其他所有参数均为类型检查,即检查其参数是否为给定类型。
您能否提供一些使用这些条目的示例?
返回布尔值的函数最常在if
或cond
条件下使用,因此您可能会看到这样的例子作为使用null?
的函数的示例null?
:
(define (sum lst)
(if (null? lst)
0
(+ (first lst) (sum (rest lst)))))
我对Lisp并不熟悉,但是看一下这些术语的定义,就好像它们被用来检查参数是什么,即“列表”? 映射到一个测试该参数是否为列表的函数,“过程?” 测试参数是否为过程(或至少是可调用的),是否为null? 测试一个空列表(也许这就是解释器中表示空值的方式),等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.