prolog定义中的输入/输出参数有什么区别吗?这与其他语言如scheme和C相比如何?
答案 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
必须是一个非常先进的求解器...
我希望这些例子可以帮助您区分不同类型的参数。