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

隨筆-341  評論-2670  文章-0  trackbacks-0
    經過1個小時的奮斗,修了3個bug,終于使得Kernel FP能運行的代碼漸漸多了起來。現在可以看看純函數式語言簡潔的代碼及運行結果啦!

    下面是很多用于測試的main函數:
 1 module startup
 2 import list
 3 
 4 def main0 = length "vczh"
 5 def main1 = head "vczh"
 6 def main2 = tail "vczh"
 7 def main3 = concat "genius" " vczh!"
 8 def main4 = isempty ""
 9 def main5 = isempty "vczh"
10 def main6 = transform (iadd 1) (list 1 (list 2 (list 3 empty)))
11 def main7 = reverse "abcde"
12 def main8 = intersperse '|' "vczh"
13 def main9 = flatten (list "vczh" (list " library" (list " ++" empty)))
14 def main10 = pairlist "genius" "vczh"
15 def main11 = fold 0 iadd (list 1 (list 2 (list 3 empty)))
16 def main12 = all (iequ 0) (list 0 (list 1 (list 2 empty)))
17 def main13 = any (iequ 0) (list 0 (list 1 (list 2 empty)))
18 def main14 = take 5 (iterate (iadd 10)
19 def main15 = take 5 (repeat 99)
20 def main16 = take 5 (cycle (list 1 (list 2 empty)))
21 def main17 = drop 5 "genius vczh!"

    通過類型推導、模板實例化和運行時assembly的生成之后,就可以得到運行結果了:
 1 CTOR : system.empty=0,0
 2 CTOR : system.false=1,0
 3 CTOR : system.list=2,2
 4 CTOR : system.true=3,0
 5 CTOR : sysutils.pair=4,2
 6 FUNC : startup.main0, 8
 7 FUNC : startup.main1, 7
 8 FUNC : startup.main10, 6
 9 FUNC : startup.main11, 16
10 FUNC : startup.main12, 17
11 FUNC : startup.main13, 18
12 FUNC : startup.main14, 19
13 FUNC : startup.main15, 27
14 FUNC : startup.main16, 26
15 FUNC : startup.main17, 24
16 FUNC : startup.main2, 36
17 FUNC : startup.main3, 29
18 FUNC : startup.main4, 39
19 FUNC : startup.main5, 38
20 FUNC : startup.main6, 14
21 FUNC : startup.main7, 41
22 FUNC : startup.main8, 45
23 FUNC : startup.main9, 10
24 FUNC : sysutils.and, 5
25 FUNC : sysutils.ineg, 1
26 FUNC : sysutils.not, 3
27 FUNC : sysutils.or, 2
28 FUNC : sysutils.xor, 0
29 EXTR : kernelfp::iadd=1
30 EXTR : kernelfp::iequ=2
31 EXTR : kernelfp::isub=0
32 main0返回值:4
33 main1返回值:v
34 main2返回值:[c , z , h]
35 main3返回值:[g , e , n , i , u , s ,   , v , c , z , h , !]
36 main4返回值:system.true
37 main5返回值:system.false
38 main6返回值:[2 , 3 , 4]
39 main7返回值:[e , d , c , b , a]
40 main8返回值:[v , | , c , | , z , | , h]
41 main9返回值:[v , c , z , h ,   , l , i , b , r , a , r , y ,   , + , +]
42 main10返回值:[(sysutils.pair g v) , (sysutils.pair e c) , (sysutils.pair n z) ,
43  (sysutils.pair i h)]
44 main11返回值:6
45 main12返回值:system.false
46 main13返回值:system.true
47 main14返回值:[0 , 1 , 2 , 3 , 4]
48 main15返回值:[99 , 99 , 99 , 99 , 99]
49 main16返回值:[1 , 2 , 1 , 2 , 1]
50 main17返回值:[s ,   , v , c , z , h , !]
51 

    調用這些函數的C++代碼如下:
  1 #include "..\..\..\..\VL++\Library\Platform\VL_Console.h"
  2 #include "..\..\..\..\VL++\Library\Script\KernelFP\VL_KFPScript.h"
  3 #include "..\..\..\..\VL++\Library\Data\VL_Stream.h"
  4 #include "..\..\..\..\VL++\Library\Data\VL_System.h"
  5 #include "..\..\..\..\VL++\Library\Data\VL_Uniop.h"
  6 
  7 using namespace vl;
  8 using namespace vl::platform;
  9 using namespace vl::kernalfp;
 10 using namespace vl::stream;
 11 using namespace vl::system;
 12 using namespace vl::uniop;
 13 
 14 VUnicodeString ToString(VL_KfpError::List& Errors)
 15 {
 16     VUnicodeString Result=L"";
 17     for(VInt i=0;i<Errors.GetCount();i++)
 18     {
 19         Result+=L"錯誤["+VUnicodeString(i+1)+L"]\t模塊:"+Errors[i]->Module+L"\t行號:"+VUnicodeString(Errors[i]->Token.LineInFile+1)+L"\r\n";
 20         Result+=L"信息:"+Errors[i]->Message+L"\r\n";
 21     }
 22     return Result;
 23 }
 24 
 25 void RunProgram(VL_KfpMachine::Ptr Machine)
 26 {
 27     MyPlugin Plugin;
 28     Machine->AddPlugin(&Plugin,false);
 29 
 30     VInt Index=0;
 31     while(true)
 32     {
 33         VInt ID=Machine->GetFunctionFirstIdByName(L"startup.main"+VUnicodeString(Index));
 34         if(ID==-1)
 35         {
 36             break;
 37         }
 38         else
 39         {
 40             GetConsole()->Write(L"main"+VUnicodeString(Index)+L"返回值:");
 41             VL_KfpValue MainFunction=Machine->CreateFunction(ID);
 42             GetConsole()->Write(ValueToString(MainFunction)+L"\r\n");
 43         }
 44         Index++;
 45     }
 46 }
 47 
 48 void vlmain()
 49 {
 50     GetConsole()->SetTitle(L"Vczh Kernal FP");
 51     GetConsole()->SetPauseOnExit(true);
 52     GetConsole()->SetTestMemoryLeaks(true);
 53 
 54     VUnicodeString TestDataPath=VFileName(GetConsole()->GetAppPath()).MakeAbsolute(L"..\\TestData\\").GetStrW();
 55     VUnicodeString TestOutput;
 56     VL_UniStrings CodeFiles;
 57     {
 58         VL_FileStream Stream(TestDataPath+L"Project.txt",VL_FileStream::vfomRead);
 59         VUnicodeString Project=ReadText(&Stream);
 60         CodeFiles.SetText(Project);
 61     }
 62 
 63     VL_KfpSymbol Symbol;
 64     VBool ErrorOccurred=false;
 65 
 66     for(VInt i=0;i<CodeFiles.GetCount();i++)
 67     {
 68         VL_FileStream Stream(TestDataPath+CodeFiles[i],VL_FileStream::vfomRead);
 69         VUnicodeString TestCode=ReadText(&Stream);
 70 
 71         VL_KfpError::List Errors;
 72         Symbol.AddUnit(TestCode,Errors);
 73         if(Errors.GetCount())
 74         {
 75             TestOutput+=L"文件\""+VUnicodeString(CodeFiles[i])+L"\"含有語法錯誤:\r\n";
 76             TestOutput+=ToString(Errors);
 77             ErrorOccurred=true;
 78         }
 79     }
 80     if(!ErrorOccurred)
 81     {
 82         VL_KfpError::List Errors;
 83         Symbol.PreCompile(Errors);
 84         if(Errors.GetCount())
 85         {
 86             TestOutput+=L"生成符號表時發生錯誤\r\n";
 87             TestOutput+=ToString(Errors);
 88             ErrorOccurred=true;
 89         }
 90     }
 91     if(!ErrorOccurred)
 92     {
 93         VL_KfpMachine::Ptr Machine=Symbol.CreateMachine();
 94         TestOutput=Symbol.GetReport();
 95         for(VInt i=0;i<Machine->GetCtorCount();i++)
 96         {
 97             VUnicodeString Name=Machine->GetCtorNameByIndex(i);
 98             VInt CtorID=Machine->GetCtorIDByIndex(i);
 99             VInt ParamCount=Machine->GetCtorParameterCountByID(CtorID);
100             GetConsole()->Write(L"CTOR : "+Name+L"="+VUnicodeString(CtorID)+L","+VUnicodeString(ParamCount)+L"\r\n");
101         }
102         for(VInt i=0;i<Machine->GetFunctionNameCount();i++)
103         {
104             GetConsole()->Write(L"FUNC : "+Machine->GetFunctionNameByIndex(i));
105             VL_List<VInt , true> IDs;
106             Machine->GetFunctionIDsByIndex(i,IDs);
107             for(VInt j=0;j<IDs.GetCount();j++)
108             {
109                 GetConsole()->Write(L""+VUnicodeString(IDs[j]));
110             }
111             GetConsole()->Write(L"\r\n");
112         }
113         for(VInt i=0;i<Machine->GetExternalCount();i++)
114         {
115             VUnicodeString Name=Machine->GetExternalNameByIndex(i);
116             VInt ExternalID=Machine->GetExternalIDByIndex(i);
117             GetConsole()->Write(L"EXTR : "+Name+L"="+VUnicodeString(ExternalID)+L"\r\n");
118         }
119         RunProgram(Machine);
120     }
121     else
122     {
123         GetConsole()->Write(TestOutput);
124     }
125     {
126         VL_FileStream Stream(TestDataPath+L"Output.txt",VL_FileStream::vfomWrite);
127         WriteText(&Stream,vceUtf16,true,TestOutput);
128     }
129     {
130         VL_FileStream Stream(TestDataPath+L"Debug.txt",VL_FileStream::vfomWrite);
131         WriteText(&Stream,vceUtf16,true,Symbol.GetDebugInformation());
132     }
133 }
posted on 2008-12-12 10:03 陳梓瀚(vczh) 閱讀(1474) 評論(1)  編輯 收藏 引用 所屬分類: 腳本技術

評論:
# re: Kernel FP成功運行一部分列表處理程序 2008-12-16 00:57 | 肥仔
永不停息的強人。
這是一個人的戰斗!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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高清| 欧美精品九九99久久| 国产亚洲亚洲| 欧美精品一卡| 久久精品视频一| 99在线观看免费视频精品观看| 亚洲一本视频| 国内偷自视频区视频综合| 女同性一区二区三区人了人一| 亚洲美女色禁图| 亚洲第一视频| 久久人人97超碰人人澡爱香蕉 | 亚洲精品一区二区三区福利| 欧美主播一区二区三区| 亚洲另类黄色| 亚洲国产日韩美| 狠狠色狠狠色综合日日tαg| 欧美日韩中文字幕日韩欧美| 久久综合网络一区二区| 亚洲在线观看视频| 在线综合亚洲| 亚洲免费视频网站| 亚洲视频精品| 亚洲欧美一区二区在线观看| 国产精品99久久久久久久久久久久| 久久久人人人| 免费看av成人| 欧美成人亚洲成人日韩成人| 久久美女性网| 亚洲盗摄视频| 亚洲精品国产欧美| 99re热精品| 亚洲午夜免费视频| 亚洲性感激情| 久久精品导航| 欧美大片免费久久精品三p | 国产日韩精品视频一区| 国产拍揄自揄精品视频麻豆| 狠狠色2019综合网| 亚洲精品无人区| 午夜免费电影一区在线观看| 久久综合中文色婷婷| 亚洲高清av在线| 亚洲欧美一区二区三区极速播放 | 欧美四级在线观看| 国产亚洲免费的视频看| 亚洲精品一二| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲国产精品一区| 亚洲免费视频观看| 欧美高清你懂得| 国产一区欧美日韩| 亚洲综合日韩在线| 亚洲精品永久免费| 久久综合五月| 国内精品视频在线观看| 亚洲视频在线观看视频| 欧美高清视频一区二区三区在线观看| 一本色道久久加勒比88综合| 欧美粗暴jizz性欧美20| 黄色综合网站| 久久综合导航| 久久久久久久国产| 狠狠色狠狠色综合| 久久久久久伊人| 久久国产精品久久久久久电车| 国产精品免费一区二区三区在线观看| 亚洲国产精品va在看黑人| 欧美成人精品一区| 欧美暴力喷水在线| 亚洲精品专区| 99精品国产在热久久下载| 国产精品久久久久国产a级| 亚洲欧美国产日韩中文字幕| 亚洲专区欧美专区| 国产精品美女主播在线观看纯欲| 香蕉精品999视频一区二区| 亚洲综合大片69999| 在线不卡视频| 亚洲日韩欧美一区二区在线| 欧美日韩精品一区二区三区四区| 亚洲小说欧美另类婷婷| 亚洲欧美国内爽妇网| 伊人夜夜躁av伊人久久| 亚洲级视频在线观看免费1级| 国产精品电影网站| 亚洲成人在线视频播放 | 免费视频亚洲| 欧美日韩另类一区| 久久天天综合| 欧美涩涩视频| 久久一区二区三区四区| 欧美日韩国产首页| 久久久久久一区二区| 欧美午夜精品久久久久久人妖| 久久精品30| 国产精品一区久久久久| 欧美好骚综合网| 韩国v欧美v日本v亚洲v| 亚洲色图自拍| 日韩一区二区精品视频| 美女91精品| 另类欧美日韩国产在线| 欧美日韩中文另类| aa级大片欧美三级| 99ri日韩精品视频| 麻豆91精品| 欧美大片免费观看| 黑人操亚洲美女惩罚| 亚洲欧美春色| 欧美伊人久久久久久久久影院| 欧美激情精品久久久久久免费印度| 欧美在线播放一区二区| 欧美日韩直播| 亚洲一级影院| 亚洲女ⅴideoshd黑人| 国产精品看片资源| 亚洲欧美日韩系列| 久久综合国产精品| 亚洲福利精品| 欧美日韩成人综合| 亚洲影院免费| 免费一区视频| 91久久极品少妇xxxxⅹ软件| 亚洲福利视频二区| 欧美精品一区在线观看| 一本久道久久综合中文字幕| 亚洲综合精品四区| 精品成人一区二区三区四区| 噜噜噜在线观看免费视频日韩| 亚洲日本欧美在线| 久久超碰97中文字幕| 亚洲国产成人精品久久久国产成人一区 | 亚洲天堂av在线免费| 激情综合色综合久久| 国产精品红桃| 欧美精品一区三区在线观看| 欧美不卡一卡二卡免费版| 亚洲视屏在线播放| 久久久99国产精品免费| 亚洲午夜成aⅴ人片| 亚洲激情第一区| 亚洲高清影视| 亚洲第一精品影视| 国内外成人免费激情在线视频网站| 欧美涩涩视频| 欧美日韩成人| 欧美精品播放| 欧美日韩情趣电影| 国产精品国产三级国产| 欧美亚一区二区| 美女黄色成人网| 欧美激情国产日韩精品一区18| 麻豆成人在线观看| 欧美人与禽猛交乱配视频| 免费高清在线视频一区·| 久久久综合精品| 欧美福利视频网站| 欧美久久成人| 国产欧美日韩精品专区| 国产亚洲午夜| 99在线精品免费视频九九视| 一区二区三区久久精品| 性欧美大战久久久久久久久| 久久久久.com| 亚洲日本理论电影| 亚洲欧美中文日韩v在线观看| 久久动漫亚洲| 欧美天天视频| 在线日韩日本国产亚洲| 亚洲在线视频观看| 久久亚洲视频| 亚洲精品久久在线| 久久久噜久噜久久综合| 国产精品国色综合久久| 亚洲第一区中文99精品| 午夜欧美大片免费观看| 欧美国产日韩精品免费观看| 亚洲一区二区av电影| 欧美黄色一区二区| 亚洲激情网站| 亚洲高清一二三区| 欧美亚洲免费高清在线观看| 欧美精品性视频| 国外成人在线| 亚洲一区二区高清视频| 欧美一区二区三区在线| 亚洲午夜久久久久久尤物| 久久久久久欧美| 好吊色欧美一区二区三区四区| 亚洲综合视频一区| 国产精品99久久久久久宅男| 欧美大片在线看| 一区二区欧美激情|