2

私は Prolog を初めて使用し、割り当ての厳密に減少するシーケンスの手順を作成しようとしています。

ここで述語 isOrdered を定義して、リスト内の項目 Lst が厳密に降順にある場合に「isOrdered(Lst)」が成功するようにします。Lst には数字のみが含まれていると想定できます。例 ?- isOrdered([11, 5, 3, 0])。真実。

これは私がこれまでに持っているものです:

isOrdered([]).
isOrdered([A|B]) :- isOrdered([B]), A > B. 

ローカルスタックが不足しているというエラーが表示されます。これについて頭を包むことはできないようです。

4

1 に答える 1

4

Prologでこのリスト構成を使用する場合

[H | T]

リストを頭と尾に分割します。ヘッドは単一のアイテム(元のリストがリストのリストである場合はリストになる可能性があります)であり、テールは最初の要素が削除された元のリストです。A > Bそれが間違っている理由です。

あなたはこのようなことをする必要があります:

isOrdered([]).
isOrdered([_]).
isOrdered([A,B|T]) :- A > B, isOrdered([B|T]). 
于 2013-02-16T02:10:04.963 に答える