Scheme 获取第二个元素时出现列表引用错误

Scheme 获取第二个元素时出现列表引用错误,scheme,racket,Scheme,Racket,为什么list ref可以获取第一个元素,但不能获取第二个元素 > (list-ref (cons 1 2) 0) 1 > (list-ref (cons 1 2) 1) list-ref: index reaches a non-pair index: 1 in: '(1 . 2) context...: C:\Program Files\Racket\collects\racket\private\misc.rkt:87:7 > 我正在使用DrRacke

为什么
list ref
可以获取第一个元素,但不能获取第二个元素

> (list-ref (cons 1 2) 0)
1
> (list-ref (cons 1 2) 1)
list-ref: index reaches a non-pair
  index: 1
  in: '(1 . 2)
  context...:
   C:\Program Files\Racket\collects\racket\private\misc.rkt:87:7
>

我正在使用DrRacket。

因为列表没有正确生成。试试这个:

(list-ref (list 1 2 3) 1)
请记住,列表是使用
cons
单元格生成的,该单元格在
car
部分中有一个元素,在
cdr
部分中有另一个
cons
单元格,或者是空列表:

(list-ref (cons 1 (cons 2 (cons 3 empty))) 1)

因为列表未正确生成。试试这个:

(list-ref (list 1 2 3) 1)
请记住,列表是使用
cons
单元格生成的,该单元格在
car
部分中有一个元素,在
cdr
部分中有另一个
cons
单元格,或者是空列表:

(list-ref (cons 1 (cons 2 (cons 3 empty))) 1)

cons
通常包含列表的第一个元素和其余元素。这意味着第二个参数应该是一个列表<代码>2不是一个列表。您的意思可能是
(cons1(cons2 empty))
cons
通常包含列表的第一个元素和其余元素。这意味着第二个参数应该是一个列表<代码>2不是一个列表。你的意思可能是
(cons1(cons2空))
。你能详细解释一下吗
'(1 2 3)
是一个常量,那么动态生成的列表呢?它不是常量,它是一个相当于使用cons操作生成列表的快捷方式,请参阅我的updateOk,很高兴了解到这一点,我是racket的新手,刚刚开始学习语言。谢谢。如果你只是在学习,从教学语言开始可能会更容易。例如,如果您在BSL(第一个)中,
(cons 1 2)
将是一个类型错误,它将告诉您
cons:第二个参数必须是一个列表,但收到1和2
。您在第二段中写了两次
car
。我不能编辑一个字符。你能详细说明一下吗
'(1 2 3)
是一个常量,那么动态生成的列表呢?它不是常量,它是一个相当于使用cons操作生成列表的快捷方式,请参阅我的updateOk,很高兴了解到这一点,我是racket的新手,刚刚开始学习语言。谢谢。如果你只是在学习,从教学语言开始可能会更容易。例如,如果您在BSL(第一个)中,
(cons 1 2)
将是一个类型错误,它将告诉您
cons:第二个参数必须是一个列表,但收到1和2
。您在第二段中写了两次
car
。我不能编辑一个字符。