Prolog语义与继承



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

创建一个Prolog谓词flawn_append/3,它有3个参数,这些参数都是列表。第三个列表应该相当于第一个列表的扁平版本与第二个列表的平坦版本的串联。例如,扁平附加([1,2,[3,4,5],[6],[[7],[8,[9]]],X(应该成功地将X绑定到列表[1,3,4,5,6,7,8,9]。使用内置谓词append/3和flash/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数据库添加谓词",以便可以从REPL(Read Eval Print Loop,传统上称为"Prolog顶层"(运行。但是,是的,这是通过创建一个文件my_predicate.pl,然后在REPL中键入consult(my_predicate).[my_predicate].(也可以是make.,以便在更改后重新加载它(来完成的。注意末尾的"点"以终止命令。

对于三个参数来说,这就像([],[X],X(

确实如此。这就是谓词thing/3以某种方式将这三个自变量联系起来。它是如何做到的?信息流的首选方向是什么(例如,在thing(X,Y,Z)中,您可以根据XY计算Z,或者在给定XY的情况下验证Z,甚至在给定"Z"的情况下计算XY(取决于实现。

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

当它说成功绑定X时意味着什么?

表示计算成功计算出一个值,使X等于该值并成功返回。如在flatten append([1,2,[3,4,5],[6]],[[7],8,[9]]],X)中"成功",返回时X"是"(包含/绑定到(扁平列表。CCD_ 20的行为类似于对全局变量的引用。

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

最新更新