R Programing for Bioinformatics 第二章中提到R语言中存在1)一个函数内嵌套另一个函数 2)函数本身作为返回值 3)对于多个参数通过多次赋值生成多个对象的方式进行运算。
这些情况正好展现了lamda表达(lamda运算)作为函数式编程核心的一些特征。
以前觉得lamda演算、函数式编程都很高深,其实确实不浅显,至少看了入门文章之后不能对编程产生直接作用,然而背后的思维却太重要了:这是西方分析性思维的缩影。Lamda演算把所有实体(变量)、关系(函数)抽象成最简单最单一的元素,然后通过简单实体的迭代作用实现各种复杂关系,而复杂关系通过基于基本关系的操作实现简化。
是不是觉得很熟悉,初中学欧式几何基础一开始引入点线等基本元素和几大公理,所有(课程所限范围内)的定理推理都由此建立;道尔顿的原子说——到理论物理的基本作用和“大统一”理论;笛卡尔的二分法——二叉树和很多学科都有的“二元理论”(我比较熟悉的是语音“区别性特征”);布尔逻辑——以及点路上的与非门。。。
这种思想是希腊哲学家的思想,是近代物理学化学的基本思想,是现代计算机的思想,是种种复杂问题分析的思想,是复杂体系构建的思想,甚至是贸易战双方智囊的思想。
参见以下文章:
我的最爱Lambda演算——开篇 http://cgnail.github.io/academic/lambda-1/
JavaScript作用域链和原型链怎么理解呢? https://www.zhihu.com/question/38963988
神奇的lambda表达式——函数式编程必学 https://juejin.im/post/5d6a3e9751882505877272a7
Method within method in java https://www.geeksforgeeks.org/method-within-method-in-java/
https://en.wikipedia.org/wiki/Lambda_calculus
https://www.geeksforgeeks.org/lambda-expressions-java-8/
柯里化 https://zh.wikipedia.org/wiki/%E6%9F%AF%E9%87%8C%E5%8C%96
Functions in R http://adv-r.had.co.nz/Functions.html
Python Inner Functions—What Are They Good For? https://realpython.com/inner-functions-what-are-they-good-for/
——————————————
具体分析一个地方:
Formal definition
Lambda expressions are composed of:
1 variables v1, v2, ..., vn, ...
2 the abstraction symbols lambda 'λ' and dot '.'
3 parentheses ( )
The set of lambda expressions, Λ, can be defined inductively:
1 If x is a variable, then x ∈ Λ
2 If x is a variable and M ∈ Λ, then (λx.M) ∈ Λ
3 If M, N ∈ Λ, then (M N) ∈ Λ
Instances of rule 2 are known as abstractions and instances of rule 3 are known as applications.
感觉非常像群(group)的定义,但受我知识所限暂时无法给出准确对应和分析。确定的是这个定义围绕的是元素是否属于集合Λ和不同元素之间的关系。
——————————————
ps:
突然觉得越学越有力量,有种朝闻道无比欣喜的感觉。
希望本文不被当成灌水。