【发布时间】:2014-02-27 05:58:17
【问题描述】:
对于我的编程语言课程,我应该在 Scheme 中编写一个函数来反转列表,而不使用预制的反转函数。到目前为止,我得到的是
(define (reverseList lst)
(COND
((NULL? lst) '())
(ELSE (CONS (reverseList(CDR lst)) (CAR lst)))
))
我遇到的问题是,如果我输入一个列表,比如说(a b c),它会给我(((() . c) . b) . a)。
我应该如何获得一个没有多组括号和. 的干净列表?
【问题讨论】:
-
您了解每个
.的含义以及为什么会看到这么多括号吗?这里的答案将为您指出正确的解决方案,WillNess 的解决方案涵盖了您所看到的内容,但您也可能从Dot notation in scheme 和Recursive range in Lisp adds a period? 中受益。您可能还会发现 How to Reverse a List? 很有用。 -
更改算法。您的算法在反向列表的头部插入一个空列表。并且对于部分反转它继续这样做。我认为您的意思是连接列表,以便您得到一个平面列表,而不是列表列表的列表......列表。使用追加而不是缺点