Scheme 在方案中,点不在cons上的含义是什么?为什么有时有效,有时无效
除了cons符号外,点的含义是什么? 据我所知,点只是一个符号。所以我不明白这里的意思: 原因: 但是:Scheme 在方案中,点不在cons上的含义是什么?为什么有时有效,有时无效,scheme,Scheme,除了cons符号外,点的含义是什么? 据我所知,点只是一个符号。所以我不明白这里的意思: 原因: 但是: 这里的点是什么意思?语法被解析,对于方案读取器'(1.(2)()被解析并创建与'(12)相同的结构。基本上正确的列表是单链接列表,其中最后一个cdr指向空列表 (somefun.(5))对于读者来说与(somefun 5)相同。当源代码转换成数据结构时,解释器将不知道您是编写了其中一个还是另一个。Hovever(somefun.5)不会被解析为只有一个参数的函数,因为参数列表本身就是一个数字
这里的点是什么意思?语法被解析,对于方案读取器
'(1.(2)()
被解析并创建与'(12)
相同的结构。基本上正确的列表是单链接列表,其中最后一个cdr
指向空列表
(somefun.(5))
对于读者来说与(somefun 5)
相同。当源代码转换成数据结构时,解释器将不知道您是编写了其中一个还是另一个。Hovever(somefun.5)
不会被解析为只有一个参数的函数,因为参数列表本身就是一个数字。解析器将其解析为数据结构,但负责编译或解释它的方案实现失败。您可以在数据中使用点列表,在rest参数中使用一些语法,如lambda
,但它非常有限。大多数情况下,在代码中使用点对失败
方案系统将仅以一种方式显示结构。例如,如果您输入”(1.(2)()
,您将返回(12)
,因为带有列表或空列表的点cdr
获得特殊列表可视化。如果您执行了”(1.(2.3))
它可以开始使用特殊规则,因为cdr
是一对,但下一个cdr将不会飞行,并以(12.3)
结束。如果你计算'(equal?(((a.(b.(c)())('(abc)))
你会得到(equal?'(abc)'(abc))
,这是因为它是该结构最简单的可视化。作为代码,它们读取相同的结构并计算相同的值
学习计划时最常见的问题是理解列表结构。例如,如何使用cons
创建((12)(34))
,以及如何访问4
。如果你知道它真的是((1.(2)())((3.(4)())
你会看到4是在播放cdr
,car
,cdr
,然后car
或简化的(cadadr)((12)(34)))
。可视化工具将省略cdr
中的点和额外的括号集(如果有)。例如”((a)。(b))
将变成((a)b)
> (equal? . 8)
Exception: invalid syntax (equal? . 8)
Type (debug) to enter the debugger.
> (equal? . ((quote . ((a . (b . (c . ()))))) . ('(a b c))))
#t