prolog定义中的输入/输出参数有什么区别吗?这与其他语言(如 scheme 和 C )相比如何?
问问题
526 次
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 回答