如果 IntList 由单调递增的 > 整数和后跟单调递减的整数组成,则 hill(+IntList) 成功。例如,>[1,2,5,8,11,6,3,-1] 是小山,但 [1,2,5,8,11,6,9,3,-1] 和 [1 ,2,3,4,5,6] >不是山丘。您可以假设 IntList 仅包含整数。
这是我到目前为止所做的:
hill(List) :-
increasing(List), decreasing(List).
increasing([H|Tail]) :-
sm(H,Tail),
increasing(Tail).
increasing([]).
decreasing([H|Tail]) :-
gr(H,Tail),
decreasing(Tail).
decreasing([]).
hill([]).
gr(X,[H|Tail]) :- X>H.
gr(X,[]).
sm(X,[H|Tail]) :- X<H.
sm(X,[]).
但这不起作用。逻辑是:一个数字列表是hill
IF 它是increasing
然后decreasing
。我怎么说?此代码执行increasing
and decreasing
,但没有列表可以同时是increasing
and decreasing
。
有任何想法吗?