2
それは私には良いようですが、それは常に偽を与える...と私はなぜ得ることができません。Definite句文法、文字列がcharかどうかをチェックする方法?
letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}.
ありがとうございます。
それは私には良いようですが、それは常に偽を与える...と私はなぜ得ることができません。Definite句文法、文字列が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
は他の言葉でも成功するでしょう。