È possibile visualizzare un elenco Prolog nel suo formato ./2, ad es.Visualizzare un elenco nel suo formato 'raw' ./2
per la lista:
| ?- L=[a,b,c].
L = [a,b,c] ?
yes
C'è un mezzo per visualizzare:
L = .(a, .(b, .(c, []))).
È possibile visualizzare un elenco Prolog nel suo formato ./2, ad es.Visualizzare un elenco nel suo formato 'raw' ./2
per la lista:
| ?- L=[a,b,c].
L = [a,b,c] ?
yes
C'è un mezzo per visualizzare:
L = .(a, .(b, .(c, []))).
Normalmente, write_canonical(List)
o ?- write_term(List, [quoted(true), ignore_ops(true)])
, come sottolineato nei commenti. Dal momento che SWI-Prolog ha deciso di do things differently, questo non è abbastanza buono:
?- write_canonical([a]).
[a]
true.
?- write_term([a], [quoted(true), ignore_ops(true)]).
[a]
true.
?- write_term([a], [dotlists(true)]).
.(a,[])
true.
Vedere il documentation on write_term/2
, prestare attenzione alle opzioni brace_terms(Bool)
e dotlists(Bool)
. Ma attenzione: se avvii SWI-Prolog 7 normalmente, il ./2
non è più il functor della lista!
?- L = .(a, []).
ERROR: Type error: `dict' expected, found `a' (an atom) % WHAT?
?- L = '[|]'(a, []).
L = [a].
Se si inizia con swipl --traditional
, le cose sono tornate alla normalità, una sorta di:
$ 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].
ancora non è possibile utilizzare write_canonical(List)
o write_term(List, [quoted(true), ignore_ops(true)])
.
Leggere la sezione collegata della documentazione SWI-Prolog per i dettagli e le motivazioni. Come consiglio, se si decide di utilizzare SWI-Prolog stick su SWI-Prolog 7 con i valori predefiniti e utilizzare solo write_term(List, [dotlists(true)])
se è necessario comunicare con un'altra implementazione Prolog. La solita notazione elenco, [a, b, ...]
dovrebbe essere sufficiente nella maggior parte delle situazioni convenzionali.
Controlla 'write_canonical/1' in qualsiasi sistema conforme ISO! 'write_canonical/1' è molto utile ogni volta che sei in dubbio sulla forma esatta dei termini su cui stai ragionando. Esempio con SICStus Prolog: '? - write_canonical ([a, b, c]).', Yieding: ''.' (A, '.' (B, '.' (C, [])))'. Un predicato molto valido anche per lo scambio di dati, inteso a fornire una rappresentazione veramente canonica che è facile da analizzare. – mat
L = [a, b, c], write_canonical (L). ha funzionato a meraviglia! Al momento sto usando sicstus, a volte a casa. Mi chiedo se ci sono altri mezzi per raggiungere lo stesso fine? – bph
'write_canonical/1' è il modo standard e migliore per farlo. Naturalmente puoi anche implementarlo tu stesso, usando l'ispezione a termine e la decomposizione con 'arg/3',' = ../2' ecc. – mat