Prolog database with airplane schedules. Here is how it looks:
fly(id, from, to, days(1, 0, 1, 0, 1, 0, 1)).
As you can see there are 7 values in
days predicate - from Monday to Sunday. What I want to do is to print every day, where value is
1, but print it into just text. I was trying to use
if - else statement, but in this case it doesn't work how it is supposed to:
( A = 1 -> write(monday), nl; ( B = 1 -> write(tuesday), nl; ( C = 1 -> write(wednesday), nl; ( D = 1 -> write(thursday), nl; ( E = 1 -> write(friday), nl; ( F = 1 -> write(saturday), nl; ( G = 1 -> write(sunday), nl ) ) ) ) ) ) )
In example case it should print 4 days:
monday wednesday friday sunday
How can I do that?
I have found a way to do that, basically, you need to create 2 lists. First one is for your days, and the second one is for names of days. Then, you need to iterate them, but, because of fact that there are no
loop constructions in Prolog, you have to do that using recursive function.
Here is how I have implemented it:
iterate_weeks(, _). iterate_weeks([H|T], [X|Y]) :- H = 1, write(X), nl, iterate_weeks(T, Y). iterate_weeks([H|T], [_|Y]) :- H = 0, iterate_weeks(T, Y). print_fly_days(From, To):- fly(_, From, To, _, _, days(A,B,C,D,E,F,G)), L = [A,B,C,D,E,F,G], T = [monday, tuesday, wednesday, thursday, friday, saturday, sunday], iterate_weeks(L, T).