2
对我来说这似乎很好,但它总是给人错误的...我无法理解为什么。确定子句语法,如何检查一个字符串是否是char?
letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}.
谢谢。
对我来说这似乎很好,但它总是给人错误的...我无法理解为什么。确定子句语法,如何检查一个字符串是否是char?
letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}.
谢谢。
最简单的方法是确保您的语法从一开始就获得字符。在这种情况下,您不需要使用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
也将成功用于其他条款。