Travel With Haskell 2 — 运算与List初步

Travel With Haskell 2 — 运算与List初步

运算

运算符

运算符大同小异,下面是几点需要注意的。

乘方符号为 ∗ ∗
不等号为 /= / =
在求复杂算式的时候,要注意加括号,尤其是数字包括负数的时候

简单的内置函数

函数名参数备注
succNum / Char求解其后继
maxNum求解最大值
minNum求解最小值

函数调用有最高的优先级,如下面两句话是等效的

> succ 9 + max 1 2 + 100
112
> (succ 9) + (max 1 2) + 100
112

所以在搞不清楚运算优先级的情况下, 多加括号会大大减低犯错误的可能性。

Haskell的if语句格式

if语句中的else部分是强制的。具体规则如下。

doubleMe x = if x > 50
             then x
             else x + 50

上述函数的意思为,计算分段函数。

在Haskell中,首字母大写的函数是不允许的。原因在稍后的章节会介绍。

List

List的合并

List中只能装相同类型的元素

在ghci中,可以使用let关键字来定义一个常量,但是常量的首字母依旧不可以大写。否则会报错。

let numberList = [1,2,3,4,5]
[5] ++ numberList
5:numberList

可以使用 ++运算符来连接两个List。在使用++运算符的时候,haskell会遍历整个++左侧的序列。因此在对于特别长的字符进行处理的时候,最好的方法是使用:连接运算符,在前面插入。

但是使用:只可以插入单个数字或者字符,[5] : numberList 是不合法的。

List的索引

若要是想要获得下标,使用!!运算符。下标从0开始。

numberList !! 2

List的函数

函数名返回值备注
head返回List的头部首个元素
tail返回List的尾部去掉头部的部分
last返回List最后一个元素
init返回List除去最后一个元素的部分
length返回List的长度
null判断List是否为空
reverse将List反转
take返回一个List的前几个元素若超出长度,则返回整个List
drop返回除去前几个元素后的List若除去元素个数超过长度,返回空List
maximum返回List中最大的元素
sum返回List中所有元素的和
elem判断元素是否办包含在List中通常以中缀函数形式调用它。即 x `mod` y

Range方法

haskell中的range类似于python中的range,可以指定sta,end,step,基本语法为[sta , sta + step .. end ],下面为示例。

> [20,19 .. 1]
[20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]
> [20,18 .. 1]
[20,18,16,14,12,10,8,6,4,2]
> ['a', 'c' .. 'z']
"acegikmoqsuwy"
> [1.. 18]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
> [0.1, 0.2 .. 1]
[0.1,0.2,0.30000000000000004,0.4000000000000001,0.5000000000000001,0.6000000000000001,0.7000000000000001,0.8,0.9,1.0]

注意如果是要逆序生成的,sta + step 不可省略,如果是浮点数,由于精度问题,可能会出现糟糕的结果。

但是如果想从无限循环的列表中取出前几个,就要用到cycle函数和repeat函数,通过实例来看他们之间有什么不同。

> take 6 (cycle [1,2,3])
[1,2,3,1,2,3]
> take 6 (repeat [1,2,3])
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]

cycle相当于对List的每个元素逐次循环,而repeat是把参数当做一个整体进行循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值