Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.1, No.2
来源:互联网 发布:重做系统分区数据丢失 编辑:程序博客网 时间:2024/05/15 23:53
最近正在看F#, 拿Project Eular来练手。
顺便用Haskell做一遍,对比一下。
No1.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
F# : [1..999] |> List.filter ( fun x -> (x % 3 = 0) || (x % 5 = 0) ) |> List.sum;;
Haskell: answer = sum . filter (\ x -> (x `mod` 3 == 0) || (x `mod` 5 == 0) ) $ [ 1..999 ]
Answer: 233168
后语: (.) 函数用起来比 |> 感觉好。
No2.
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
F# :
let answer =let d = new System.Collections.Generic.Dictionary<int,int>()
let rec fibCache n = if d.ContainsKey(n) then d.[n]
else if n <= 2 then 1
else let res = fibCache (n-2) + fibCache (n-1)
d.Add(n,res)
res
let rec num n = if fibCache n < 4000000 then num (n + 1) else n
let pos = num 1
let nd = d.Remove(pos)
d |> Seq.map ( fun (KeyValue(k, v)) -> if v % 2 = 0 then v else 0 ) |> Seq.sum
Haskell : --note: 效率低。 F#,将中间结果cache到一个dictionary中,速度快些。
answer = sum . filter even . takeWhile ( < 4000000) . scanl ( \ acc n -> snd $ fibPair n ) 0 $ [1.. ]
Answer: 4613732
后语:F# 对象与函数式的混合,乱,不过对从imperative转来的有亲切感。
- Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.1, No.2
- Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.3, No.4
- Project Euler -- 欧拉题集 F#及Haskell 版 - No.5, No.6
- Project Euler -- 欧拉题集 F#及Haskell 版 - No.7, No.8
- Project Euler -- 欧拉题集 F#及Haskell 版 - No.9, No.10
- Project Euler. No.1
- <MEMORY>Project Euler NO.12
- for no f test
- NO.1_建立Android project
- GitLab: No such project
- Project Euler - Problem 2
- Project Euler problem 2
- Project Euler 2
- project euler 2
- Project Euler Problem 2
- project euler 2
- Project Euler 1-6
- Project Euler #1
- CLAPACK for Windows
- 阻尼二极管
- Request获取请求数据
- 敏捷软件开发:原则、模式和实践
- Java六大必须理解的问题
- Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.1, No.2
- Java 优雅的终止线程
- shell 函数
- RHEL6.1安装光盘本地YUM更新源
- 需求说明文档之阅读人员分析,如何提高需求说明文档的读者认可度
- QQ空间日志下载解析类(附日志解析类源码)
- sqlite for c#
- Linux网络协议栈之驱动框架
- linux平台设备驱动