【问题标题】:How to use a rule correctly in Prolog如何在 Prolog 中正确使用规则
【发布时间】:2019-05-07 11:58:30
【问题描述】:

我已经开始尝试了解 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 语法。先感谢您。

【问题讨论】:

  • 你知道统一吗?
  • @GuyCoder 在快速谷歌搜索后,我得到了一个超级基本的想法,它的名字暗示,统一两个原子或或术语?在最后一段代码中获得预期结果方面我缺少什么?
  • 问题的重点是看你是否知道统一。虽然我感谢您诚实地说您必须查找它,但它告诉我们您所知道的和您需要知道的之间的距离不仅仅是一个简单的答案。您需要学习统一,然后开始反向链接。
  • 感谢@GuyCoder 的快速回复,我会确保详细阅读它们

标签: syntax prolog rules


【解决方案1】:

我将向您展示解决此问题的正确方法,即使用 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 任务的好方法。

【讨论】:

  • 谢谢,虽然当我输入 sentence --> noun, verb 时,我收到了一个警告:Correct to: "sentence*->noun, verb"?,在那之前我是不是漏掉了什么?
  • @jaleman 确保您已经输入了 [user]. 并正在查看新规则的提示。或者将其放入文件中并查阅。
  • 非常感谢!你教给我的 Prolog 比我的教授多:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多