Prolog 列表/1中字符代码显示为字符而非代码?
使用SWI-Prolog 版本:Prolog 列表/1中字符代码显示为字符而非代码?,prolog,swi-prolog,dcg,Prolog,Swi Prolog,Dcg,使用SWI-Prolog 版本: ?- current_prolog_flag(windows,Value). Value = true. ?- current_prolog_flag(version,Value). Value = 80000. 对于一个简单的DCG constant_value --> "ID". 输出 然而,在我的笔记中,我把它作为 ?- listing(constant_value). constant_value(['I', 'D'|A], A). 但我
?- current_prolog_flag(windows,Value).
Value = true.
?- current_prolog_flag(version,Value).
Value = 80000.
对于一个简单的DCG
constant_value --> "ID".
输出
然而,在我的笔记中,我把它作为
?- listing(constant_value).
constant_value(['I', 'D'|A], A).
但我不知道我做了什么,让字符代码显示为字符
我使用各种值(字符、代码、字符串)尝试了SWI Prolog标志,但无法再现所需的输出
如何创建DCG的清单/1,其中字符代码显示为字符?我认为在编译常量值时,
代码中可能有双引号标志。此标志的值不会影响数据库中已存储的子句
constant_value1 --> "ID".
:-set_prolog_flag(double_quotes, chars).
constant_value2 --> "ID".
?- listing(constant_value1).
constant_value1([73, 68|A], A).
?- listing(constant_value2).
constant_value2(['I', 'D'|A], A).
编辑由盖伊编码器
由于我使用SO的问答作为个人笔记本,有我自己的问答,我倾向于查看接受的答案的细节;为了每个人的利益,我在这里添加它们
正如这个答案正确指出的那样,问题是由以下事实引起的:最初在源代码中,作为一个文件存储的模块,我有这个语句
:- set_prolog_flag(double_quotes,chars).
在代码之前
constant_value --> "ID".
然后在回复中
?- consult('C:/dcg_examples.pl').
?- listing(constant_value).
constant_value(['I', 'D'|A], A).
true.
用这个
?- phrase(constant_value,"ID").
true.
后者在源代码中,我更改了双引号的值
:- set_prolog_flag(double_quotes,codes).
注意从chars
到code
重新启动REPL并执行相同操作
?- consult('C:/dcg_examples.pl').
?- listing(constant_value).
constant_value([73, 68|A], A).
true.
?- phrase(constant_value,"ID").
true.
给出了清单/1的不同结果
然而,在REPL中使用
set_prolog_flag(double_quotes,<VALUE>).
在源代码中的谓词之前,然后加载它,然后列出/1
咨询/编译/存储的含义并不意味着这是按顺序执行的三个独立操作,这里它们定义了源代码何时放入数据库以供清单/1使用 在我弄明白之后,我正在写一个答案。你的答案是正确的,但我认为它没有足够的细节让其他人在将来阅读。介意我接受这个答案,然后用细节修改它吗?@GuyCoder:我会说你将来会做任何对别人最有利的事情,包括添加和接受你自己的答案,如果你认为这样更好的话(我看到你在这里写了非常详细的帖子;)感兴趣的:参见。
set_prolog_flag(double_quotes,<VALUE>).
:- set_prolog_flag(double_quotes,<VALUE>).