prolog - 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 数据库添加谓词”,以便可以从 REPL(Read-Eval-Print Loop,传统上称为“Prolog 顶层”)运行。但是,是的,这是通过创建一个文件my_predicate.pl
然后在 REPL 中键入consult(my_predicate).
或[my_predicate].
(也,make.
在更改后重新加载它)来完成的。注意末尾的“点”以终止命令。
对于三个参数是这样的事情([],[X],X)
对,就是这样。这是以某种thing/3
方式关联三个参数的谓词。它是如何做到的,信息流的首选方向是什么(例如,在 中thing(X,Y,Z)
,您可以Z
从X
and计算Y
,或验证Z
给定X
,Y
甚至计算X
和Y
给定 `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/锻炼自己
推荐阅读
- load-testing - 使用带有自定义协议的 Yandex-tank
- javascript - 如何单击一次以运行功能?
- regex - Sed 命令通过文件中的正则表达式搜索
- heroku - 为什么我的 discord.py 机器人在 Heroku 上托管时没有声音?
- python - 如何将 DataFrame 列作为函数中的参数传递?
- python - 如何编译 python 将 ast 节点与 c 进行比较?
- python - 从任意十进制数中删除小数点
- c# - 无法识别注释“Odata.context”
- dart - 将十六进制字符串列表转换为十六进制列表
- sql - 如果没有找到记录,则返回 0 作为平均值