PDA

Visualizza la versione completa : [Sicstus Prolog] Problema con parametro di output


innaig86
12-02-2009, 13:50
Salve,
ho un problema con il seguente codice


create_semantic_graph(SemanticGraph):-
see('semantic_graph.bk'),
EdgesList = [],
read(A),
create_edges_list(A, EdgesList),
nl,nl,write(EdgesList),
seen
.

create_edges_list(end_of_file, _) :- !.

create_edges_list(A, EL):-
read(A1),
write([A|EL],nl,
create_edges_list(A1,[A|EL])
.

In pratica vorrei leggere delle linee dal file semantic_graph.bk e inserirle in una lista.
Il problema è nella variabile EdgesList: quando faccio il write(Edgeslist) in create_semantic_graph , mi stampa una lista vuota.

Durante il procedimento, la lista è costruita bene, e lo vedo tramite il write([A|EL]) all'interno di create_edges_list

E' come se la funzione create_edges_list non riesca a mandare in output EL.
E' la prima volta che scrivo in Prolog, quindi non ci capisco granchè.
Il compilatore è Sicstus Prolog.

Dove sbaglio?
Grazie.

innaig86
12-02-2009, 15:19
Prendendo spunto da un pezzo di codice funzionante che ho a disposizione, ho modificato il codice come segue


create_semantic_graph(SemanticGraph):-
see('semantic_graph.bk'),
EdgesList = [],
read(A),
create_edges_list(A, EdgesList),
write(EdgesList),
seen
.

create_edges_list(A, E):- create_edges_list(A, [], E).

create_edges_list(end_of_file, EdgesList, EdgesList).

create_edges_list(A, E, EdgesList):-
read(A1),
(A1 \= end_of_file ->
create_edges_list(A1, [A|E], EdgesList)
;
create_edges_list(end_of_file, [A|E], EdgeList)
)
.

Ma niente...non riesco ancora a ritornare quel valore che mi serve in create_semantic_graph.

innaig86
12-02-2009, 16:59
Lol...ho risolto...l'ultimo codice postato è esatto, tranne un piccolo particolare: ho sbagliato il nome della variabile nell'ultima riga di codice. ^^

Ho saltato la lettera S nel terzo parametro.

Loading