isと=

違いを理解していなくてはまった。Aとaを関連付けしたかった。でもこれはできない

| ?- A is a, B is A.
A is a, B is A.
uncaught exception: error(type_error(evaluable,a/0),(is)/2)
| ?-

こういう、atomを関連付ける場合は=を利用する。

| ?- A = a, B = A.
A = a, B = A.

A = a
B = a

yes
| ?-

計算させたいときはisを使う。

| ?- A = 1 + 1.
A = 1 + 1.

A = 1+1

yes
| ?- A is 1 + 1.
A is 1 + 1.

A = 2

yes
| ?-

まとめ

  • isは計算を行う述語
  • =はパターンマッチを行う述語