簡體   English   中英

如何寫一個 Prolog 規則來定義謂詞?

[英]How to write a Prolog rule to define a predicate?

這是作業:在 Prolog 程序中,定義了謂詞:

  • mother(M,Y)MY的母親
  • father(F,X)FX的父親

編寫 Prolog 代碼實現謂詞:

  • cousins(X,Y)XY是表親
  • brother_or_sister(X,Y)XY是彼此的兄弟姐妹。

我的嘗試:

mother(m1, nicolas).
father(f1,nicolas).

mother(m2, mark).
father(f2, mark).

father(f3, f1).
mother(m3, f1).
father(f3, f2).
mother(m3, f2).

brother_or_sister(X, Y) :-
    father(f3, X),
    father(f3, Y),
    mother(m3, X),
    mother(m3, Y).

cousins(X, Y) :-
    (
      mother(m1, X),
      father(f1, X),
      mother(m2, Y),
      father(f2, Y)
    )
    (
      (
        brother_or_sister(m1, m2) ;
        brother_or_sister(f1, f2)
      )
      ;
      (
        brother_or_sister(f1, m2) ;
        brother_or_sister(m1, f2)
      ).

程序 output:

true
false

雖然這應該是真的

請幫忙!

兄弟姐妹是手足 如果兩個人有共同的出身,則他們是兄弟姐妹(如果他們只有一個共同的父母,則他們是同父異母的兄弟姐妹)。 所以我們可以這樣說:

parents(F:M,X) :- mother(M,X), father(F,X) . 

sibling(X,Y) :- parents(F:M,X), parents(F:M,Y) .

同樣,如果兩個人的父母是彼此的兄弟姐妹,那么他們就是堂兄弟姐妹。 這導致:

parent(P,X) :- father(P,X) .
parent(P,X) :- mother(P,X) .

cousin(X,Y) :- parent(Px,X), parent(Py,Y), sibling(Px,Py) .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM