AIクラスの宿題をしていて、プロローグプログラムを書いています。
名前のリストを取得し、リスト内の各人物が選択した特定の国に属しているかどうかを確認することになっています。
私がこれまでに持っているもの
% facts
person(bruce, australia, rhodri, bronwyn).
person(rhodri, newyork, dan, mary).
person(bronwyn, miami, gar, roo).
person(dan, miami, george, mimi).
person(mary, texas, mack, tiki).
person(gar, jamaica, zid, rem).
person(roo, newzealand, john, jill).
person(tom, mayday, dick, mel).
person(dick, newyork, harry, rin).
person(mel, miami, tom, stacey).
person(harry, miami, george, mimi).
person(rin, texas, mack, tiki).
person(tom, jamaica, zid, rem).
person(stacey, newzealand, john, jill).
% rules
eligible(P,C) :-
person(P, C, F, M) , !
; person(F, C, Newfather, Newmother), !
; person(M, C, Newfather, Newmother), !
; person(Newfather, C, Grandfather , Grandmother), !
; person(Newmother, C, Grandfather, Grandmother).
checkteam([] , C).
checkteam([H|T] , C) :- eligible(H, C) , checkteam(T, C).
特に最後の2行に問題があります。リストの各メンバーを適格な()関数でテストしてから、テールの最初の要素を頭にして繰り返します。
各メンバーをテストし、メンバーのいずれかが適格でない場合は不合格、またはすべてのメンバーがその国に属している場合は true を表示する方法がわかりません。
前もって感謝します。
編集:結果については、浮気してコードを少し変更しました
?- checkteam([bruce, dan], mayday).
true.
ブルースもダンもメーデーの出身ではなく、両親や祖父母もメーデーの出身ではありません。