假设我有以下规则:
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问题时遇到了这个问题。虽然我能够回答这个人的问题,但我无法解释这种特殊的行为,我想知道是否有人可以。
发布于 2010-11-05 04:36:34
虽然SWI-PROLOG中的原子可以使用单引号来表示,例如'This is an atom',但是当SWI-PROLOG解析器可以从字符序列(通常以小写字母字符开始,例如test )中识别原子时,不需要单引号。如果序列包含空格(或其他一些字符),则需要使用单引号来正确地表示原子。字母数字字符和某些标点符号(如下划线_ )也可以,例如test5_6。
如果不带单引号的字符序列以其他字符开头,如数字6k,则解析器将其视为number;如果它是大写字母字符,如Test,则解析器将其视为变量。
https://stackoverflow.com/questions/4100943
复制相似问题