Domanda

Ho il predicato m(L,L) E voglio che restituisca l'elenco che ci vuole. Il codice è questo:

m([],[]).
m([H|T],[H|L]) :- m(T,L).

Quando provo a usarlo con questo esempio:

m([1,2,3,4,5,6,7,8,9,10],L)

Ottengo questo come risposta:

L = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].

(Ho notato che se lo provo con meno elementi è ok.) Perché sta accadendo e l'elenco è incompiuto?

Come posso evitarlo?

Scusa se è una domanda davvero stupida ma ho cercato sul web e non sono riuscito a trovare alcuna documentazione che possa aiutarmi a capire ... grazie!

È stato utile?

Soluzione

L'elenco è finito: l'output viene solo troncato per scopi di visualizzazione. Se scrivi un predicato che stampa la tua lista, vedrai che è completo. Immagino che tu stia usando SWI Prolog, il che significa che puoi controllare questo link Per modi per modificare le impostazioni del display.

Altri suggerimenti

Sia il ciclo di query/risposta Toplevel come debugger abbreviano lunghi termini complessi. Lo fanno per evitare infinite pagine di output. In effetti, scrivono usando write_term/3 che prende un elenco di opzioni come argomento. L'elenco delle opzioni per le risposte stampate dal prolog toplevel è nel prolog-flag toplevel_print_options e quello per il debugger è in debugger_print_options. Inizialmente entrambi hanno il valore indicato di seguito:

?- current_prolog_flag(toplevel_print_options, X).

X = [quoted(true), portray(true), max_depth(10), spacing(next_argument)].

Per modificare le impostazioni predefinite: aggiungi una direttiva set_prolog_flag/2 nel file di inizializzazione personale prolog (vedi Plinizializzazione) Per modificare il valore predefinito le bandiere prologiche sopra menzionate.

Vai al settings -> user init file ... ->

E cambia max_depth (10) in questo modo:

 :- set_prolog_flag(toplevel_print_options,
             [quoted(true), portray(true), max_depth(100)]).

Ci sono anche altre opzioni in cui puoi utilizzare Plinizializzazione file che sono già commentati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top