00:00
我们已经了解了B包的概念和基本用法,那接下来呢,我们再来介绍另外一个跟B包非常相关的概念,叫做函数颗粒化,那函数颗粒化是什么意思呢?就是把一个参数列表的多个参数变成多个参数列表的过程,就叫做颗粒化。呃,那这个听起来有点绕绕口啊,呃,那其实它本身表达的意思就是我们一般情况定义函数的时候,那可能有多个参数,那我们就以逗号分割,把它都放在一个列表里边啊,小括号括起来就可以了。而现在颗粒化之后呢,就是当前我们把这多个参数直接打散。不要放在一个小括号里边,而是每个参数都是一个小括号,我们定义的时候就相当于变成了一个前面我们提到的啊,分层调用的这样一个过程,每一层传入一个参数,每一次只传入一个啊,所以它其实是函数式编程里边的一种非常重要的技术,在纯粹的函数式编程里边,它是不存在所谓的多参数这样一个定义的,因为大家知道本身函数式编程跟数学上的函数概念是息息相关的嘛,它就是。
01:14
自变量跟因变量的一个对应的关系。所以当然它是没有所谓的,就是我输入多个自变量,然后得到一个一个因变量这样的一种用法的啊,所以一般情况在函数式编程里边,我们定义的这个参数要求就只有一个,当然这是纯函数式编程的要求啊,啊scla的话,因为要兼容Java和呃其他的一些编程语言,所以这里边我们没有这样的一个限制,那这里边如果要是做颗粒化的话,就可以实现这样的一个效果,就是每一层调用的时候只有一个参数,所以多个参数就变成了多个参数的列表了,这是颗粒化的一个基本概念,那颗粒化的这个英文名称呢,其实就是。
02:02
CRY。那这里边的这个科瑞,大家知道,这就是一个人名啊,就是有时候翻译可能翻译成库里,我们这里是翻译成科里啊,呃,所以本身科里化的这个命名是来源于一个一个人名啊,是一个美国的数学家,逻辑学家,他的名字叫做哈斯卡尔科里啊,那大家可能也知道哈斯卡尔啊,本身呢,又是一种编程语言的名字,而且哈斯卡尔是最为有名的。也被广大程序员认为是最为纯粹的函数式编程语言啊,所以有同学可能也听说过这个,Cala之父马丁奥德斯基曾经说过一句话,他说这个呃,盖LA他是。通向哈斯卡尔的一个上瘾的一个要啊,所以就是说,呃,如果大家要是对于这个函数式编程有更深刻的理解,在SC拉的学习过程当中感受到了函数式编程的魅力的话,那很有可能你就会想要去再去学习哈斯卡尔了啊,当当然这是另外的一个后话啊,所以大家会发现,呃,哈斯卡尔科里这一位逻辑学家,数学家,他还是是对于这个计算机的发展做出了非常重大的贡献的啊,那接下来我们就来看一下这个cur代码里边到底怎么样来实现,那前面我们在练习的过程当中也已经发现了,它的书写其实是非常简单的,那对于我们刚才做的这个必包的实现,怎么样做一个颗理化呢?
03:38
好,前面我们已经做到了,第。这是第三步啊,后面这个拉姆达简写这个算第四步,现在是第五步笔画,那所谓的这个颗理化,我们在定义的这个时候啊,你把它单独的定义出来叫做爱。
04:01
我们叫做,那里边同样还是A和B2参数,我们最初定义的时候直接就是AB。并排在一起,然后逗号分割,哎,我们说它是通用性比较好,但是适用性比较差,我们现在考虑呢,要把它拆开对吧,先传一个可能比较固定的加数,然后再传另外一个不固定的啊,更加灵活的一个加数,那所以我们做的这个操作,前面的实线啊,这个拉姆达简写之后啊,已经比较容易实现了,但是呢,这个写出来之后,相当于还是一个这个a by a,然后呢,有一个A,然后是A加下划线。这个在使用起来其实不太方便,那我们这里边其实可以直接把AB还是按照之前的这个定义直接写在这儿,只不过。O一个参数列表变成了两个两个括号,然后呃,里边呢,都只有一个参数了,这就是我们分层调用的这个过程,他会发现这个跟调用的过程那个写法是一模一样,哎,我们调用的时候,如果要是直接调这个a by a的话,不就是分别传入两个参数吗?哎,所以现在其实是一样的一个过程,那里边当然就是A加B了,所以通过合理化的这个表达我们就可以看到。
05:27
在这个使用这个B包编程的过程当中就会方便很多,而颗理化跟B包就是完全绑定在一起啊,一旦用到了这个颗粒化的表达,那么它的底层一定就是一个B包,当然了,B包不一定非要用颗粒化去书写,但是推荐大家使用颗粒化啊,那所以这里我们也可以直接打印一个测试at。对,那这里边传参的话,比方说像前面我们这里边不是有一个35和24吗?啊,那所以传参的时候跟上面是一样的,也是先给一个35,给一个24,我们可以运行一下。
06:10
你看到它的结果59正确的得到,这就是关于颗粒化的一个内容。
我来说两句