私は初心者で、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です)