Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 在equal on方案中使用do-为什么有时有效,有时无效_Scheme - Fatal编程技术网

Scheme 在equal on方案中使用do-为什么有时有效,有时无效

Scheme 在equal on方案中使用do-为什么有时有效,有时无效,scheme,Scheme,这不是重复的 除了cons符号外,点的含义是什么? 据我所知,点只是一个符号。所以我不明白这里的意思: 原因: 但是: 这里的点是什么意思?在lisp语言中,当读者遇到类似(non-list1.non-list2)的内容时,它将其作为“cons”单元格返回,其“car”是non-list1,其“cdr”是non-list2 现在让我们考虑语法(非列表.list)< /代码>。在这种情况下,读取此s表达式的结果可以再次视为一个“cons”单元,其中非列表为“car”,而列表为“cdr”,但这正是一

这不是重复的

除了cons符号外,点的含义是什么? 据我所知,点只是一个符号。所以我不明白这里的意思:

原因:

但是:


这里的点是什么意思?

在lisp语言中,当读者遇到类似
(non-list1.non-list2)
的内容时,它将其作为“cons”单元格返回,其“car”是
non-list1
,其“cdr”是
non-list2

现在让我们考虑语法<代码>(非列表.list)< /代码>。在这种情况下,读取此s表达式的结果可以再次视为一个“cons”单元,其中

非列表
为“car”,而
列表
为“cdr”,但这正是一个列表的定义,该列表的第一个元素
非列表
,其余元素
列表

例如,
(2.()
被解读为
(2)
,这是一个有
2
的列表,它有它的第一个元素,没有其他元素(所以列表的其余部分是空列表,
()
)。类似地,
(1.(2)()
被解读为
(12)
,依此类推

因此,在您的示例中,读取器将语法
(equal?.8)
作为包含两个原子、一个符号和一个数字的cons单元格返回,这不是要计算的有效表达式(请记住,在lisp语言中,只能计算第一个元素为“运算符”(函数、宏等)的列表),并将列表的其余部分作为其参数)

让我们考虑第二个表达式,看看它是否是一个有效的表达式列表。

(equal? . ((quote . ((a . (b . (c . ()))))) . ('(a b c))))
部分
(a.(b.(c)())
就是列表
(a b c)
。因此,我们现在:

(equal? . ((quote . ((a b c))) . ('(a b c))))
(equal? . ((quote  (a b c)) . ('(a b c))))
请记住,语法
'something
等同于
(引用something)
,反之亦然,我们现在有:

(equal? . ((quote . ((a b c))) . ('(a b c))))
(equal? . ((quote  (a b c)) . ('(a b c))))
然后:

(equal? . ('(a b c) . ('(a b c))))
让我们来解释最右边的点:

(equal? . ('(a b c) '(a b c)))
最后:

(equal? '(a b c) '(a b c))
这是要计算的有效表达式。记住
'X
是数据
X
,这里我们比较两个列表
(a b c)
,它们根据谓词
相等?
相等