Erlang中要注意的小细节

    技术2022-05-20  38

    King 14:34:07  请教一下以下函数,该函数是尾递归吗? all(Pred, [Hd|Tail]) ->     Pred(Hd) andalso all(Pred, Tail); all(_, []) ->     true. Cobain 14:34:01  不是啊 King 14:35:02  为什么? King 14:35:30  那以下这个呢? all(Pred, [Hd|Tail]) ->     case Pred(Hd) of         false -> false;         true  -> all(Pred, Tail)     end; all(_, []) ->     true. Cobain 14:34:53  yes King 14:35:59  那为什么前一个不是呢? Cobain 14:35:38  andalso 右面的每次都在累计  并没有计算出结果呢 King 14:36:56  其实这道题的亮点确实是andalso King 14:37:18  其实上面两个函数都是尾递归 深圳---西公子 14:37:27  为啥要出题? King 14:37:50 lists:sum([X || X <- lists:seq(1, 999), X rem 5 =:= 0 orelse X rem 3 =:= 0]).????? 因为这个 King 14:37:58  里面的orelse Cobain 14:37:05  错了 Cobain 14:37:12  都是尾递归 Cobain 14:37:19  真还没注意andalso  King 14:38:29  E1 andalso E2 已相当于 case E1 of    false -> false;    true  -> case E2 of        false -> false;        true  -> true    end end Cobain 14:37:41  呵呵呵 King 14:38:44  而E1 orelse E2 就相当于 case E1 of     true -> true     false -> case E2 of         true  -> true         false -> false     end end Cobain 14:37:53  你这题不错~~~ King 14:39:05  不是我写的啦 King 14:39:07  是EEP写的 Cobain 14:38:28  猛一眼看上去  很容易忽略那个细节 King 14:39:24  这些也算是要注意的小细节吧 Cobain 14:39:12  你刚才一说andalso 我一下就傻了 King 14:40:16  ^^ Cobain 14:39:26  呵呵呵 好题 赞一个 King 14:40:30  是好EEP http://www.erlang.org/eeps/eep-0026.html

    最新回复(0)