same?
を返す述語#t
を作成するにはどうすればよい(same? '(4 6) '(6 4))
ですか? とが等しいセットであるか、そうでないか(same? a b)
を返す述語を書くことに行き詰まっています。また、が の要素であるかどうかを判断する同様の述語です。#t
a
b
#f
(element? el set)
el
set
(そして、はい、これは宿題なので、完全に完成した解決策を求めているわけではありません。先生からの助けはほとんどないので、正しい方向に少しでもぶつかる必要があるだけです。)
リストを使って集合を表現しています。私たちは、これに必要なものをすべて自分たちで構築するよう求められています。map などの高次関数はほとんど禁止されています。
問題は、私の要素ですか?そして同じ?以下では動作しません:
(same? '(4 6) '(6 4))<br/>
(element? '(2 3) '(1 8 5 '(3 2) 4))
これらは返されるはず#t
ですが、そうではありません。理由は理解できますが、まだ修正できません。
私のelement?
見た目はこのようで、同じ順序のリストでしか機能しないことはわかっていましたが、問題はどうすれば改善できるでしょうか? ( setEmpty
、setFirst
、は 、 、とsetRest
定義されています。何らかの理由で独自のものを作成するように求められています。)null?
car
cdr
(define element?
(lambda (x set)
(cond ((setEmpty? set) #f)
((equal? x (setFirst set)) #t)
(else (element? x (setRest set)))
)
)
)
私は次のset?
ように機能する述語を持っています。
(define set?
(lambda (set)
(cond ((setEmpty? set) #t)
((list? (setFirst set))
(if (element? (setFirst set) (setRest set))
#f
(set? (setFirst set))))
(else (if (element? (setFirst set) (setRest set))
#f
(set? (setRest set))
)
)
)
)
)
#t
これは、リストとその「サブリスト」に重複がないかどうかを返します。また、正常に機能する重複のあるリストから真のセットを作成する手順もあります。