这是一个递归函数翻转,它接受一个任意长度的原子列表作为其唯一的参数,并返回该列表,其中相邻的元素被翻转。换句话说, 函数交替列表的元素(即,给定列表[a1,a2,a3,a4,a5,a6 ...,an]作为参数, 产生[a2,a1,a4,a3,a6,a5,...])。如果n为奇数,则保留在结果列表的末尾。不使用任何辅助功能。
这是我的样本
> (flip '())
()
> (flip '(a))
(a)
> (flip '(a b))
(b a)
> (flip '(a b c d))
(b a d c)
> (flip '(a b c d e))
(b a d c e)
答案 0 :(得分:2)
这是作业,所以我不能给你一个直接的答案。以下是解决方案的一般概念,填写空白:
(define (flip lst)
(cond ((null? lst) ; The list is empty:
<???>) ; return the empty list.
((null? (cdr lst)) ; The list has a single element:
<???>) ; return a list with the single element.
(else ; The list has at least two elements:
(cons <???> ; cons the second element ...
(cons <???> ; ... to the first element ...
(flip <???>)))))) ; ... and advance two elements at once.
答案 1 :(得分:0)
(定义(翻转lst)
(cond((null?lst)
空)
((null?(cdr lst))
LST)
(否则
(cons(car(cdr lst))
(cons(car lst)
(flip(cdr(cdr lst)))))))))