亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        函數(shù)式編程語言發(fā)展及應(yīng)用

        2012-12-31 00:00:00王學(xué)瑞

        摘要:函數(shù)式編程語言從誕生至今得到了快速的發(fā)展,函數(shù)式編程語言相對于其他命令式編程語言有更強(qiáng)的數(shù)學(xué)表達(dá)性,因為函數(shù)式編程語言將計算機(jī)的計算作為相應(yīng)函數(shù)的計算,從而將函數(shù)的定義和調(diào)用作為計算程序。本文介紹了函數(shù)式編程語言的發(fā)展和應(yīng)用以及函數(shù)式編程語言和其他類程序語言的比較,最后總結(jié)了函數(shù)是編程語言的使用價值和意義。

        關(guān)鍵詞:函數(shù)式編程語言;計算機(jī)程序;程序語言

        中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9599 (2012) 23-0000-02

        1 函數(shù)式編程語言的定義及其發(fā)展和使用情況

        由于計算機(jī)技術(shù)的不斷發(fā)展,函數(shù)式編程語言逐漸得到人們的重視。我們現(xiàn)在使用的大多數(shù)編程語言大都是以馮諾伊曼式的計算機(jī)為設(shè)計背景,所以我們稱這些計算機(jī)編程語言為諾伊曼式語言。1977年,John Backus提出了函數(shù)式編程語言,這種語言以非馮諾伊曼式的計算機(jī)為設(shè)計而背景,所以我們又稱這樣的函數(shù)式編程語言稱為非馮諾伊曼式語言。函數(shù)式編程,又稱泛函編程,是一種編程范型,它將電腦運算視為數(shù)學(xué)上的函數(shù)計算,并且避免狀態(tài)以及可變數(shù)據(jù)。函數(shù)編程語言最重要的基礎(chǔ)是λ演算。而且λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入(引數(shù))和輸出(傳出值)。和命令式編程相比,函數(shù)式編程強(qiáng)調(diào)函數(shù)的計算比指令的運行重要。和程序編程相比,函數(shù)式編程裏,函數(shù)的計算可隨時調(diào)用。

        Haskell是一種于1980年代末期所發(fā)布的函數(shù)式編程語言,Haskell函數(shù)式編程語言是在Miranda的基礎(chǔ)上得到了,它對Miranda進(jìn)行了標(biāo)準(zhǔn)化,所以這種語言集合了其他相關(guān)函數(shù)式編程開發(fā)的原理,它無需花費太多的贅述就能完成一些數(shù)據(jù)結(jié)構(gòu),比如鏈表和矩陣,是當(dāng)前最廣泛地被用于研究的一種函數(shù)式編程語言。它的語言衍生物有很多,有擴(kuò)充Haskell、并行Haskell和面向?qū)ο蟮淖凅w如Mondrian等。與此同時,它還被用作為在新語言設(shè)計時的標(biāo)準(zhǔn)模板。

        另一種函數(shù)式編程語言是Clean,它和Haskell有很多一樣的地方。目前這門語言是用C寫成的,由尼茲梅根大學(xué)負(fù)責(zé)維護(hù)。

        還有一種函數(shù)式編程語言是Meta Language,Meta Language是由愛丁堡大學(xué)與上個世紀(jì)七十年代末所開發(fā)的,它被歸類為非純函數(shù)式編程語言,它之所以有這樣的歸類是因為它允許了副作用和指令式編程的使用。

        二、目前,函數(shù)式編程語言還有F#,這是一款針對.NET平臺的開放研究的語言。

        2 函數(shù)式編程語言與常規(guī)編程語言的區(qū)別及其特點。

        1.函數(shù)式編程經(jīng)常使用遞歸。純函數(shù)式的程序沒有變量和副作用(Side effect)。因為純函數(shù)式程序設(shè)計語言沒有變量,函數(shù)沒有副作用,編寫出的程序可以利用記憶化、公共子表達(dá)式消除和并發(fā)計算在運行時和編譯時得到大量優(yōu)化。我們常見的編程語言有數(shù)十種之多。編程語言種類有很多,如果按照程序設(shè)計的方法,可分為以下幾種程序語言:

        2.(1)結(jié)構(gòu)化編程語言,比如C語言等。

        3.(2)函數(shù)式編程語言,比如OCaml、Lisp等。

        4.(3)邏輯式編程語言,比如Prolog等。

        (4)面向?qū)ο蟪绦蛘Z言,比如Java等。

        通過比較可以發(fā)現(xiàn),函數(shù)式編程語言有以下幾個特點:

        2.1 并行。在函數(shù)式編程中,程序員無需對程序修改,程序就可以并發(fā)運行。程序運行期間,不會產(chǎn)生死鎖現(xiàn)象。原因是通過函數(shù)式編程所得到的程序,在程序中不會出現(xiàn)某一數(shù)據(jù)被同時修改兩次及以上的情況,同樣的,兩個不同的線程就更不用說了。由于函數(shù)式編程有這樣的優(yōu)點,導(dǎo)致了程序員完全不用花費精力去考慮增加某個線程帶來的并發(fā)問題。

        在函數(shù)編程語言中,編譯器會分析代碼,辨認(rèn)出潛在耗時的創(chuàng)建字符串s1和s2的函數(shù),然后將他們并行的運行。這樣的做法,是程序員在使用普通的命令式程序語言時不可能做到的。而使用函數(shù)式程序語言可以自動的找出那些可以并發(fā)執(zhí)行的函數(shù)。

        2.2 單元測試。在函數(shù)式編程中,由于程序中的每一個符號都是final后的,所以這樣的函數(shù)不會產(chǎn)生副作用。這就導(dǎo)致了在某個地方產(chǎn)生修改,同時不會有函數(shù)修改過在自身范圍之外的變量或者狀態(tài)被另外的函數(shù)所使用。這就導(dǎo)致了函數(shù)的返回結(jié)果只是返回值。只有函數(shù)自身的參數(shù)才會影響函數(shù)的返回值,所以在編程的時候,對程序中的每個函數(shù)而言,程序員只需在控制它們的參數(shù),而不用在意函數(shù)自己點順序以及函數(shù)外部變量和狀態(tài)就能正確的編程。與函數(shù)式編程相比,命令式編程就沒有這樣的優(yōu)勢了,在檢查函數(shù)的返回值的同時程序員還必須檢查函數(shù)是否影響到了函數(shù)的外部狀態(tài)和變量。

        2.3 沒有額外作用。副作用是指的是函數(shù)內(nèi)部與外部互動。比如,函數(shù)在自身內(nèi)部可以對函數(shù)以外的其他變量進(jìn)行修改,這樣就會產(chǎn)生其他結(jié)果。

        在函數(shù)式編程中,想要達(dá)到這樣的目的就必須讓函數(shù)自身要保持獨立。在函數(shù)式程序語言中,所有的功能的結(jié)果就是一個返回值,不存在其他的行為,包括對外部變量的修改。

        2.4 不修改狀態(tài)。在函數(shù)式編程中,程序語言在使用中是會不修改變量的,它的一個特性可以使得函數(shù)式編程語言區(qū)別于其他的程序語言。在其他類型的語言中,變量是用來保存狀態(tài)的。由于函數(shù)式編程不修改變量,導(dǎo)致了這些狀態(tài)不能存在于變量中。那么,函數(shù)式編程語言保存狀態(tài)的方法是使用參數(shù)來保存,遞歸方法是最好的例子。由于采用了遞歸方法,函數(shù)式編程語言在運行速度上相對于其他語言較慢,所以,速度不夠快是函數(shù)式編程語言長期不能廣泛使用的主要原因。

        2.5 引用透明。在函數(shù)式編程中,引用透明指的是運行函數(shù)的時候,函數(shù)的沒一個步驟都不會不牽連到函數(shù)的外部變量或狀態(tài),而是只依賴于函數(shù)輸入的參數(shù),相同的參數(shù)輸入總會得到相同的函數(shù)返回值。而在其他類型的語言中,函數(shù)的返回值不僅僅與函數(shù)的參數(shù)傳入有關(guān),也與當(dāng)前的系統(tǒng)狀態(tài)有關(guān)。在不同的系統(tǒng)狀態(tài)的情況下,函數(shù)的返回值不同。

        2.6 代碼部署熱。在以前,假如想在Windows上安裝更新,安裝之后重啟計算機(jī)是必須進(jìn)行的步驟,可能還不只一次的重啟。即使是僅僅安裝了一個小的軟件也不能免于重啟的步驟。一些特殊的系統(tǒng),比如電信系統(tǒng),這樣的系統(tǒng)必須保證任何時間都在運行。因為如果在系統(tǒng)更新時緊急撥號失效,就可能造成很大的損失。最理想的情況是在完全不停止系統(tǒng)任何組件的情況下,達(dá)到更新相關(guān)的代碼的目的。這樣的想法在命令式編程中是不可能的。

        對函數(shù)式的程序,所有的狀態(tài)即傳遞給函數(shù)的參數(shù)都被保存在了堆棧上,這使的熱部署輕而易舉。實際上,所有我們需要做的就是對工作中的代碼和新版本的代碼做一個差異比較,然后部署新代碼。其他的工作將由一個語言工具自動完成。

        3 函數(shù)式編程語言的使用意義總結(jié)

        函數(shù)式編程語言相對于其他編程語言具有以下意義:

        首先,函數(shù)式編程語言的代碼十分簡單,加快了開發(fā)的速度。并且由于在使用函數(shù)式編程語言時,程序員會大量使用到函數(shù),從而減少了重復(fù)的代碼,因而程序比較短。其次,函數(shù)式編程語言更加接近我們使用的自然語言,程序員在學(xué)習(xí)和使用它的時候更加快捷容易。函數(shù)式編程語言的自由度很高,十分接近自然語言寫出的代碼。另外,函數(shù)式編程語言的代碼管理更加方便。函數(shù)式編程不會對外部產(chǎn)生依賴,也不會修改外界的狀態(tài)。程序員只需把指定的參數(shù)給函數(shù),相同的參數(shù)其返回的結(jié)果必定是相同的。另外,函數(shù)式編程語言還支持并發(fā)編程,這就使得程序員在進(jìn)行函數(shù)式編程時完全不用考慮死鎖的問題,因為它根本就不修改變量,所以就不存在鎖線程的問題。最后,函數(shù)式編程語言的代碼支持代碼熱升級。

        參考文獻(xiàn):

        [1]俞黎敏.函數(shù)式編程思想[J].程序員,2010,9.

        [2]陳付龍.函數(shù)式程序設(shè)計語言的教學(xué)研究與探討[J].福建電腦,2010,6.

        日本一区二区视频免费观看| 米奇影音777第四色| 国产av影片麻豆精品传媒 | 综合图区亚洲另类偷窥| 亚洲桃色蜜桃av影院| 日本一本免费一二区| 国产精品白丝喷水在线观看| 日韩亚洲中文图片小说| 中文字幕亚洲永久精品| 特黄 做受又硬又粗又大视频| 亚洲精品乱码久久久久久蜜桃图片| 中文人妻无码一区二区三区信息| 蜜桃av噜噜噜一区二区三区| 婷婷久久国产综合精品| 边啃奶头边躁狠狠躁| 精品囯产成人国产在线观看| 青青草视频在线观看视频免费| 亚洲中国精品精华液| 永久免费av无码网站yy| 国产精品一区二区三级| 伊人婷婷综合缴情亚洲五月| 亚洲av中文无码乱人伦下载| 亚洲国产高清在线一区二区三区 | 国产成人久久精品77777综合| 成人午夜免费福利| 日本综合视频一区二区| 国产一区二区三区四区在线视频 | 无码专区亚洲avl| 亚洲在线精品一区二区三区| 日本最新免费二区| 二区三区视频| 亚洲一区二区丝袜美腿| 亚洲人成网77777色在线播放| 国产影片中文字幕| 亚洲欧美日韩国产综合专区| 亚洲综合视频一区二区| 成年女人a毛片免费视频| av中文字幕综合在线| 国产精品久久久看三级| 亚洲av乱码一区二区三区林ゆな | 亚洲AV肉丝网站一区二区无码|