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)
创建的对象:


是的,正确…如果你正在使用球拍,你可能想看看哪些图片会让你看到不同。是的,但顺序相反。第一张图片与最后一个代码片段一起出现。(只是为了让旁观者非常清楚)是的,没错……如果你用的是球拍,你可能想看看哪个会让你看到不同的画面。是的,但顺序相反。第一张图片与最后一个代码片段一起出现。(只是为了让旁观者非常清楚)