数字のリストを取得して、順番に並べられた数字の最大シーケンスを取得できるようにしたいと考えています。例えば:
?- 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).
私の現在の解決策は、与えられた2番目の例ではうまくいかないことを理解しています. SICStus Prolog を使用しています。
よろしくお願いします!