Листинг / 1 с кодами символов, отображаемыми в виде символов, а не кодов?

Класс символов \b в JavaScript RegEx действительно полезен только при простой кодировке ASCII. \b - код быстрого доступа для границы между наборами \w и \W или \w и началом или концом строки. Эти наборы символов учитывают только слова ASCII «word», где \w равно [a-zA-Z0-9_], а \W - отрицание этого класса.

Это делает классы символов RegEx в значительной степени бесполезными для работа с любым реальным языком.

\s должен работать для того, что вы хотите сделать, при условии, что условия поиска ограничиваются только пробелами.

3
задан Guy Coder 18 January 2019 в 14:09
поделиться

1 ответ

Я думаю, что вы, вероятно, имели флаг double_quotes в codes, когда constant_value был скомпилирован. Значение этого флага не повлияет на предложения, уже сохраненные в базе данных.

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

Редактировать Guy Coder

Поскольку я использую Q & A в SO как личную записную книжку со своими Q & A, я склонен смотреть на принятый ответ для деталей ; Я добавляю их сюда для всеобщего блага.

Как правильно говорит этот ответ, проблема была вызвана тем фактом, что первоначально в исходном коде, который был модулем, хранящимся в виде файла, перед кодом

было написано

:- set_prolog_flag(double_quotes,chars). 

]
constant_value --> "ID".

затем в REPL

?- consult('C:/dcg_examples.pl').  

?- listing(constant_value).
constant_value(['I', 'D'|A], A).

true.  

и использовать этот

?- phrase(constant_value,"ID").
true.

В последнем исходном коде я изменил значение для double_quotes

[ 115]

замечают, что изменение с chars на codes

Перезапуск 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.

< ЗНАЧЕНИЕ > может быть одним из string, chars, codes, traditional или atom.

Ключевым моментом, который следует здесь отметить, является то, что в листинге / 1 используется проверенный / скомпилированный / сохраненный код. Таким образом, значение double_quotes во время консультации / компиляции / хранения - это то, что использует листинг / 1. Любые изменения в double_quotes после этого в REPL не изменят полученный / скомпилированный / сохраненный код и, следовательно, результат листинга / 1.

Чтобы осуществить изменение, вы должны добавить

:- set_prolog_flag(double_quotes,<VALUE>). 

в ваш исходный код перед предикатом, затем консультироваться с / 1 , чтобы загрузить его, а затем перечислить / 1.

Значение «консультируется / компилируется / сохраняется» не означает, что это три отдельных действия, выполняемых в последовательности, здесь они определяют, когда исходный код помещается в базу данных для использования в листинге / 1.

0
ответ дан Guy Coder 18 January 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: