我是Haskell的新手,我实际上刚刚在10分钟前开始.我试图弄清楚如何在函数内定义变量.让我们说我有这个功能
foo :: Int -> Int
foo a =
b = a * 2
b
-- Yes, I know, it doesn't do anything interesting
Run Code Online (Sandbox Code Playgroud)
当我运行它时,GHCi我得到一个语法错误!如何在函数内定义变量?
Dan*_*ner 26
有两种方法可以做到这一点:
foo a = b where b = a * 2
foo a = let b = a * 2 in b
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,它们之间的选择是美学而非技术.更确切地说,where可能只附加到定义,而let ... in ...可以在允许表达的任何地方使用.双方where并let引入块,使得在这两种情况下方便多内部变量.
不考虑技术正确性,答案是“某种程度上”。
我认为最好将变量视为评估给定值的零参数的函数。
module Main where
import System.IO
foo :: Integer -> Integer
foo a =
b where
b = a * 2
main = do
putStrLn $ show $ foo 10
Run Code Online (Sandbox Code Playgroud)