Haskell中的游戏功能

时间:2013-11-26 21:48:50

标签: haskell

对于这个功能,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]  

2 个答案:

答案 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,因为输入是一个列表)来为每个输入列表元素创建一个列表。