【发布时间】: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 的快速回复,我会确保详细阅读它们