Es scheint mir gut, aber es gibt immer falsch ... und ich kann nicht warum.Grammatik, wie überprüft man, ob eine Zeichenfolge ein Zeichen ist?
letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}.
Vielen Dank.
Es scheint mir gut, aber es gibt immer falsch ... und ich kann nicht warum.Grammatik, wie überprüft man, ob eine Zeichenfolge ein Zeichen ist?
letter(X) --> [C], {"a"=<C, C=<"z", name(X,[C])}.
Vielen Dank.
Der einfachste Weg wäre sicherzustellen, dass Ihre Grammatik von Anfang an Zeichen erhält. In diesem Fall müssen Sie (oder besser char_code/2
) nicht für die Konvertierung verwenden.
:- set_prolog_flag(double_quotes, chars).
letter(C) --> [C], { atom_length(C,1), a @=< C, C @=< z }.
Dies sollte in jedem System funktionieren. In SWI gibt es char_type/2
auch:
letter(C) --> [C], { atom_length(C,1), char_type(C, lower) }.
Dies wird auch akzeptieren, weitere Kleinbuchstaben neben a..z wie Umlaute.
Beachten Sie das Ziel atom_length(C,1)
, die dafür sorgt, dass es nur Zeichen gibt. Sonst wäre letter//1
auch für andere Begriffe erfolgreich.