SAS系統(tǒng)的判別分析和逐步判別分析和Scheme 語(yǔ)言知識(shí)概要(上)_第1頁(yè)
SAS系統(tǒng)的判別分析和逐步判別分析和Scheme 語(yǔ)言知識(shí)概要(上)_第2頁(yè)
SAS系統(tǒng)的判別分析和逐步判別分析和Scheme 語(yǔ)言知識(shí)概要(上)_第3頁(yè)
SAS系統(tǒng)的判別分析和逐步判別分析和Scheme 語(yǔ)言知識(shí)概要(上)_第4頁(yè)
SAS系統(tǒng)的判別分析和逐步判別分析和Scheme 語(yǔ)言知識(shí)概要(上)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

信用風(fēng)險(xiǎn)測(cè)定與管理實(shí)驗(yàn)報(bào)告班級(jí):姓名:學(xué)號(hào):20XX年5月29日實(shí)驗(yàn)課程信用風(fēng)險(xiǎn)測(cè)定與管理實(shí)驗(yàn)名稱SAS系統(tǒng)的判別分析和逐步判別分析實(shí)驗(yàn)步驟(采用練習(xí)題2)dataconsum;inputx1-x8type;cards;8.35 23.53 7.51 8.62 17.42 10.00 1.04 11.2119.25 23.75 6.61 9.19 17.77 10.48 1.72 10.5118.19 30.50 4.72 9.78 16.28 7.60 2.52 10.3217.73 29.20 5.42 9.43 19.29 8.49 2.52 10.0019.42 27.93 8.20 8.14 16.17 9.42 1.55 9.7619.16 27.98 9.01 9.32 15.99 9.10 1.82 11.35110.06 28.64 10.52 10.05 16.18 8.39 1.96 10.8119.09 28.12 7.40 9.62 17.26 11.12 2.49 12.6519.41 28.20 5.77 10.80 16.36 11.56 1.53 12.1718.70 28.12 7.21 10.53 19.45 13.30 1.66 11.9616.93 29.85 4.54 9.49 16.62 10.65 1.88 13.6118.67 36.05 7.31 7.75 16.67 11.68 2.38 12.8819.98 37.69 7.01 8.94 16.15 11.08 0.83 11.6716.77 38.69 6.01 8.82 14.79 11.44 1.74 13.2318.14 37.75 9.61 8.49 13.15 9.76 1.28 11.2817.67 35.71 8.04 8.31 15.13 7.76 1.41 13.2517.90 39.77 8.49 12.94 19.27 11.05 2.04 13.2917.18 40.91 7.32 8.94 17.60 12.75 1.14 14.8018.82 33.70 7.59 10.98 18.82 14.73 1.78 10.1016.25 35.02 4.72 6.28 10.03 7.15 1.93 10.39110.60 52.41 7.70 9.98 12.53 11.70 2.31 14.6927.27 52.65 3.84 9.16 13.03 15.26 1.98 14.57213.45 55.85 5.50 7.45 9.55 9.52 2.21 16.30210.85 44.68 7.32 14.51 17.13 12.08 1.26 11.5727.21 45.79 7.66 10.36 16.56 12.86 2.25 11.6927.68 50.37 11.35 13.30 19.25 14.59 2.75 14.8727.78 48.44 8.00 20.51 22.12 15.73 1.15 16.612procstepdiscdata=consummethod=stepwise;classtype;varx1-x8;run;dataconsumdis;inputx1-x8;cards;7.94 39.65 20.97 20.82 22.52 12.41 1.75 7.908.28 64.34 8.00 22.22 20.06 15.12 0.72 22.8912.47 76.39 5.52 11.24 14.52 22.00 5.46 25.50;procdiscrimdata=consumtestdata=consumdistestlist;classtype;varx1-x8;run;具體操作SAS系統(tǒng)STEPDISC過(guò)程選擇變量的方法為STEPWISE總樣本大小27分析中的變量8分類(lèi)水平2將包括的變量0

輸入變量的顯著性水平0.15

保留變量的顯著性水平0.15讀取的觀測(cè)數(shù)27使用的觀測(cè)數(shù)27分類(lèi)水平信息type變量

名稱頻數(shù)權(quán)重比例1_12020.00000.7407412_277.00000.259259

SAS系統(tǒng)STEPDISC過(guò)程逐步選擇:第1步變量輸入統(tǒng)計(jì)分析,DF=1,25變量R方F值Pr

>

F容差x10.06631.780.19461.0000x20.726466.37<.00011.0000x30.00220.060.81561.0000x40.21836.980.01401.0000x50.01530.390.53891.0000x60.27069.280.00541.0000x70.03921.020.32231.0000x80.352413.610.00111.0000將輸入變量x2。已輸入的變量x2多元統(tǒng)計(jì)量統(tǒng)計(jì)量值F值分子自由度分母自由度Pr

>

FWilksLambda0.27360466.37125<.0001Pillai軌跡0.72639666.37125<.0001典型相關(guān)系數(shù)平均平方0.726396

SAS系統(tǒng)STEPDISC過(guò)程逐步選擇:第2步變量刪除統(tǒng)計(jì)分析,DF=1,25變量R方F值Pr

>

Fx20.726466.37<.0001沒(méi)有可以刪除的變量。變量輸入統(tǒng)計(jì)分析,DF=1,24變量偏

R方F值Pr

>

F容差x10.05641.440.24250.9750x30.00320.080.78480.9996x40.17585.120.03300.9083x50.06071.550.22510.9160x60.06061.550.22530.7719x70.01750.430.51930.9769x80.00970.230.63220.4563將輸入變量x4。已輸入的變量x2x4多元統(tǒng)計(jì)量統(tǒng)計(jì)量值F值分子自由度分母自由度Pr

>

FWilksLambda0.22549741.22224<.0001Pillai軌跡0.77450341.22224<.0001典型相關(guān)系數(shù)平均平方0.774503

SAS系統(tǒng)STEPDISC過(guò)程逐步選擇:第3步變量刪除統(tǒng)計(jì)分析,DF=1,24變量偏

R方F值Pr

>

Fx20.711559.20<.0001x40.17585.120.0330沒(méi)有可以刪除的變量。變量輸入統(tǒng)計(jì)分析,DF=1,23變量偏

R方F值Pr

>

F容差x10.08752.210.15110.8813x30.00740.170.68320.8205x50.03640.870.36060.2938x60.00090.020.88890.5523x70.05541.350.25730.8712x80.04671.130.29950.4339沒(méi)有可以輸入的變量。無(wú)下一步。

SAS系統(tǒng)STEPDISC過(guò)程逐步選擇匯總

逐步選擇匯總步個(gè)數(shù)已輸入已刪除偏

R方F值Pr

>

FWilks'

LambdaPr<

Lambda平均

典型

相關(guān)

平方Pr>

ASCC11x2

0.726466.37<.00010.27360393<.00010.72639607<.000122x4

0.17585.120.03300.22549665<.00010.77450335<.0001SAS系統(tǒng)DISCRIM過(guò)程總樣本大小27總自由度26變量8分類(lèi)內(nèi)自由度25分類(lèi)2分類(lèi)間自由度1讀取的觀測(cè)數(shù)27使用的觀測(cè)數(shù)27分類(lèi)水平信息type變量

名稱頻數(shù)權(quán)重比例先驗(yàn)

概率1_12020.00000.7407410.5000002_277.00000.2592590.500000合并協(xié)方差矩陣信息協(xié)方差

矩陣秩協(xié)方差矩陣的

行列式的

自然對(duì)數(shù)87.20139

SAS系統(tǒng)DISCRIM過(guò)程到type的廣義平方距離從type121024.61468224.614680以下對(duì)象的線性判別函數(shù):type變量12常數(shù)-121.19958-176.33030x17.006048.26957x22.178943.06901x3-0.38996-0.70196x4-1.818030.16259x55.670454.58071x60.045971.05447x79.5775513.46524x81.915700.90915

SAS系統(tǒng)DISCRIM過(guò)程以下校準(zhǔn)數(shù)據(jù)的分類(lèi)匯總:WORK.CONSUM使用以下項(xiàng)的重新替換匯總:線性判別函數(shù)分入“type”的觀測(cè)數(shù)和百分比從type12合計(jì)120100.0000.0020100.00200.007100.007100.00合計(jì)2074.07725.9327100.00先驗(yàn)0.5

0.5

“type”的出錯(cuò)數(shù)估計(jì)

12Total比率0.00000.00000.0000先驗(yàn)0.50000.5000

SAS系統(tǒng)DISCRIM過(guò)程以下檢驗(yàn)數(shù)據(jù)的分類(lèi)結(jié)果:WORK.CONSUMDIS使用以下項(xiàng)的分類(lèi)結(jié)果:線性判別函數(shù)成員的后驗(yàn)概率type觀測(cè)分為type1212

0.00001.000022

0.00001.000032

0.00001.0000

SAS系統(tǒng)DISCRIM過(guò)程以下檢驗(yàn)數(shù)據(jù)的分類(lèi)匯總:WORK.CONSUMDIS使用以下項(xiàng)的分類(lèi)匯總:線性判別函數(shù)檢驗(yàn)數(shù)據(jù)的觀測(cè)概況讀取的觀測(cè)數(shù)3使用的觀測(cè)數(shù)3分入“type”的觀測(cè)數(shù)和百分比

12合計(jì)合計(jì)00.003100.003100.00先驗(yàn)0.5

0.5

Scheme語(yǔ)言概要(上)Scheme語(yǔ)言是LISP語(yǔ)言的一個(gè)方言(或說(shuō)成變種),它誕生于1975年的MIT,對(duì)于這個(gè)有近三十年歷史的編程語(yǔ)言來(lái)說(shuō),它并沒(méi)有象C++,java,C#那樣受到商業(yè)領(lǐng)域的青睞,在國(guó)內(nèi)更是顯為人知。但它在國(guó)外的計(jì)算機(jī)教育領(lǐng)域內(nèi)卻是有著廣泛應(yīng)用的,有很多人學(xué)的第一門(mén)計(jì)算機(jī)語(yǔ)言就是Scheme語(yǔ)言?,F(xiàn)在就開(kāi)始免費(fèi)試用作為L(zhǎng)isp變體,Scheme是一門(mén)非常簡(jiǎn)潔的計(jì)算語(yǔ)言,使用它的編程人員可以擺脫語(yǔ)言本身的復(fù)雜性,把注意力集中到更重要的問(wèn)題上,從而使語(yǔ)言真正成為解決問(wèn)題的工具。本文分為上、

下兩部分來(lái)介紹scheme語(yǔ)言。一.Scheme語(yǔ)言的特點(diǎn)Scheme語(yǔ)言是LISP語(yǔ)言的一個(gè)方言(或說(shuō)成變種),它誕生于1975年的MIT,對(duì)于這個(gè)有近三十年歷史的編程語(yǔ)言來(lái)說(shuō),它并沒(méi)有象C++,java,C#那樣受到商業(yè)領(lǐng)域的青睞,在國(guó)內(nèi)更是顯為人知。但它在國(guó)外的計(jì)算機(jī)教育領(lǐng)域內(nèi)卻是有著廣泛應(yīng)用的,有很多人學(xué)的第一門(mén)計(jì)算機(jī)語(yǔ)言就是Scheme語(yǔ)言。它是一個(gè)小巧而又強(qiáng)大的語(yǔ)言,作為一個(gè)多用途的編程語(yǔ)言,它可以作為腳本語(yǔ)言使用,也可以作為應(yīng)用軟件的擴(kuò)展語(yǔ)言來(lái)使用,它具有元語(yǔ)言特性,還有很多獨(dú)到的特色,以致于它被稱為編程語(yǔ)言中的"皇后"。下面是洪峰對(duì)Scheme語(yǔ)言的編程特色的歸納:詞法定界(LexicalScoping)動(dòng)態(tài)類(lèi)型(DynamicTyping)良好的可擴(kuò)展性尾遞歸(TailRecursive)函數(shù)可以作為值返回支持一流的計(jì)算連續(xù)傳值調(diào)用(passing-by-value)算術(shù)運(yùn)算相對(duì)獨(dú)立本文的目的是讓有編程基礎(chǔ)(那怕是一點(diǎn)點(diǎn))的朋友能盡快的掌握Scheme語(yǔ)言的語(yǔ)法規(guī)則,如果您在讀完本文后,發(fā)現(xiàn)自己已經(jīng)會(huì)用Scheme語(yǔ)言了,那么我的目的就達(dá)到了。二.Scheme語(yǔ)言的標(biāo)準(zhǔn)與實(shí)現(xiàn)R5RS(Revised(5)ReportontheAlgorithmicLanguageScheme)Scheme語(yǔ)言的語(yǔ)法規(guī)則的第5次修正稿,1998年制定,即Scheme語(yǔ)言的現(xiàn)行標(biāo)準(zhǔn),目前大多數(shù)Scheme語(yǔ)言的實(shí)現(xiàn)都將達(dá)到或遵循此標(biāo)準(zhǔn),并且?guī)缀醵技尤肓艘恍儆谧约旱臄U(kuò)展特色。Guile(GNU'sextensionlanguage)Guile是GNU工程的一個(gè)項(xiàng)目,它是GNU擴(kuò)展語(yǔ)言庫(kù),它也是Scheme語(yǔ)言的一個(gè)具體實(shí)現(xiàn);如果你將它作為一個(gè)庫(kù)打包,可以把它鏈接到你的應(yīng)用程序中去,使你的應(yīng)用程序具有自己的腳本語(yǔ)言,這個(gè)腳本語(yǔ)言目前就是Scheme語(yǔ)言。Guile可以在LINUX和一些UNIX系統(tǒng)上運(yùn)行,下面是簡(jiǎn)單的安裝過(guò)程:下載guile-1.6.4版,文件名為guile-1.6.4.tar.gz,執(zhí)行下面的命令:tarxvfzguile-1.6.4.tar.gzcdguile-1.6.4./configuremakemakeinstall如此,即可以執(zhí)行命令guile,進(jìn)入guile>提示符狀態(tài),輸入調(diào)試Scheme程序代碼了,本文的所有代碼都是在guile下調(diào)試通過(guò)。其它實(shí)現(xiàn)除了Guile外,Scheme語(yǔ)言的實(shí)現(xiàn)還有很多,如:GNU/MIT-Scheme,SCI,Scheme48,DrScheme等,它們大多是開(kāi)源的,可以自由下載安裝使用,并且跨平臺(tái)的實(shí)現(xiàn)也很多。你會(huì)發(fā)現(xiàn)既有象basic的Scheme語(yǔ)言解釋器,也有將Scheme語(yǔ)言編譯成C語(yǔ)言的編譯器,也有象JAVA那樣將Scheme語(yǔ)言代碼編譯成虛擬機(jī)代碼的編譯器。三.基本概念注釋Scheme語(yǔ)言中的注釋是單行注釋,以分號(hào)[;]開(kāi)始一直到行尾結(jié)束,其中間的內(nèi)容為注釋,在程序運(yùn)行時(shí)不做處理,如: ;thisisaschemecommentline.標(biāo)準(zhǔn)的Scheme語(yǔ)言定義中沒(méi)有多行注釋,不過(guò)在它的實(shí)現(xiàn)中幾乎都有。在Guile中就有多行注釋,以符號(hào)組合"#!"開(kāi)始,以相反的另一符號(hào)組合"!#"結(jié)束,其中內(nèi)容為注釋,如:#!thereareschemecommentarea.youcanwritemulitylineshere.!#注意的是,符號(hào)組合"#!"和"!#"一定分做兩行來(lái)寫(xiě)。Scheme用做腳本語(yǔ)言Scheme語(yǔ)言可以象sh,perl,python等語(yǔ)言那樣作為一種腳本語(yǔ)言來(lái)使用,用它來(lái)編寫(xiě)可執(zhí)行腳本,在Linux中如果通過(guò)Guile用Scheme語(yǔ)言寫(xiě)可執(zhí)行腳本,它的第一行和第二行一般是類(lèi)似下面的內(nèi)容:#!/usr/local/bin/guile-s!#這樣的話代碼在運(yùn)行時(shí)會(huì)自動(dòng)調(diào)用Guile來(lái)解釋執(zhí)行,標(biāo)準(zhǔn)的文件尾綴是".scm"。塊(form)塊(form)是Scheme語(yǔ)言中的最小程序單元,一個(gè)Scheme語(yǔ)言程序是由一個(gè)或多個(gè)form構(gòu)成。沒(méi)有特殊說(shuō)明的情況下form都由小括號(hào)括起來(lái),形如:(definex123)(+12)(*456)(display"helloworld")一個(gè)form也可以是一個(gè)表達(dá)式,一個(gè)變量定義,也可以是一個(gè)過(guò)程。form嵌套Scheme語(yǔ)言中允許form的嵌套,這使它可以輕松的實(shí)現(xiàn)復(fù)雜的表達(dá)式,同時(shí)也是一種非常有自己特色的表達(dá)式。下圖示意了嵌套的稍復(fù)雜一點(diǎn)的表達(dá)式的運(yùn)算過(guò)程:變量定義可以用define來(lái)定義一個(gè)變量,形式如下:

(define變量名值)如:(definex123),定義一個(gè)變量x,其值為123。更改變量的值可以用set!來(lái)改變變量的值,格式如下:

(set!變量名值)如:(set!x"hello"),將變量x的值改為"hello"。Scheme語(yǔ)言是一種高級(jí)語(yǔ)言,和很多高級(jí)語(yǔ)言(如python,perl)一樣,它的變量類(lèi)型不是固定的,可以隨時(shí)改變。四.?dāng)?shù)據(jù)類(lèi)型1.簡(jiǎn)單數(shù)據(jù)類(lèi)型邏輯型(boolean)最基本的數(shù)據(jù)類(lèi)型,也是很多計(jì)算機(jī)語(yǔ)言中都支持的最簡(jiǎn)單的數(shù)據(jù)類(lèi)型,只能取兩個(gè)值:#t,相當(dāng)于其它計(jì)算機(jī)語(yǔ)言中的TRUE;#f,相當(dāng)于其它計(jì)算機(jī)語(yǔ)言中的FALSE。Scheme語(yǔ)言中的boolean類(lèi)型只有一種操作:not。其意為取相反的值,即: (not#f)=>#t (not#t)=>#fnot的引用,與邏輯非運(yùn)算操作類(lèi)似guile>(not1)#fguile>(not(list123))#fguile>(not'a)#f從上面的操作中可以看出來(lái),只要not后面的參數(shù)不是邏輯型,其返回值均為#f。數(shù)字型(number)它又分為四種子類(lèi)型:整型(integer),有理數(shù)型(rational),實(shí)型(real),復(fù)數(shù)型(complex);它們又被統(tǒng)一稱為數(shù)字類(lèi)型(number)。如:復(fù)數(shù)型(complex)可以定義為(definec3+2i)

實(shí)數(shù)型(real)可以定義為(definef22/7)

有理數(shù)型(rational)可以定義為(definep3.1415)

整數(shù)型(integer)可以定義為(definei123)Scheme語(yǔ)言中,數(shù)字類(lèi)型的數(shù)據(jù)還可以按照進(jìn)制分類(lèi),即二進(jìn)制,八進(jìn)制,十進(jìn)制和十六進(jìn)制,在外觀形式上它們分別以符號(hào)組合#b、#o、#d、#x來(lái)作為表示數(shù)字進(jìn)制類(lèi)型的前綴,其中表示十進(jìn)制的#d可以省略不寫(xiě),如:二進(jìn)制的#b1010,八進(jìn)制的#o567,十進(jìn)制的123或#d123,十六進(jìn)制的#x1afc。Scheme語(yǔ)言的這種嚴(yán)格按照數(shù)學(xué)定理來(lái)為數(shù)字類(lèi)型進(jìn)行分類(lèi)的方法可以看出Scheme語(yǔ)言里面滲透著很深的數(shù)學(xué)思想,Scheme語(yǔ)言是由數(shù)學(xué)家們創(chuàng)造出來(lái)的,在這方面表現(xiàn)得也比較鮮明。字符型(char)Scheme語(yǔ)言中的字符型數(shù)據(jù)均以符號(hào)組合"#\"開(kāi)始,表示單個(gè)字符,可以是字母、數(shù)字或"[!$%&*+-./:%lt;=>?@^_~]"等等其它字符,如:

#\A表示大寫(xiě)字母A,#\0表示字符0,

其中特殊字符有:#\space表示空格符和#\newline表示換行符。符號(hào)型(symbol)符號(hào)類(lèi)型是Scheme語(yǔ)言中有多種用途的符號(hào)名稱,它可以是單詞,用括號(hào)括起來(lái)的多個(gè)單詞,也可以是無(wú)意義的字母組合或符號(hào)組合,它在某種意義上可以理解為C中的枚舉類(lèi)型??聪旅娴牟僮鳎篻uile>(definea(quotexyz));定義變量a為符號(hào)類(lèi)型,值為xyzguile>axyzguile>(definexyz'a);定義變量xyz為符號(hào)類(lèi)型,值為aguile>xyza此處也說(shuō)明單引號(hào)'與quote是等價(jià)的,并且更簡(jiǎn)單一些。符號(hào)類(lèi)型與字符串不同的是符號(hào)類(lèi)型不能象字符串那樣可以取得長(zhǎng)度或改變其中某一成員字符的值,但二者之間可以互相轉(zhuǎn)換。2.復(fù)合數(shù)據(jù)類(lèi)型可以說(shuō)復(fù)合數(shù)據(jù)類(lèi)型是由基本的簡(jiǎn)單數(shù)據(jù)類(lèi)型通過(guò)某種方式加以組合形成的數(shù)據(jù)類(lèi)型,特點(diǎn)是可以容納多種或多個(gè)單一的簡(jiǎn)單數(shù)據(jù)類(lèi)型的數(shù)據(jù),多數(shù)是基于某一種數(shù)學(xué)模型創(chuàng)建的。字符串(string)由多個(gè)字符組成的數(shù)據(jù)類(lèi)型,可以直接寫(xiě)成由雙引號(hào)括起的內(nèi)容,如:"hello"。下面是Guile中的字符串定義和相關(guān)操作:guile>(definename"tomson")guile>name"tomson"guile>(string-lengthname);取字符串的長(zhǎng)度6guile>(string-set!name0#\g);更改字符串首字母(第0個(gè)字符)為小寫(xiě)字母g(#\g)guile>name"gomson"guile>(string-refname3);取得字符串左側(cè)第3個(gè)字符(從0開(kāi)始)#\s字符串還可以用下面的形式定義:guile>(defineother(string#\h#\e#\l#\l#\o))guile>other"hello"字符串中出現(xiàn)引號(hào)時(shí)用反斜線加引號(hào)代替,如:"abc\"def"。點(diǎn)對(duì)(pair)我把它譯成"點(diǎn)對(duì)",它是一種非常有趣的類(lèi)型,也是一些其它類(lèi)型的基礎(chǔ)類(lèi)型,它是由一個(gè)點(diǎn)和被它分隔開(kāi)的兩個(gè)所值組成的。形如:(1.2)或(a.b),注意的是點(diǎn)的兩邊有空格。這是最簡(jiǎn)單的復(fù)合數(shù)據(jù)類(lèi)型,同是它也是其它復(fù)合數(shù)據(jù)類(lèi)型的基礎(chǔ)類(lèi)型,如列表類(lèi)型(list)就是由它來(lái)實(shí)現(xiàn)的。按照Scheme語(yǔ)言說(shuō)明中的慣例,以下我們用符號(hào)組合"=>"來(lái)表示表達(dá)式的值。它用cons來(lái)定義,如:(cons89)=>(8.9)其中在點(diǎn)前面的值被稱為car,在點(diǎn)后面的值被稱為cdr,car和cdr同時(shí)又成為取pair的這兩個(gè)值的過(guò)程,如:(definep(cons45)) =>(4.5)(carp) =>4(cdrp) =>5還可以用set-car!和set-cdr!來(lái)分別設(shè)定這兩個(gè)值:(set-car!p"hello")(set-cdr!p"good")如此,以前定義的p又變成了("hello"."good")這個(gè)樣子了。列表(list)列表是由多個(gè)相同或不同的數(shù)據(jù)連續(xù)組成的數(shù)據(jù)類(lèi)型,它是編程中最常用的復(fù)合數(shù)據(jù)類(lèi)型之一,很多過(guò)程操作都與它相關(guān)。下面是在Guile中列表的定義和相關(guān)操作:guile>(definela(list1234))guile>la(1234)guile>(lengthla);取得列表的長(zhǎng)度4guile>(list-refla3);取得列表第3項(xiàng)的值(從0開(kāi)始)4guile>(list-set!la299);設(shè)定列表第2項(xiàng)的值為9999guile>la(12994)guile>(definey(make-list56));創(chuàng)建列表guile>y(66666)make-list用來(lái)創(chuàng)建列表,第一個(gè)參數(shù)是列表的長(zhǎng)度,第二個(gè)參數(shù)是列表中添充的內(nèi)容;還可以實(shí)現(xiàn)多重列表,即列表的元素也是列表,如:(list(list123)(list456))。列表與pair的關(guān)系回過(guò)頭來(lái),我們?cè)倏纯聪旅娴亩x:guile>(definea(cons1(cons2(cons3'()))))guile>a(123)由上可見(jiàn),a本來(lái)是我們上面定義的點(diǎn)對(duì),最后形成的卻是列表。事實(shí)上列表是在點(diǎn)對(duì)的基礎(chǔ)上形成的一種特殊格式。再看下面的代碼:guile>(definels(list1234))guile>ls(1234)guile>(list?ls)#tguile>(pair?ls)#t由此可見(jiàn),list是pair的子類(lèi)型,list一定是一個(gè)pair,而pair不是list。guile>(carls)1guile>(cdrls)(234)其cdr又是一個(gè)列表,可見(jiàn)用于pair的操作過(guò)程大多可以用于list。 guile>(cadrls);此"點(diǎn)對(duì)"對(duì)象的cdr的car2guile>(cddrls);此"點(diǎn)對(duì)"對(duì)象的cdr的cdr(34)guile>(caddrls);此"點(diǎn)對(duì)"對(duì)象的cdr的cdr的car3guile>(cdddrls);此"點(diǎn)對(duì)"對(duì)象的cdr的cdr的cdr(4)上在的操作中用到的cadr,cdddr等過(guò)程是專門(mén)對(duì)PAIR型數(shù)據(jù)再?gòu)?fù)合形成的數(shù)據(jù)操作的過(guò)程,最多可以支持在中間加四位a或d,如cdddr,caaddr等。下圖表示了由pairs定義形成的列表:這個(gè)列表可以由pair定義為如下形式:(definex(cons'a(cons'b(cons'c(cons'd'())))))而列表的實(shí)際內(nèi)容則為:(abcd)由pair類(lèi)型還可以看出它可以輕松的表示樹(shù)型結(jié)構(gòu),尤其是標(biāo)準(zhǔn)的二叉樹(shù)。向量(vector)可以說(shuō)是一個(gè)非常好用的類(lèi)型,是一種元素按整數(shù)來(lái)索引的對(duì)象,異源的數(shù)據(jù)結(jié)構(gòu),在占用空間上比同樣元素的列表要少,在外觀上:列表示為:(1234)

VECTOR表示為:#(1234)

可以正常定義:(definev(vector345))

也可以直接定義:(definev#(345))vector是一種比較常用的復(fù)合類(lèi)型,它的元素索引從0開(kāi)始,至第n-1結(jié)束,這一點(diǎn)有點(diǎn)類(lèi)似C語(yǔ)言中的數(shù)組。關(guān)于向量表(vector)的常用操作過(guò)程:guile>(definev(vector12345))guile>v#(12345)guile>(vector-refv0) ;求第n個(gè)變量的值1guile>(vector-lengthv);求vector的長(zhǎng)度5guile>(vector-set!v2"abc");設(shè)定vector第n個(gè)元素的值guile>v#(12"abc"45)guile>(definex(make-vector56));創(chuàng)建向量表guile>x#(66666)make-vector用來(lái)創(chuàng)建一個(gè)向量表,第一個(gè)參數(shù)是數(shù)量,后一個(gè)參數(shù)是添充的值,這和列表中的make-list非常相似。我們可以看出,在Scheme語(yǔ)言中,每種數(shù)據(jù)類(lèi)型都有一些基本的和它相關(guān)的操作過(guò)程,如字符串,列表等相關(guān)的操作,這些操作過(guò)程都很有規(guī)律,過(guò)程名的單詞之間都用-號(hào)隔開(kāi),很容易理解。對(duì)于學(xué)過(guò)C++的朋友來(lái)說(shuō),更類(lèi)似于某個(gè)對(duì)象的方法,只不過(guò)表現(xiàn)的形式不同了。3.類(lèi)型的判斷、比較、運(yùn)算、轉(zhuǎn)換與方法類(lèi)型判斷Scheme語(yǔ)言中所有判斷都是用類(lèi)型名加問(wèn)號(hào)再加相應(yīng)的常量或變量構(gòu)成,形如:(類(lèi)型?變量)Scheme語(yǔ)言在類(lèi)型定義中有比較嚴(yán)格的界定,如在C語(yǔ)言等一些語(yǔ)言中數(shù)字0來(lái)代替邏輯類(lèi)型數(shù)據(jù)False,在Scheme語(yǔ)言中是不允許的。以下為常見(jiàn)的類(lèi)型判斷和附加說(shuō)明:邏輯型:(boolean?#t)=>#t(boolean?#f)=>#t 因?yàn)?t和#f都是boolean類(lèi)型,所以其值為#t(boolean?2)=>#f 因?yàn)?是數(shù)字類(lèi)型,所以其值為#f字符型(char?#\space) =>#t(char?#\newline) =>#t 以上兩個(gè)特殊字符:空格和換行(char?#\f) =>#t 小寫(xiě)字母f(char?#\;) =>#t 分號(hào);(char?#\5) =>#t 字符5 ,以上這些都是正確的,所以返回值都是#t(char?5) =>#f 這是數(shù)字5,不是字符類(lèi)型,所以返回#f數(shù)字型(integer?1) =>#t(integer?2345) =>#t(integer?-90) =>#t 以上三個(gè)數(shù)均為整數(shù)(integer?8.9) =>#f8.9不整數(shù)(rational?22/7) =>#t(rational?2.3) =>#t(real?1.2) =>#t(real?3.14159) =>#t(real?-198.34) =>#t 以上三個(gè)數(shù)均為實(shí)數(shù)型(real?23) =>#t因?yàn)檎蛯儆趯?shí)型(number?5) =>#t(number?2.345) =>#t(number?22/7) =>#t其它型(null?'()) =>#t;null意為空類(lèi)型,它表示為'(),即括號(hào)里什么都沒(méi)有的符號(hào)(null?5) =>#f(definex123) 定義變量x其值為123(symbol?x) =>#f(symbol?'x) =>#t;此時(shí)'x為符號(hào)x,并不表示變量x的值在Scheme語(yǔ)言中如此眾多的類(lèi)型判斷功能,使得Scheme語(yǔ)言有著非常好的自省功能。即在判斷過(guò)程的參數(shù)是否附合過(guò)程的要求。比較運(yùn)算Scheme語(yǔ)言中可以用<,>,<=,>=,=來(lái)判斷數(shù)字類(lèi)型值或表達(dá)式的關(guān)系,如判斷變量x是否等于零,它的形式是這樣的:(=x0),如x的值為0則表達(dá)式的值為#t,否則為#f。還有下面的操作:(eqv?3434)=>#t(=3434)=>#t以上兩個(gè)form功能相同,說(shuō)明eqv?也可以用于數(shù)字的判斷。在Scheme語(yǔ)言中有三種相等的定義,兩個(gè)變量正好是同一個(gè)對(duì)象;兩個(gè)對(duì)象具有相同的值;兩個(gè)對(duì)象具有相同的結(jié)構(gòu)并且結(jié)構(gòu)中的內(nèi)容相同。除了上面提到的符號(hào)判斷過(guò)程和eqv?外,還有eq?和equal?也是判斷是否相等的過(guò)程。eq?,eqv?,equal?eq?,eqv?和equal?是三個(gè)判斷兩個(gè)參數(shù)是否相等的過(guò)程,其中eq?和eqv?的功能基本是相同的,只在不同的Scheme語(yǔ)言中表現(xiàn)不一樣。eq?是判斷兩個(gè)參數(shù)是否指向同一個(gè)對(duì)象,如果是才返回#t;equal?則是判斷兩個(gè)對(duì)象是否具有相同的結(jié)構(gòu)并且結(jié)構(gòu)中的內(nèi)容是否相同,它用eq?來(lái)比較結(jié)構(gòu)中成員的數(shù)量;equal?多用來(lái)判斷點(diǎn)對(duì),列表,向量表,字符串等復(fù)合結(jié)構(gòu)數(shù)據(jù)類(lèi)型。guile>(definev(vector345))guile>(definew#(345));w和v都是vector類(lèi)型,具有相同的值#(345)guile>(eq?vw)#f ;此時(shí)w和v是兩個(gè)對(duì)象guile>(equal?vw)#t;符合equal?的判斷要求以上操作說(shuō)明了eq?和equal?的不同之處,下面的操作更是證明了這一點(diǎn):guile>(definex(make-vector56))guile>x#(66666)guile>(eq?xx);是同一個(gè)對(duì)象,所以返回#t#tguile>(definez(make-vector56))guile>z#(66666)guile>(eq?xz);不是同一個(gè)對(duì)象#fguile>(equal?xz);結(jié)構(gòu)相同,內(nèi)容相同,所以返回#t#t算術(shù)運(yùn)算Scheme語(yǔ)言中的運(yùn)算符有:

+,-,*,/和expt(指數(shù)運(yùn)算)

其中-和/還可以用于單目運(yùn)算,如:(-4)=>-4(/4)=>1/4此外還有許多擴(kuò)展的庫(kù)提供了很多有用的過(guò)程,max求最大(max88990213)=>213min求最小(min34567)=>3abs求絕對(duì)值(abs-7)==>7除了max,min,abs外,還有很多數(shù)學(xué)運(yùn)算過(guò)程,這要根據(jù)你用的Scheme語(yǔ)言的運(yùn)行環(huán)境有關(guān),不過(guò)它們大多是相同的。在R5RS中規(guī)定了很多運(yùn)算過(guò)程,在R5RS的參考資料中可以很容易找到。轉(zhuǎn)換Scheme語(yǔ)言中用符號(hào)組合"->"來(lái)標(biāo)明類(lèi)型間的轉(zhuǎn)換(很象C語(yǔ)言中的指針)的過(guò)程,就象用問(wèn)號(hào)來(lái)標(biāo)明類(lèi)型判斷過(guò)程一樣。下面是一些常見(jiàn)的類(lèi)型轉(zhuǎn)換過(guò)程:guile>(number->string123);數(shù)字轉(zhuǎn)換為字符串"123"guile>(string->number"456");字符串轉(zhuǎn)換為數(shù)字456guile>(char->integer#\a);字符轉(zhuǎn)換為整型數(shù),小寫(xiě)字母a的ASCII碼值為9697guile>(char->integer#\A);大寫(xiě)字母A的值為6565guile>(integer->char97);整型數(shù)轉(zhuǎn)換為字符#\aguile>(string->list"hello");字符串轉(zhuǎn)換為列表(#\h#\e#\l#\l#\o)guile>(list->string(make-list4#\a));列表轉(zhuǎn)換為字符串"aaaa"guile>(string->symbol"good");字符串轉(zhuǎn)換為符號(hào)類(lèi)型goodguile>(symbol->string'better);符號(hào)類(lèi)型轉(zhuǎn)換為字符串"better"五.過(guò)程定義過(guò)程(Procedure)在Scheme語(yǔ)言中,過(guò)程相當(dāng)于C語(yǔ)言中的函數(shù),不同的是Scheme語(yǔ)言過(guò)程是一種數(shù)據(jù)類(lèi)型,這也是為什么Scheme語(yǔ)言將程序和數(shù)據(jù)作為同一對(duì)象處理的原因。如果我們?cè)贕uile提示符下輸入加號(hào)然后回車(chē),會(huì)出現(xiàn)下面的情況:guile>+#<primitive-procedure+>這告訴我們"+"是一個(gè)過(guò)程,而且是一個(gè)原始的過(guò)程,即Scheme語(yǔ)言中最基礎(chǔ)的過(guò)程,在GUILE中內(nèi)部已經(jīng)實(shí)現(xiàn)的過(guò)程,這和類(lèi)型判斷一樣,如boolean?等,它們都是Scheme語(yǔ)言中最基本的定義。注意:不同的Scheme語(yǔ)言實(shí)現(xiàn)環(huán)境,出現(xiàn)的提示信息可能不盡相同,但意義是一樣的。define不僅可以定義變量,還可以定義過(guò)程,因在Scheme語(yǔ)言中過(guò)程(或函數(shù))都是一種數(shù)據(jù)類(lèi)型,所以都可以通過(guò)define來(lái)定義。不同的是標(biāo)準(zhǔn)的過(guò)程定義要使用lambda這一關(guān)鍵字來(lái)標(biāo)識(shí)。Lambda關(guān)鍵字Scheme語(yǔ)言中可以用lambda來(lái)定義過(guò)程,其格式如下:

(define過(guò)程名(lambda(參數(shù)...)(操作過(guò)程...)))我們可以自定義一個(gè)簡(jiǎn)單的過(guò)程,如下: (defineadd5(lambda(x)(+x5)))此過(guò)程需要一個(gè)參數(shù),其功能為返回此參數(shù)加5的值,如: (add511)=>16下面是簡(jiǎn)單的求平方過(guò)程square的定義: (definesquare(lambda(x)(*xx)))與lambda相同的另一種方式在Scheme語(yǔ)言中,也可以不用lambda,而直接用define來(lái)定義過(guò)程,它的格式為:

(defin

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論