高阶函数的威力
从All about monads里看到的解释mondad的例子,令人感动的优雅代码,我用纯foldl改写,去除了其中monad的内容,这样初学haskell的人应该也看得懂。
我们先定义类型羊(Sheep)和两个函数,求羊的父亲和母亲
type Sheep = String
father :: Sheep -> Sheep
father s = "f_" ++ s
mother :: Sheep -> Sheep
mother m = "m_" ++ m
如果要查找羊的奶奶或者爷爷怎么办呢?很简单
grandma :: Sheep -> Sheep
grandma s = mother (mother s)
grandpa :: Sheep -> Sheep
grandpa s = father (father s)
当然,依次类推,你可以写上几页代码把羊的十八代祖宗都写出来,但我相信正常的程序员不会愿意那么干的。
那么我们就来看看利用高阶函数能写出怎样优雅的实现。
-- 我们传递一个函数(Sheep->Sheep)的集合来作为第二个参数,然后利用foldl来计算它。
findAncestor :: Sheep -> [(Sheep -> Sheep)] -> Sheep
findAncestor s l = foldl getParent s l -- 将函数作为参数传递
where getParent s f = f s
用法
findAncestor "dolly" [mother,father,father] -- dolly's mother's father's father
findAncestor "dolly" [father,mother,father,mother] -- dolly's father's
分享到:
相关推荐
详细讲解Scala中的高阶函数部分,具体实例剖析Scala中高阶函数的意义所在,对控制抽象进行了详细的说明,参考书籍《快学Scala》、《Programming in Scala》
本文介绍常用高阶函数的部分:标准库函数
一、高阶函数 定义:如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数: 1、若 A 函数,接受的参数是一个函数,那么 A 就可以称为高阶函数。 2、若 A 函数,调用的返回值依然是一个函数,那么 A 就...
python高阶函数心得笔记
iOS-RAC-高阶函数-带注释
Python functools——高阶函数 https://xercis.blog.csdn.net/article/details/106253473
使用高阶函数或组件构成React动画
Python 函数式编程和高阶函数 01高阶函数概念.mp4
07.常见高阶函数-sort.py
贝塞尔函数零点求取的函数。可以算到1001阶,网络上那些互相复制来复制去的内容只能算到135阶没法满足我的需要后自己编写的。有高阶计算需求的自取。
Python 函数式编程和高阶函数 02高阶函数map的使用.mp4
Python 函数式编程和高阶函数 05高阶函数sorted的使用.mp4
Python 函数式编程和高阶函数 03高阶函数reduce的使用.mp4
Python 函数式编程和高阶函数 04高阶函数filter的使用.mp4
hof, C 的高阶函数 HigherOrderFunctions是只为函数和函数对象提供实用工具的c 11/c 14库,它可以以解决比传统元编程更简单的问题。HigherOrderFunctions是:现代:HigherOrderFunctions利用
### 1.偏函数 1. 概念 当我们写一个参数比较多的函数时,如果有些参数,大部分场景... 当一个函数A的参数,接收的是另一个函数时,则把这个函数A称为高阶函数 2. 注意事项 1. 函数也可向数据一样相互传递
一个java快速简单轻量级高阶函数库,支持 map,filter,reduce 串行,并行计算。适用于 Java,Android
高阶模糊函数(HAF)是估计多项式相位信号参数的有效方法。本代码给出了HAF函数及其测试文件,运行高效,稳健性较好,代码注释丰富,简单易懂。
本文介绍的是常用高阶函数之一,包括 Kotlin 为集合、数组等添加的高阶函数中最后几个难以归类的函数。
NULL 博文链接:https://hbiao68.iteye.com/blog/1520946