在序言中,如果我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.