【问题标题】:Prolog Semantics and SuccessionProlog 语义和继承
【发布时间】:2020-04-27 06:58:01
【问题描述】:

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

创建一个 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


    【解决方案1】:

    创建谓词是否意味着我创建了一个新文件,然后我会查阅 跑?

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

    对于三个参数就是这样的东西([], [X], X)

    没错。这是谓词thing/3,它以某种方式关联这三个参数。它是如何做到的XY 给定 `Z) 取决于实现。

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

    成功绑定X是什么意思?

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

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

    【讨论】:

    • 感谢您的澄清。我有 flatten_append([L1],[L2],X):- flatten([L1], FlattenL1),flatten([L2],FlattenL2),append(FlattenL1,FlattenL2,X)。这不会产生任何输出,我认为它可能会挂起,因为我只是在控制台中找到了一个管道。有什么想法吗?
    • @JustALemonStealing 该程序无法运行,但他的“管道”表示您处于程序输入模式。按 CTRL-D。另一方面,问这样的问题是没有用的,它就像讨论星际距离上的数学一样有效。去 SWISH 进行实验,这是唯一的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2023-03-15
    • 2013-05-19
    • 2021-09-20
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多