假设我有以下规则:
unify('test', 'this is a test').
run :- write('Enter something: '),
read(X),
unify(X, Y),
write('The answer is '), write(Y).
然后我按如下方式运行它:
?- ['unify.pl'].
% unify.pl compiled 0.00 sec, -48 bytes
true.
?- run.
Enter something: test.
The answer is this is a test
true.
?- run.
Enter something: 'test'.
The answer is this is a test
true.
为什么SWI-Prolog统一两者
test
和 'test'
至 unify('test', 'this is a test').
?我在回答关于 SO 的 Prolog 问题时遇到了这个问题。虽然我能够回答这个人的问题,但我无法解释这种特殊的行为,我想知道其他人是否可以。
最佳答案
SWI-PROLOG 中的原子可以用单引号表示,例如 'This is an atom'
, 单引号是 不需要 当 SWI-PROLOG 解析器可以从字符序列中识别原子时,通常以小写字母字符开头,例如 test
.如果序列包含空格(或其他一些字符),则需要单引号来正确表示原子。字母数字字符和某些标点字符,如下划线 _
很好,例如,test5_6
.
如果没有单引号的字符序列以其他任何内容开头,例如数字 6k
,解析器会将其视为 number
;如果是大写字母字符,例如 Test
,解析器会将其视为变量。
关于prolog - 为什么 SWI-Prolog 将带引号和不带引号的字符串(不带空格)统一为同一规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4100943/