上篇文章,Haskell的魔法 - 函数式编程初探之一 , 我们见识了如何定义一个函数。
add x y = x + y
参数x、y的类型和函数add的返回值类型不用声明,系统自动推导出它们都是数字型。
add函数是范型函数,适用于所有数字型,例如整数、浮点数类型等。
对于Java、C等程序员,这无异于魔法。Python程序员笑了,这不就是我们Python的妙处吗?没什么特别的。真是这样吗?
对比一下Python版本
def add(x, y): return x + y
Python的add函数有一个致命缺陷。在代码中调用add("hi", 2),程序在运行时出错。与之对比,Haskell代码中写出add "hi" 2调用add函数,程序在编译时报错。Haskell程序员比Python程序员先遇到错误,不纠正,Haskell代码连编译也通不过。而Python代码在运行时,碰到调用该函数时才触发错误。
Haskell函数还有一个魔法,称为部分函数
部分函数
看一个实际的例子。判定一个数x是不是被数q整除。函数名为操作符%%。
(%%) x q = x `rem` q == 0
据此,我们可以衍生出无数部分函数来满足使用。
整除3 = flip (%%) $ 3 div3 = flip (%%) $ 3
Haskell创造来更简便的书写部分函数的形式
(%%)17 -- 被17整除
怎么使用这些部分函数呢?演示一个例子。我们要根据条件筛选出满足条件的数。
1, 2, 3, 4, 5, 5, 6,7, 8, 9, 10
Haskell提供filter函数用来从列表中筛选符合条件的值。filter的调用形式如下
filter condition 列表
条件为:所有被3整除的数
filter (%%3) [1, 2, 3, 4, 5, 5, 6,7, 8, 9, 10] filter div3 [1, 2, 3, 4, 5, 5, 6,7, 8, 9, 10]
条件改为:所有被7整除的数
filter (%%7) [1, 2, 3, 4, 5, 5, 6,7, 8, 9, 10]
啊!多么灵活。只要我们定义好整除函数,就能从中产生无穷多整除部分函数,不用多写任何代码。想想吧,用C/C++如何应对上述例子?
下期介绍Haskell魔法三 -- 函数组合
喜欢就点赞。 更多精彩,请关注我
今日头条号/西瓜视频/抖音:IT之州
相关文章
Haskell最美
Haskell的魔法 - 函数式编程初探之一
到此这篇haskell函数式程序设计_python pos函数的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/haskellbc/1886.html