• 函數式編程

    編輯
    本詞條由“匿名用戶” 建檔。

    函數式編程

    編輯

    計算機科學中,函數式編程是一種通過應用和組合函數來構建程序的編程范式。它是一種聲明式編程范式,其中函數定義是將值映射到其他值的表達式,而不是更新程序運行狀態的一系列命令式語句。

    在函數式編程中,函數被視為一等公民,這意味著它們可以綁定到名稱(包括本地標識符),作為參數傳遞,并從其他函數返回,就像任何其他數據類型一樣。這允許以聲明性和可組合的風格編寫程序,其中小功能以模塊化方式組合。

    函數式編程有時被視為純函數式編程的同義詞,是將所有函數視為確定性數學函數或純函數的函數式編程的一個子集。當使用一些給定參數調用純函數時,它將始終返回相同的結果,并且不受任何可變狀態或其他副作用的影響。這與不純過程形成對比,在命令式編程中很常見。,這可能會產生副作用(例如修改程序的狀態或從用戶那里獲取輸入)。純函數式編程的支持者聲稱,通過限制副作用,程序可以有更少的錯誤,更容易調試和測試,更適合形式驗證

    函數式編程起源于學術界,從lambda演算演變而來,這是一種僅基于函數的正式計算系統。函數式編程在歷史上一直比命令式編程不太受歡迎,但許多功能性語言都看到當今使用在工業和教育,包括CommonLisp的,計劃,的Clojure,Wolfram語言,Racket,Erlang,Elixir,OCaml,Haskell、和F#。函數式編程也是一些在特定領域取得成功的語言的關鍵,例如Web中的JavaScript,統計中的R,財務分析中的J、K和Q,和用于XML的XQuery/XSLT。特定領域的聲明性語言,如SQL和Lex/Yacc使用函數式編程的一些元素,例如不允許可變值。此外,許多其他編程語言支持函數式編程或實現了函數式編程的特性,例如C++11、Kotlin、Perl、PHP、Python、]Go、Rust、Raku、Scala、和Java(自Java8)。

    函數式編程的歷史

    編輯

    該演算,在1930年開發邱奇,是一個正式的系統的計算,從內置的功能應用。1937年AlanTuring證明了lambda演算和圖靈機是等效的計算模型,表明lambda演算是圖靈完備的。Lambda演算構成了所有函數式編程語言的基礎。1920年代和1930年代,MosesSch?nfinkel和HaskellCurry開發了一個等效的理論公式,即組合邏輯

    Church后來開發了一個較弱的系統,即簡單類型的lambda演算,它通過為所有項分配一個類型來擴展lambda演算。這構成了靜態類型函數式編程的基礎。

    xxx種函數式編程語言LISP是1950年代后期JohnMcCarthy在麻省理工學院(MIT)期間為IBM700/7000系列科學計算機開發的。LISP函數是使用Church的lambda符號定義的,并使用標簽結構進行擴展以允許遞歸函數。Lisp首先介紹了函數式編程的許多范式特征,盡管早期的Lisps是多范式語言,并且隨著新范式的發展納入了對眾多編程風格的支持。后來的方言,如Scheme和Clojure,以及Dylan和Julia等分支,試圖圍繞一個干凈的功能核心簡化和合理化Lisp,而CommonLisp旨在保留和更新它所取代的眾多舊方言的典型特征。

    1956年的信息處理語言(IPL)有時被認為是xxx種基于計算機的函數式編程語言。它是一種用于操作符號列表的匯編語言。它確實有一個generator的概念,它相當于一個接受函數作為參數的函數,并且由于它是一種匯編級語言,代碼可以是數據,因此IPL可以被視為具有更高階的函數。但是,它在很大程度上依賴于變異列表結構和類似的命令式功能。

    KennethE.Iverson在1960年代初期開發了APL,在他1962年的著作AProgrammingLanguage(ISBN9780471430148)中有所描述。APL對JohnBackus的FP產生了主要影響。1990年代初,艾弗森和許志強創立了J.在1990年代中期,曾與艾弗森合作過的亞瑟·惠特尼(ArthurWhitney)創建了K,該K與其后代Q一起用于金融行業的商業用途。

    JohnBackus在他1977年的圖靈獎演講“編程可以從馮諾依曼風格中解放出來嗎?函數式風格及其程序代數”中介紹了FP。他將功能程序定義為通過允許“程序代數”的“組合形式”以分層方式構建;在現代語言中,這意味著函數式程序遵循組合性原則。Backus的論文普及了對函數式編程的研究,盡管它強調了函數級編程,而不是現在與函數式編程相關的lambda演算風格。

    1973年語言ML被創造羅賓·米爾納在愛丁堡大學和大衛·特納開發的語言SASL在圣安德魯斯大學。同樣在1970年代的愛丁堡,Burstall和Darlington開發了函數式語言NPL。NPL基于Kleene遞歸方程,并首次在他們的程序轉換工作中引入。Burstall、MacQueen和Sannella然后結合了來自ML的多態類型檢查來產生語言Hope。ML最終發展成幾種方言,其中最常見的是OCaml和StandardML。

    在1970年代,GuyL.Steele和GeraldJaySussman開發了Scheme,如Lambda論文和1985年教科書StructureandInterpretationofComputerPrograms中所述。Scheme是xxx個使用詞法范圍并需要尾調用優化的lisp方言,這些特性鼓勵函數式編程。

    在1980年代,PerMartin-L?f開發了直覺類型理論(也稱為構造類型理論),它將函數式程序與表示為依賴類型的構造證明相關聯。這導致了交互式定理證明的新方法,并影響了后續函數式編程語言的發展。

    由DavidTurner開發的懶惰函數式語言Miranda最初出現于1985年,對Haskell產生了強烈影響。由于Miranda是專有的,Haskell于1987年開始達成共識,以形成函數式編程研究的開放標準;自1990年以來,實施版本一直在進行中。

    最近,它在諸如基于CSG幾何框架的OpenSCAD語言提供的參數化CAD之類的利基中得到了使用,盡管它對重新分配值的限制(所有值都被視為常量)導致不熟悉函數式編程的用戶感到困惑作為一個概念。

    函數式編程繼續在商業環境中使用。

    函數式編程的應用

    編輯

    電子表格

    電子表格可以被認為是一種純粹的、零階的、嚴格評估的函數式編程系統。然而,電子表格通常缺乏高階函數以及代碼重用,并且在某些實現中,也缺乏遞歸。已經為電子表格程序開發了幾個擴展,以實現更高階和可重用的功能,但到目前為止仍主要是學術性質的。

    函數式編程

    學術界

    函數式編程是編程語言理論領域的一個活躍研究領域。有幾個同行評審的出版物場館注重功能編程,包括國際會議上的函數式編程時,[功能編程,并在函數式編程研討會趨勢

    工業

    函數式編程已在各種工業應用中得到使用。例如,由瑞典公司Ericsson在1980年代后期開發的Erlang最初用于實現容錯電信系統,但此后在北電、Facebook等公司構建一系列應用程序時變得流行,électricitédeFrance和WhatsApp。Scheme,Lisp的一種方言,被用作早期AppleMacintosh計算機上多個應用程序的基礎,并已應用于訓練模擬軟件望遠鏡控制等問題。OCaml于1990年代中期推出,已在財務分析、驅動程序驗證、工業機器人編程和嵌入式軟件的靜態分析等領域看到商業用途。Haskell,雖然最初打算作為一種研究語言,在航空航天系統、硬件設計網絡編程等領域也被一系列公司應用。

    其他已在工業中使用的函數式編程語言包括Scala、F#、Wolfram語言、Lisp、StandardML、和Clojure。

    功能性“平臺”在金融領域的風險分析中很受歡迎(尤其是大型投資銀行)。風險因素被編碼為形成相互依賴的圖(類別)的函數,以衡量市場變化中的相關性,這與格羅布納基礎優化不同,但也適用于監管合規性,例如綜合資本分析和審查。鑒于在金融中使用OCAML或CAML變體,這些系統有時被認為與分類抽象機或CAM相關。事實上,函數式編程深受范疇論的影響。

    教育

    許多大學教授或已經教授函數式編程作為其本科計算機科學學位的一部分。有些人使用它作為他們對編程的介紹,而另一些人則在教完命令式編程之后教它。

    在計算機科學之外,函數式編程被用作教授問題解決、代數和幾何概念的一種方法。它也被用作在經典力學的結構和解釋中教授經典力學工具

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/124588/

    (2)
    詞條目錄
    1. 函數式編程
    2. 函數式編程的歷史
    3. 函數式編程的應用
    4. 電子表格
    5. 學術界
    6. 工業
    7. 教育

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久