如何在分配任何内容之前使用变量?

时间:2011-11-30 01:05:07

标签: haskell

我在网站上有这段代码:

doGuessing num = do
   putStrLn "Enter your guess:"
   guess <- getLine
   case (read guess) `compare` num of
     LT -> do putStrLn "Too low!"
              doGuessing num
     GT -> do putStrLn "Too high!"
              doGuessing num
     EQ -> putStrLn "You Win!"

我想知道,如果没有分配任何内容,num如何进行比较?

2 个答案:

答案 0 :(得分:4)

doGuessing是一个名为num的单个参数的函数。这相当于:

function doGuessing(num) {
    ...
}

用命令式语言。

因此,当您实际使用您定义的num函数时,doGuessing将绑定到一个值。

要使用该功能,您可以使用参数将其放在main中:

main = doGuessing 10

一般来说,在Haskell f 1 2 3与c-like语言中的f(1,2,3)相同。

答案 1 :(得分:3)

doGuessing :: (Ord a, Read a) => a -> IO ()

通常,值在Haskell中绑定,未分配。该函数使用do语法进行monadic处理,使其类似于命令式样式。不过,在你传递一个论证之前,它仍然是一个功能,而不是一个动作。

调用它的一个例子可能是:

main :: IO ()
main = doGuessing 4