Erlang等效的Haskell where/partial/lambda

Jim*_*ffa 6 erlang haskell functional-programming

来自Haskell玩氮气并遇到一些我无法找到的例子,所以如果有人可以帮助我:

在erlang中Haskell的位置(以及或者是否允许或任何类型的函数嵌套以访问父变量)?怎么样?你能?

burnOrDie hotness = foldl1 (>>) $ map burn ["Jimmy", "Adam", "Gonzo"]
  where burn x
          | hotness < 3 = print $ x ++ ": Ouch!"
          | otherwise = print $ x ++ ": GAHHH! *die*"
Run Code Online (Sandbox Code Playgroud)

部分申请?哈斯克尔:addOne = +1

在线lambda函数?哈斯克尔:map (\x -> x+x) [1,2,3]

Sat*_*vik 9

我不是二郎的专家,但我会尽力回答.

嵌套功能

out(A) ->
    X = A + 1,
    SQ = fun(C) -> C*C end,
    io:format("~p",[SQ(X)]).
Run Code Online (Sandbox Code Playgroud)

这里SQ函数可以访问父变量.

在Lambda

这与上面相同,您可以使用它fun来定义您的匿名函数.

部分申请

我认为erlang没有任何理智的部分功能应用.你唯一能做的就是将函数包装回函数.

add(X) -> 
    Add2 = fun(Y) -> X + Y end,
    Add2.
Run Code Online (Sandbox Code Playgroud)

现在你可以做点什么了

1> c(test).
{ok,test}
2> A=test:add(1).
#Fun<test.0.41627352>
3> A(2).
3
Run Code Online (Sandbox Code Playgroud)