2

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

4

1 回答 1

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

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

于 2013-04-14T18:36:49.160 回答