Prolog - 搜索相同元素的两个列表

时间:2016-11-23 10:16:49

标签: prolog

我有一套规则;

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).

我在每个人的尝试都在上面,但都没有工作,我认为我不是在正确的路线,任何人都可以给我任何建议吗?

1 个答案:

答案 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()每次匹配都会返回两次:JT的拳头,第二次是相反顺序的相同子项。