繁体   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