成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

函數(shù)式語言基本知識

開發(fā) 開發(fā)工具
本文抄錄自一本有關(guān)函數(shù)式語言的書,書名與作者暫不可考。文中介紹了一些函數(shù)式語言的基本知識,對于不了解函數(shù)式語言的讀者有一定參考價值。

一些作者已經(jīng)強調(diào)了面向?qū)ο蟪绦蛟O(shè)計和面向數(shù)值程序設(shè)計的區(qū)別。MacLenna(1982)指出,值(例如數(shù)字17)是應(yīng)用式的和只讀的,他們總是抽象的。對象(例如實例)在一定范圍內(nèi)存在,可以被創(chuàng)造、撤銷、共享和更新。數(shù)值是引用透明的,引用它的一切事情將使用同樣的數(shù)值。Smalltalk也因此受到一些批評,在Smalltalk中任何事物都是對象。無法實現(xiàn)一種正確的區(qū)分將導(dǎo)致幾個危險。不清楚共享的數(shù)據(jù)結(jié)構(gòu)是否可能被錯誤地更新,或者存在著一個以潛在的代價昂貴的復(fù)制開銷。在給出了應(yīng)用式程序設(shè)計或面向數(shù)值的程序設(shè)計的一切優(yōu)點以后,為什么我們應(yīng)該完全需要對象呢?

首先,如果我們所采用的數(shù)據(jù)結(jié)構(gòu)對應(yīng)于真實世界的話,那么計算機系統(tǒng)里現(xiàn)實世界模擬將會被大大簡化。文件是對象,他們不能被代數(shù)描述。在普通程序設(shè)計語言中,變量是對象,他們的標(biāo)識和區(qū)分是通過他們的位置,而無需考慮它們的當(dāng)前值是什么。一個值屬于一個類型,而一個對象屬于一個類,本質(zhì)的區(qū)別是:具有相同描述的兩個對象可能并不相同,而相同的描述不可能是兩個不同的值。例如,只可能有一個值等于17的整數(shù),但蒙娜麗莎畫像可以有兩個完全一樣的副本。反之則是不正確的,這可以通過下面的情況進行說明。考慮具有不同描述的兩個對象(早晨的星星和晚上的星星),他們代表的是同一物理對象(金星)。許多語言都混淆了這個問題,例如,Pascal中的文件可能無法被賦予表達式或在表達式中使用,盡管他們的聲明是通過和其他類型同樣的方式。模擬系統(tǒng)的程序員必須處理“狀態(tài)”和狀態(tài)的變化,他們必須處理時間或(至少在人工智能里的)可能世界。應(yīng)用式程序設(shè)計不是為此目的而設(shè)計的,而是為了處理不受時間影響的數(shù)學(xué)抽象。

那么,我們所需要做的就是清楚地區(qū)分值和對象以及支持這種區(qū)分并允許使用恰當(dāng)模型(值或?qū)ο螅┑囊环N語言。

函數(shù)是程序設(shè)計是一種風(fēng)格,包括建立在形式邏輯和數(shù)學(xué)基礎(chǔ)上的語言,例如Lisp或ML。普通程序通過向變量賦值而發(fā)生作用,這些變量代表了內(nèi)存中的存儲位置。任何以前存儲的值將會被重寫并永久消失,除非事先采取了有關(guān)步驟。應(yīng)用式程序語言(比如Lisp)不采用這種破壞的賦值過程。相對于命令式編程,應(yīng)用式程序設(shè)計不允許賦值或側(cè)放作用。在實際中,這意味著要節(jié)省存儲空間,處理器必須周期性地執(zhí)行一些無用存儲單元收集以清除那些不再需要的值。另一個普遍的特征是“延遲計算”,通過這種方式,數(shù)值在函數(shù)用到之前是不被計算的。這種類型的語言建立在函數(shù)應(yīng)用和組合的基礎(chǔ)之上,他們依賴于以以“l(fā)ambda演算”而聞名的邏輯系統(tǒng),對lambda演算,我們將在下面進行說明。當(dāng)應(yīng)用式程序設(shè)計維持“參照透明性”的時候,這就是說每個表達式或變量在給定作用于范圍內(nèi)具有相同的值,所有變量都是局部的。那么在這種情況下,應(yīng)用式程序設(shè)計也就變成了函數(shù)是程序設(shè)計。這暗示我們可以用一個相等值來替換一個表達式,而不會改變整個表達式的值。這個屬性在定理證明和數(shù)據(jù)庫查詢中是很有用的,因為其中重寫和替換是很基本的。雖然這種作用與規(guī)則很容易讓人想起面向?qū)ο蟮恼Z言,但函數(shù)式程序設(shè)計不允許對象具有狀態(tài)。一種過程語言命令計算機如何執(zhí)行一個特定的任務(wù)。一種非過程語言僅僅告訴計算機該做些什么,而不是怎么做。思考下列一個數(shù)據(jù)庫查詢,該查詢詢問每個部門各有多少個雇員以及總薪水和平均薪水是多少。

  1. SELECT DNAME, JOB, SUM(SAL), COUNT(*), AVG(SAL)  
  2. FORM EMPLOYEE,DEPARTMENT  
  3. WHERE EMPLOYEE.DEPTNO=DEPARTMENT.DEPTNO  
  4. GROUP BY DNAME,JOB  

實際上,這個查詢產(chǎn)生正確輸出,但結(jié)果是不必與我們相關(guān)的。上面所用的語言是SQL語言,注意他并沒有告訴計算機如何回答這個問題。這涉及到獲取雇員表單,按部門和工作進行排序,然后計算人數(shù)以及平均薪水和總薪水。最后,在輸出結(jié)果中,部門編號必須被部門名稱所代替。這本是一個相當(dāng)復(fù)雜的過程,其中涉及到讀紀(jì)錄和保存每一階段的中間結(jié)果。但這種建立在關(guān)系代數(shù)基礎(chǔ)之上的非過程SQL是所有這些都是不必要的。在SQL
的執(zhí)行過程中,存在著引入了一種過程性元素的內(nèi)置函數(shù)。純粹形性是一個非常珍貴的幫助。

術(shù)語“說明性”比“非過程”更通用一些,因為它包括了純說明性語言。這個術(shù)語更多的是與數(shù)據(jù)表示方法有關(guān),而于特定的程序設(shè)計風(fēng)格并無太大關(guān)系。說明性語言的對立語言通常稱為命令式語言,但這種用法在更時髦但不太悅耳的“非過程”的攻擊下邊的落伍。Prolog語言也是一種說明性的非過程風(fēng)格(盡管一種修剪(!)操作的出現(xiàn)使他同樣能夠以一種不靈活的過程風(fēng)格被使用)。現(xiàn)在,讓我們轉(zhuǎn)向使得這種語言成為可能的邏輯。

Prolog和SQL都是基于一階謂詞演算(這是數(shù)學(xué)邏輯的一種形式),SQL是建立在更小自己的基礎(chǔ)之上,因此可表達性較差。這些語言金當(dāng)他們的可表達性像Prolog一樣時才通常被稱為邏輯程序設(shè)計語言。函數(shù)式程序設(shè)計語言建立在另一種邏輯系統(tǒng)的基礎(chǔ)(lambda演算)之上,通常認為它是邏輯程序設(shè)計語言,盡管它們深深根植于邏輯。

函數(shù)式程序語言有一些明顯的好處,這些好處包括:

◆它們的形式化基礎(chǔ)。

◆通過增加額外的可重用功能,他們很容易被擴展。

◆統(tǒng)一的程序設(shè)計隱喻,從而,每件事都是一個函數(shù)。

◆較高級的結(jié)構(gòu)體(函數(shù)的函數(shù))容易表達。

◆支持多態(tài)性類型(像ML一樣)或完全風(fēng)格的類型自由(像Lisp一樣)。

【相關(guān)閱讀】

  1. 函數(shù)式編程語言F#:基于CLR的另一個頭等編程語言
  2. Scala如何改變了我的編程風(fēng)格:從命令式到函數(shù)式
  3. 關(guān)于測試和恢復(fù)性的爭論:面向?qū)ο髒s.函數(shù)式編程
  4. Scala編程語言
  5. Visual Studio 2010爆F(xiàn)#二進制兼容性問題
責(zé)任編輯:yangsai 來源: 網(wǎng)絡(luò)
相關(guān)推薦

2017-02-20 23:05:14

JavaScript

2010-07-28 15:52:00

Flex

2011-11-23 10:35:53

2017-04-12 11:47:32

2017-10-20 22:40:54

電線電纜導(dǎo)體

2009-06-11 14:40:32

Java list

2010-01-28 11:18:14

Android界面布局

2010-05-06 17:41:19

Unix命令

2012-06-05 00:41:07

JavaJava內(nèi)存

2010-06-13 13:49:14

2009-12-22 14:43:38

Linux操作系統(tǒng)

2009-08-28 16:53:05

C# for語句

2010-06-17 13:22:40

UML用例建模

2010-04-21 18:38:36

Unix網(wǎng)絡(luò)

2012-05-08 09:10:56

WCF

2010-06-10 11:41:57

MPLS協(xié)議棧結(jié)構(gòu)

2011-04-29 13:50:32

激光打印機

2020-07-20 07:10:44

數(shù)據(jù)中心IT技術(shù)

2010-05-25 14:05:52

MySQL數(shù)據(jù)庫

2012-03-19 09:24:25

JavaScript
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品成人免费 | h片在线看 | 亚洲少妇综合网 | 成人二区 | 国产欧美一区二区三区国产幕精品 | 情侣酒店偷拍一区二区在线播放 | 国产日韩欧美一区二区 | 日日精品| 岛国午夜| 成人免费视频一区 | 色伊人久久 | 九九色综合 | 日本激情一区二区 | 久久躁日日躁aaaaxxxx | 国产精品一区在线观看 | 久久看精品 | 99久久婷婷国产综合精品电影 | 精品一区二区三区在线播放 | 国产精品久久久爽爽爽麻豆色哟哟 | 在线国产一区二区 | 婷婷免费视频 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 999国产视频| 亚洲天堂中文字幕 | 亚洲视频自拍 | 一级大黄色片 | 国内精品视频在线 | 日韩精品国产精品 | 久久亚洲精品国产精品紫薇 | 99久久久国产精品 | 国产91在线 | 亚洲 | 国产成人精品999在线观看 | 一区二区国产在线 | 亚洲欧美日韩在线不卡 | 日本一区二区三区免费观看 | 精品久久久久久亚洲综合网站 | 亚洲一区精品在线 | av不卡一区 | 国产精品欧美一区二区三区不卡 | 全免费a级毛片免费看视频免 | 成人天堂噜噜噜 |