如何统一prolog中的数字?

时间:2013-04-17 21:11:38

标签: prolog

在prolog中,如果我在终端中键入1 is 1.,我会成真,但如果我尝试1 is X.我就会

ERROR: is/2: Arguments are not sufficiently instantiated

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

我如何统一这个?

(注意:不使用=

2 个答案:

答案 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).

请注意,这不是默认方式:通常您使用=

所以,你有三个选择:

  • 使用=(首选)
  • 将1放在is(不太喜欢的)
  • 的右侧
  • 使用unify(X,X).(最不喜欢的)

答案 1 :(得分:0)

只是为了显示我在评论中的含义:

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

?- unify(1,X).
X = 1.