0

这是 Scheme 中的一个递归函数翻转,它接受任意长度的原子列表作为其唯一参数,并返回翻转了相邻元素的列表。换句话说,该函数交替列表的元素(即,给定一个列表 [a1,a2,a3,a4,a5,a6...,an] 作为参数,产生 [a2,a1,a4,a3,a6 ,a5,...])。如果 n 是奇数,则 an 保留在结果列表的末尾。不使用任何辅助功能。

这是我的样本

> (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)
4

2 回答 2

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.
于 2012-09-12T03:19:06.473 回答
0

(define (flip lst) (cond ((null?lst)
null)
((null? (cdr lst))
lst)
(else
(cons (car (cdr lst))
(cons (car lst)
(flip (cdr (cdr lst)))))))))

于 2012-09-25T03:16:03.317 回答