• <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>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                這幾天一直在忙學(xué)校的比賽,到了今天終于有空了。

                Lazy Script的語(yǔ)法實(shí)在是很復(fù)雜,因此不得不在進(jìn)行第一步的名字檢查之后把原本的語(yǔ)言轉(zhuǎn)換為內(nèi)部使用的一種元語(yǔ)言。這種元語(yǔ)言設(shè)計(jì)的原則是盡量簡(jiǎn)單。譬如[y|y<-xs , y<x]這樣的語(yǔ)法和do-end語(yǔ)句就需要被轉(zhuǎn)換掉。進(jìn)行了轉(zhuǎn)換以后,就需要對(duì)元語(yǔ)言進(jìn)行一個(gè)類型方程組的建立。這一步暫時(shí)還沒有建模好,而且實(shí)際工作需不需要真的構(gòu)造出一組方程組還不知道。目前還比較沒有頭緒的就是如何對(duì)模板函數(shù)的類型方程建模。

                舉個(gè)例子,譬如我們對(duì)上一篇文章中提到的代碼進(jìn)行類型方程組的構(gòu)造:
            1 makelist num list = if (num<=0)
            2     list
            3     (makelist (num-1) ([num]++list));

                我們找到的已定義名稱有:
                ·(<=) :: Int -> Int -> Bool | Float -> Float -> Bool
                ·if :: Bool -> T -> T -> T
                ·(++) :: [T] -> [T] -> [T]
                ·(-) :: Int -> Int -> Int | Float -> Float -> Float
                ·0 :: Int
                ·1 :: Int

                為上面的程序建立方程組,我們可以得到:
                T(makelist) T(num) T(list) =
                (Bool -> T0 -> T0 -> T0)
                    ((<=)::(Int -> Int -> Bool | Float -> Float -> Bool) T(num) Int)
                    T(list)
                    (T(makelist)
                        ((-)::(Int -> Int -> Int | Float -> Float -> Float) T(num) Int)
                        ((++)::([T1] -> [T1] -> [T1]) [T(num)] T(list))
                    )

                對(duì)上面的函數(shù)調(diào)用類型進(jìn)行進(jìn)一步的推導(dǎo),我們可以得到:
                Bool = (<=)::(Int -> Int -> Bool | Float -> Float -> Bool) T(num) Int
                T0 = T(list)
                T0 = T(makelist)  ((Int -> Int -> Int | Float -> Float -> Float) T(num) Int) ((++)::([T1] -> [T1] -> [T1]) [T(num)] T(list))
                T(makelist) T(num) T(list) = T0

                緊接著繼續(xù)推導(dǎo),我們有:
                (<=)::(Int -> Int -> Bool | Float -> Float -> Bool) T(num) = Int
                (-)::((Int -> Int -> Int | Float -> Float -> Float) T(num) = Int
                [T1] = [T(num)]
                [T1] = T(list)

                根據(jù)上面的式子我們可以得到:
                T(num)=Int
                T1=Int
                T(list)=[Int]
                (++)::[Int] -> [Int] -> [Int]
                (<=)::Int -> Int -> Bool
                (-):: Int -> Int -> Int
                T0 = [Int]
                if :: Bool -> [Int] -> [Int]
                makelist :: [Int] -> [Int] -> [Int]

                至于如何為上面的整個(gè)過(guò)程建模,還得在這幾天內(nèi)想出辦法來(lái)。現(xiàn)在唯一知道的就是,構(gòu)造一個(gè)類型方程組需要確定解的名字,然后求解。解還有若干種,譬如確定解,模板解等等。具體細(xì)節(jié)還需要繼續(xù)斟酌。
            posted on 2008-04-27 10:16 陳梓瀚(vczh) 閱讀(2145) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Vczh Lazy Script
            人妻丰满?V无码久久不卡| 色婷婷综合久久久久中文字幕 | 国产美女久久精品香蕉69| 狠狠久久亚洲欧美专区| 久久亚洲欧洲国产综合| 久久久噜噜噜久久中文福利| 久久精品国产一区二区电影| 久久精品国产2020| 精品无码久久久久久久动漫| 久久久久久夜精品精品免费啦| 青青青青久久精品国产| 性做久久久久久久| 久久影院午夜理论片无码| 久久精品午夜一区二区福利| 亚洲欧洲精品成人久久奇米网| 国产精品久久波多野结衣| 亚洲国产精品无码久久| 热RE99久久精品国产66热| 国产精品欧美久久久久无广告| 色婷婷综合久久久久中文 | 狠狠色婷婷综合天天久久丁香| 久久大香萑太香蕉av| 久久se这里只有精品| 国产精品一区二区久久不卡| 国内精品久久久久影院薰衣草| 色青青草原桃花久久综合| 久久国产福利免费| 国内精品久久久久久麻豆| 亚洲综合婷婷久久| 亚洲欧美日韩精品久久| a高清免费毛片久久| 久久精品国产久精国产思思| 久久天天躁狠狠躁夜夜网站| 久久久久波多野结衣高潮| 狠狠色丁香久久婷婷综合图片| 日韩十八禁一区二区久久| 亚洲日本va午夜中文字幕久久| 无码人妻少妇久久中文字幕| 一本色道久久综合狠狠躁篇| 久久亚洲AV无码精品色午夜 | 久久综合五月丁香久久激情|