Projects/2BIT/summer-semester/IZU/2/xnecasr00.pl
2026-04-14 19:28:46 +02:00

25 lines
No EOL
1 KiB
Prolog

% Zadani c. 47:
% Napiste program resici ukol dany predikatem u47(LIN,VIN,VOUT), kde LIN
% vstupni ciselny seznam s nejmene jednim prvkem, VIN je vstupni promenna,
% jejiz hodnotu je prirozene cislo a VOUT je promenna, ve ktere se vraci hodnota
% souctu cisel seznamu LIN s mensim indexem, nez je hodnota ve VIN. Uvazujte,
% ze indexovani zacina jednickou, tj. ze prvni prvek seznamu LIN ma index 1.
% Testovaci predikaty: % VOUT
u47_1:- u47([5,7,9,-10,23,-4],5, VOUT),write(VOUT). % 11
u47_2:- u47([1,2.1,3.2,-9],20,VOUT),write(VOUT). % -2.7
u47_3:- u47([-1,2.3,4.7,9.6,10.1,12],-1,VOUT),write(VOUT). % 0
u47_r:- write('Zadej LIN: '),read(LIN),
write('Zadej VIN: '),read(VIN),u47(LIN,VIN,VOUT),write(VOUT).
% Reseni:
u47(LIN, VIN, VOUT) :-
(VIN =< 1 -> VOUT = 0
; sum_upto(LIN, VIN, 1, 0, VOUT)).
sum_upto([], _, _, S, S).
sum_upto([H|T], VIN, I, A, VOUT) :-
I1 is I + 1,
(I < VIN -> A1 is A + H ; A1 = A),
sum_upto(T, VIN, I1, A1, VOUT).