我将通过以下文档来实现Python中的Lisp Interpreter: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),
})
Run Code Online (Sandbox Code Playgroud)
什么是'?' 在关键意义的最后?您能否提供一些使用这些条目的例子?
从语法上讲,?它只是Lisp中标识符中允许的众多字符之一.所以它只是函数名称的一部分.
按照惯例,以结尾的函数名称?用于返回布尔值的函数.
具体equal?检查它的两个参数是否相等,null?检查它的参数是否为空列表,所有其他参数都是类型检查,即它们检查它们的参数是否属于给定类型.
您能否提供一些使用这些条目的例子?
返回布尔值的函数最常用于if或cond条件,因此您可能会看到类似这样的函数示例null?:
(define (sum lst)
(if (null? lst)
0
(+ (first lst) (sum (rest lst)))))
Run Code Online (Sandbox Code Playgroud)