首页 > 解决方案 > Prolog 语义和继承

问题描述

我有两个问题正在研究,我只是很难理解这个问题。第一个是

创建一个 Prolog 谓词 flatten_append/3 ,它有 3 个参数都是列表。第三个列表应该等价于第一个列表的扁平化版本和第二个列表的扁平化版本的串联。例如, flatten append([1,2,[3,4,5],[6]],[[7],[8,[9]]],X) 应该成功地将 X 绑定到列表 [1, 2,3,4,5,6,7,8,9]。使用内置谓词 append/3 和 flatten/2。

创建谓词是否意味着我创建了一个新文件,然后我咨询运行?同样对于三个参数是这样的,thing([], [X], X)还是只是一个,我需要这样的三个参数?

thing([],[X],X).

thing([H|T],[H|X],Y) :- H = 1, anything(Y,Z), thing(T,X,Z).

thing([H|T],[H|X],Y) :- H = 0, nothing(Y,Z), thing(T,X,Z).

最后,当它说成功绑定X是什么意思?是否有特定的订单,或者最后你分配的 X 等于你刚做的?谢谢

标签: prolog

解决方案


创建谓词是否意味着我创建了一个新文件,然后我咨询运行?

它实际上意味着“向 Prolog 数据库添加谓词”,以便可以从 REPL(Read-Eval-Print Loop,传统上称为“Prolog 顶层”)运行。但是,是的,这是通过创建一个文件my_predicate.pl然后在 REPL 中键入consult(my_predicate).[my_predicate].(也,make.在更改后重新加载它)来完成的。注意末尾的“点”以终止命令。

对于三个参数是这样的事情([],[X],X)

对,就是这样。这是以某种thing/3方式关联三个参数的谓词。它是如何做到的,信息流的首选方向是什么(例如,在 中thing(X,Y,Z),您可以ZXand计算Y,或验证Z给定XY甚至计算XY给定 `Z)取决于实现。

您给出的实现thing/3由 3 个子句组成。1 是“事实”(只有头部),2 是“规则”(有头部和身体)。

当它说成功绑定X是什么意思?

这意味着计算成功计算了一个值,使其X等于并成功返回。如flatten append([1,2,[3,4,5],[6]],[[7],8,[9]]],X)“成功”和返回X“是”(包含/绑定到)扁平列表。X行为类似于对全局变量的引用。

花一些时间阅读介绍: http: //www.learnprolognow.org/并在https://swish.swi-prolog.org/锻炼自己


推荐阅读