write_n/2 — triunghi la STDOUT
Fie write/1 un predicat care scrie argumentul primit (un atom) la STDOUT. Folosiți acest predicat pentru a defini un predicat nou, write_n/2 care primește ca argumente un număr natural nenul și un atom și afișează la STDOUT un triunghi format din atomul primit și din dimensiunea primită.
De exemplu, pentru write_n(5, *) se va afișa:
*****
****
***
**
*
Modificați afișarea pentru a obține reprezentarea:
*
**
***
****
*****
Notă: acest exercițiu folosește
write/1care scrie direct laSTDOUT. Verificarea automată compară răspunsurile de tipX = V, nu output-ul afișat, deci butonul „Verifică" nu funcționează aici. Rulează manual și verifică vizual ieșirea.
Hint: un predicat auxiliar
write_line/2care scrieNatomi pe o linie, apoiwrite_n/2care iterează recursiv peste numărul de linii și apeleazănl/0între ele.
% Primul triunghi
write_line(_, 0) :- !.
write_line(Symbol, Rep) :-
write(Symbol),
NewRep is Rep - 1,
write_line(Symbol, NewRep).
write_n(_, 0) :- !.
write_n(Symbol, Rep) :-
write_line(Symbol, Rep),
NewRep is Rep - 1,
nl,
write_n(Symbol, NewRep).
% Al doilea triunghi — cu aliniere la dreapta
write_line(_, 0, RepSpaces) :-
write_line('_', RepSpaces), !.
write_line(Symbol, Rep, Dimension) :-
RepSpaces is Dimension - Rep,
write_line('_', RepSpaces),
write_line(Symbol, Rep).
write_n(_, 0, _) :- !.
write_n(Sym, Rep, Dimension) :-
SymbolRep is Dimension - Rep + 1,
write_line(Sym, SymbolRep, Dimension),
NewRep is Rep - 1,
nl,
write_n(Sym, NewRep, Dimension).
second_triangle(Symbol, Rep) :-
write_n(Symbol, Rep, Rep).
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.