我希望能够获取一个数字列表并获得最大的有序数字序列。例如:
?- in_order([1,2,3,4,5],N).
N = 5. % expected result
?- in_order([1,2,5,6,7,8,4],N).
N = 4. % expected result
到目前为止,我已经生成了一些基本代码来计算数字序列的长度,但是一旦列表为空,它就会回溯,因此返回的数字 N 与列表中的第一个元素相同。我知道我需要停止回溯,但似乎无法做到。有人会很好地指出我正确的方向吗?
到目前为止我的代码(虽然有点老套):
in_order([],_) :-
!.
in_order([H|T],N):-
( var(N),
N is H
; true
),
H = N,
M is N+1,
in_order(T,M).
我确实知道我当前的解决方案在给出的第二个示例中不起作用,并且该方面的指针将再次有帮助,因为我不太确定如何解决该方面。我正在使用 SICStus Prolog。
提前谢谢了!