Unabhängig von der Prolog-System Sie verwenden, und es sei denn, Sie halten vorhandenen Code haben, halten Sie sich an set_prolog_flag(double_quotes, chars)
. Dies funktioniert in many systems wie B, GNU, IF, IV, Minerva, SICStus, SWI, YAP. Es ist also eine sichere Wette. Die anderen von @Boris genannten Optionen sind schwer zu debuggen. Eines ist sogar spezifisch nur für SWI .
?- set_prolog_flag(double_quotes, chars).
true.
?- L = "abc".
L = [a, b, c].
Mit library(double_quotes)
können diese Saiten kompakter gedruckt werden.
In SWI, das Beste, was Sie tun können, ist in Ihren .swiplrc
die Zeilen zu setzen:
:- set_prolog_flag(back_quotes, string).
:- set_prolog_flag(double_quotes, chars).
:- use_module(library(double_quotes)).
Für Ihr konkretes Beispiel ist es eine gute Idee ist, Nebenwirkungen sofort zu vermeiden, produzieren. sollten Sie stattdessen eine Beziehung zwischen einem Wort definieren, und der Schreibweise:
word_spelling(Ws, Ys) :-
phrase(natospelling(Ws), Ys).
natospelling([]).
natospelling([C|Cs]) -->
{char_lower(C, L)},
nato(L),
"\n",
natospelling(Cs).
nato(p) --> "Papa".
nato(i) --> "India".
nato(e) --> "Echo".
char_lower(C, L) :-
char_type(L, to_lower(C)).
?- word_spelling("Pie",Xs).
Xs = "Papa\nIndia\nEcho\n".
?- word_spelling("Pie",Xs), format("~s",[Xs]).
Papa
India
Echo
Xs = "Papa\nIndia\nEcho\n".
Und hier ist Ihre ursprüngliche Definition. Meistens bleibt es jedoch bei dem reinen Kern.
spellWord(Ws) :-
word_spelling(Ws, Xs),
format("~s", [Xs]).
Beachten Sie auch, dass SWI eingebauten in library(pio)
nur für Codes funktioniert und lässt unnötige Wahl-Punkte offen. Verwenden Sie stattdessen this replacement , die je nach Prolog-Flag für chars
und codes
funktionieren.
Historisch wurden Zeichen zuerst als Atome der Länge eins dargestellt. Das heißt, 1972 in Prolog 0. Dort wurden jedoch die Strings in einer linksassoziativen Weise dargestellt, was das Suffix-Matching erleichterte.
plur(nil-c-i-e-l, nil-c-i-e-u-x).
Beginnend mit Prolog I, 1973 bedeutete doppelte Anführungszeichen eine Liste von wie heute Zeichen.
Im Jahr 1977 änderte DECsystem 10 Prolog die Bedeutung der doppelten Anführungszeichen in Listen von Zeichencodes und verwendeten Codes anstelle von Zeichen. Dies machte einige E/A-Operationen ein wenig effizienter, aber machte das Debuggen solcher Programme viel schwieriger [76,105,107,101,32,116,104,105,115] - können Sie es lesen?
ISO Prolog unterstützt beides. Es gibt eine Flagge double_quotes
, die how double quotes are interpreted angibt.Auch Charakter im Zusammenhang Einbauten vorhanden sind, für beide:
char_code/2
atom_chars/2, number_chars/2, get_char/1/2, peek_char/1/2, put_char/1/2
atom_codes/2, number_codes/2, get_code/1/2, peek_code/1/2, put_code/1/2
Wie würde ich arbeiten, um die Eingabe in einfache Anführungszeichen zu akzeptieren, z. B. "Kuchen" – donsavage
@donsavage Verwenden Sie zuerst das entsprechende Konversionsprädikat. Ich habe sie in der obigen Antwort aufgeführt. –
Es gibt auch die Option 'set_prolog_flag (double_quotes, chars)' – false