Lisp 计划中的功能

Lisp 计划中的功能,lisp,scheme,Lisp,Scheme,好的,我最近发布了一个关于在Scheme中创建递归函数的问题,该函数甚至可以生成从下面定义的列表中调用的函数: (define list0 (list 'j 'k 'l 'm 'n 'o 'j) ) (define list1 (list 'a 'b 'c 'd 'e 'f 'g) ) (define list2 (list 's 't 'u 'v 'w 'x 'y 'z) ) (define list3 (list 'j 'k 'l 'm 'l 'k 'j) ) (define list4 (

好的,我最近发布了一个关于在Scheme中创建递归函数的问题,该函数甚至可以生成从下面定义的列表中调用的函数:

(define list0 (list 'j 'k 'l 'm 'n 'o 'j) )
(define list1 (list 'a 'b 'c 'd 'e 'f 'g) )
(define list2 (list 's 't 'u 'v 'w 'x 'y 'z) )
(define list3 (list 'j 'k 'l 'm 'l 'k 'j) )
(define list4 (list 'n 'o 'p 'q 'q 'p 'o 'n) )
(define list5 '((a b) c (d e d) c (a b) )
(define list6 '((h i) (j k) l (m n)) )
(define list7 (f (a b) c (d e d) (b a) f) )
我为evens函数创建了这个递归函数:

(define mylist '(1 2 3 4 5 6 7))
(define (evens lst)
(define (do-evens lst odd)
    (if (null? lst)
        lst
    (if odd
        (do-evens (cdr lst) #f)
        (cons (car lst) (do-evens (cdr lst) #t)))))
        (do-evens lst #t))
但现在我正在尝试创建一个“oddrev”函数,它的功能如下: (oddrev 1st)它将返回一个新列表,该列表由从1st开始的奇数元素组成,但顺序与原始顺序相反。如果我输入:

(oddrev '(a b c d e f g))
哪些会/应该返回: (g、e、c、a)

哪些会/应该返回: (y w u s)

哪些会/应该返回:

(l (h i))

哪个会/应该返回一个空列表,等等


我想知道是否有人能给我看看这个样子。我正试图学习scheme以备将来参考,我听说这是一种很酷的编程语言,但现在我遇到了一些困难。对新人的任何帮助都将不胜感激。谢谢你

好的,把它分解成几个部分,首先得到每一个奇数元素

既然你已经有了这个很好的小功能,我们怎么能用它来获得赔率呢?好吧,如果我们告诉它它实际上是从偶数开始的,那么我们说的不是
(do evens lst#t)
,而是
(do evens lst#f)
。现在我们将获得所有奇怪的元素!为了清楚起见,我们可能希望在这个函数的主体中更改偶数=>奇数(一个简单的find替换就可以了)

下一步我们必须扭转它。有两种方法可以做到这一点,手动或通过方案库。如果你想手工做,我会让你解决这个挑战。否则,
reverse
将对我们起作用


我将让您了解如何组合这两个步骤。这不太难!快乐策划

如果你觉得我的答案很有帮助,请用我的答案勾选绿色小方格,它会将问题标记为已解决。
(oddrev '((h i) (j k) l (m n)))
(l (h i))
(oddrev '())