だから私は鉱山の友人から聞いたこの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 (adder lis)
(COND
((NULL? lis) 0)
(ELSE (+ (CAR lis) (adder (CDR lis))))
))
以下のタスクのように実行したい場合でも、の定義は何でしょうか。
EVENS:(evens 1st)は、1番目に取得された偶数の要素から形成された新しいリストを返す必要があります。
(evens '(a b c d e f g))
which would/should return:
(b d f)
と:
(evens (LIST 's 't 'u 'v 'w 'x 'y 'z))
which would/should return:
(t v x z)
と:
(evens '(f (a b) c (d e d) (b a) f) )
which would return:
((a b) (d e d) f)
および(evens'())と(evens'(a))の両方
空のリストを返します。
私は練習するために誤ってトレイルを通り抜けてきましたが、私は完全に道に迷っています。前もって感謝します
さて、私は私が解決しようとしている私の例に再帰関数を思いついたと思います:
(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))
何かご意見は?