青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
 
     摘要: 有的時候,IO的異常處理由于需要一個IOEnv類型的參數(shù)而顯得非常麻煩。這個時候我們可以定制自己的一套異常處理系統(tǒng),從而讓程序變得清晰起來。自己的異常處理系統(tǒng)不同于IO,是沒有副作用的函數(shù)集合。下面讓我們看一看如何使用自定義的異常處理系統(tǒng)來分析一個四則運算表達式。  閱讀全文
posted @ 2008-12-18 21:23 陳梓瀚(vczh) 閱讀(1463) | 評論 (0)編輯 收藏
     摘要: 說到底Kernel FP是一個腳本引擎,所以是需要API的。接下來的代碼用來加載一些Kernel FP代碼文件,并執(zhí)行main函數(shù)。  閱讀全文
posted @ 2008-12-17 19:15 陳梓瀚(vczh) 閱讀(1650) | 評論 (1)編輯 收藏
     摘要: 我們知道,循環(huán)本身是沒有返回值的。所以在純函數(shù)式語言下,跟IO有關的循環(huán)才有足夠的副作用來產生價值。于是利用IO Monad,我們就可以實現(xiàn)循環(huán)了。循環(huán)是一個函數(shù):  閱讀全文
posted @ 2008-12-15 07:56 陳梓瀚(vczh) 閱讀(2182) | 評論 (2)編輯 收藏
     摘要: 前面說過,需要一個語法糖來組織IO,并且在其中的一步產生錯誤的時候立刻返回錯誤。現(xiàn)在我們看一段代碼:  閱讀全文
posted @ 2008-12-15 06:22 陳梓瀚(vczh) 閱讀(1489) | 評論 (0)編輯 收藏
    由于Kernel FP是純的,所以一個函數(shù)的輸出只跟輸入有關系,所以從屏幕上輸入文字的函數(shù)read是不能定義成func read::string的。因為根據(jù)這個性質,read的結果必須是一樣的。所以一定要在每一次read的時候給不同的參數(shù)。但是其實沒關系,這個可以用編譯器來解決,就算read的順序是運行時決定的。同樣的問題也出現(xiàn)在Haskell的IO Monad上,由于資料無窮多,我就不詳細解釋了。下面給出沒有語法糖的,能夠正常并確定順序地使用IO函數(shù)的一段代碼:

 1 data IOError
 2   = ioemessage string
 3 type IOEnv
 4 type IO T = IOEnv -> maybe (pair T IOEnv) IOError
 5 
 6 func read :: IO string alias "demo::read"
 7 func readint :: IO int alias "demo::readint"
 8 func write :: string -> IO void alias "demo::write"
 9 func writeln :: string -> IO void alias "demo::writeln"
10 func iovoid :: IO void alias "demo::iovoid"
11 
12 def (>>>) a b = a >>= \p->b
13 func return T :: T -> IO T
14 def return x e = success (pair x e)
15 func (>>=) T1 T2 :: IO T1 -> (T1 -> IO T2) -> IO T2
16 def (>>=) a b e = select a e of
17   case fail message : fail message
18   case success p : select p of
19     case pair x e2 : b x e2
20   end
21 end
22 
23 def ioseq ios = foldr iovoid (>>>) ios
24 
25 def mainIO_0 = 
26   read >>= \name->
27   read >>= \place->
28   writeln ("Hello "+name+" from "+place+".">>>
29   readint >>= \a->
30   readint >>= \b->
31   writeln (itoa (a+b)) >>>
32   writeln "Press [ENTER] to enter" >>>
33   read
34 
35 def mainIO_1 = ioseq (transform writeln ["genius","vczh"])

    mainIO_0使用類型系統(tǒng)強制了IO函數(shù)的執(zhí)行順序,mainIO_1證明了IO也是可以使用正常的操作函數(shù)去進行復雜操作的。不過mainIO_0那種寫法還是挺不舒服的,這就是語法糖發(fā)揮作用的啦。我只需要給出一種相對好看的語法,然后在語法分析的時候翻譯成這樣就行了。

    這種寫法的好處是,萬一其中有一個IO出了問題,錯誤信息會直接傳達出去,中斷函數(shù)執(zhí)行。而且整個函數(shù)都是在類型系統(tǒng)的保護之下的。
posted @ 2008-12-14 22:44 陳梓瀚(vczh) 閱讀(1784) | 評論 (0)編輯 收藏
    考慮以下代碼:
1 def overloading x = "General overloading"
2 func overloading::string->string
3 def overloading str = "String overloading"
4 func overloading T::list T->string
5 def overloading xs = "List overloading"

    這是三個函數(shù),類型分別為:
1     func overloading T1 :: (<T1> -> (system.list system.char)) codefrom 125
2     func overloading :: ((system.list system.char-> (system.list system.char)) codefrom 127
3     func overloading T1 :: ((system.list <T1>-> (system.list system.char)) codefrom 129

    所以當我們寫overloading的時候,究竟選擇什么呢?三個類型都是可以接受的,而且都是可以完美通過類型推導的。于是我新加了一個規(guī)則。首先求出需要的具體類型(可能是含有參數(shù)的類型),然后計算從函數(shù)類型到具體類型所需要替換的類型參數(shù)的個數(shù)以及每個類型參數(shù)的解,最后計算出一個系數(shù)=數(shù)量×65536+解的深度和。

    深度的規(guī)定比較簡單,基本類型深度為1,閉包類型為參數(shù)和結果兩種類型的深度的最大值加1,帶有參數(shù)的類型等于最大參數(shù)深度加1。所以在這個例子上,我們可以得到,T1到list char的解為T1=list char,list char到list char的解為0,list T1到list char的解為T1=char,系數(shù)分別是65538、0和65537,所以理所當然地挑選了第二個。下面看例子:
1 def main114 = overloading 1024
2 def main115 = overloading "Genius Vczh!"
3 def main116 = overloading [1,2,3]

    下面是運行結果:
1 main114返回值:"General overloading"
2 main115返回值:"String overloading"
3 main116返回值:"List overloading"
posted @ 2008-12-14 19:42 陳梓瀚(vczh) 閱讀(1484) | 評論 (0)編輯 收藏
    現(xiàn)在的Kernel FP已經(jīng)支持列表語法和操作符語法了。

    列表語法為[1,2,3,4,5]。原來是需要寫成list 1 (list 2 (list 3 (list 4 (list 5 empty))))的。不過后面這種寫法仍然是支持的。
    操作符可以自定義,凡是僅由“+-*/%<>=!&^|~@#$?”構成,而又不是“|”和“=”的記號都可以視為二元操作符。如果是+、-、*、/、%、<、<=、>、>=、==、!=、^、&&和||的話,優(yōu)先級跟C++一樣。如果是其他操作符,那么優(yōu)先級一致而且最低。

    因為操作符也是個函數(shù),因此將操作符作為函數(shù)使用的時候只需要加一對括號就可以了,不過中間不可以有空格。所以我們就可以定義“+”并寫出下面的代碼:
1 def (+= iadd
2 def (+= fadd
3 def (+= concat
4 def main102 = (+1 2
5 def main103 = (+1.0 2.0
6 def main104 = (+"Genius" " Vczh!"
7 def main105 = 1 + 2
8 def main106 = 1.0 + 2.0
9 def main107 = "Genius" + " Vczh!"

    下面是執(zhí)行結果:
1 main102返回值:3
2 main103返回值:3.0
3 main104返回值:"Genius Vczh!"
4 main105返回值:3
5 main106返回值:3.0
6 main107返回值:"Genius Vczh!"

    操作符的優(yōu)先級比函數(shù)低,因此sin a + sin b實際上是(sin a)+(sin b)。 于是下面的代碼返回8.0:
1 def main108 = ln (exp 3.0+ ln (exp 5.0)

    有了操作符之后,就可以慢慢為IO、Exception等復雜對象建模并且開發(fā)語法糖了。
posted @ 2008-12-14 08:37 陳梓瀚(vczh) 閱讀(1800) | 評論 (2)編輯 收藏
     摘要: 為了測試Kernel FP的健壯性以及進行一些bug的排除,一個四則運算式子的分析程序理所當然地就被實現(xiàn)了。代碼如下:  閱讀全文
posted @ 2008-12-13 07:13 陳梓瀚(vczh) 閱讀(3373) | 評論 (2)編輯 收藏
     摘要: 經(jīng)過1個小時的奮斗,修了3個bug,終于使得Kernel FP能運行的代碼漸漸多了起來。現(xiàn)在可以看看純函數(shù)式語言簡潔的代碼及運行結果啦!

下面是很多用于測試的main函數(shù):  閱讀全文
posted @ 2008-12-12 10:03 陳梓瀚(vczh) 閱讀(1472) | 評論 (1)編輯 收藏
     摘要: Kernel FP已經(jīng)可以運行小程序了。現(xiàn)在還處于測試階段,過于復雜的程序估計是跑不過的。先簡單介紹一下如何在C++調用Kernel FP的代碼。  閱讀全文
posted @ 2008-12-10 23:03 陳梓瀚(vczh) 閱讀(1734) | 評論 (2)編輯 收藏
僅列出標題
共35頁: First 21 22 23 24 25 26 27 28 29 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一区视频在线观看免费| 亚洲第一天堂av| 国产欧美日韩三区| 国产精品高潮视频| 国产精品第三页| 国产精品入口麻豆原神| 国产精品久久久久久久一区探花| 国产精品久久久久毛片软件| 国产一区深夜福利| 亚洲精品欧洲| 欧美在线观看日本一区| 麻豆91精品91久久久的内涵| 亚洲国产综合91精品麻豆| 日韩视频免费观看高清在线视频| 中日韩美女免费视频网站在线观看 | 国产精品av一区二区| 国产日韩av一区二区| 亚洲大片在线| 性欧美暴力猛交另类hd| 欧美成人午夜激情在线| 一本大道av伊人久久综合| 欧美中文字幕在线播放| 欧美第一黄网免费网站| 国产区二精品视| 99精品欧美一区二区蜜桃免费| 欧美一级二区| 亚洲精品美女91| 欧美尤物一区| 欧美婷婷久久| 亚洲激情在线观看视频免费| 午夜精品婷婷| 亚洲三级性片| 久久久久国产精品一区| 最新日韩av| 欧美一区二区三区四区在线观看| 欧美福利视频| 在线国产欧美| 久久精品国产综合| 在线视频日本亚洲性| 欧美激情亚洲综合一区| 一区二区亚洲精品国产| 欧美在线免费视屏| 亚洲在线成人| 国产精品日韩电影| 亚洲女与黑人做爰| 夜夜夜久久久| 欧美午夜视频一区二区| 一本久久精品一区二区| 欧美大片va欧美在线播放| 久久久噜噜噜久久| 国内免费精品永久在线视频| 欧美在线网站| 欧美一区二区三区久久精品茉莉花 | 欧美在线不卡视频| 国产九色精品成人porny| 亚洲综合日韩| 亚洲视频视频在线| 国产精品久久一区主播| 亚洲欧美日本在线| 一区二区三区色| 国产精品福利av| 香蕉国产精品偷在线观看不卡| 一区二区三区四区五区视频| 欧美日韩理论| 亚洲女爱视频在线| 亚洲欧美在线另类| 国产一区二区日韩精品欧美精品| 久久精品视频网| 久久国产成人| 亚洲二区在线| 亚洲人成网站色ww在线| 欧美三级第一页| 欧美一区二区女人| 久久精品噜噜噜成人av农村| 伊人成年综合电影网| 亚洲福利视频一区二区| 欧美午夜a级限制福利片| 亚洲专区在线| 久久精品一区中文字幕| 日韩午夜黄色| 亚洲欧美国产不卡| 亚洲成色www8888| 亚洲精品一区在线| 国产午夜精品久久久久久免费视| 美女成人午夜| 欧美午夜精品电影| 久久综合给合| 欧美欧美全黄| 久久国产一区| 欧美精品久久一区| 久久国内精品自在自线400部| 蜜桃av一区| 久久久亚洲人| 欧美日韩综合不卡| 久久久久欧美精品| 欧美国产成人在线| 香蕉国产精品偷在线观看不卡| 久久久91精品国产一区二区精品| 亚洲三级视频| 欧美一级网站| 亚洲图色在线| 免费日韩精品中文字幕视频在线| 亚洲免费一区二区| 欧美一二三视频| 99国产精品国产精品久久| 香蕉av福利精品导航| 亚洲精品欧美日韩专区| 午夜视频在线观看一区| 夜夜嗨一区二区| 久久精品人人做人人爽电影蜜月 | 在线观看视频欧美| 亚洲视频在线观看免费| 亚洲精品视频免费观看| 久久激情视频久久| 午夜欧美大尺度福利影院在线看| 欧美福利小视频| 麻豆国产精品va在线观看不卡| 欧美视频在线不卡| 亚洲精品少妇网址| 最新中文字幕亚洲| 久久综合伊人77777尤物| 久久国产一区二区| 国产日本欧美一区二区三区| 亚洲视频免费在线| 亚洲天堂成人| 欧美区一区二| 亚洲精品美女久久久久| 亚洲美女在线看| 欧美成人日韩| 欧美激情一区二区三区高清视频| 国产一区二区在线免费观看| 亚洲女性裸体视频| 亚洲欧美日韩精品久久久| 欧美丝袜第一区| 一本色道久久综合精品竹菊| 一区二区国产精品| 欧美日韩黄色一区二区| 亚洲日本久久| 中文网丁香综合网| 欧美性做爰毛片| 亚洲先锋成人| 午夜欧美精品| 国产综合视频| 久久一区二区三区国产精品| 六月丁香综合| 91久久精品国产91久久性色| 久久综合综合久久综合| 欧美激情亚洲一区| 夜夜嗨av一区二区三区中文字幕 | 久久人人97超碰国产公开结果 | 欧美一区二区视频在线观看2020| 国精产品99永久一区一区| 在线成人国产| 欧美成人精品在线| 91久久在线观看| 亚洲图片在线| 国产亚洲福利一区| 嫩草国产精品入口| 一本色道久久88综合日韩精品| 亚洲主播在线播放| 国产亚洲网站| 欧美暴力喷水在线| 亚洲一区二区免费看| 狼人天天伊人久久| 一本色道精品久久一区二区三区| 国产精品久久久一本精品| 久久久成人网| 99精品欧美| 久久久蜜桃一区二区人| 日韩一级黄色大片| 激情久久婷婷| 欧美视频在线观看视频极品 | 欧美日韩中字| 久久噜噜亚洲综合| 一区二区三区精品在线| 久久青草久久| 一区二区三区日韩欧美精品| 国产一区欧美| 国产精品乱码一区二区三区| 欧美在线3区| 一区二区三区四区五区在线| 欧美高清免费| 午夜在线一区| 99精品久久久| 亚洲第一在线综合网站| 国产精品实拍| 欧美日韩国产免费| 久久在线免费观看视频| 亚洲女人天堂av| 99精品视频一区| 欧美国产视频在线观看| 久久久久国内| 欧美一级电影久久| 亚洲夜晚福利在线观看| 亚洲精品美女在线观看播放| 国产一区二区三区精品久久久| 国产精品成人国产乱一区| 欧美激情一区二区三区全黄| 久久男女视频| 久久久久久夜精品精品免费|