0

これは簡単に修正できるはずですが、これに取り組むことができないようで、イライラしています。2 番目のリストの要素はすべて最初のリストの要素から 1 ずつインクリメントされるため、2 つのリストが関連していることを計算または検証するプログラムをコーディングしました。これは、2 つのリストが与えられた場合には機能しますが、リストを計算する必要がある場合には機能しません。

コードは次のとおりです。

inc([], []).
inc([X|XS],[Y|YS]) :- 
  Y =:= X+1,
  inc(XS,YS).
ERROR: =:=/2: Arguments are not sufficiently instantiated

どんな助けでも大歓迎です!

4

2 に答える 2

0
inc([],[]).
inc([X|XS],[Y|YS]) :-
  nonvar(X),
  Z is X + 1,
  Y = Z,
  inc(XS,YS), !.
inc([X|XS],[Y|YS]) :-
  nonvar(Y),
  Z is Y - 1,
  X = Z,
  inc(XS,YS), !.

ここでは、加算のための実際の計算を取得する必要があり、それから = でインスタンス化を試みます。X がインスタンス化されていない場合と Y がインスタンス化されていない場合に対処するために、述語を分割する必要がありました。それぞれの!最後にある は、2 つの類似したパスのいずれかを介して 1 つを見つけた後、それ以上のソリューションを試行しないようにするためのものです。

于 2013-05-29T03:25:17.523 に答える