确定条款文法,SWI-Prolog 7和更早版本之间的差异

时间:2017-04-16 13:39:20

标签: prolog swi-prolog dcg

它适用于SWI-Prolog 4

letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}.

在SWI-Prolog 7中,以下工作

:- set_prolog_flag(double_quotes, codes).
letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}.

在SWI-Prolog网站搜索我发现:

Mode--------------double_quotes-----------back_quotes
Version 7 default-----string------------------codes
--traditional----------codes--------------symbol_char

为什么

letter(X) --> [C], {`a`=<C, C=<`z`, name(X,[C])}.

不起作用?

1 个答案:

答案 0 :(得分:0)

为了简化上下文,让我们测试一个等价的表达式(一个目标连词)

?- C=0'd, `a` =< C, C =< `z`.
C = 100.

似乎它在工作......

?- [user].
letter(X) --> [C], {`a`=<C, C=<`z`, name(X,[C])}.
|: ^Dtrue.

?- phrase(letter(X), `d`).
X = d.