我很难理解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”如何应用于方程式?
答案 0 :(得分:5)
in
与let
一起在一个纯函数中命名一个或多个本地表达式。
因此,举一个简单的例子
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
表达式定义了两个名称n
和ns
,这些名称在函数的主体中使用。