1. 程式人生 > >函數式編程語言的入門級了解

函數式編程語言的入門級了解

開發理念 基本數據 size dex 包括 ref syn 模式 執行過程

函數式編程functional programming)又稱函數程序設計泛函編程,是一種編程範式,它將計算機運算視為函數運算,並且避免使用程序狀態以及易變對象。其中,λ演算(lambda calculus)為該語言最重要的基礎。而且,λ演算的函數可以接受函數當作輸入(引數)和輸出(傳出值)。比起指令式編程,函數式編程更加強調程序執行的結果而非執行的過程,倡導利用若幹簡單的執行單元讓計算結果不斷漸進,逐層推導復雜的運算,而不是設計一個復雜的執行過程。

主要分為三類:純函數式編程語言,非純函數式編程語言,其他函數式編程語言

純函數式

編程語言:

  • 強靜態類型
    • Concurrent Clean
    • Haskell
    • Miranda
  • 弱類型
    • Lazy K

非純函數式編程語言:

  • 強靜態類型
    • F#
    • ML
    • OCaml
    • Scala
  • 強動態類型
    • Clojure
    • Erlang
    • Lisp
    • LOGO
    • Mathematica
    • R
    • Scheme
  • 弱類型
    • Unlambda

其他函數式編程語言:

    • APL語言
    • XSLT

函數式編程的歷史:

函數式編程中最古老的例子莫過於1958年被創造出來的Lisp了。函數式編程更加現代一些的例子包括Clean、Clojure、Erlang、Haskell、Miranda、Scheme等。

雖然λ演算並非設計來於計算機上運行,但它可以被視作第一個函數式編程語言。1980年代末期,集函數式編程研究成果於大成的Haskell發布。

基於JavaScript的某些開發理念強調函數式的實現方法。

為什麽函數式編程越來越受關註:

割讓控制權

函數式編程語言使我們能夠用高層次的抽象取代其他核心構建塊,並更註重結果而不是步驟。

結果比步驟更重要

函數式編程的特點之一是存在強大的抽象,它隱藏了許多日常操作的細節(比如叠代)

函數式語言在更細化的級別提供重用,在列表和映射等基本數據結構之上通過高階函數提供定制,從而實現重用。

少量數據結構,大量操作

在面向對象的命令式編程語言中,重用的單元是類以及與這些類進行通信的消息,這些信息是在類圖中捕獲的。該領域的開創性著作是 Design Patterns: Elements of Reusable Object-Oriented Software,至少為每個模式提供一個類圖。在 OOP 的世界中,鼓勵開發人員創建獨特的數據結構,以方法的形式附加特定的操作。函數式編程語言嘗試采用不同的方式來實現重用。它們更喜歡一些關鍵的數據結構(如列表、集和映射),並且在這些數據結構上采用高度優化的操作。傳遞數據結構和高階函數,以便 “插入” 這種機制,針對某一特定用途對其進行定制。

與語言的趨勢相一致

函數式編程的目標之一是最大程度地減少可變狀態。

函數式編程語言的入門級了解