Haskell学习笔记-- Introduction/常用函数
haskell是个神奇的语言。
函数式编程,我的理解是它讲所有东西都整成函数来实现。
比如说循环结构--递归函数
数据结构--构造函数
....
所以整个程序就是一个个函数套在一起。
比较有意思的是后面关于functor、monad的升格操作
还有对于副作用(IO)等的实现
第一个程序(sum
sum [] = 0 sum (n:ns) = n + sum ns sum [1,2,3] = { applying sum } 1 + sum [2,3] = { applying sum } 1 + (2 + sum [3]) = { applying sum } 1 + (2 + (3 + sum [])) = { applying sum } 1 + (2 + (3 + 0)) = { applying + } 6
小栗子:快速排序
qsort :: [Int] -> [Int] qsort [] = [] qsort (x:xs) = qsort ls ++ [x] ++ qsort rs where ls = [a | a <- xs , a <=x ] rs = [b | b <- xs , b > x ]
一个简洁的不能再简洁的快排
(不过是O (N^2) 的
常用函数
head 取序列的第一个元素
head [1,2,3]
1
tail 除去序列第一个元素
tail [1,2,3]
[2,3]
last 取序列的最后一个元素
init 取除了最后一个外的所有元素
(!!) 取出第 n 个
[1,2,3,4,5] !! 2
2
take 取出前 n 个
take 3 [1,2,3,4,5]
[1,2,3]
drop 去除前 n 个
drop 3 [1,2,3,4,5]
[4,5]
length 求序列长度
++ 拼接两序列
reverse 翻转序列
maximun 返回列表中最大元素
minimum 返回列表中最小元素
null 判断是否为空
filter 过滤
filter :: (a -> Bool) -> [a] -> [a]
filter f xs 保留满足 f 的元素
iterate 迭代
iterate f x = [x,f x, f (f x) ..]
ghci> take 10 (iterate (*2) 1)
[1,2,4,8,16,32,64,128,256,512]
fst 取二元组的第一个
snd 取二元组的第二个
zip 把两个序列连起来(舍去长出来的一段
zip [1,2,3] ['a','b','c','d']
[(1,'a'),(2,'b'),(3,'c')]
其他规则
1.haskell 中函数调用的优先级最高
f g x 视作 调用含有两个参数 g 和 x 的函数 f
f (g x) 先 g 再 f
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2018-11-16 电阻 (resistance)