【发布时间】:2021-12-01 12:04:49
【问题描述】:
我正在尝试仅使用基本函数(car、cdr、cons 等)比较 Scheme 中列表列表中的条目,但不知道如何迭代列表。我试着写这个:
(define (iterate L X)
(cond ((null? L) '())
((> X 0) (iterate ((cdr L) (- X 1))))
))
但我不确定为什么它不起作用。我的想法是迭代只会返回 n cdr 之后的列表列表。例如,我试图得到:
(iterate ( ((10 20) (20 30) (30 40) (40 50)) '2)) -> ((30 40) (40 50))
(iterate ( ((10 20) (20 30) (30 40) (40 50)) '3)) -> ((40 50))
这是我得到的错误,不知道是什么意思:
*** ERROR: invalid application: (20 30)
Stack Trace:
_______________________________________
0 (20 30)
At line 45 of "./main.sc"
1 ((10 20) (20 30) (30 40) (40 50))
At line 45 of "./main.sc"
2 (((10 20) (20 30) (30 40) (40 50)) '3)
At line 45 of "./main.sc"
3 (iterate (((10 20) (20 30) (30 40) (40 50)) '3))
At line 45 of "./main.sc"
感谢任何帮助。谢谢!
【问题讨论】:
-
您正在尝试使用
cdr返回的列表,就像它是一个可以调用的函数一样。