方案中的功能

时间:2012-11-13 05:27:14

标签: 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 (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)应该返回一个新的列表,由从第1个取的奇数元素组成,但与它们的原始顺序相反。那就是我输入:

(oddrev '(a b c d e f g))

会/应该返回:     (g e c a)

(oddrev (LIST 's 't 'u 'v 'w 'x 'y 'z))

会/应该返回:     (你好)

(oddrev '((h i) (j k) l (m n)))

将会/应该返回:

(l (h i))

(oddrev '())

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

我想知道是否有人可以告诉我这看起来如何。我正在努力学习未来参考的方案,我听说这是一种很酷的编程语言,但是现在我正在路上遇到一些障碍。对新人的任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

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

好吧,因为你已经有了这个很好的小功能来获得平衡,我们怎样才能获得赔率?好吧,如果我们告诉它它真的是以偶数开始,那么我们不是(do-evens lst #t)而是(do-evens lst #f)。现在我们将获得所有奇怪的元素!为清楚起见,我们可能想改变偶数=>这个函数的这个函数是奇数(一个简单的查找 - 替换将工作得很好)

接下来我们必须扭转它。有两种方法可以手动或通过Scheme库来完成。如果你想手动完成,我会让你解决这个挑战。否则reverse将为我们完成这项工作。

我会让你弄清楚如何结合这两个步骤。这不是太难!快乐计划

相关问题