函式式語言

2022-08-21 19:18:07 字數 2494 閱讀 5614

1.函式式語言:

2023年,   john backus提出了函式式程式語言,這種語言以非馮諾伊曼式的計算機為設計而背景,所以我們又稱這樣的函式式程式語言稱為非馮諾伊曼式語言。函式式程式設計,又稱泛函程式設計,是一種程式設計范型,它將電腦運算視為數學上的函式計算,並且避免狀態以及可變資料。函式程式語言最重要的基礎是λ演算。而且λ演算的函式可以接受函式當作輸入(引數)和輸出(傳出值)。和命令式程式設計相比,函式式程式設計強調函式的計算比指令的執行重要。和程式程式設計相比,函式式程式設計裹,函式的計算可隨時呼叫。

2.包含:

1':haskell是一種於2023年代末期所發布的函式式程式語言,haskell函式式程式語言是在miranda的基礎上得到了,它對miranda進行了標準化,所以這種語言集合了其他相關函式式程式設計開發的原理,它無需花費太多的贅述就能完成一些資料結構,比如鍊錶和矩陣,是當前最廣泛地被用於研究的一種函式式程式語言。它的語言衍生物有很多,有擴充haskell、並行haskell和物件導向的變體如mondrian等。與此同時,它還被用作為在新語言設計時的標準模板。

2':clean,它和haskell有很多一樣的地方。目前這門語言是用c寫成的,由尼茲梅根大學負責維護。

3':meta language, metalanguage是由愛丁堡大學與上個世紀七十年代末所開發的,它被歸類為非純函式式程式語言,它之所以有這樣的歸類是因為它允許了***和命令式程式設計的使用。 目前,函式式程式語言還有f#,這是一款針對.net平台的開放研究的語言。

3.特點:

1'、並行。在函式式程式設計中,程式設計師無需對程式修改,程式就可以併發執行。程式執行期間,不會產生死鎖現象。原因是通過函式式程式設計所得到的程式,在程式中不會出現某一資料被同時修改兩次及以上的情況,同樣的,兩個不同的執行緒就更不用說了。由於函式式程式設計有這樣的優點,導致了程式設計師完全不用花費精力去考慮增加某個執行緒帶來的併發問題。

在函式程式語言中,編譯器會分析**,辨認出潛在耗時的建立字串s1和s2的函式,然後將他們並行的執行。這樣的做法,是程式設計師在使用普通的命令式程式語言時不可能做到的。而使用函式式程式語言可以自動的找出那些可以併發執行的函式。

2'、單元測試。在函式式程式設計中,由於程式中的每乙個符號都是final後的,所以這樣的函式不會產生***。這就導致了在某個地方產生修改,同時不會有函式修改過在自身範圍之外的變數或者狀態被另外的函式所使用。這就導致了函式的返回結果只是返回值。只有函式自身的引數才會影響函式的返回值,所以在程式設計的時候,對程式中的每個函式而言,程式設計師只需在控制它們的引數,而不用在意函式自己點順序以及函式外部變數和狀態就能正確的程式設計。與函式式程式設計相比,命令式程式設計就沒有這樣的優勢了,在檢查函式的返回值的同時程式設計師還必須檢查函式是否影響到了函式的外部狀態和變數。

3'、沒有額外作用。***是指的是函式內部與外部互動。比如,函式在自身內部可以對函式以外的其他變數進行修改,這樣就會產生其他結果。在函式式程式設計中,想要達到這樣的目的就必須讓函式自身要保持獨立。在函式式程式語言中,所有的功能的結果就是乙個返回值,不存在其他的行為,包括對外部變數的修改。

4'、不修改狀態。在函式式程式設計中,程式語言在使用中是會不修改變數的,它的乙個特性可以使得函式式程式語言區別於其他的程式語言。在其他型別的語言中,變數是用來儲存狀態的。由於函式式程式設計不修改變數,導致了這些狀態不能存在於變數中。那麼,函式式程式語言儲存狀態的方法是使用引數來儲存,遞迴方法是最好的例子。由於採用了遞迴方法,函式式程式語言在執行速度上相對於其他語言較慢,所以,速度不夠快是函式式程式語言長期不能廣泛使用的主要原因。

5'、引用透明。在函式式程式設計中,引用透明指的是執行函式的時候,函式的沒乙個步驟都不會不牽連到函式的外部變數或狀態,而是只依賴於函式輸入的引數,相同的引數輸入總會得到相同的函式返回值。而在其他型別的語言中,函式的返回值不僅僅與函式的引數傳入有關,也與當前的系統狀態有關。在不同的系統狀態的情況下,函式的返回值不同。

6'、**部署熱。在以前,假如想在windows上安裝更新,安裝之後重啟計算機是必須進行的步驟,可能還不只一次的重啟。即使是僅僅安裝了乙個小的軟體也不能免於重啟的步驟。一些特殊的系統,比如電信系統,這樣的系統必須保證任何時間都在執行。因為如果在系統更新時緊急撥號失效,就可能造成很大的損失。最理想的情況是在完全不停止系統任何元件的情況下,達到更新相關的**的目的。這樣的想法在命令式程式設計中是不可能的。對函式式的程式,所有的狀態即傳遞給函式的引數都被儲存在了堆疊上,這使的熱部署輕而易舉。實際上,所有我們需要做的就是對工作中的**和新版本的**做乙個差異比較,然後部署新**。其他的工作將由乙個語言工具自動完成。

4.意義:

首先,函式式程式語言的**十分簡單,加快了開發的速度。並且由於在使用函式式程式語言時,程式設計師會大量使用到函式,從而減少了重複的**,因而程式比較短。

其次,函式式程式語言更加接近我們使用的自然語言,程式設計師在學習和使用它的時候更加快捷容易。函式式程式語言的自由度很高,十分接近自然語言寫出的**。

另外,函式式程式語言的**管理更加方便。函式式程式設計不會對外部產生依賴,也不會修改外界的狀態。程式設計師只需把指定的引數給函式,相同的引數其返回的結果必定是相同的。

另外,函式式程式語言還支援併發程式設計,這就使得程式設計師在進行函式式程式設計時完全不用考慮死鎖的問題,因為它根本就不修改變數,所以就不存在鎖線程的問題。最後,函式式程式語言的**支援**熱公升級。

函式式程式語言

函式式程式設計是種程式設計方式,它將電腦運算視為函式的計算。函式程式語言最重要的基礎是 演算 lambda calculus 而且 演算的函式可以接受函式當作輸入 引數 和輸出 返回值 1 和命令式程式設計相比,函式式程式設計強調函式的計算比指令的執行重要。和過程化程式設計相比,函式式程式設計裡函式...

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...

函式式程式語言F

文 高昂 作為微軟支援的第乙個函式式語言,f 在專案中被越來越多的開發者選用,8月的tiobe排行榜,f 挺進前二十。源於微軟研究院的f 語言因其優良的設計和強大的並行程式設計能力,正得到越來越多.net開發者的選用。在8月的tiobe語言流行度排行榜中,f 語言首次進入了前二十位。f 是微軟.ne...