gpt4 book ai didi

prolog - 为什么 SWI-Prolog 将带引号和不带引号的字符串(不带空格)统一为同一规则?

转载 作者:行者123 更新时间:2023-12-04 17:40:54 24 4
gpt4 key购买 nike

假设我有以下规则:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com