2011-12-07 9 views

答えて

2

これを行う独自のプロシージャを作成できます。たとえば :削除、および入力リストから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))). 

+0

お世話になりました。しかし、この述語には問題があります。私は - subtract_once([a、a、b]、[a、a、a]、X)を実行すると、X = [b]を返します。しかし、私はそれがこの状況では間違っていることを望みます。これをどうすれば解決できますか? – void

2

あなたはこれらの線に沿って何かを行うことができます:あなたは、削除が失敗したとき、それが失敗する場合

subtract_custom(Remainder, [], Remainder). 
subtract_custom(List, [Current|Delete], X) :- 
    select(Current, List, Rest), 
    subtract_custom(Rest, Delete, X). 

にです。そうでなければ、それを少しでも適応させなければならない。

+0

あなたの努力に感謝しますが、gusbroはすでに答えを出していました。両方の回答者に「報酬を与える」方法がありますか? – void

+0

はい、この回答をUpvoteすることもできます。 – crashmstr

関連する問題