こんにちは、整数のリストを入力として取り、可能であれば、合計が元のリストのすべての整数の合計値のちょうど半分になる 2 つのサブリストを返す perfect_part という関数を書きたいと思います。例えば、
?- perfect_part([6, 3, 2, 1], L, R).
L = [6],
R = [3, 2, 1] ;
false.
?- perfect_part([1, 2, 3, 4, 0], L, R).
L = [1, 4],
R = [2, 3, 0] ;
L = [2, 3],
R = [1, 4, 0] ;
これが私の試みです:
listsum([], 0).
listsum([H|T], Total):-
listsum(T, Sum1),
Total is H + Sum1.
subset([],L).
subset([X|T],L):- member(X,L),subset(T,L).
perfect_part([], 0, 0).
perfect_part(Nums, Left, Right):-
listsum(Nums, S),
H is S / 2,
subset(Left, Nums),
subset(Right, Nums),
listsum(Left, H),
listsum(Right, H).
しかし、実行すると、エラーメッセージが表示されました:
エラー: is/2: 引数が十分にインスタンス化されていません
どうすれば修正できますか?私はこの問題を解決するための正しい道を進んでいますか?