% 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).