我想编写一个函数,只保留降序数并摆脱升序。
例如:
(descending '(6 5 3 1 2 8))
应该给我(6 5 3 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 ...)
创建一个降序列表吗?我们在我们的武器库中有什么功能可以为我们做到这一点?