0

我是初学者,在haskell中编写hangman的实现。必须在 ' * ' 之类的字符串中显示猜测的字符,目前我使用该代码:

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 回答