版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、3.4 標(biāo)準(zhǔn)表函數(shù),在SML中,表操作函數(shù)適用于元素類型任意的表。 SML中用字母前加一個(gè)單引號(hào)來表示一種不確定的類型,例如a, b, c, 這樣一個(gè)任意類型的表的類型就可以表示為a list 。 SML提供了以下三種運(yùn)算:,-1-,3.4 標(biāo)準(zhǔn)表函數(shù),-2-,以上三種運(yùn)算符是“多態(tài)的”,因?yàn)樗鼈兛梢宰饔迷谌我忸愋偷谋砩稀?3.5 字符、字符串和表,SML沒有提供專門的字符類型,字符可以表示為長(zhǎng)度為1的字符串。 標(biāo)準(zhǔn)函數(shù)ord:將單字符串(長(zhǎng)度為1的字符串)轉(zhuǎn)換為該字符對(duì)應(yīng)的ASCII碼 標(biāo)準(zhǔn)函數(shù)chr:將ASCII碼轉(zhuǎn)換為相應(yīng)的單字符串 標(biāo)準(zhǔn)函數(shù)explode:將字符串拆成單字符串組成的表
2、標(biāo)準(zhǔn)函數(shù)implode:將字符串表合并為一個(gè)字符串,-3-,3.5 字符、字符串和表,-4-,3.6 比較運(yùn)算符,SML提供了多種重載的中綴比較運(yùn)算符。 “=”、“”用來測(cè)試相等和不相等,布爾型、整型、字符串類型、表和元組型對(duì)象適用; 小于()小于等于(=)只適用于數(shù)字和字符串(以字母表順序決定) 如: - “honey” true : bool 注:返回值是布爾型,參數(shù)類型必須一致。,3.7 元組、記錄運(yùn)算符,SML提供用于訪問元組和記錄中元素的函數(shù): 用“#”訪問元組和記錄中的元素 對(duì)于元組,用#加上要訪問數(shù)據(jù)的序號(hào),從1開始; 對(duì)于記錄,用#加上要訪問數(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 條件表達(dá)式 4.5 遞歸和函數(shù)定義 4.6 訪問元組約束變量中的元素 4.7 模式匹配 4.8 局部定義,-7-,4.1 函數(shù),在SML 語言中,函數(shù)的形式如下: fn = 約束變量(bound
4、 variable)自變量,必須是一個(gè) 字母-數(shù)字 標(biāo)識(shí)符(以字母打頭,由字母、數(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òng)推導(dǎo)函數(shù)定義域和值域類型的過程,-9-,4.2約束變量的類型,設(shè)想一個(gè)平方函數(shù):fn x = x*x; SML會(huì)拒絕該函數(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中,類型表達(dá)式容易變得很長(zhǎng),以至于無法控制。因此,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 注意,作為對(duì)定義的承認(rèn),SML系統(tǒng)會(huì)顯示定義的名稱和表達(dá)式的值及類型。定義的名稱可用于以后的表達(dá)式,例如:,-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 條件表達(dá)式,SML中條件表達(dá)式的寫法如下: if then else 注意,在ML中不允許使用沒有else的if-then形式 其中,表達(dá)式1的值為布爾值,表達(dá)式2、3作為選項(xiàng)表達(dá)式必須具有相同的類型。例如,要取兩數(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í),需在函數(shù)名前面加上rec。例如,求整數(shù)表長(zhǎng): - val rec length = fn (l:int list) = if
8、l = then 0 else 1+ (length(tl l); val length = fn:(int list) - int SML支持一種比較簡(jiǎn)單的函數(shù)定義的書寫格式,用fun代替val,fn被省略了,約束變量移到了=左邊而=也被省略了。如果是遞歸定義,則“rec”也被省略了。,-15-,4.5 遞歸和函數(shù)定義,即: fun = 與 val rec = fn = 等價(jià) 上例可以寫成: - 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í),函數(shù)可以訪問元組的元素。例如,從學(xué)生信息元組中選擇姓名、住址和學(xué)號(hào):,-17-,4.6 訪問元組約束變量中的元素,為了避免書寫那些在函數(shù)體內(nèi)用不著的約束變量,SML提供了匿名變量(_)。它的作用相當(dāng)于一個(gè)任意類型的無名變量。我們可以利用它來重寫上面的例子:,-18-,4.6 訪問元組約束變量中的元素,為了對(duì)嵌套的元組元素進(jìn)行訪問,我們使用了嵌套的約束變量元組。例如,從學(xué)生信息中分別選則姓和名:,-19-,4.7 模式匹配,SML的函數(shù)定義可以使用約束變量模式。 所謂模式就是對(duì)表達(dá)式的結(jié)構(gòu)的描述。 模式可以利用變量、常量及構(gòu)造子(cons
10、tructor)。 構(gòu)造子指的是任何類型的常量或數(shù)據(jù)結(jié)構(gòu)名。 我們可以利用模式匹配來重寫整數(shù)表的表頭、表尾函數(shù),-20-,4.7 模式匹配,其中的:是作為表的構(gòu)造子用于約束變量模式的。該函數(shù)在遇到空表作為參數(shù)時(shí)會(huì)崩潰,因?yàn)榭毡聿荒芷ヅ涠x中的模式。 在SML中,通常采用case風(fēng)格的模式匹配函數(shù)定義,而不是在函數(shù)體內(nèi)使用條件語句。前一種函數(shù)定義方法,稱之為子句定義,其形式如下: 在此,每一個(gè) = 定義了一種情況。,-21-,4.7 模式匹配,注意每種情況的定義順序是重要的。當(dāng)一個(gè)子句定義函數(shù)作用到一個(gè)參量上的時(shí)候,就按定義的次序依次將參數(shù)與模式進(jìn)行匹配,直到有一個(gè)模式匹配成功為止??紤]下面的例子,我們構(gòu)造一個(gè)函數(shù),他返回朝鮮半島國(guó)家的首都。該函數(shù)采用了常量模式匹配定義: 當(dāng)該函數(shù)作用到一個(gè)參數(shù)上去的時(shí)候,這個(gè)參數(shù)就會(huì)與函數(shù)定義中的所有常量模式進(jìn)行匹配,直到與其中一個(gè)匹配成功,或者是最終匹配了匿名變量。,-22-,4.8 局部定義,SML用letin來表示局部定義: 該語句將返回的值。而在的求值過程中,以的值取代出現(xiàn)在中的。這就是說,是一個(gè)局部定義,他的有效范圍就在letin語句之中。,-23-,4.8 局部定義,對(duì)于函數(shù)局部定義: 其中定義的函數(shù)在中可以使用。例如,下面
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 巧妙運(yùn)用閱讀策略提高學(xué)生的英語閱讀能力
- 嬰兒護(hù)理培訓(xùn)課件
- 養(yǎng)老院老人生活照料技能培訓(xùn)制度
- 養(yǎng)老院老人康復(fù)理療服務(wù)質(zhì)量管理制度
- 養(yǎng)老院老人健康監(jiān)測(cè)人員管理制度
- 養(yǎng)老院安全管理與應(yīng)急預(yù)案制度
- 養(yǎng)老院信息化建設(shè)及管理規(guī)范制度
- 攝影技術(shù)知識(shí)培訓(xùn)課件
- 2026年國(guó)有企業(yè)市場(chǎng)營(yíng)銷崗位面試題含答案
- 2026年健康管理師健康教育考題含答案
- 2026年廣西出版?zhèn)髅郊瘓F(tuán)有限公司招聘(98人)考試備考題庫附答案
- 設(shè)備技術(shù)員轉(zhuǎn)正述職報(bào)告
- 2026年數(shù)據(jù)管理局考試題庫及實(shí)戰(zhàn)解答
- 2025年上海師范大學(xué)馬克思主義基本原理概論期末考試筆試真題匯編
- 智啟萬物:全球AI應(yīng)用平臺(tái)市場(chǎng)全景圖與趨勢(shì)洞察報(bào)告
- 2025年高職植物保護(hù)(植物檢疫技術(shù))試題及答案
- 2026年中國(guó)科學(xué)院心理研究所國(guó)民心理健康評(píng)估發(fā)展中心招聘?jìng)淇碱}庫及答案詳解(新)
- 藥物相互作用與不良反應(yīng)預(yù)防解析講座
- 2025年無人駕駛公共交通項(xiàng)目可行性研究報(bào)告
- 亞急性硬化性全腦炎2-
- 江蘇省2024年普通高中學(xué)業(yè)水平合格性考試數(shù)學(xué)試卷+答案
評(píng)論
0/150
提交評(píng)論