函数式编程的几个重要概念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

相关文章

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]