だからここに私が使用したいいくつかの定義されたリストがあります:
(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) )
私がやりたいのは、そのように実行する'middle'関数の再帰関数を作成することです。
MIDDLE :(真ん中の1番目)は、1番目の真ん中の要素だけで構成される1要素のリストを返す必要があります[または、1番目に偶数の要素があった場合は空のリストを返します]。あれは、
(middle '(a b c d e f g) )
戻るべき/戻るだろう:
(d)
(middle '(s t u v w x y z) )
空の文字列を返す必要があります。
(middle '( (a b) c (d e d) c (b a) ) )
返すべき/返されるはず:
それは真ん中にあったものを含むリストであり、それ自体がたまたまリストであったことに( (d e d) )
注意してください。( (d e d) )
私はそれを2つの問題に分けなければならないと思います。まず、リストのn番目の項を選択できる関数が必要です。私はそれを作成することについてほとんど知識がありません。次に、中期の位置と中期が存在するかどうかを判断する関数が必要です。(これも私はそれを作成する方法について最小限の知識を持っています。それから
(define middle
(lambda (L)
(if (middle? L)
(nth-term (middle L) L)
'())))
これが私のevens関数で、もっと簡単な方法があるかどうか知りたいです。
(define evens
(lambda (L)
(if (or (NULL? (cddr L)))
'()
(cons (cadr L) (evens (cddr L))))))