2017-02-28 11 views
1

listdiffはcarがLで、cdrがeqのペアですか? L、または(cdr L)、または(cdr(cdr L)))などにすることができます。listdiffのcdrはリストである必要はありません。任意のオブジェクトであってもよい。オブジェクトがSchemeの "listdiff"であるかどうかの確認

listdiff Dは、(car D)に先行する(car D)の接頭辞を表します。たとえば、ilsが不適切なリスト(a e i u。y)であるとします。リスト(ae)と同じ要素を持つlistdiffを返し、(cons(cdr ils) 'y)はlistdiffを返します。 (eiou)と同じ要素。逆に、(cons '()ils)や(cons ils(append'(a e i o u)y))もリストディフを返しません。

私はラケット上で、次の手順を作成したい:

(?listdiff OBJ)

戻り値は、objが、そうでなければ#f listdiffであれば#tを返し。

誰でも私にその兆候を教えてもらえますか?

+0

、これは[宿題]のように見える(http://web.cs.ucla.edu/classes/fall08/cs131/hw/hw5.html)(それは、2008年からですおそらく教授が課題を再利用している、あるいはあなたがいくつかの練習をしている)。どちらの場合でも、ソースの属性を付ける必要があります。 –

+0

"listdiff"という概念全体が少し過剰に設計されているようです。 「リストディフは、車がリストLであり、そのcdrがLの尾であるという意見である」と言う方が簡単でしょう。 –

答えて

0

ここでは、使用できるスケルトンがあります。何が価値があるために

(define (listdiff? pair) 
    (define l (car pair))  ; l 
    (define needle (cdr pair)) ; needle is what to look for in l 
    (define (search haystack) 
    ;; #t when haystack looks the same as needle 
    ;; #f if haystackk is the empty list 
    ;; otherwise recurse to (cdr haystack) 
    ) 

    (search l)) 
関連する問題