创建列表,以便在方案中递归地将min与列表分开?

时间:2017-03-14 21:50:10

标签: recursion scheme

我需要创建一个列表,使得min始终位于列表的外部。

实施例

输入(1 2 3)

输出(1(2 3))

这是我的代码,假设数字按降序排列,我希望稍后将其扩展到一般情况。

我得到一个意外的输出(3 2 1 0 -1 -2 -3())。

我如何在计划中实现这一点?'

(定义(find-min-rest L)     (if(null?(cdr L))(let((x(car L)))(cons x'(())))         (让*((ret-ans(find-min-rest(cdr L)))(cur-elem(car L))(mini(car ret-ans))(rem-list(cdr ret-ans)))           (cond((> cur-elem mini)(cons cur-elem(cons mini rem-list)))))))

2 个答案:

答案 0 :(得分:0)

代码

(define (find-min-rest L)
    (if (null? (cdr L)) (let ( (x (car L))) (cons x '( ())))
        (let* ((ret-ans (find-min-rest (cdr L))) (cur-elem (car L)) (mini (car ret-ans)) (rem-list (cdr ret-ans)))
          (cond ((> cur-elem mini)  (cons cur-elem (cons mini rem-list)))))))

答案 1 :(得分:0)

如果使用内置程序并将问题分成几部分,则会更简单。请注意,以下假设单个最小值,根据需要进行调整:

(define (find-min-rest L)
  (let* ((the-min  (apply min L))
         (the-rest (remove the-min L)))
    (list the-min the-rest)))

(find-min-rest '(1 2 3))
=> '(1 (2 3))