Erlang中要注意的小细节

来源:互联网 发布:profili软件怎么用 编辑:程序博客网 时间:2024/04/30 12:32
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 
是好EEPhttp://www.erlang.org/eeps/eep-0026.html