- 41 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 11:25:46.31 ]
- 個人的には、OOPLだと設計がしっかりしてないと拡張するとき困ること多いけど、関数型言語だと、設計を意識しなくても(行き当たりばったりでも)拡張しやすい感触がある
納期に迫られ、ろくに設計できる環境も、人材も無い現場では関数型言語の方が向いてると思うんだが・・・ checkPermu ns = and.concat $ check ns where check [] = [[]] check (x:xs) = map (x/=) xs : check xs allPattern 0 _ = [[]] allPattern _ [] = [[]] allPattern n (ns:nss) = [x:xs | x <- ns, xs <- allPattern (n-1) nss] -- 普通に作ったpermutations(使用例:permutations [1..3]) permutations ns = permutations' (length ns) ns where permutations' 0 _ = [[]] permutations' _ [] = [[]] permutations' n ns = [x:xs | x <- ns, xs <- permutations' (n-1) ns, checkPermu (x:xs)] -- 汎用的なallPatternを作って、それに差し替えたpermutations permutations2 ns= filter checkPermu $ allPattern (length ns) (replicate (length ns) ns) -- allPatternを使った拡張版permutations(使用例:permutationsEx 3 [[1..3],[1..3],[1..3]]) permutationsEx n ns= filter checkPermu $ allPattern n ns
|

|