Haskell中的博弈函数
对于这个函数、showGame和预期的输出,任何人都可以帮助我实现这个功能吗Haskell中的博弈函数,haskell,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] 在修复代码
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]
在修复代码中的一些错误后,我们得到以下结果:
type Symbol = Int
showGame :: [Symbol] -> IO ()
showGame xs =
mapM_ (\x -> putStrLn $ show x ++ ": " ++ replicate x '*') xs
main = showGame [1..3]
输出:
1: *
2: **
3: ***
在修复代码中的一些错误后,我们得到以下结果:
type Symbol = Int
showGame :: [Symbol] -> IO ()
showGame xs =
mapM_ (\x -> putStrLn $ show x ++ ": " ++ replicate x '*') xs
main = showGame [1..3]
输出:
1: *
2: **
3: ***
看起来您想要:
let x = fmap (flip replicate $ '*') [1,2,3]
mapM_ putStrLn x
mapM
对列表应用一元操作,但放弃结果。这是您想要打印的内容,因为没有有用的结果。但是,您确实希望在创建要显示的列表时显示结果。在这里,您可以使用fmap
(或map
,因为输入是一个列表)为每个输入列表元素创建一个列表。看起来您需要:
let x = fmap (flip replicate $ '*') [1,2,3]
mapM_ putStrLn x
mapM
对列表应用一元操作,但放弃结果。这是您想要打印的内容,因为没有有用的结果。但是,您确实希望在创建要显示的列表时显示结果。在这里,您可以使用fmap
(或者map
,因为输入是一个列表)来为每个输入列表元素创建一个列表。我想说(`replicate`*')
比flip
的等价物可读性要高得多,事实上更容易理解(尽管它实际上使用了该语言更高级的功能)。我想说,('replicate`'*')
比flip
的等价物可读性要高得多,而且事实上更容易理解(尽管它实际上使用了该语言更高级的功能)。这也是使用表单
(mapM
,参数已翻转)的好地方因为它读起来像foreach循环。这也是使用表单
(mapM
,参数翻转)的好地方,因为它读起来像foreach循环。Haskell中名为的函数通常提供字符串
,而不是IO操作。您可能希望将其命名为printGame
。Haskell中名为show
的函数通常提供字符串而不是IO操作。您可能想将其命名为printGame
。