2017-11-01 6 views
2

同じ質問ですが異なるコードを読みましたが、残念ながらもう1つは投稿されています。プロローグの引数が十分にインスタンス化されていない、Rが[H | R1]

私は教授のメモに従っており、ここに見られるように階乗関数と同一の挿入文をモデリングしています。

factorial(0, 1). 
factorial(N, F) :- 
    N > 0, 
    N1 is N – 1, 
    factorial(N1, F1), 
    F is N * F1. 

と私の挿入機能が

insertPos(V, 0, [H|T], [V|[H|T]]). 
insertPos(V, N, [H|T], R) :- 
    N > 0, 
    N1 is N-1, 
    insertPos(V, N1, T, R1), 
    R is [H|R1]. 

エラーがRにスローされているが、私は私のinsertPos/4からR1を取得し、その上にヘッドを追加するために期待していた[H|R1]です。

私のクエリは次のとおりです。あなたがlist[H|R1]と変数Rを統一するためにis/2を使用することはできません

?- insertPos(D, 1, [A,B,C], L). 

答えて

4

is/2算術式の評価のために使用されています。

代わりに、書面により統一演算子=/2を使用することができます。

R = [H|R1] 

または引数にパターンマッチングによって:

insertPos(V, N, [H|T], [H|R1]) :- 
    N > 0, 
    N1 is N-1, 
    insertPos(V, N1, T, R1). 
+1

ありがとうございました!プログラムは今働いています=] –

+1

助けてくれてうれしいです:-) !!! – coder

0

あなたはプロローグ内の変数としてconsiderdされたB Cを使用しています。

+1

良い見解ですが、これはエラーの原因ではなく、単に変数のリストを生成します... – coder

関連する問題