DR Racket翻转一个字母列表

时间:2012-09-12 00:56:26

标签: scheme racket

这是一个递归函数翻转,它接受一个任意长度的原子列表作为其唯一的参数,并返回该列表,其中相邻的元素被翻转。换句话说, 函数交替列表的元素(即,给定列表[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)

2 个答案:

答案 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)))))))))