関数型プログラミング言語Haskell Part3
■ このスレッドは過去ログ倉庫に格納されています
0593デフォルトの名無しさん
2005/05/22(日) 22:23:13-- 同値類のリストを算出
classify :: Eq a => (a, a) -> [[a]] -> [[a]]
classify (x, y) [] = [[x, y]]
classify (x, y) (c : cs)
| x `elem` c = (y : c) : cs
| y `elem` c = (x : c) : cs
| otherwise = c : classify (x, y) cs
inEqvCl :: Eq a => (a, a) -> [(a, a)] -> Bool
inEqvCl (x, y) lis = (not . null) (filter (f x y) (foldr classify [] lis))
where f x y c = x `elem` c && y `elem` c
いろいろ最適化の余地があるが。
■ このスレッドは過去ログ倉庫に格納されています