python - '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),
})
'?' 是什么意思?底键是什么意思?您能否提供一些将使用这些条目的示例?
解决方案
语法?
上只是 Lisp 标识符中允许的众多字符之一。所以它只是函数名的一部分。
按照惯例,以 结尾的函数名称?
用于返回布尔值的函数。
具体equal?
检查它的两个参数是否相等,null?
检查它的参数是否是一个空列表,所有其他的都是类型检查,即它们检查它们的参数是否是给定的类型。
您能否提供一些将使用这些条目的示例?
返回布尔值的函数最常用于if
orcond
条件,因此您可能会看到类似这样的函数示例null?
:
(define (sum lst)
(if (null? lst)
0
(+ (first lst) (sum (rest lst)))))
推荐阅读
- c - 为什么 printf 说明符格式 %n 不起作用?
- python - 使用归并排序原理
- javascript - 如何使用 ajax 在 wordpress 文件中调用 php 文件?
- python - Tensorflow:如何加载预训练的 ResNet 模型
- svg - 如何在 svg 文档中以编程方式创建 svg 元素?
- java - Java 编译器会在编译期间计算常量表达式吗?
- arrays - 在 loadrunner 中传递 c 数组
- java - 如何摆脱这个错误'将 findViewById 转换为 EditText 是多余的'?
- jquery - Bootstrap 4 DateTimePicker Multidate 不工作
- sql - 在 Scala 上,如何使用 sql 语句将参数传递给文件并使用 sqlContext.sql?