Reputation: 4477
I have the following program:
ingrediente(X):-
member(X,
[
"almendra"
, "arroz"
, "atun"
]
)
.
tortitas(X):-
ingrediente(Y)
,atom_concat("Tortitas de ", Y,X)
.
ensalada(X):-
ingrediente(Y)
,atom_concat("Ensalada de ", Y,X)
.
ensalada(X):-
ingrediente(Y)
,ingrediente(Z)
, Y \= Z
,atom_concat(" Con ", Z, ConZ)
,atom_concat(Y, ConZ, YConz)
,atom_concat("Ensalada de ", YConz,X)
,!
.
sopa(X):-
ingrediente(Y)
,atom_concat("Sopa de ", Y,X)
.
platillo(X):-
sopa(X).
platillo(X):-
ensalada(X).
platillo(X):-
tortitas(X).
write_menu:-
open('output.txt',write,Out)
, maplist(platillo, Platillos)
, forall(member(Platillo,Platillos), write(Out,Platillo))
, close(Out)
.
It creates the file for me, but does not write the results. How can I correct the code?
Upvotes: 0
Views: 59
Reputation: 1005
If you trace the code, you'll find that Platillos
is the empty list, so the forall
does nothing. You can see this by doing the query:
?- maplist(platillo, Platillos).
Platillos = [] ;
Platillos = ['Sopa de almendra'] ;
Platillos = ['Sopa de almendra', 'Sopa de almendra'] ;
Platillos = ['Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra'] ;
Platillos = ['Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra'] ;
Platillos = ['Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra'] ;
Platillos = ['Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra', 'Sopa de almendra']
Instead of maplist
, try bagof
(or setof
):
?- bagof(X, platillo(X), Xs).
Xs = ['Sopa de almendra', 'Sopa de arroz', 'Sopa de atun', 'Ensalada de almendra', 'Ensalada de arroz', 'Ensalada de atun', 'Ensalada de almendra Con arroz', 'Tortitas de almendra', 'Tortitas de arroz'|...].
Upvotes: 1