【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)).