Definite Clause Grammars,如何检查字符串是否为char?

时间:2017-04-16 11:13:47

标签: prolog swi-prolog dcg

这对我来说似乎很好,但它总是假的......我无法理解为什么。

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

谢谢。

1 个答案:

答案 0 :(得分:4)

最简单的方法是确保你的语法从一开始就变得很容易。在这种情况下,您无需使用name/2(或更确切地说char_code/2)进行转换。

:- set_prolog_flag(double_quotes, chars).

letter(C) --> [C], { atom_length(C,1), a @=< C, C @=< z }.

这适用于任何系统。在SWI中,还有char_type/2

letter(C) --> [C], { atom_length(C,1), char_type(C, lower) }.

除了a..z之外,它还会接受更多的小写字符。如同变音符号。

注意目标atom_length(C,1),确保只有字符。否则,letter//1也会成功获得其他条款。