0

再帰を使用してリスト項目の積を取得するにはどうすればよいですか?

私が尋ねると:

product([s(0), s(s(0)), s(s(0))], S).

結果は次のようになります。

S = s(s(s(s(0)))).

しかし、私は間違った結果を得ています。または結果がありません。

私は試した:

product([], 0).
product([], Res).
product([H1, H2|T], Res) :- T\=[], mul(H1, H2, Res), product(T, Res).
product([H|T], Res) :- mul(H, Res, X), product(T, X).

mul は乗算であり、正常に動作します。

トレースを使用すると、結果が見つかったことがわかりますが、何らかの理由で失敗します。

Call: (10) product([], s(s(s(s(0))))) ? creep
Fail: (10) product([], s(s(s(s(0))))) ? creep

誰かアイデアはありますか?

4

1 に答える 1