我开始学习一些Erlang,现在我陷入了下面的“问题”。Erlang递归函数的评估(为什么这个工作)
我知道递归如何工作,我知道HigherOrderFunctions的基础知识。
因此,要获得更多的到整个的概念,我实现“名单:所有/ 2”倍自己的用法:
fold(_, Start, []) -> Start;
fold(F, Start, [H|T]) -> fold(F, F(H, Start), T).
all(Pred, L) ->
F = fun(H, ToF) ->
case Pred(H) of
true -> ToF;
false -> false
end
end,
fold(F, true, L).
我知道这个版本不关心空列表,而不是什么让我困扰。我无法弄清楚它为什么如此。
当我使用我的列表[1,2,3]并将Pred设置为“fun(X),当X == 3 - > true;(_) - > false end”时,它显然返回“false”。但为什么?如果我的工作这通过在纸上最后一次调用返回的东西之前,我:
fold(F, F(H, Start), T)
其中F是强的松和F(H,start)返回“真”,因为最后一个元素是3和T是一个空列表[]。
所以当我得到这个正确的时候,最后一次调用应该是fold(_,true,[]),因此应该返回“true”,而不是。
我在这里错过了什么,或者在评估最后一个表达式时会出错吗?这个函数是否对某些“Pred”的返回使用逻辑AND?
你的预计值可能会很有趣(X) - > X == 3月底 – Isac