对于这个功能,showGame,以及预期的输出,任何人都可以帮我一臂之力吗?
import System.IO
type Symbol = Int
showGame :: [Symbol] => IO ()
showGame xs =
let x = mapM_ (replicate '*') xs
putStrLn x
输出应为:
1: *
2: **
3: ***
带
[Symbol] = [1,2,3]
答案 0 :(得分:3)
在修复代码中的一些错误后,我们得到了这个:
type Symbol = Int
showGame :: [Symbol] -> IO ()
showGame xs =
mapM_ (\x -> putStrLn $ show x ++ ": " ++ replicate x '*') xs
main = showGame [1..3]
输出:
1: *
2: **
3: ***
答案 1 :(得分:1)
看起来你想要:
let x = fmap (flip replicate $ '*') [1,2,3]
mapM_ putStrLn x
mapM_
对列表应用monadic操作但会丢弃结果。这是您要打印的内容,因为没有有用的结果。但是,在创建要显示的列表时,您确实需要结果。在这里,您可以使用fmap
(或map
,因为输入是一个列表)来为每个输入列表元素创建一个列表。