首页 > 解决方案 > 'null?'、'procedure?' 是什么意思?和“符号?” 在下面的代码中是什么意思?

问题描述

我正在阅读以下文档以在 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),
})

'?' 是什么意思?底键是什么意思?您能否提供一些将使用这些条目的示例?

标签: pythonlisp

解决方案


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

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

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

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

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

(define (sum lst)
  (if (null? lst)
    0
    (+ (first lst) (sum (rest lst)))))

推荐阅读