在prolog中,如果我在终端中键入1 is 1.
,我会成真,但如果我尝试1 is X.
我就会
ERROR: is/2: Arguments are not sufficiently instantiated
。
但是我希望它告诉我所有等于1的数字,只有1。
我如何统一这个?
(注意:不使用=
)
答案 0 :(得分:0)
我不是专家,但请注意,prolog不能也不会统一is
的右手边。您如何期望统一诸如64 is x*x
之类的内容?
is
的Rhs将被明确评估。仅当X is Y+1
已经统一为某个数值时,您才可以编写类似Y
的内容。
根据您的情况,X is 1
将被评估为好,而1 is X
则不会。
重写@CapelliC的答案,如果您需要不惜一切代价避免使用=
进行统一,程序可能看起来像
:- initialization(main).
unify(X,X).
main :- unify(X,1), write(X).
请注意,这不是默认方式:通常您使用=
。
所以,你有三个选择:
=
(首选)is
(不太喜欢的)unify(X,X).
(最不喜欢的)答案 1 :(得分:0)
只是为了显示我在评论中的含义:
?- [user].
|: unify(X,X).
|: % user://1 compiled 0,02 sec, 2 clauses
true.
?- unify(1,X).
X = 1.