技术开发 频道

第一次动脑筋写erlang程序

  【IT168 技术文档】如果一门计算机语言不能影响你对编程的看法,那根本就不必知晓

  那按这个说法的话,erlang值得我们了解的语言之一,因为erlang将“并行"集成到语言当中,内置并行编程模型的编程语言多多少少都得益于Functional Programming,(包括现在主流的java,也有一些FP特性)用FP语言来解数学计算问题是很有趣的,以前就从g9的blog上听说这个好玩的地方http://projecteuler.net.不过区区一直都赖得去晃。虽然平时是个老实的C++程序员,但是本着重在参与的原则,区区也就看了几篇erlang的tuturial,发现内容与SICP相比实在只能算是子集,不过掌握基本语法之后,练习一下是必要的,找谁呢?

  projecteuler呗~

  -module(m1).   -compile(export_all).   %%utils   find(_, []) -> [];   find(Pred, [H|T]) ->   Flag = (Pred(H)),   if   Flag ->   H;   true ->   find(Pred, T)   end.   %%euler #3   bpf(N) ->   bigest_prime_factor(N).   bpf_iter(Current, N, Biggest) ->   if   N rem Current == 0 ->   bpf_iter(Current, N div Current, Current);   Current < N ->   bpf_iter(Current + 1 , N, Biggest);   true ->   Biggest   end.   bigest_prime_factor(N) ->   bpf_iter(2, N, 1).   %%euler #4   is_mul_of_3(N) ->   length([Y || Y <- lists:seq(100,999)   , N rem Y == 0   , N div Y < 1000   , N div Y >99]) > 0.   is_pal(N) ->   integer_to_list(N) == lists:reverse(integer_to_list(N)).   bpi_find() -> %now we use find/1   find(fun(X) -> is_pal(X) and is_mul_of_3(X) end,lists:seq(1000000, 1, -1)).   %%euler #5   gcd(M,N) ->   if   N > M ->   gcd(N,M);   M rem N == 0 ->   N;   true ->   gcd(N, M rem N)   end.   ben_find(N) ->   lists:foldl(fun (X,Acc) -> X * Acc div gcd(X, Acc) end, 1, lists:seq(1,N)).
0
相关文章