Scheme 两个缺点的区别
Scheme 两个缺点的区别,scheme,lisp,sicp,cons,Scheme,Lisp,Sicp,Cons,cons在以下两项上的工作方式有什么区别: (cons 1 '(2)) ; (1 2) (cons 1 2) ; (1 . 2) 这两种方法都将pair?计算为true,所以我很好奇这两种方法有什么不同 是否生产: -------- | 1 | 2 | ------- 另一种生产: -------- -------- | 1 | -> | | 2 | X | ------- ------- 或者有什么区别?您需要了解Scheme
cons
在以下两项上的工作方式有什么区别:
(cons 1 '(2))
; (1 2)
(cons 1 2)
; (1 . 2)
这两种方法都将pair?计算为true,所以我很好奇这两种方法有什么不同
是否生产:
--------
| 1 | 2 |
-------
另一种生产:
-------- --------
| 1 | -> | | 2 | X |
------- -------
或者有什么区别?您需要了解Scheme中如何定义适当的列表。适当的列表由
cons
ing元素创建,其中cdr
部分是另一个cons
单元格或空列表”()
。问题中的第一个示例是一个适当的列表:
(cons 1 '(2))
(cons 1 (cons 2 '())) ; this is the same as above
=> '(1 2)
(cons 1 2)
=> '(1 . 2)
当然,我们也可以创建不遵循规则的任意cons
单元格。问题中的第二个示例演示了这一点,它是一个cons
单元格,其中cdr
部分不是另一个cons
单元格或空列表,因此它不是一个正确的列表:
(cons 1 '(2))
(cons 1 (cons 2 '())) ; this is the same as above
=> '(1 2)
(cons 1 2)
=> '(1 . 2)
您需要了解如何在Scheme中定义适当的列表。适当的列表由
cons
ing元素创建,其中cdr
部分是另一个cons
单元格或空列表”()
。问题中的第一个示例是一个适当的列表:
(cons 1 '(2))
(cons 1 (cons 2 '())) ; this is the same as above
=> '(1 2)
(cons 1 2)
=> '(1 . 2)
当然,我们也可以创建不遵循规则的任意cons
单元格。问题中的第二个示例演示了这一点,它是一个cons
单元格,其中cdr
部分不是另一个cons
单元格或空列表,因此它不是一个正确的列表:
(cons 1 '(2))
(cons 1 (cons 2 '())) ; this is the same as above
=> '(1 2)
(cons 1 2)
=> '(1 . 2)
正确的列表总是以NIL结尾。即,第一个代码示例生成两个cons单元,一个在另一个内,最里面的是以nil结尾的。然而,第二个示例并不遵循标准列表的规则,因为它只是一个具有两个非nil值的cons单元格
(cons 1 '(2))
CLISP> (1 2) ; This list is actually (cons 1 (cons 2 NIL))
(cons 1 (cons 2 NIL))
CLISP> (1 2) ; Same as above
但是,如果您将NIL省略,REPL将用一个点表示
(cons 1 2) ; this cons-cell is not terminated by NIL
CLISP> (1 . 2)
(cons 1 (cons 2 (cons 3 4))) ; A longer example
CLISP> (1 2 3 . 4) ; Notice the dot to indicate last element is non-nil.
正确的列表总是以NIL结尾。即,第一个代码示例生成两个cons单元,一个在另一个内,最里面的是以nil结尾的。然而,第二个示例并不遵循标准列表的规则,因为它只是一个具有两个非nil值的cons单元格
(cons 1 '(2))
CLISP> (1 2) ; This list is actually (cons 1 (cons 2 NIL))
(cons 1 (cons 2 NIL))
CLISP> (1 2) ; Same as above
但是,如果您将NIL省略,REPL将用一个点表示
(cons 1 2) ; this cons-cell is not terminated by NIL
CLISP> (1 . 2)
(cons 1 (cons 2 (cons 3 4))) ; A longer example
CLISP> (1 2 3 . 4) ; Notice the dot to indicate last element is non-nil.
在这两种情况下,
cons
的工作方式没有区别
cons
是相同的。由cons
生成的任何内容都会导致pair?
返回true
。就这么简单
在这两个代码段中,您一起使用的两件事是不同的
在第二段代码中,它是两个数字。我们避免任何对表达效率的倾向,只对概念的正确性感兴趣,我们认为这是创造
---------
| * | * |
---------
| |
v v
1 2
第一个代码段,(cons 1'(2))
,使用一个数字1
和一个由'(2)
创建的对象:
在这两种情况下,
cons
的工作方式没有区别
cons
是相同的。由cons
生成的任何内容都会导致pair?
返回true
。就这么简单
在这两个代码段中,您一起使用的两件事是不同的
在第二段代码中,它是两个数字。我们避免任何对表达效率的倾向,只对概念的正确性感兴趣,我们认为这是创造
---------
| * | * |
---------
| |
v v
1 2
第一个代码段,(cons 1'(2))
,使用一个数字1
和一个由'(2)
创建的对象:
是的,正确…如果你正在使用球拍,你可能想看看哪些图片会让你看到不同。是的,但顺序相反。第一张图片与最后一个代码片段一起出现。(只是为了让旁观者非常清楚)是的,没错……如果你用的是球拍,你可能想看看哪个会让你看到不同的画面。是的,但顺序相反。第一张图片与最后一个代码片段一起出现。(只是为了让旁观者非常清楚)