什么'null?','程序?' 和'符号?' 在下面的代码中表示什么?

Mih*_*ika 0 lisp python

我将通过以下文档来实现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)

什么是'?' 在关键意义的最后?您能否提供一些使用这些条目的例子?

sep*_*p2k 5

从语法上讲,?它只是Lisp中标识符中允许的众多字符之一.所以它只是函数名称的一部分.

按照惯例,以结尾的函数名称?用于返回布尔值的函数.

具体equal?检查它的两个参数是否相等,null?检查它的参数是否为空列表,所有其他参数都是类型检查,即它们检查它们的参数是否属于给定类型.

您能否提供一些使用这些条目的例子?

返回布尔值的函数最常用于ifcond条件,因此您可能会看到类似这样的函数示例null?:

(define (sum lst)
  (if (null? lst)
    0
    (+ (first lst) (sum (rest lst)))))
Run Code Online (Sandbox Code Playgroud)