List 什么';这两个列表在方案中的区别是什么

List 什么';这两个列表在方案中的区别是什么,list,scheme,List,Scheme,我是个策划的新手。我只是对下面两个列表的区别感到困惑 (define a '(1 2)) (define a '(1 . 2)) 我认为a等于b,但是 (equal? a b) 把f还给我。 任何帮助都将不胜感激。Scheme和LISP中使用“点”符号来描述“不正确的列表”,即不符合标准列表数据定义的列表。这个问题: 。。。可能回答了你的大部分问题。如果这篇文章没有回答任何问题,请告诉我 祝你好运 这两者不一样。第一个是普通列表。在虚线表示法中,它将如下所示: (1 . (2 . nil)

我是个策划的新手。我只是对下面两个列表的区别感到困惑

(define a '(1 2))
(define a '(1 . 2))
我认为a等于b,但是

(equal? a b)
把f还给我。 任何帮助都将不胜感激。

Scheme和LISP中使用“点”符号来描述“不正确的列表”,即不符合标准列表数据定义的列表。这个问题:

。。。可能回答了你的大部分问题。如果这篇文章没有回答任何问题,请告诉我


祝你好运

这两者不一样。第一个是普通列表。在虚线表示法中,它将如下所示:

(1 . (2 . nil))
正常列表将数据存储在
cons
单元格的
car
中,而
cdr
仅用于存储指向列表中下一个
cons
单元格的指针,或存储列表中最后一个单元格的Nil指针

您对
a
的定义仅使用一个
cons
单元格,在
car
中使用
1
,在
cdr
中使用
2

如果以图形方式绘制它们,它们将如下所示:

(1 . (2 . nil))

它们返回的值不相等,因为它们不是相同的数据类型。第一个带:
(define a'(1.2))
的是一对。列表是一对,但并非所有对都是列表。列表是具有
car
的配对,其
cdr
是一个列表。当您获得点符号时,表示该对的
car
为1,而
cdr
为2。因为它们不是相同的数据类型,所以它们不能相等。

非常感谢。我刚刚知道fp的另一个概念。