I'm quite new to Prolog and I stumbled on something that I don't understand.
This is my code:
:- dynamic user/3.
user('id', 'Name', 20).
changeAge(Id, NewAge) :-
user(Id, Name, _),
retract(user(Id,_,_)),
assert(user(Id,Name,NewAge)).
To update user information in the database,
changeAge/2
performs these three steps:
user/3
.retract/1
.assert/1
.This is my console output:
1 ?- user('id', _, Age).
Age = 20.
2 ?- changeAge('id', 25).
true.
3 ?- user('id', _, Age).
Age = 25.
4 ?- changeAge("id", 30).
false.
5 ?- user('id', _, Age).
Age = 25.
Why do single quotes give me true
(line 2)
when double quotes give me false
(line 4)?
TL;DR1: Read this answer to the question "What is the difference between ' and " in Prolog?".
TL;DR2: The goal 'id' = "id"
succeeds iff the Prolog flag double_quotes is set to atom
.
The Prolog flag double_quotes
can be set at runtime using set_prolog_flag/2
:
?- set_prolog_flag(double_quotes, chars).
?- 'id' = "id". false.
?- set_prolog_flag(double_quotes, codes).
?- 'id' = "id". false.
?- set_prolog_flag(double_quotes, atom).
?- 'id' = "id". true.
For more information read the SICStus Prolog manual page on "Strings as lists"!