0

在序言中,如果我1 is 1.在终端中输入,我会得到真实的,但如果我尝试1 is X.我会得到

ERROR: is/2: Arguments are not sufficiently instantiated.

但我希望它能告诉我所有等于 1 的数字,而这只会是 1。

我怎样才能统一这个?

(注:不使用=

4

2 回答 2

0

我不是专家,但请注意 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).(最不喜欢)
于 2013-04-17T21:24:00.957 回答
0

只是为了显示我在评论中的意思:

?- [user].
|: unify(X,X).
|: % user://1 compiled 0,02 sec, 2 clauses
true.

?- unify(1,X).
X = 1.
于 2013-04-17T21:26:14.500 回答