25 lines
No EOL
1 KiB
Prolog
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). |