少し混乱があるようです。ここでの「大きな」問題は、2 つのリストが少なくとも 1 つの要素を共有しているかどうかを判断する方法ですelement-in-common?
。この問題に取り組む前に、単一の要素が 1 つのリストに属しているかどうかを判断する必要がありcheck-list
ます。これがすべきことです (コードでは要素をcheck-list
2 番目のパラメーターとして受け取りますが、要素のリストであるかのように扱っていることに注意してください)。 )。
check-list
プロシージャを記述する必要はありません。すでに存在し、呼び出されていmember
ます。その知識があれば、大きな問題を解決できます。つまり、あるリスト ( としましょう) の要素の少なくとも 1 つがlst1
別のリスト ( と呼びlst2
ます) にあるかどうかを判断するにはどうすればよいでしょうか?
簡単:lst1
再帰を使用して各要素を反復処理し、各要素が に属しているかどうかを尋ねlst2
ます。の 1 つの要素だけlst1
が のメンバーであるlst2
場合、 を返し#t
ます。の要素が にない場合lst1
はlst2
、 を返し#f
ます。このようなもの:
(define (element-in-common? lst1 lst2)
(cond (<???> ; is the first list empty?
<???>) ; then there are no elements in common
((member <???> lst2) ; is the current element of `lst1` in `lst2`?
<???>) ; then there IS an element in common
(else ; otherwise
(element-in-common? <???> lst2)))) ; advance recursion
コードをテストすることを忘れないでください:
(element-in-common? '(hey cookie monkey) '(apple pizza cookie))
=> #t
(element-in-common? '(hey cookie monkey) '(apple pizza pie))
=> #f