prolog - Prolog 中带有上限的事实形成

标签 prolog

我可以定义以下形式的事实吗,

test(X, ceiling(sqrt(X))). 

其中,Xceiling(sqrt(X)) 相关。

我认为,我可以执行以下操作来接收所需的输出,

test(X, Y) :- Y is ceiling(sqrt(X)).

最佳答案

您可以定义:test(X,上限(sqrt(X)))。 这意味着您拥有上述形式的事实原子,因此如果您查询:

?- test(X, ceiling(sqrt(X))).
true.

因为你定义了这个子句。 但请注意,如果您查询:

?- test(1.5, 2).
false.

它返回 false,因为 2 是上限(sqrt(1.5)),但谓词正在等待诸如上限(sqrt(1.5))之类的语法,而不是结果 2。

另一个例子:

?- test(1.5, Y).
Y = ceiling(sqrt(1.5)).

?- test(X,ceiling(sqrt(1.5))).
X = 1.5.

另请注意:

test(X) :- X is ceiling(sqrt(X)).

对于任何输入X总是失败(因为没有这样的X等于ceiling(sqrt(X))。)并且查询test(X)将由于is/2而出现实例化问题。

也许你想写的是:

test(X,X1) :-  X1 is ceiling(sqrt(X)).

关于prolog - Prolog 中带有上限的事实形成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689314/

相关文章:

Prolog 删除一个元素到给定列表中

Prolog - 避免无限循环

PROLOG - 获取实体验证的所有规则的列表

io - 在Prolog中逐行读取文件

bash - 使用 prolog 输出到 bash shell

loops - PROLOG/带循环的有向图中的所有路径

prolog - Clojure core.logic 的简单序言

prolog - 拆分带有大写字母的单词

prolog - 比 assoc 更快的字典,但具有相同的关系/回溯功能

prolog - Prolog 中的(内)方程组出现意外结果