Kann eine Prolog-Liste im Format ./2 angezeigt werden, z.Anzeige einer Liste im 'raw' ./2 Format
für die Liste:
| ?- L=[a,b,c].
L = [a,b,c] ?
yes
Gibt es ein Mittel zur Anzeige:
L = .(a, .(b, .(c, []))).
Kann eine Prolog-Liste im Format ./2 angezeigt werden, z.Anzeige einer Liste im 'raw' ./2 Format
für die Liste:
| ?- L=[a,b,c].
L = [a,b,c] ?
yes
Gibt es ein Mittel zur Anzeige:
L = .(a, .(b, .(c, []))).
Normalerweise write_canonical(List)
oder ?- write_term(List, [quoted(true), ignore_ops(true)])
, wie sie in den Kommentaren darauf hingewiesen. Da SWI-Prolog zu do things differently entschieden, das ist nicht gut genug:
?- write_canonical([a]).
[a]
true.
?- write_term([a], [quoted(true), ignore_ops(true)]).
[a]
true.
?- write_term([a], [dotlists(true)]).
.(a,[])
true.
die documentation on write_term/2
Siehe, achten Sie auf die Optionen brace_terms(Bool)
und dotlists(Bool)
. Aber Vorsicht: Wenn Sie SWI-Prolog 7 normal starten, ist der ./2
nicht mehr der Listenfunktor!
?- L = .(a, []).
ERROR: Type error: `dict' expected, found `a' (an atom) % WHAT?
?- L = '[|]'(a, []).
L = [a].
Wenn Sie es mit swipl --traditional
beginnen, sind die Dinge wieder normal, irgendwie:
$ swipl --traditional
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.3.4-32-g9311e51)
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- L = .(a, []).
L = [a].
Sie können immer noch nicht write_canonical(List)
oder write_term(List, [quoted(true), ignore_ops(true)])
verwenden.
Lesen Sie den verlinkten Abschnitt der SWI-Prolog-Dokumentation für Details und Gründe. Als Hinweis, wenn Sie sich dazu entscheiden, SWI-Prolog Stick mit SWI-Prolog 7 mit den Standardeinstellungen zu verwenden und nur write_term(List, [dotlists(true)])
zu verwenden, wenn Sie mit einer anderen Prolog-Implementierung kommunizieren müssen. Die übliche Listennotation [a, b, ...]
sollte in den meisten herkömmlichen Situationen gut genug sein.
Überprüfen Sie 'write_canonical/1' in jedem ISO-konformen System! 'write_canonical/1' ist sehr nützlich, wenn Sie Zweifel über die genaue Form der Begriffe haben, über die Sie nachdenken. Beispiel mit SICStus Prolog: '? - write_canonical ([a, b, c]).', Yieding: ''.' (A, '.' (B, '.' (C, []))). Ein sehr wertvolles Prädikat auch für den Datenaustausch, das eine wirklich kanonische Darstellung liefern soll, die leicht zu analysieren ist. – mat
L = [a, b, c], schreiben_ kanonisch (L). hat ein Vergnügen gemacht! Ich benutze im Moment Sicstus, manchmal Swi zu Hause. Ich frage mich, ob es noch andere Mittel gibt, um dasselbe Ziel zu erreichen? – bph
'write_canonical/1' ist der Standard und der beste Weg, es zu tun. Sie können dies natürlich auch selbst implementieren, indem Sie die Begriffsprüfung und Dekomposition mit 'arg/3',' = ../2' usw. verwenden. – mat