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