




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、3.4 標(biāo)準表函數(shù),在SML中,表操作函數(shù)適用于元素類型任意的表。 SML中用字母前加一個單引號來表示一種不確定的類型,例如a, b, c, 這樣一個任意類型的表的類型就可以表示為a list 。 SML提供了以下三種運算:,-1-,3.4 標(biāo)準表函數(shù),-2-,以上三種運算符是“多態(tài)的”,因為它們可以作用在任意類型的表上。,3.5 字符、字符串和表,SML沒有提供專門的字符類型,字符可以表示為長度為1的字符串。 標(biāo)準函數(shù)ord:將單字符串(長度為1的字符串)轉(zhuǎn)換為該字符對應(yīng)的ASCII碼 標(biāo)準函數(shù)chr:將ASCII碼轉(zhuǎn)換為相應(yīng)的單字符串 標(biāo)準函數(shù)explode:將字符串拆成單字符串組成的表
2、標(biāo)準函數(shù)implode:將字符串表合并為一個字符串,-3-,3.5 字符、字符串和表,-4-,3.6 比較運算符,SML提供了多種重載的中綴比較運算符。 “=”、“”用來測試相等和不相等,布爾型、整型、字符串類型、表和元組型對象適用; 小于()小于等于(=)只適用于數(shù)字和字符串(以字母表順序決定) 如: - “honey” true : bool 注:返回值是布爾型,參數(shù)類型必須一致。,3.7 元組、記錄運算符,SML提供用于訪問元組和記錄中元素的函數(shù): 用“#”訪問元組和記錄中的元素 對于元組,用#加上要訪問數(shù)據(jù)的序號,從1開始; 對于記錄,用#加上要訪問數(shù)據(jù)的名字。 例子:,- # 2(1
3、,2,3,4,5,6); 2:int - # 3 (“張”, “王”, “李” ,“趙”); “李”: string,- # First_name(First_name=“Bred”,Last_name=“Pett”); “Bred” : string,4.ML函數(shù)定義,SML語言程序是通過函數(shù)作用來解決問題的。函數(shù)是SML的核心。 4.1 函數(shù)的形式 4.2 約束變量和類型 4.3 全局定義 4.4 條件表達式 4.5 遞歸和函數(shù)定義 4.6 訪問元組約束變量中的元素 4.7 模式匹配 4.8 局部定義,-7-,4.1 函數(shù),在SML 語言中,函數(shù)的形式如下: fn = 約束變量(bound
4、 variable)自變量,必須是一個 字母-數(shù)字 標(biāo)識符(以字母打頭,由字母、數(shù)字和下劃線組成的字符串) 例子: oxymoron,Home_on_the_range,Highway61,-8-,4.1 函數(shù),下面定義的函數(shù)將約束變量的值加1作為他的返回值。 - fn x = x+1; fn : int - int 再看一例: - fn (x,y) = not(x orelse y); fn : (bool*bool) - bool SML自動推導(dǎo)函數(shù)定義域和值域類型的過程,-9-,4.2約束變量的類型,設(shè)想一個平方函數(shù):fn x = x*x; SML會拒絕該函數(shù)定義why?如何解決? 約束
5、變量類型可以通過在其后直接寫明類型的方法來加以明確。其寫法如下: : 例子: - fn (x:int) = x*x; fn : int - int,-10-,4.2約束變量的類型,平方和函數(shù)定義為: - fn (x:int,y:int) = x*x + y*y; fn : (int * int) - int 顯示地說明約束變量的類型是一種好習(xí)慣,這樣可以增加函數(shù)的可讀性并使類型保持一致。在SML中,類型表達式容易變得很長,以至于無法控制。因此,SML提供了定義新的復(fù)雜類型的方法,我們將在后面介紹。,-11-,4.3 全局定義,全局定義可以這樣建立: val = 例如: - val sq = f
6、n (x:int) = x*x; val sq = fn : int - int - val sum_sq = fn (x:int , y:int) = x*x + y*y; val sum_sq = fn : (int * int ) - int 注意,作為對定義的承認,SML系統(tǒng)會顯示定義的名稱和表達式的值及類型。定義的名稱可用于以后的表達式,例如:,-12-,4.3 變量定義,- sq 3; 9:int 和以后的定義式,例如: - val sum_sq = fn (x:int , y:int) = (sq x) + (sq y); val sum_sq = fn : (int * int
7、) - int,-13-,4.4 條件表達式,SML中條件表達式的寫法如下: if then else 注意,在ML中不允許使用沒有else的if-then形式 其中,表達式1的值為布爾值,表達式2、3作為選項表達式必須具有相同的類型。例如,要取兩數(shù)字之中的大者: - val max = fn (x:int,y:int)=if xy then x else y; val max = fn:(int * int)-int,-14-,4.5 遞歸和函數(shù)定義,定義遞歸函數(shù)時,需在函數(shù)名前面加上rec。例如,求整數(shù)表長: - val rec length = fn (l:int list) = if
8、l = then 0 else 1+ (length(tl l); val length = fn:(int list) - int SML支持一種比較簡單的函數(shù)定義的書寫格式,用fun代替val,fn被省略了,約束變量移到了=左邊而=也被省略了。如果是遞歸定義,則“rec”也被省略了。,-15-,4.5 遞歸和函數(shù)定義,即: fun = 與 val rec = fn = 等價 上例可以寫成: - fun length (l:int list) = if l = then 0 else 1+ (length(tl l); val length = fn:(int list) - int,-16
9、-,4.6 訪問元組約束變量中的元素,當(dāng)約束變量是元組時,函數(shù)可以訪問元組的元素。例如,從學(xué)生信息元組中選擇姓名、住址和學(xué)號:,-17-,4.6 訪問元組約束變量中的元素,為了避免書寫那些在函數(shù)體內(nèi)用不著的約束變量,SML提供了匿名變量(_)。它的作用相當(dāng)于一個任意類型的無名變量。我們可以利用它來重寫上面的例子:,-18-,4.6 訪問元組約束變量中的元素,為了對嵌套的元組元素進行訪問,我們使用了嵌套的約束變量元組。例如,從學(xué)生信息中分別選則姓和名:,-19-,4.7 模式匹配,SML的函數(shù)定義可以使用約束變量模式。 所謂模式就是對表達式的結(jié)構(gòu)的描述。 模式可以利用變量、常量及構(gòu)造子(cons
10、tructor)。 構(gòu)造子指的是任何類型的常量或數(shù)據(jù)結(jié)構(gòu)名。 我們可以利用模式匹配來重寫整數(shù)表的表頭、表尾函數(shù),-20-,4.7 模式匹配,其中的:是作為表的構(gòu)造子用于約束變量模式的。該函數(shù)在遇到空表作為參數(shù)時會崩潰,因為空表不能匹配定義中的模式。 在SML中,通常采用case風(fēng)格的模式匹配函數(shù)定義,而不是在函數(shù)體內(nèi)使用條件語句。前一種函數(shù)定義方法,稱之為子句定義,其形式如下: 在此,每一個 = 定義了一種情況。,-21-,4.7 模式匹配,注意每種情況的定義順序是重要的。當(dāng)一個子句定義函數(shù)作用到一個參量上的時候,就按定義的次序依次將參數(shù)與模式進行匹配,直到有一個模式匹配成功為止??紤]下面的例子,我們構(gòu)造一個函數(shù),他返回朝鮮半島國家的首都。該函數(shù)采用了常量模式匹配定義: 當(dāng)該函數(shù)作用到一個參數(shù)上去的時候,這個參數(shù)就會與函數(shù)定義中的所有常量模式進行匹配,直到與其中一個匹配成功,或者是最終匹配了匿名變量。,-22-,4.8 局部定義,SML用letin來表示局部定義: 該語句將返回的值。而在的求值過程中,以的值取代出現(xiàn)在中的。這就是說,是一個局部定義,他的有效范圍就在letin語句之中。,-23-,4.8 局部定義,對于函數(shù)局部定義: 其中定義的函數(shù)在中可以使用。例如,下面
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (高清版)DB3714∕T 0008-2021 黨政機關(guān)會務(wù)服務(wù)規(guī)范
- 第18課《我的白鴿》教學(xué)設(shè)計- 2024-2025學(xué)年統(tǒng)編版語文七年級上冊
- 2025年果洛貨運上崗證模擬考試0題
- 2025年張家口駕駛員貨運從業(yè)資格證模擬考試
- 2025年韶關(guān)貨運資格證考試題答案
- 第十八章 平行四邊形數(shù)學(xué)活動 折紙作60°、30°、15°角 教學(xué)設(shè)計-2024-2025學(xué)年人教版數(shù)學(xué)八年級下冊
- 第19課《大雁歸來》教學(xué)設(shè)計 2024-2025學(xué)年統(tǒng)編版語文七年級上冊
- 【人教PEP版英語三年級上冊】期末測試卷(八)及答案
- 第7課+近代以來中國的官員選拔與管理+高二上學(xué)期歷史統(tǒng)編版(2019)選擇性必修1
- 百分數(shù)的應(yīng)用(二)(教學(xué)設(shè)計)-2024-2025學(xué)年北師大版六年級數(shù)學(xué)上冊
- 人教版七年級下冊歷史競賽(1-5)
- 描寫自然環(huán)境的精彩段落大全
- 農(nóng)業(yè)推廣學(xué)第三章農(nóng)業(yè)推廣溝通-
- 精益生產(chǎn)(5-流程化生產(chǎn))
- 餐飲店巡店表
- 2023社會工作督導(dǎo)(試題)
- 一元一次方程中考真題匯總
- 醫(yī)療機構(gòu)負責(zé)人簽字確認表
- 魯科版英語三年級英語下冊Unit3-Animals-Lesson1-These-are-pandas課件
- 綜合性學(xué)習(xí)《我的語文生活》優(yōu)課一等獎?wù)n件
- 公路水運工程施工企業(yè)主要負責(zé)人和安全生產(chǎn)管理人員大綱和題庫
評論
0/150
提交評論