haskell iterate 迭代示例

准备知识

一些系统函数
添加库 :m + Data.Char
减去库 :m - Data.Char
digitToInt ('0...f'--->0---15)
IntTodigit 反一下

ord (字符-->ascii码)
chr (ascii-->字符)

 map digitToInt "24324aadddf"
[2,4,3,2,4,10,10,13,13,13,15]


例题

1 生成从a开始的字母序列

 take 3  (iterate (\x-> [intToDigit (digitToInt (head x)+1) ] )  ['a'])

["a","b","c"]


2 生成形如[a,b....c]的等差数列

func :: Int->Int->Int->[Int]

func a b c = if (b<=a)  then takeWhile(>=c) (iterate (+(b-a)) a) else takeWhile(<=c) (iterate (+(b-a)) a)


3 整数转字符串  45->"45"

showint1 = map chr.map(+48).reverse.map(`mod` 10).takeWhile(/=0).iterate(`div` 10)


let showint n= map (intToDigit ) (reverse (map (`mod` 10 ) (takeWhile (/=0)  ( iterate ( `div` 10 )  n))))

4 字符串转整数

 getint1 n = foldl f 0  (map(+(-48)) (map ord n)) where f x y = x*10+y

 let getint n = last  (scanl (\x y -> x*10+y) 0  (map (digitToInt )  (map (head)  (takeWhile (/="")  (iterate (drop 1) n)))))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值