我将在前言中说这是一个作业,但我不知道在经过一两个小时的其他stackoverflow问题之后如何处理这个问题。
我正在尝试创建一个反向函数,它接受2个列表作为输入,并返回附加第二个列表的第一个反向列表。
示例:(reverse '(1 2) '(3 4))
- > (2 1 3 4)
我的代码如下,我已经尝试过条件语句,例如当第一个列表为非null然后执行主逻辑时,然后当它只返回l2时(仍返回(3 4 2 1)
而不是{{1} }。
我遇到的问题是无论我做什么,第二个列表总是在第一个反向列表的开头。
(2 1 3 4)
答案 0 :(得分:0)
请考虑以下事项:
(reverse '(1 2 3 4))
=> '(4 3 2 1)
(append (reverse '(1 2)) '(3 4))
=> '(2 1 3 4)
考虑如何实施reverse
,以及如何在myreverse
程序中使用它。
答案 1 :(得分:0)
使用球拍/方案,自下而上思考这些问题是非常有帮助的。
例如,当第一个列表为null?
时,您会怎么做?好吧,你做完了!所以只需返回第二个列表。当它只有一个元素时你会怎么做?好吧,我们将该元素添加到第二个列表中,我们就完成了。但是片刻的想法告诉我们现在已经涵盖了所有案例。
(define (rev-first left right)
(if (null? left)
right
(rev-first (??? left) (???? right))))
实际上,这种递归通常用foldl
和foldr
来捕获。但是我不知道在这一点上它对你是否有益。