簡體   English   中英

如何在Prolog中正確使用規則

[英]How to use a rule correctly in Prolog

我剛開始嘗試了解Prolog的工作原理,因此需要一些幫助,以弄清如何解決問題以及代碼的實際作用。 我想從序言中構建一個句子,就像一個超級基本的例子,我想寫一個像'you are''you art'類的句子沒有多大意義。
這些是我的謂詞:

line(you,[first, type]).
line(thee,[first,old]).
line(thou,[first, new]).

line(are, [second, word]).
line(art, [second, word]).
line(aurt, [second, place]).

然后,我創建了一條規則(我知道這是錯誤的,但我不知道為什么):

line(A, [composed, type]):-
    line(B, [first, type]),
    line(C, [second, word]),
    append([B,C],A).

鍵入命令行:

?- line(A, [composed, type]).
false.

但是對我來說不直觀的是鍵入類似以下內容的內容:

?- line(A, [first,type]).
A = you ;
false.

?- line(A, [second,word]).
A = are ;
A = art ;
false.

給我我想要的話。 有人可以幫我更好地理解我應該如何編寫規則的方式,以便我的預期結果是:

findall(X, line(X, [composed, type]),Y).
Y= you are;
Y= you art;
false.

我希望這有點道理,並且我沒有在最后的代碼塊中完全弄亂Prolog語法。 先感謝您。

我將向您展示解決DCG的正確方法:

sentence --> noun, verb.
noun --> [you].
verb --> [are].
verb --> [art].

現在,您只需使用DCG驅動程序phrase/2即可生成句子:

?- phrase(sentence, X).
X = [you, are] ;
X = [you, art].

您在[first, type][second, word]那里所擁有的東西,在理解上有些麻煩。 但是DCG是執行此類輕量級NLP任務的好方法。

暫無
暫無

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

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