2017-04-16 2 views
1

Es auf funktioniert SWI-Prolog 4Definite Clause Grammatiken, Unterschiede zwischen SWI-Prolog 7 und älterem

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

Und in SWI-Prolog 7 folgendes arbeiten

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

in SWI Suche -Prolog Website, die ich gefunden:

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

warum

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

funktioniert nicht?

+2

SWI 7-Kompatibilität mit früheren Versionen zerstört hat. Sie können '--traditional' verwenden, um eine rudimentäre ISO-Konformität zu erhalten. Außerdem empfehle ich 'chars' anstelle von' codes' für * viel * nettere Ausgabe in allen Versionen und auch in anderen Prolog-Systemen. – mat

+2

Ersetzen Sie besser 'name (X, [C])' durch 'char_code (X, C)' - das ist überall besser – false

Antwort

0

nur den Kontext zu vereinfachen, lassen Sie uns einen äquivalenten Ausdruck testen (ein Ziel Verbindung)

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

scheint es funktioniert ...

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

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