地图
概括
本节包含来自范畴论.如果您不熟悉haskell或范畴理论,建议您阅读本文的其余部分,然后再回到这里。
注意,map的key属性是在更深层次上查看第二个参数,也就是说,它查看 和 括号。
的类型的签名的
在haskell中Map::(a -> b) -> [a] -> [b]
.
概括地说,我们想 所构造的数据类型子而不仅仅是列表构造函数,比如树,只是为了说明一个例子。我们称之为一般化 作为
泛型的haskell类型签名
是fmap:: Functor f => (a -> b) -> f a -> f b
.
这应该是显而易见的
只是特殊情况
定义为实例Functor [
.
假设我们递归地定义了一棵二叉树,说明一棵树只是另外两棵树的叶子或分支。
1数据树一个=叶一个|叉(树一个)(树一个)
如果我们已经有了一棵树,并决定将所有节点加1呢?
没错,我们必须这么做 树上的增量函数。
首先,我们先定义 对一棵树来说确实如此
1 2 3实例函子树在哪里fmapf(叶x)=叶(fx)fmapf(叉lr)=叉(fmapfl)(fmapfr)
现在,我们准备好了!
1fmap(1+)(叉(叉(叶0) (叶1))(叉(叶2) (叶3.)))
将评估
1叉(叉(叶1) (叶2))(叉(叶3.) (叶4))
Haskell
正如所讨论的haskell不仅有一个简单的地图
但也鼓励你将它推广到每个函子上。我们将讨论地图
不过,在这里。
当我们准备好函数的时候f
还有名单l
,这很简单图f l
是否工作。
计算前10个完全平方
下面的代码可以完成这项工作:
1地图(^2)[1..10]
多么甜蜜和紧凑啊!
或者我们可以创建一个所有完全平方,然后取前10个,这样
1取10$地图(^2)[1..]
Python
地图
在python中几乎是一样的,除了语法。
下面的代码将计算前10个自然数的立方体
1地图(λx:xArunachal Pradesh,3.,xrange(1,11))
Mathematica
的
函数表示为地图
(区分大小写)在Mathematica。
Mathematica很酷的一点是,Mathematica的开发人员已经意识到了这一点地图
是如此重要以至于他们有一些语法糖,是什么/ @
可以作为同样的捷径。因此,地图(f、l)
不如写成l f / @
.注意,这两种形式都是有效的。
看看1到100之间有多少质数
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17在[1]:=PrimeQ/ @范围[1,One hundred.]出[1]={假,真正的,真正的,假,真正的,假,真正的,假,假,\假,真正的,假,真正的,假,假,假,真正的,假,真正的,\假,假,假,真正的,假,假,假,假,假,真正的,\假,真正的,假,假,假,假,假,真正的,假,假,\假,真正的,假,真正的,假,假,假,真正的,假,假,\假,假,假,真正的,假,假,假,假,假,真正的,\假,真正的,假,假,假,假,假,真正的,假,假,\假,真正的,假,真正的,假,假,假,假,假,真正的,\假,假,假,真正的,假,假,假,假,假,真正的,\假,假,假,假,假,假,假,真正的,假,假,\假}在[2]:=理货[%1]出[2]={{假,75},{真正的,25}}
因此,有25个质数。