日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
我從Icon編程語(yǔ)言中所學(xué)到的

在20世紀(jì)70年代末和80年代初期,Icon 編程語(yǔ)言主要由拉爾夫?格里斯沃爾德(Ralph Griswold)所設(shè)計(jì)的。在60年代,格里斯沃爾德負(fù)責(zé)過***個(gè)專門用于處理文本的編程語(yǔ)言 ――Snobol(String Orientated Symbolic Language)。Icon是基于Snobol思想而設(shè)計(jì)的下一代語(yǔ)言,然而它更加統(tǒng)一和完整。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比察隅網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式察隅網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋察隅地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

在很多方面﹐Icon是***個(gè)“腳本語(yǔ)言”。它是一種非常高級(jí)別,具備出色的能力去處理文本數(shù)據(jù)并與其環(huán)境相結(jié)合的語(yǔ)言。迄今為止,它都是如此超前,這也許是它從沒有很流行的一個(gè)原因。早在Perl和TCL(這些語(yǔ)言開啟了腳本語(yǔ)言的熱潮)崛起之前好幾年,它就已經(jīng)出現(xiàn)了。

對(duì)于一個(gè)泡在BASIC、Fortran、PL/I、Pascal和C里成長(zhǎng)起來(lái)的人,Icon就是個(gè)徹頭徹尾的異類。然而它教會(huì)了我許多至今都很有用的東西。

空集(Nullology)

當(dāng)你調(diào)用一個(gè)Icon函數(shù),它會(huì)做以下兩件事之一:它可以返回一個(gè)值,或者它會(huì)失效。失效聽上去類似于現(xiàn)代的異常處理機(jī)制,但是Icon的失效有以下幾個(gè)不同。首先,當(dāng)一個(gè)Icon函數(shù)失效時(shí),沒有指標(biāo)說明它為什么失效。再者,失效是預(yù)期的。它總在發(fā)生,而且是Icon工作方式的一個(gè)重要部分。(它有一個(gè)單獨(dú)的、原始的、針對(duì)真正異常條件的錯(cuò)誤處理機(jī)制。)

許多Icon的函數(shù)都是生成器(generator)――它們可以返回多個(gè)值。在某些情況下,Icon將持續(xù)調(diào)用該函數(shù)直到它失效。所以在Icon里,失效真正的意思是“沒有更多的值”。例如,下面是一個(gè)完整的Icon程序,把它的輸入復(fù)制到它的輸出:

 
 
 
  1. every write(read()) 

子句Every表示“這樣做直到它失效”。write()把它的參數(shù)寫到標(biāo)準(zhǔn)輸出,read()從標(biāo)準(zhǔn)輸入返回連續(xù)的行,最終在達(dá)到文件結(jié)束時(shí)失效。

在C語(yǔ)言里,失效通常被一些特殊保留的返回值,或者其他特設(shè)機(jī)制所表示(那些失效指標(biāo)都太容易被遺漏)。直接從C轉(zhuǎn)到Icon后,上面那個(gè)小程序驚醒了我,讓我見識(shí)到了簡(jiǎn)潔、傳神的美感。

***課

重要的是去區(qū)分有和沒有?;蛘呤且粋€(gè)函數(shù)的返回值,或者是一個(gè)變量的值,重要的是要能說“沒有一個(gè)”。

這一課幫我在幾年后認(rèn)識(shí)到異常,也使我領(lǐng)會(huì)到其它語(yǔ)言,例如Lisp, Smalltalk, Ruby和(在某種程度上)Java,它們的變量包含可以為空的引用,而不是直接存儲(chǔ)數(shù)據(jù)。

一致性(Uniformity)

Icon是***個(gè)讓我用表達(dá)式語(yǔ)言做嚴(yán)肅工作的語(yǔ)言。也就是說,Icon沒有語(yǔ)句,只有包含結(jié)果值的表達(dá)式。我***次看到這個(gè):

 
 
 
  1. sign := if count > 0 then 1 else -1 

起初我真的很困惑,但很快我就明白是怎么回事。在Icon里,我所用來(lái)思考的“if語(yǔ)句”事實(shí)上只是一個(gè)“if表達(dá)式”,就像在別處一樣,它會(huì)有一個(gè)結(jié)果值。為什么不應(yīng)該呢?我曾經(jīng)思考過這個(gè)問題,語(yǔ)句和我所熟悉的語(yǔ)言里的表達(dá)式之間的區(qū)別好像是人為的和任意的。進(jìn)一步使用Icon的經(jīng)歷證明了這一點(diǎn)。這當(dāng)然可能造成濫用構(gòu)造,產(chǎn)生費(fèi)解的代碼。但是有時(shí)它們正是你做正確的事情所需要的。

第二課

通常情況下,你認(rèn)為根本不相同的事情事實(shí)上完全相同。不要想當(dāng)然認(rèn)為你在某處學(xué)到的就是普遍真理。

這么多年來(lái),這一課幫助我用許多新東西迅速武裝我的頭腦,包括語(yǔ)言,工具,編程范式和平臺(tái)。

事實(shí)(Truth)

我已經(jīng)提到了生成器和失效的語(yǔ)義。然而一旦你有可以返回多個(gè)值甚至失效的表達(dá)式,就出現(xiàn)一個(gè)問題-――類似 E1 | E2 這樣的表達(dá)式是什么意思?在多個(gè)值有意義的上下文,你可能需要一個(gè)定義;但是在傳統(tǒng)環(huán)境下,你可能需要一個(gè)不同的。所以看起來(lái)熟悉的結(jié)構(gòu)就像人們所習(xí)慣的。我不會(huì)討論細(xì)節(jié)(畢竟這不是一節(jié)Icon課),但是Icon設(shè)計(jì)師們能夠找到一個(gè)能工作在傳統(tǒng)結(jié)構(gòu)和新結(jié)構(gòu)兩種情況下的表達(dá)式,Icon思路共存,沒有特殊情況。所以,你可以做所有這些事情:

 
 
 
  1. if (i = 1 | i = 0) then ...  
  2. if i = (1|0) then ...  
  3. every write(read("header") | read("body") | read("footer")) 

并且它們實(shí)現(xiàn)你所期待的。在上例中,“|”像一個(gè)連接操作符,結(jié)果是連接那三個(gè)文件。但是操作符的實(shí)際語(yǔ)義是不變的――所有這三個(gè)例子使用單一的“|”定義,結(jié)合生成器,表達(dá)式失效和目標(biāo)導(dǎo)向評(píng)估。

第三課

我們所受的關(guān)于編程的教育正如我們所學(xué)的科學(xué)――很方便想到世界是如何真正運(yùn)轉(zhuǎn),但事實(shí)是我們就是不知道??茖W(xué)給予我們的是似乎能解釋世界的理論,因?yàn)樗鼈兎纤形覀兯芟氲降膶?shí)驗(yàn)。但是隨著我們對(duì)世界的了解不斷擴(kuò)大,遲早我們會(huì)認(rèn)識(shí)到之前的理論只是一個(gè)近似。一旦事情變得足夠快,足夠大,牛頓是不夠的,我們需要愛因斯坦。(然后它們變得足夠小,我們就需要普朗克和波爾)。單值函數(shù),布爾邏輯是足夠的,但當(dāng)把生成器投向混合后,你就需要更多地東西。

這節(jié)課已經(jīng)幫了我很多次去處理復(fù)雜、混亂、有時(shí)前矛后盾的商業(yè)規(guī)則和需求。受Icon例子的啟發(fā),我經(jīng)常成功找到更深、更簡(jiǎn)單、更普遍的規(guī)則,能作為純粹的變化支持所有表面的合并。

表達(dá)(Representation)

當(dāng)遇到Icon時(shí),我還是一個(gè)Unix用戶,我已經(jīng)相當(dāng)精通用作文本模式的正則表達(dá)式。Icon有一種極其復(fù)雜的文本模式機(jī)制,不是基于正則表達(dá)式,但是實(shí)際上更強(qiáng)大。(經(jīng)過Perl 6幾層經(jīng)典正則表達(dá)式添加,Perl的正則表達(dá)式最終實(shí)現(xiàn)了威力相當(dāng)于Icon模式的功能。但那是另一個(gè)故事了。)

語(yǔ)言和協(xié)議往往用看起來(lái)像簡(jiǎn)單的算數(shù)表達(dá)式的語(yǔ)法來(lái)描述:

 
 
 
  1. X := T | T "+" X  
  2. T := E | E "*" T  
  3. E := "x" | "y" | "z" | "(" X ")" 

(僅支持變量x, y和z的加法和乘法。)

盡管很強(qiáng)大,但不可能實(shí)現(xiàn)一個(gè)像使用經(jīng)典的正則表達(dá)式那樣的語(yǔ)法解析器。(如果你以某種方式成功,也將會(huì)非常困難去維護(hù)和擴(kuò)展該解析器。)

但是使用Icon的可編程模式機(jī)制,你可以實(shí)現(xiàn)這樣的解析器:

 
 
 
  1. procedure X()  
  2. suspend [T()] | [T(), ="+", X()]  
  3. end  
  4.     
  5. procedure T()  
  6. suspend [E()] | [E(), ="*", T()]  
  7. end  
  8.     
  9. procedure E()  
  10. suspend [="x" | ="y" | ="z"] | [="(", X(), =")"]  
  11. end 

哇!這看起來(lái)就像語(yǔ)法!事實(shí)上會(huì)真的很容易去用語(yǔ)法編寫程序以生成解析器!

你可以這樣調(diào)用它:

 
 
 
  1. parseTree = line ? {X()} 

Icon里的yacc是一個(gè)為期一天的黑客。

第四課

語(yǔ)法很重要。如果語(yǔ)法適合問題域(problem domain),程序則很容易理解。這就是為什么如果一種語(yǔ)言要很好的處理繁雜的數(shù)據(jù)時(shí),即使它是一個(gè)危險(xiǎn)的語(yǔ)言功能、容易被濫用,但操作符重載是必不可少的。強(qiáng)大的正則表達(dá)式看上去就像“正則表達(dá)式”。

這一課讓我知道什么時(shí)候去寫一點(diǎn)特定領(lǐng)域語(yǔ)言,而不是試圖擠入我現(xiàn)有語(yǔ)言的領(lǐng)域。(通常這是一個(gè)很容易的事情。)它把我推向動(dòng)態(tài)的、可塑的語(yǔ)言,如Ruby(我敢說還有Lisp)更主流的東西。

(語(yǔ)法很重要這一課也大大加強(qiáng)――但以消極的方式――在每次我使用XSLT時(shí)。幸運(yùn)的是,很快我就能使用XQuery去做所有現(xiàn)在得用XSLT去做的工作。)

(全文完)

英文原文:Glenn Vanderburg,感謝@dryrun 的翻譯

譯文鏈接:http://blog.jobbole.com/42136/


本文名稱:我從Icon編程語(yǔ)言中所學(xué)到的
分享地址:http://m.5511xx.com/article/cccdshe.html