我有一套规则;
family(Mother,Father,Children)
其中,孩子是一个列表,person/6
,我试图制定两个条款,一个是确保一个孩子只能在一个家庭中,另一个是如果他们出生在相同或连续的日期,然后他们需要在同一个地方出生。
bad_children(X) :-
family(I,_,[J|T]),
X = [J|T],
person(J,_,_,_,date(E,_,A),place(C,_)),
person(T,_,_,_,date(F,_,B),place(D,_)),
E==F; E==(F+1); E==(F-1),
C\==D,
write(X).
bad_child(X) :-
family(A,B,[H|T]),
family(C,D,[Z|Q]),
A\==C,
B\==D,
=(member(X,[H|T]), member(X,[Z|Q])),
write(X).
我在每个人的尝试都在上面,但都没有工作,我认为我不是在正确的路线,任何人都可以给我任何建议吗?
答案 0 :(得分:0)
没有一组数据很难测试,但......我想你可以写
bad_children(X) :-
family(_, _, X),
member(J, X),
member(T, X),
person(J, _, _, _, date(E, M, Y), place(C, _)),
person(T, _, _, _, date(F, M, Y), place(D, _)),
(E is F; E is (F+1); E is (F-1)),
C \== D,
write(X).
bad_child(X) :-
family(A, B, L1),
family(C, D, L2),
A \== C,
B \== D,
member(X, L1),
member(X, L2),
write(X).
问题是bad_children()
每次匹配都会返回两次:J
和T
的拳头,第二次是相反顺序的相同子项。