Haskell中的“ in”关键字有什么作用?

时间:2018-10-08 15:23:52

标签: haskell

我很难理解haskell中'in'关键字的全部范围。据我了解,您可以使用它来将参数传递给函数。但是,我在理解怎样将其应用于类似于以下所示功能的过程时遇到困难:

foo xs a =
   case xs of
      [] -> (a,[])
      y:ys ->
         let (n,ns)=foo ys a in
         if y>0 then (1+n,y:ns)
         else (n,ns)

如果提供了foo不带的参数,则“ in”如何应用于方程式?

1 个答案:

答案 0 :(得分:5)

inlet一起在一个纯函数中命名一个或多个本地表达式。

因此,举一个简单的例子

foo = 
  let greeting = "hello" in 
    print (greeting ++ " world")

将打印“ hello world”。

但是您也可以使用许多let

foo = 
  let greeting = "hello"
      greetee  = "world" in
    print (greeting ++ " " ++ greetee)

使用您刚定义的名称之前,您只需要一个in

这些名称肯定没有必须用作函数的参数-它们几乎可以是任何东西,甚至可以是函数本身!

foo = 
  let f = print in
    f "hello world"

在您的示例中,let表达式定义了两个名称nns,这些名称在函数的主体中使用。