Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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_Fizzbuzz - Fatal编程技术网

在Haskell函数中实现输入变量

在Haskell函数中实现输入变量,haskell,fizzbuzz,Haskell,Fizzbuzz,这是我上一篇文章的延续 我正在创建一个FizzBuzz函数,允许输入3个参数。然而,这不仅仅是标准的FizzBuzz程序。这一个允许2个除数,同时实现一个上限范围。因此,如果div1是可除打印“Fizz”,如果div2是可除打印“buzz”,如果div1和div2是可除打印“FizzBuzz”,则打印数字/整数 我找到了不同的教程,展示了如何在Haskell中执行常规的FizzBuzz,并对其进行了修改,使其能够执行上述操作 现在我遇到了一个错误,我不知道如何在Haskell中正确地做到这一点

这是我上一篇文章的延续

我正在创建一个FizzBuzz函数,允许输入3个参数。然而,这不仅仅是标准的FizzBuzz程序。这一个允许2个除数,同时实现一个上限范围。因此,如果
div1
是可除打印“Fizz”,如果
div2
是可除打印“buzz”,如果
div1
div2
是可除打印“FizzBuzz”,则打印数字/整数

我找到了不同的教程,展示了如何在Haskell中执行常规的FizzBuzz,并对其进行了修改,使其能够执行上述操作

现在我遇到了一个错误,我不知道如何在Haskell中正确地做到这一点

fizzbuzz' :: [(Integer, String)] -> Integer -> String
fizzbuzz' ss n = foldl (\str (num, subst) -> if n `mod` num == 0 then str ++ subst else str ++ "") "" ss

fizzbuzz :: [(Integer, String)] -> Integer -> String
fizzbuzz ss n = if null str then show n else str
  where str = fizzbuzz' ss n

fb :: Integer -> Integer -> Integer -> Integer
fb x y z = mapM_ putStrLn $ map (fizzbuzz [(x, "fizz"), (y, "buzz")]) [0..z]
我得到的错误是:

Couldn't match expected type ‘Integer’ with actual type ‘IO ()’
In the expression:
  mapM_ putStrLn $ map (fizzbuzz [(x, "fizz"), (y, "buzz")]) [0 .. z]
In an equation for ‘fb’:
    fb x y z
      = mapM_ putStrLn
        $ map (fizzbuzz [(x, "fizz"), (y, "buzz")]) [0 .. z]
Failed, modules loaded: none.

有什么想法吗

问题只在于
fb
的类型签名。只要删除它,代码就会编译

fb
的正确类型签名是
Integer->Integer->Integer->IO()
,您可以通过
ghci
使用
:t
命令告诉您:

$ ghci Fizzbuzz.hs
Prelude> :t fb
fb :: Integer -> Integer -> Integer -> IO ()
Prelude>

您认为
fb
应该返回什么类型?为什么您认为它会返回一个
整数
?请不要不必要地添加php标记。您知道php这一事实与这个问题完全无关。此外,它甚至打破了代码的高亮显示(使用标记选择默认高亮显示)。。真不敢相信我错过了!再次感谢你的帮助!