簡體   English   中英

在 Prolog 中定義規則的問題

[英]Trouble with defining rules in Prolog

married(man, woman).
married(B, A) :- 
  married(A, B)

如果BA結婚,則AB結婚。
我知道按照我的方式編寫它會創建一個循環,但我不知道如何防止這種情況發生。

parent(Parent, Child) :- 
    parent(married(Parent, Spouse), Child).

我也無法做這樣的事情。

如果ParentChild的父母:-
Parent的配偶是Child的父母。

制作兩個單獨的謂詞。 首先定義一個列出事實的謂詞:

married_fact(philip, elisabeth).
married_fact(william, kate).

married(X, Y) :-
    married_fact(X, Y).
married(X, Y) :-
    married_fact(Y, X).

我也無法做這樣的事情:

如果ParentChild的父母:- Parent的配偶是Child的父母。

語法parent(married(Parent, Spouse), Child). 沒有多大意義,因為married(Parent, Spouse)在這里是一個函子。 即使 Prolog 將其視為謂詞,謂詞也不會“返回”任何內容。 謂詞要么為真,要么為假。

您可以定義一個parent_fact/2謂詞:

parent_fact(phillip, charles).

然后定義一個謂詞:

parent(Parent, Child) :-
    parent_fact(Parent, Child).
parent(Parent, Child) :-
    married(Parent, Spouse),
    parent_fact(Spouse, Child).

暫無
暫無

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

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