Почему =:= выдает ошибку, когда переменная не создается, а == нет?

3 == X.

приведет к ответу "нет", но

3 =:= X

приведет к ошибке:

! Instantiation error in argument 2 of (=:=)/2
! goal:  3=:=_409

Почему это происходит? Разве они оба не должны вести себя одинаково, когда кто-то является необоснованной переменной?

1 ответ

Решение

=:=/2 оценит выражения и сравнит результаты - поэтому в нем не может быть терминов, которые не были полностью созданы.

Другими словами, X =:= Y похож на EX is X, EY is Y, EX = EY - но это также будет делать неявное приведение, например 1 =:= 1.0 оценивает как истинное.

Другие вопросы по тегам