猿问

'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),

})

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


ABOUTYOU
浏览 248回答 3
3回答

慕婉清6462132

在大多数 Lisp 方言中,标识符(实际上是符号名称)可以包含像?(or !or -)这样的标点符号通常,在 Scheme 中,谓词名称(命名函数返回可测试的布尔值)的名称以?(例如list?)结尾,副作用函数的名称以!(例如vector-set!)结尾;另见R5RS和SICP。在 Common Lisp 中,谓词名称通常以P(eg listp)结尾这些命名约定只是有用的约定。foo!bar?x即使它不是谓词,您也可以命名您的函数。

慕村9548890

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

相关分类

Python
我要回答