函数式编程的几个重要概念mashup

2024-02-19 16:48

本文主要是介绍函数式编程的几个重要概念mashup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、lambda

     lambda演算通常是指一种数学上的概念,函数式编程中的lambda表达式通常是一种函数:

Lambda 表达式(MSDN C# 编程指南)

 

“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。

所有 Lambda 表达式都使用 Lambda 运算符 => , 该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。

 

二、function

      Functions are first-class data types in functional programming, so they may be assigned to variables and passed to functions as you would any other piece of data. Functions are, of course, reference types.即高阶函数。

 

三、closure

      closure通常是一种匿名函数,通常其函数体内会引用此函数外部的自由变量,直到此函数被调用时才会在适当的上下文里得到这些自由变量的值,才能使其闭合,因而称为闭包(closure)。

 

四、currying

     [WIKIPEDIA]is the technique of transforming a function that takes multiple arguments (or an n-tuple of arguments) in such a way that it can be called as a chain of functions each with a single argument.

Uncurrying is the dual transformation to currying, and can be seen as a form of defunctionalization . It takes a function f (x ) which returns another function g (y ) as a result, and yields a new function f '(x , y ) which takes a number of additional parameters and applies them to the function returned by f . The process can be iterated if necessary.

 

五、continuation

    一句话地说,就是把函数的返回值重定向到程序的任意需要它的地方。很适用于数据流计算机模型的。参见这个文章http://canonical.javaeye.com/blog/33835。

 

六、monad

     或者叫monadic,参考了数学上的范畴理论(category theory),一句话地说,就是构造函数结构的方式(IODP,即先确定输入输出,再确定数据处理),通常用于处理副作用。

     monadic有两种基本操作:unit 和mult。unit是把某值映射为另一个值的操作,例如identity(me:AnyRef) => me;是返回自身的unit函数。mult是一种组合方式,通常是把unit操作应用多次。

     举个俺在实践中碰到的例子。要从某文件中匹配所有类似如下样式的串(用冒号分割的字母数字串,长度不定),你如何写正则表达式呢(读者可先自己尝试写下)?

sunqihui137138139A

sun123B:qi456:hui789:xyz147258:uvwx15989501111

 

   其实,如果能熟练运用monad理论,这个正则式很容易写的。首先找出正则式中的单位运算--unit。字串构造的unit运算是连接,在Java中可以表示为"A"+"B",那么得到"AB";也即这个+操作符就是unit操作!其次,找出如何mult的组合方式。在Java中,字串"ABC123"可以等价为"A"+"B"+"C"+"1"+"2"+"3" 单位操作+的5次操作,只是把+省略了而已!  

   类似地,上题中的unit操作就是:号了(或许对命令式语言背景读者来说,:号似乎不是运算,但是在Scala中,符号也是种函数,核心库中中也有以:号结尾的函数),mult就是简单地对unit应用多次! 自然地,上题中正确的正则表达式可以写为:(/w+[:]/w+)+。

  看到这,读者应该感到monad的奇妙之处了吧?!

 

 

这篇关于函数式编程的几个重要概念mashup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725290

相关文章

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN