相較于一般的高級語言或腳本語言,本文所涉及的挖掘語言有如下特性:
創(chuàng)新互聯(lián)建站成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點,以客戶需求中心、市場為導(dǎo)向”的快速反應(yīng)體系。對公司的主營項目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計、行業(yè) / 企業(yè)門戶設(shè)計推廣、行業(yè)門戶平臺運營、成都app軟件開發(fā)、成都做手機網(wǎng)站、微信網(wǎng)站制作、軟件開發(fā)、遂寧服務(wù)器托管等實行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)建站可以獲得的服務(wù)效果。
1.變量需要聲明方可使用,但數(shù)組或向量的大小不用事先聲明(即支持動態(tài)數(shù)組);
2.支持一般的算術(shù)表達式、關(guān)系表達式及邏輯表達式;
3.支持用戶自定義函數(shù),但函數(shù)不能嵌套聲明或定義;
4.支持條件(包括if及if-else)和循環(huán)語句(包括continue和break語句),但支持一種while形式的循環(huán)語句;
5.支持多級嵌套地申明用戶自定義類型(類似C/C++中的typedef struct)。
除了支持和一般高級語言或腳本語言類似的特性外,本文所提到的語言還支持如下和挖掘相關(guān)的特性,它們一般以函數(shù)方式出現(xiàn):
1.針對信息安全特點,支持IP地址(包括IPv4和IPv6)、日期時間等的處理及其相關(guān)運算;
2.內(nèi)置數(shù)據(jù)預(yù)處理相關(guān)功能,包括對數(shù)據(jù)的過濾、篩選(可支持結(jié)構(gòu)化或非結(jié)構(gòu)化安全數(shù)據(jù));
3.提供和統(tǒng)計相關(guān)的分布模型、參數(shù)估計和假設(shè)檢驗相關(guān)功能,支持正態(tài)分布、T-分布、卡方分布等常見模型;
4.支持基于時間的序列分析;
5.提供較為豐富的數(shù)據(jù)輸入和輸出(包括數(shù)據(jù)可視化)功能;
6.支持挖掘腳本之間的包含(類似“include”或“import”);
7.更重的一點是,所有數(shù)據(jù)挖掘的腳本既可以在數(shù)據(jù)采集單元執(zhí)行(特別是數(shù)據(jù)預(yù)處理部分),也可以在核心分析單元執(zhí)行。
系統(tǒng)支持兩類常量類型:
1.字符串型常量:以雙引號括起的任意字符串,例如:”abc”或”2012-12-25 17:00:00”等;
2.數(shù)值型常量:任意整型或浮點類型數(shù)值常量,例如:123或3.1415;支持長度視宿主計算機字長。
與常量類似,系統(tǒng)也支持如下兩種基礎(chǔ)變量類型:
1.字符串型變量:申明方式如下
string變量名;
其中string為系統(tǒng)保留字(參見附錄);
2.數(shù)值型變量:申明方式如下
numeric變量名;
其中numeric為系統(tǒng)保留字(參見附錄),數(shù)值型變量不區(qū)分整型還是浮點類型,但如是浮點則最多保留7位小數(shù)。
對于上述變量名,系統(tǒng)約定只能以英文字母開頭,可以混用數(shù)字和下劃線,最大長度不能超過50個字符且不等使用系統(tǒng)保留字。
由于本系統(tǒng)支持用戶自定義類型(必須先定義),如:
list Person
{
stringname;
numericage;
string sex;
…
}
故如果需要使用自定義類型則變量申明方式如下:
Person 變量名;
由于在安全數(shù)據(jù)挖掘中會大量使用向量,故本系統(tǒng)亦支持一維數(shù)組,但需要使用多維數(shù)組時,數(shù)組的元素也可以是數(shù)組。
數(shù)組的申明方式如下:
1.字符串類型:string @變量名;
2.數(shù)值型:numeric @變量名;
3.用戶自定義:user_type @變量名。
在引用數(shù)組元素時,使用如下方式:數(shù)組變量名[下標(biāo)](下標(biāo)從0開始;下標(biāo)也可以為一個表達式)。
如果下標(biāo)越界系統(tǒng)也不會崩潰,而會返回“undef”。
在本文所涉及的挖掘語言運算符號包括如下幾類(按優(yōu)先級排列):
1.成員運算符:即“.”,單目運算,獲取變量的成員;
2.乘除運算:包括“*”、“/”和“%”(除數(shù)取余);僅支持?jǐn)?shù)值型變量運算,對于“*”而言除支持標(biāo)量運算也支持向量運算(不同于普通的數(shù)學(xué)上的向量乘法,而僅僅是向量元素相乘);
3.加減運算:包括“+”、“-”;支持?jǐn)?shù)值型向量運算;
4.關(guān)系運算:包括“<=”、“<”、“>”、“>=”、“==”、“!=”、“=~”(正則匹配)、“!~”(正則不匹配);其中正則表達式支持類似Perl的類型,除正則匹配/不匹配運算外,其它關(guān)系運算均支持?jǐn)?shù)值型、字符型常量/變量;
5.邏輯與運算:即“&&”;
6.邏輯或運算:即“||”。
在許多語言中,函數(shù)是擴展內(nèi)涵和外延的唯一方式;所以本系統(tǒng)提供了大量內(nèi)置函數(shù),而且系統(tǒng)也支持用戶自定義函數(shù)。
與大多數(shù)語言類似,本系統(tǒng)函數(shù)的定義方式如下:
返回類型sub函數(shù)名(參數(shù)列表)
{
函數(shù)體
}
其中,sub是系統(tǒng)保留字,返回類型和參數(shù)列表均可以為空;多個參數(shù)之間用逗號分隔;函數(shù)不允許嵌套定義。
現(xiàn)舉例如下(求兩個數(shù)值型變量的最大者):
numeric get_max(numeric a,numeric b)
{
if ( a> b )
{
returna;
}
else
{
returnb;
}
}
函數(shù)的調(diào)用格式如下:
函數(shù)名(參數(shù));
需要注意的一點是,本系統(tǒng)約定所有參數(shù)(如是變量)傳遞均是引用方式而非復(fù)制方式,故如在函數(shù)中需對調(diào)用參數(shù)的值進行修改則主調(diào)函數(shù)中的相應(yīng)變量值也會被修改。
函數(shù)調(diào)用舉例如下(使用上節(jié)定義的函數(shù)):
max = get_max(3,5);
在本文所涉及的挖掘語言中,語句是非常重要的一環(huán),與大多數(shù)高級語言或腳本語言類似,也支持順序、條件和循環(huán)三類基本形式。
賦值語句是最基本的語句,形式如下:
變量 = 表達式;
賦值語句的左值(left operand)必須是變量,變量的類型可以是標(biāo)量或向量;我們約定:當(dāng)左值為向量時,賦值語句的右值(right operand)可以是向量,也可以是標(biāo)量,如果是標(biāo)量則將其實際的值賦給向量的第一個元素,而如果將向量賦值給標(biāo)量,則僅取向量的第一元素。
另外,賦值語句的左、右值的數(shù)據(jù)類型必須相同,否則編譯時就會報錯。
以下試舉幾個例子以說明賦值語句的使用方法:
1.常量賦值:
a = 5;
2.變量賦值:
a = b;
3.表達式賦值:
a = b*b – 4*a*c;
4.向量賦值:
@a = @b
5.向量與標(biāo)量相互賦值:
@a = b*b – 4*a*c;#a[0]的值是表達式b*b – 4*a*c的計算結(jié)果
a = @array;#a的值為array[0]的值
在本文所闡述的條件語句中,只支持if或if-else形式條件語句,而不支持類似C語句中的switch-case條件語句;另外一點和C語言條件語句不同的是,條件語句必須用花括號括起,否則被視為非法。
條件語句的形式包括:
if (表達式)
{
…
}
和
if (表達式)
{
…
}
else
{
…
}
需要說明的一點是,如果表達式的值只要不是非零值則表達式為真,否則為假。
條件語句之間可以任意進行嵌套,但在其中申明變量的作用域(scope)則僅限于其內(nèi),如出現(xiàn)變量的重復(fù)定義,則按就近原則適配(這些變量在編譯時會轉(zhuǎn)換為不同的文件內(nèi)地址,故不會發(fā)生沖突)。
對于循環(huán)語句而言,考慮到實現(xiàn)和學(xué)習(xí)的成本,故僅支持一種形式:
while (表達式)
{
…
}
而不支持類似do-while和for循環(huán)形式。與條件語句類似,花括號是必須的,即使循環(huán)體僅包含一條單獨的語句(有點類似Perl語句)。
另外,考慮到完整的流程控制,在循環(huán)語句中可以使用continue和break,它們分別能回溯到循環(huán)的表達式判斷部分和跳出循環(huán);當(dāng)然可以直接使用無條件跳轉(zhuǎn)語句來達到同樣的效果,只不過這樣做會使流程控制變得略微有些不夠“優(yōu)雅”。
無條件跳轉(zhuǎn)語句就是goto語句,其形式如下:
goto 標(biāo)號;
關(guān)于標(biāo)號的定義如下:
標(biāo)號:語句
包含文件采用如下形式:
import “文件名”
被包含文件應(yīng)設(shè)置在系統(tǒng)可以搜索的路徑中(搜索路徑使用系統(tǒng)變量)。