Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 列表/1中字符代码显示为字符而非代码?_Prolog_Swi Prolog_Dcg - Fatal编程技术网

Prolog 列表/1中字符代码显示为字符而非代码?

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). 但我

使用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).
但我不知道我做了什么,让字符代码显示为字符

我使用各种值(字符、代码、字符串)尝试了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>).