【问题标题】:Definite Clause Grammars, how to check if a string is a char?定句语法,如何检查字符串是否为字符?
【发布时间】:2017-04-16 11:13:46
【问题描述】:

这对我来说似乎很好,但它总是给出错误的......我不明白为什么。

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

谢谢。

【问题讨论】:

    标签: prolog swi-prolog dcg


    【解决方案1】:

    最简单的方法是确保您的语法从一开始就包含字符。在这种情况下,您不需要使用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 也会在其他条件下成功。

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多