
Лаб. 2 ФЛП
.docxЛабораторная работа 2
%1
sum_pos_squares([X|Y],Res):-
integer(X),X<0,Res1 is abs(X)**2+Res,sum_pos_squares(Y, Res1).
sum_pos_squares([_|Y],Res):-sum_pos_squares(Y,Res).
sum_pos_squares([ ],Res):-write(Res).
%sum_pos_squares([-3,"a",false,-4,1], 0)
%2
dropwhile(_,[ ],[ ]):-!.
dropwhile(Pred,[X|Y],Rest) :-call(Pred,X),!,dropwhile(Pred,Y,Rest).
dropwhile(_,List,List):-!.
fun2(X):-X<10.
%dropwhile(fun2,[1,3,9,11,6],Res)
%3
antimap([ ],_,[ ]):-!.
antimap([Pred1|Pred2],X,[Res1|Res2]):-call(Pred1,X,Res1),antimap(Pred2,X,Res2).
fun3_1(X,Res):-Res is X+2.
fun3_2(X,Res):-Res is X*3.
%antimap([fun3_1,fun3_2],4,Res)
%4
solve(Fun, A, B, Eps, Root) :-
Delta is B - A,
Mid is (A + B) / 2,
( Delta < Eps ->
Root is Mid
;
call(Fun, Mid, FMid),
call(Fun, A, FA),
sign(FA, SignA),
sign(FMid, SignMid),
( SignA =:= SignMid ->
solve(Fun, Mid, B, Eps, Root)
;
solve(Fun, A, Mid, Eps, Root)
)
).
% определение знака
sign(X, 1) :- X >= 0, !.
sign(_, -1).
% функция f(X) = X^2 - 2
f(X, Res) :- Res is X * X - 2.
%solve(f, 0, 2, 0.001, Root)
%5
for(Init, Cond, Step, Body) :-
call(Cond, Init),!,
call(Body, Init),
call(Step, Init, Next),
for(Next, Cond, Step, Body).
for(_,_,_,_):-!.
% условие: пока X < 5
less_than_5(X) :- X < 5.
% шаг: X = X + 1
increment(X, Next):-Next is X + 1.
% тело: вывод X
print_value(X):-writeln(X).
%for(0, less_than_5, increment, print_value).