各項目引く:例えばに引く(+セット、+、-resultを削除):しかしプロローグ - 私はプロローグの組み込み述語を使用する場合、「/ 3が引く」一度だけ
subtract([a,b,c,d,c,c,d,e], [c,a], X).
X = [b, d, d, e].
を私がしたいです+ Deleteの各項目を+ Setから減算する。つまり、私は欲しいという意味です
どうすればいいですか?
各項目引く:例えばに引く(+セット、+、-resultを削除):しかしプロローグ - 私はプロローグの組み込み述語を使用する場合、「/ 3が引く」一度だけ
subtract([a,b,c,d,c,c,d,e], [c,a], X).
X = [b, d, d, e].
を私がしたいです+ Deleteの各項目を+ Setから減算する。つまり、私は欲しいという意味です
どうすればいいですか?
これを行う独自のプロシージャを作成できます。たとえば :削除、および入力リストから1つの要素を抽出し、その後、両方のリストの残りの部分を継続して使用するアイテムのリストから1つのアイテムを取るすべての反復で
subtract_once(List, [], List).
subtract_once(List, [Item|Delete], Result):-
(select(Item, List, NList)->
subtract_once(NList, Delete, Result);
(List\=[],subtract_once(List, Delete, Result))).
。
あなたはこれらの線に沿って何かを行うことができます:あなたは、削除が失敗したとき、それが失敗する場合
subtract_custom(Remainder, [], Remainder).
subtract_custom(List, [Current|Delete], X) :-
select(Current, List, Rest),
subtract_custom(Rest, Delete, X).
にです。そうでなければ、それを少しでも適応させなければならない。
お世話になりました。しかし、この述語には問題があります。私は - subtract_once([a、a、b]、[a、a、a]、X)を実行すると、X = [b]を返します。しかし、私はそれがこの状況では間違っていることを望みます。これをどうすれば解決できますか? – void