フローモデル(i、o)を使用したPROLOG述語f(list、integer)について考えてみます。
f([],0).
f([H|T],S):-
f(T,S1),
S1 is S-H.
評価の結果をf([1,2,3,4,5,6,7,8]、S)?答えを正当化してください。
「引数が十分にインスタンス化されていません」というエラーが発生するのを見てきました。これは、Sの値が最後に更新されないためです(リストが空の場合のみ)。これは正当な理由ですか?
回答 1 件
フローモデル(i、o)を使用したPROLOG述語f(list、integer)について考えてみます。
f([],0).
f([H|T],S):-
f(T,S1),
S1 is S-H.
評価の結果をf([1,2,3,4,5,6,7,8]、S)?答えを正当化してください。
「引数が十分にインスタンス化されていません」というエラーが発生するのを見てきました。これは、Sの値が最後に更新されないためです(リストが空の場合のみ)。これは正当な理由ですか?
このコードが失敗することになっている場合は、はい。
正しい表現は次のとおりです。
この述語は、バインドされていない変数2番目の位置、上部または再帰的にvai
f(T,S1)
(どこS1
新鮮であるため、バインドされていません)。次に、算術評価
S1 is S-H.
の右側にバインドされていない変数があります
is/2
続行できません(つまり、スローされます)。ただし、「有限領域での制約満足」に切り替えると機能することに注意してください。
その後、交換
is/2
沿って#=
:動作するプログラムを生成します。