2
import Data.List
genkstrings :: Int -> [String] -> [String]
genkstrings k [] = []
genkstrings 1 (s:ss) = [ [c] | c <- s ] ++ genkstrings 1 ss
genkstrings k (s:ss)
| length (s:ss) < k = []
| otherwise = concat [kStartWith k c ss | c <- s ]
++
genkstrings k ss
kStartWith k c ss =
map (c :) $ genkstringsNogap (k-1) ss
genkstringsNogap 0 _ = []
genkstringsNogap 1 (s:ss) = [ [c] | c <- s ]
genkstringsNogap k (s:ss) = concat $ [kStartWithNoGap k c ss | c <- s ]
kStartWithNoGap k c ss = map (c:) (genkstringsNogap (k-1) ss)
入力:genkstrings 2 ["sds","ghghg"]
Haskellの並列プログラミング
出力:
["sg","sh","sg","sh","sg","dg","dh","dg","dh","dg","sg","sh","sg","sh","sg"]
私はHaskellのを学んでいると私は、私は私のコードを並列実行することができました。私が読んでいる本にいくつかの例がありますが、どのように並列プログラミングを適用することができるのか分かりません。
私が正しいだ場合、私は、私はそれをどのように行うことができます
| otherwise = concat [kStartWith k c ss | c <- s ]
++
genkstrings k ss
このライン上でそれを適用する必要がありますか?
私はこの機能を並列化することで多くの勝利を得ることはできません。ここで興味深い計算はあまりありません。パフォーマンスは、これらすべてのリストのキャッシュパフォーマンスに非常に大きく左右されます。特別なものを検討する前に少なくとも['Text'](http://hackage.haskell.org/package/text)または[' Bytestring'](http://hackage.haskell.org/package/bytestring)に切り替えてください最適化。 – leftaroundabout