2

私は2つの引数、数値とソートされたリストを受け取る挿入関数の作成に取り組んでおり、適切な位置に数値が含まれている同じリストを生成する必要があります。これが私がこれまでに得たものです:

insert1(X,[]) :-
   [X].

insert1(X, [H|T]) :-
   X > H,
   insert1(X,T).

insert1(X,[H|_T]) :-
   X < H,
   T is [X|T]. 

次のエラーが発生します。

ERROR: '.'/2: Arguments are not sufficiently instantiated ("x" must hold one character)
Exception: (6) insert1(2, [1, 4, 5]) ? creep

皆様のご協力をよろしくお願いいたします。

4

1 に答える 1

0

エラーメッセージはかなり不可解です: '.'/2 それはリストコンストラクターであり、あなたはそれを呼び出しています. 構文の詳細な説明については、この質問を参照してください。

is/2 は算術にのみ使用する必要があるため、最後の句も間違っています。

しかし、一般的に、あなたは間違った「視点」から問題に取り組んでいます。Prolog の引数は不変です。変更されたリストを保持するには、別の引数が必要です。

最初と3番目の句の可能な回避策は次のとおりです

insert1(X, [], [X]).
...
insert1(X, [H|T], [X,H|T]) :-
  X < H.

このように、2 番目の節を調整し、insert1 を呼び出す必要があります。

?- insert1(3, [1,2,3,4], L).
于 2012-12-16T21:24:44.163 に答える