16

我是 Haskell 的新手,实际上我 10 分钟前才开始。我试图弄清楚如何在函数中定义变量。可以说我有这个功能

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

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

4

2 回答 2

31

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

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

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

于 2012-07-17T22:17:52.810 回答
2

忽略技术正确性,答案是“有点”。

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

module Main where
import System.IO

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

main = do
  putStrLn $ show $ foo 10
于 2012-07-17T21:55:56.433 回答