eu in haskell

本文的内容:

  通过 euler project 题目的 haskell 解法来学习这门语言。
  代码来自 eu forum, haskell wiki,stackoverflow等等。

一些 haskell 学习资料:
http://learnyouahaskell.com
中文版 《Haskell趣学指南》
https://wiki.haskell.org

problem 1 - Multiples of 3 and 5

sum [n | n <- [1..999], n `mod` 5 == 0 || n `mod` 3 == 0]

ranges

轻而易举地获得 1 - 10 的 list, [1..10]
对 ascii 字符也有效 a - z,['a'..'z']
这只是最基本,你可以再加上想要的列表中的第二项来指定一个 “步长”
例如 1 - 100 的偶数,[2, 4..100]
不指定最后一项,则得到一个无限列表
take 20 [2, 4..] 取了前20个整数,因为 haskell 是懒惰求值的,所以这里只会计算20项。

cycle , repeat 两个函数都可以得到无限列表
cycle 将一个有限列表无限循环
repeat 是无限重复一个元素
replicate times element 返回 element 重复 times 次得到的 list

列表解析

列表解析是数学上的一个映射操作,返回的结果是一个列表
通常的形式是

# 以三个变量为例
[f(x, y, z) | 指明 x, y, z 定义域,约束1,约束2]

例如,生成所有满足 1<=x<=10, 1<=y<=10, x <= y 的整数点对

[(x, y) | x <- [1..10], y <- [1..10], x <= y]
其中
f(x, y) = (x, y)
x <- [1..10] 指明x的取值范围
x <= y 是一个约束,只有使得约束成立的值(即使得表达式值为 true)才会被送给 f 进行映射。

problem 2 - Even Fibonacci numbers

生成无限的 fibonacci sequence
https://wiki.haskell.org/The_Fibonacci_sequence

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
sum $ filter even $ takeWhile (<=4000000) fibs

求 fibs 用到了 haskell 惰性求值特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值