prolog - prolog 定义中的输入/输出参数

标签 prolog

prolog 定义中的输入/输出参数有什么区别吗?这与其他语言(例如scheme和C)相比如何?

最佳答案

嗯,输入和输出参数之间存在差异,但让我们用一个例子来说明:

?- length([1, 2, 3], 3).
true.

这里我们的参数都是输入,谓词用作测试。

?- length([1, 2, 3], L).
L = 3.

这里我们的参数是+-。该谓词用作列表长度计算器。

?- length(X, 3).
X = [_A, _B, _C].

这里我们的参数是-+。谓词用作列表骨架生成器。

?- length(X, L).
X = [], L = 0;
X = [_A], L = 1;
X = [_A, _B], L = 2;
% etc, infinite.

这里我们的参数是--。谓词用作越来越大长度列表的生成器。

因此,length/2 在输入和输出参数之间并没有真正的区别,它只是根据调用方式提供不同的用途。

另一方面:

?- X is 3 + 2.
X = 5.

有效,同时

?- 5 is A + 2.

抛出一个未充分实例化的参数错误...如果您考虑一下,这很正常,因为要在所有情况下给出答案,is/2 必须是一个非常高级的求解器。 ..

我希望这些示例能够帮助您区分不同类型的参数。

关于prolog - prolog 定义中的输入/输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16002546/

相关文章:

prolog - 使用 Prolog 按顺序将单个列表拆分为三个

Emacs 无法使用默认的 prolog 模式加载 swi-prolog?

recursion - 如何在Prolog中递归计数和求和

prolog - 序言中列表的总和

Prolog:如何在添加之前检查数据库中是否存在项目?

prolog - Prolog 中带有 =.. 运算符的谓词

list - Prolog 中偶数之和、奇数乘积

Prolog 手动或自定义标签

prolog - 为什么下面的 Prolog 程序只返回一个解决方案?

prolog - 有什么作用!序言中的符号是什么意思?