原 Haskell 学习笔记-09:练习代码重构
2023-09-27 14:20:16 时间
返回去看前几天写的代码,感觉有些 low,重新写一下。
1、三个数排序,提供一个易读性较好的方案。
sortThreeNum x y z
| x <= y && y <= z = (x, y, z)
| x <= z && z <= y = (x, z, y)
| y <= x && x <= z = (y, x, z)
| y <= z && z <= x = (y, z, x)
| z <= x && x <= y = (z, x, y)
| otherwise = (z, y, x)
2、搜索,给出目标在列表中的索引.。
search x [] = -1
search x (y:ys)
| x == y = 0
| otherwise = 1 + search x ys
3、比较排序。最笨的排序方法,前几天还觉得很难,现在感觉顺手多了。所以函数式编程,经验很重要,写的代码多了,就不觉得难了。原来的代码 15 行,这一次 6 行搞定。
sort [] = []
sort (x:[]) = [x]
sort (x:xs)
| x < head ys = x:ys
| otherwise = head ys : sort (x : tail ys)
where ys = sort xs
学习一门语言,除了多练习、多总结,没其他好办法。再写两个计算圆周率的计算方法,前几天不知道怎样写,今天搞定。圆周率 pi 满足下面公式:
π4=1−13+15−17+...
π
4
=
1
−
1
3
+
1
5
−
1
7
+
.
.
.
算法1:利用递归计算级数之和。
pi1 =
let
pi' 0 = 0.0
pi' n
| odd n = pi' (n - 1) + 1 / (fromIntegral (2*n-1))
| otherwise = pi' (n - 1) - 1 / (fromIntegral (2*n-1))
in 4 * pi' 1000000
算法2:利用列表推导式计算级数之和。
pi2 = sum [4.0/(fromIntegral x)|x <- [1,5..2000000]] - sum[4.0/(fromIntegral x)|x <- [3,7..2000000]]
我发现,与数学有着极深渊源的函数式程序设计,其实不擅长复杂数学运算,现阶段解决复杂数学问题,还是靠 C 语言吧。
相关文章
- 神经网络与机器学习 笔记—复制器(恒等)映射
- [core java学习笔记][第十一章异常断言日志调试]
- 多线程编程学习笔记——async和await(二)
- MindSpore笔记张量
- matlab学习笔记4--MAT文件的保存和读取
- [吴恩达机器学习笔记]14降维3-4PCA算法原理
- 华为数通笔记-组播数据转发原理
- 机器学习笔记之降维(四)从最小重构代价角度观察主成分分析
- 机器学习笔记之隐马尔可夫模型(四)求值问题——后向算法(Backward Algorithm)
- 正点原子imx6ullUBOOT顶层Makefile学习笔记
- Java 并发编程学习笔记 理解CLH队列锁算法
- Thinkphp学习笔记-模板赋值
- python学习笔记之module && package
- html和xhtml和html5一些区别和笔记
- java自学笔记
- SQLite学习笔记之 在哪可以找到SQLite的学习资料
- JavaScript学习笔记之一(ECMAScript: 基础语法部分)
- scala编程第17章学习笔记(1)——集合类型
- Snmp学习笔记
- Opencv学习笔记(六)SURF学习笔记
- Spring5学习笔记——day05
- python数据结构_(字典)大O性能_学习笔记(3)
- 【学习笔记】(as_matrix()属性已被淘汰)解决:AttributeError: ‘DataFrame‘ object has no attribute ‘as_matrix‘
- Arduino学习笔记23
- 《手把手教你学C语言》学习笔记(5)---计算机的存储和访问
- 【Visual Studio】VS常用调试技巧——笔记
- 《Deformable Convolutional Networks》学习笔记
- poi和easyExcel基于Java操作Excel学习笔记