Почему =:= выдает ошибку, когда переменная не создается, а == нет?
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
оценивает как истинное.