私は次の命令型コードをHaskellの機能的なソリューションに変換しようとしています。セットのs
メンバーをセットs'
および更新セットのメンバーと比較し、その比較t
にt'
基づいて行いたい。命令型の擬似コードは次のとおりです。
-- s, s', t, t' are of type Data.Set a
-- foo x y returns a Just a or Nothing
foo :: a -> a -> Just a
-- Initialize t and t' to s and s'
t = s
t = s'
foreach x in s
foreach y in s'
if (foo x y) == Just z
insert z into t
delete x from t
delete y from t'
return (t, t')
私が望んでいるHaskell関数のタイプは次のようなものかもしれません。
mergeSets :: S.Set -> S.Set -> (S.Set, S.Set)
mergeSets s s' = ...
ここで、S
はtypeであり、関数の結果は新しいセットとData.Set
のペアになります(またはセットとの両方を返す他の方法)。t
t'
t
t'