数学联邦政治世界观
超小超大

Haskell和自然之代数篇 (5-2)

在函数nlToInt中,NNil 对应了整数0,NCons对应了整数的加法运算+ ,() 对应了整数1,递归的NList部分则对应了函数nlToInt的递归调用nlToInt nl。

在函数nlToCharAs中,NNil 对应了空列表[],NCons对应了加法运算+ ,() 对应了字母'A',递归的NList部分则对应了函数nlToCharAs的递归调用nlToCharAs nl。

我们现在有了更清晰的自然数类型的定义NList,但是这个定义还是使用了递归的形式,在代数数据类型中不好表示和分析这个递归形式。我们接下来使用一些数学技巧来消除这个递归形式。

在上面的自然数类型NList的定义中,可以将NList看成一个非递归函数的不动点,即NList = NListF NList,可以看到,这个非递归的NListF 函数(这是一个类型上的函数)有一个参数,命名为x。当x 是类型NList时,这个函数的结果仍然是NList,于是用x 代替NList,则参考NList的定义我们可以得到这个非递归函数NListF 的定义:

data NListF x = NNilF

| NConsF () x -- 用x 代替了递归定义的NList

那如何从非递归函数NListF 得到其不动点类型NList 呢,我们定义一个如下的不动点函数Fix,其将计算得到任意一个存在不动点的非递归函数F 的不动点Fix F。

-- newtype 表示Fix f 和 f (Fix f) 是等价的,实际上在运行时里面是完全一样的。

newtype Fix f = Fix { unFix :: f (Fix f) } -- Fix f 是函数f 的不动点

-- Fix 和unFix 是一对同构函数

上面的Fix 的定义中,newtype 是Haskell 中的一种特殊的定义新数据类型的方式,表示newtype 定义的新数据类型Fix f 和原来的数据类型f (Fix f) 是等价的,在Haskell 的运行时里的表示是完全一样的,只是在Haskell 中的类型层面上是不同的表示。这样Fix 和unFix 就是一对同构函数,在类型f (Fix f) 和 Fix f 之间转换。为了清晰起见,区别类型上的函数Fix,我们后面用In 来代替Fix,用out 来代替unFix。

newtype Fix f = In { out :: f (Fix f) } -- Fix f 是函数f 的不动点

-- In 和 out 是一对同构函数

有了不动点函数Fix 的定义,我们就可以从非递归函数NListF 得到自然数类型NList 了。具体如下所示:

type NList = Fix NListF -- NList 是NListF 的不动点

到此为止,我们得到了自然数的代数数据类型形式NListF。在代数数据类型的分析中,一般将定义的每个分支作为一个项,不同的分支的组合看成是项的加法。在NListF 的定义中,有两个项,分别是NNilF 和 NConsF () x,这两个项相加就是完整的NListF 的完整定义。另外,Haskell 中的所有类型可以看成是Hask 范畴,这是一个笛卡尔闭范畴(CCC 范畴)。于是,我们可以把NNilF用1 表示,NConsF 表示为乘法,类型() 是x 的一个常数系数,于是NListF 可以看成如下形式的代数数据类型。

Fx=1+() × x

数学联邦政治世界观提示您:看后求收藏(同人小说网http://tongren.me),接着再看更方便。

相关小说

洞察微表情 连载中
洞察微表情
小小流星大大梦想
探索微表情科学原理,掌握解读技巧。微表情蕴含丰富信息,带你开启奇妙的内心世界洞察之旅。本书较为枯燥乏味,直接出示结果,并无讲解。
0.5万字1个月前
前世债今生缘 连载中
前世债今生缘
舞小悦
凤天翼:凤家医药世家接班人,(凤冥羽转世)有着一手诡谲的医术,初遇安然就有一种莫名的悸动……沈擎天:暗黑势力头领,(沈毅转世)一次意外受伤结......
67.1万字4周前
炮灰女配不按剧本走 连载中
炮灰女配不按剧本走
我爱吃肉777
顾小唯穿进了一本书里,成为了一个缠人又卑微的女配为了成功完成戏份,回到原世界,她兢兢业业地扮演着原身的角色顾小唯微微仰着头,声音暗哑,浑身颤......
22.1万字4周前
花千骨穿越寻找前世之旅 连载中
花千骨穿越寻找前世之旅
该用户已注销
白子画刺死了花千骨,但花千骨并没有死,她转世成为了叶隐。。为了寻找花千骨,白子画、杀阡陌、单春秋、东方彧卿(带着糖宝)、落十一、笙箫默和十大......
0.8万字4周前
无限流:他怎么边哭边打 连载中
无限流:他怎么边哭边打
清风明月独思君
唐幕有感情障碍,并且莫名其妙失去了记忆,讨厌别人的触碰,天生不喜欢和人靠近。似景表面冷静,实际内心疯狗,他不喜欢淡如薄水的人,他很喜欢把弄局......
4.0万字4周前
快穿之这个女主是我的 连载中
快穿之这个女主是我的
易棺
一天,影后岚尹的宝宝不见了,岚尹满世界地找,最后出了车祸,挂了。然后才被绑定了一个系统,带着岚尹到每个位面去找宝宝,谁料到,宝宝居然变女主了......
3.5万字4周前