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

时间:2013-04-14 18:10:40

标签: prolog

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

1 个答案:

答案 0 :(得分:4)

嗯,输入和输出参数之间存在差异,但让我们举例说明:

?- 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必须是一个非常先进的求解器...

我希望这些例子可以帮助您区分不同类型的参数。