%要求写一个函数eird_sum(List, Result).
%读取list中大于等于5的元素,求他们的平方,
%读取list中绝对值小于等于2的元素
%result=大于5的元素的平方的和-绝对值小于等于2的元素的绝对值
%?- weird_sum([3,6,2,-1], Result).
%Result = 33
%因为6×6 - 2 - 1.
max(Max,[Max]).
max(Max,List):-
List = [Head|Tail],
max(MaxOfTail,Tail),
Head >= MaxOfTail,
Max = Head.
max(Max,List):-
List = [Head|Tail],
max(MaxOfTail,Tail),
MaxOfTail >= Head,
Max = MaxOfTail.
abs(0,0).
abs(N,Abs):-
N > 0,
Abs = N.
abs(N,Abs):-
N < 0,
Abs = -N.
absl2l([],[]).
absl2l(List,Rslist):-
absl2l(List,[],Rslist).
absl2l([],Rslist,Rslist).
absl2l(List,SoFar,Rslist):-
List = [H1|T1],
abs(H1,H1abs),
H1abs =<2,
absl2l(T1,[H1abs|SoFar],Rslist).
absl2l(List,SoFar,Rslist):-
List = [H1|T1],
abs(H1,H1abs),
H1abs >2,
absl2l(T1,SoFar,Rslist).
sum_abs([],0).
sum_abs(List,Sum):-
List = [Head|Tail],
abs(Head,Habs),
sum_abs(Tail,SumOfTail),
Sum is Habs + SumOfTail.
weird_sum(List,Result):-
max(Max,List),
absl2l(List,Less2),
sum_abs(Less2,Sum),
Result is Max*Max - Sum.
2017年04月10日 16点04分
4