0

私は初心者で、haskellで絞首刑執行人の実装を書きます。推測された文字を「*」のような文字列で表示する必要があります。現在、私はそのコードを使用しています。

proceed char word progress = let zprog = zip progress [0..] in
    foldl (\a x -> a ++ [fst x]) "" $ map (f char word) zprog where    
        f c w el = 
            if c == w !! (snd el) then
                (c, snd el)
            else
                el

単語が「シャドウ」で「******」のように進行する場合、char='s'関数は「s****」を返します。

その関数をどのように書き直すことができますか?私はそれがきれいではない解決策だと思います。解決策(@luquiによる):

proceed char = zipWith combine where
    combine x y
        | x == char = char
        | otherwise = y

(「word」および「progress」引数はzipWithに転送されます。これはhaskellのeta-reductionです)

4

1 に答える 1

2

あなたは考えるのが正しいですzip、あなたはただいくつかの余分な仕事をしたようです。適切なヘルパー関数を記述できるかどうかを確認してくださいcombine

proceed char word progress = zipWith combine word progress
    where
    combine :: Char -> Char -> Char
    combine = ?
于 2013-01-05T01:14:23.413 に答える