热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是函数编程

第一章  绪论 这一章主要回答有关F#和函数编程的一些问题。 什么是函数编程? 函数编程(FP,Functionalprogramming)是三大编程范式中

第一章  绪论

 

这一章主要回答有关 F# 和函数编程的一些问题。

 

什么是函数编程?

 

函数编程(FP,Functional programming)是三大编程范式中最古老的。第一个函数编程语言 IPL,是1955年发明,大约比Fortran 早一年;第二个是 LISP,1958 年发明的,比Cobol 早一年。

Fortran 和 Cobol 是命令语言,也叫过程语言。他们在科学计算、事务处理上的立刻成功,使命令语言的优势地位超过 30 年。1970 年代,出现了面向对象(OO,object-oriented)范式,随着面向对象语言的成熟,使得面对对象编程成为今天最流行的范式。

尽管强大的函数编程语言进行了连续开发,比如SML、Objective Caml(OCaml)、APL、Clean等,尤其是类函数编语言(Erlang、Lisp 和 Haskell)已有成功的应用。但是,自1950 年代以来,函数编程一直维持在学术研究阶段,直到最近。命令语言早期的商业成功奠定了它几十年的统治地位。直到企业需要解决复杂计算时,面向对象语言才逐步得到广泛接受。如今,大家终于认识到,函数编程不仅可以解决简单问题,更能解决复杂问题。

纯函数编程把所有程序视为函数的集合,函数接收参数,返回值。它不像命令语言、面向对象编程那样,无副作用,用递归代替循环迭代。函数式程序中的函数与数学上的函数非常类似,因为它们不能改变程序的状态。简单说来,标识符一旦赋值,就不再改变,函数不改变参数值,返回的结果是一个全新的值。其典型的底层实现是这样的:值一旦分配了内存中的一片区域,就不再改变,要计算结果,函数会复制一份,放在另一片区域,然后对复制区域中的值进行操作,而原来的值不受影响,还可以给其他函数使用。直到最终不需要时,值才会被舍弃(这就是垃圾回收机制的雏形)。

纯函数编程的数学基础非常优雅,因此,解决问题,也很优美、简洁。但是,无状态、递归使它在处理许多常见任务时不如其他编程范式方便。F# 最大的优势在于,可以混合使用多种范式,以你自己能用的最方便的方式来解决问题。

 

什么是函数编程,布布扣,bubuko.com


推荐阅读
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • Bootstrap 缩略图展示示例
    本文将展示如何使用 Bootstrap 实现缩略图效果,并提供详细的代码示例。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
author-avatar
溪边莎草
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有