Prolog和值数小于极限
定义谓词summy(List,Limit,N),其中List是绝对值数字的列表,N是值小于Limit的列表中这些数字的总和 这就是我所拥有的: * abx([],[])。 abx([H|T],[H|T1]):- H>=0,!, abx(T,T1)。 abx([M|T],[M1|T1]):- M<0, M1是M*(-1), abx(T,T1)。 总和([]、[]、[])。 总和([H | T],L,N):- abx([H|T],[X|Y]), XProlog和值数小于极限,prolog,Prolog,定义谓词summy(List,Limit,N),其中List是绝对值数字的列表,N是值小于Limit的列表中这些数字的总和 这就是我所拥有的: * abx([],[])。 abx([H|T],[H|T1]):- H>=0,!, abx(T,T1)。 abx([M|T],[M1|T1]):- M
如果我运行这个示例,它会显示X=26,而不是X=11。过滤部分是错误的。
X
将检查列表的第一个元素是否小于L
。如果是,它将计算所有绝对值的总和,如果不是,整个谓词将失败
因此,您应该进行过滤,例如:
filterless([], L, []).
filterless([H|T], L, [H|T2]) :-
H < L,
filterless(T, L, T2).
filterless([H|T], L, T2) :-
H > L,
filterless(T, L, T2).
你尝试了什么,什么不起作用?我有一个问题,X
X,它将对整个列表求和。否则,谓词将失败。哇,我不知道maplist/3和include/3。非常感谢你,你是天才。
filterless([], L, []).
filterless([H|T], L, [H|T2]) :-
H < L,
filterless(T, L, T2).
filterless([H|T], L, T2) :-
H > L,
filterless(T, L, T2).
summy(Xs, L, R) :-
abx(Xs, As),
filterless(As, L, Bs),
sumlist(Bs, R).
summy(Xs, L, R) :-
maplist(abs, Xs, As),
include(>(L), As, Bs),
sumlist(Bs, R).