Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中的博弈函数_Haskell - Fatal编程技术网

Haskell中的博弈函数

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] 在修复代码

对于这个函数、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]  

在修复代码中的一些错误后,我们得到以下结果:

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