仅按方案按降序排列数字

时间:2017-10-10 18:51:45

标签: scheme

我想编写一个函数,只保留降序数并摆脱升序。

例如: (descending '(6 5 3 1 2 8)) 应该给我(6 5 3 1)

感谢。

1 个答案:

答案 0 :(得分:1)

列表是将对象置于列表中的结果。或者是一个空列表。

什么是消费?这是一个内置的操作。

(define (plain-cons x xs)
  (cond
    ((null? xs) (list x))
    (else (cons x xs))))    ; using the built-in

降序列表是 descend 的结果 - 将对象组合到降序列表中。或者是一个空列表。

什么是下降 -consing?这是一个因素,结果列表也在下降:

; (descend-cons 3 '())      -> (list 3)
; (descend-cons 8 '(7 3))   -> (cons 8 '(7 3))
; (descend-cons 5 '(8 7 3)) -> (descend-cons 5 '(7 3))

(define (descend-cons x xs)
  (cond
    ((null? xs) (list x))
    (else
       (let ((a (car xs)))
         (cond
           ((>= x a)      ; { 8 '(7 3)) } -> '(8 7 3)
              .... )
           (else          ; { 5 '(8 7 3)) } -> { 5 '(7 3) }
             (.... x 
                   (cdr xs))))))))

有了这个,任务很简单。我们将编写函数descending,将列表转换为降序列表,简单地为

; (descending '())           ->  '()
; (descending '(x y z ...))  ->  (descend-cons x (..... '(y z ...)))

(define (descending lst)
  (cond
    ((null? lst) lst)
    (else
      (let ((x (car lst))
            (xs (cdr lst)))
        (...... x
                (...... xs))))))

descend-cons期望的第二个参数是什么?它必须是降序列表。

可以我们从列表'(y z ...)创建一个降序列表吗?我们在我们的武器库中有什么功能可以为我们做到这一点?