为了账号安全,请及时绑定邮箱和手机立即绑定

'null?', 'procedure?' 是什么意思?和“符号?” 在下面的代码中是什么意思?

'null?', 'procedure?' 是什么意思?和“符号?” 在下面的代码中是什么意思?

ABOUTYOU 2021-09-25 21:46:17
我正在阅读以下文档以在 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),})'?' 是什么意思?键的末尾是什么意思?您能否提供一些将使用这些条目的示例?
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

在大多数 Lisp 方言中,标识符(实际上是符号名称)可以包含像?(or !or -)这样的标点符号

通常,在 Scheme 中,谓词名称(命名函数返回可测试的布尔值)的名称以?(例如list?)结尾,副作用函数的名称以!(例如vector-set!)结尾;另见R5RSSICP

在 Common Lisp 中,谓词名称通常以P(eg listp)结尾

这些命名约定只是有用的约定。foo!bar?x即使它不是谓词,您也可以命名您的函数。


查看完整回答
反对 回复 2021-09-25
?
慕村9548890

TA贡献1884条经验 获得超4个赞

我不熟悉 Lisp,但查看这些术语的定义,看起来这些术语被用来检查参数是什么,即“列表?” 映射到测试参数是否为列表的函数,“过程?” 测试参数是否是一个过程(或至少是可调用的),'null?' 测试空列表(也许这就是解释器中空值的表示方式)等。


查看完整回答
反对 回复 2021-09-25
  • 3 回答
  • 0 关注
  • 223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信