リストの長さを計算する関数を作成しました。以下は私のコードです。
listLength(LIST) :- solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
このコードを入力で実行すると
?- listLength([1, 2, 3, 4, 5, 6, 7])。
次に、インタープリターがエラーメッセージを表示しましたsolve/2 : Arguments are not sufficiently instantiated.
上記のコードを以下のように変更したとき。
listLength(LIST) :- LENGTH is 0, solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
このコードを同じ入力で実行すると、常に0が書き込まれます。
LENGTH を計算したいのですが、変数を listLength 関数で使用したいと考えています。
私がどうかしましたか、まずいことでもありましたか?(私はswi-prologを使用していることに注意してください。)