DrRacket 2列出输入并仅反转一个

时间:2018-03-21 19:40:47

标签: scheme racket

我将在前言中说这是一个作业,但我不知道在经过一两个小时的其他stackoverflow问题之后如何处理这个问题。

我正在尝试创建一个反向函数,它接受2个列表作为输入,并返回附加第二个列表的第一个反向列表。

示例:(reverse '(1 2) '(3 4)) - > (2 1 3 4)

我的代码如下,我已经尝试过条件语句,例如当第一个列表为非null然后执行主逻辑时,然后当它只返回l2时(仍返回(3 4 2 1)而不是{{1} }。

我遇到的问题是无论我做什么,第二个列表总是在第一个反向列表的开头。

(2 1 3 4)

2 个答案:

答案 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))))

实际上,这种递归通常用foldlfoldr来捕获。但是我不知道在这一点上它对你是否有益。