少し混乱があるようです。ここでの「大きな」問題は、2 つのリストが少なくとも 1 つの要素を共有しているかどうかを判断する方法ですelement-in-common?。この問題に取り組む前に、単一の要素が 1 つのリストに属しているかどうかを判断する必要がありcheck-listます。これがすべきことです (コードでは要素をcheck-list2 番目のパラメーターとして受け取りますが、要素のリストであるかのように扱っていることに注意してください)。 )。
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