在函数Haskell中定义变量

时间:2012-07-17 21:45:17

标签: haskell

我是Haskell的新手,我实际上刚刚在10分钟前开始。我试图弄清楚如何在函数内定义变量。让我们说我有功能

foo :: Int -> Int
foo a = 
    b = a * 2
    b
-- Yes, I know, it doesn't do anything interesting

当我在GHCi中运行时,我收到语法错误!如何在函数内定义变量?

2 个答案:

答案 0 :(得分:25)

有两种方法可以做到这一点:

foo a = b where b = a * 2
foo a = let b = a * 2 in b

在大多数情况下,它们之间的选择是美学而非技术。更确切地说,where可能只附加到定义,而let ... in ...可以在允许表达的任何地方使用。 wherelet都引入了块,使得两个内部变量都很方便。

答案 1 :(得分:2)

无视技术正确性,答案是“有点”。

我认为最好将变量视为零参数的函数,并将其评估为给定值。

module Main where
import System.IO

foo :: Integer -> Integer
foo a =
  b where
    b = a * 2

main = do
  putStrLn $ show $ foo 10