Scheme定義
Scheme 編程語言是一種Lisp方言,誕生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成。它是現(xiàn)代兩大Lisp方言之一;另一個(gè)方言是Common Lisp。
Scheme遵循極簡(jiǎn)主義哲學(xué),以一個(gè)小型語言核心作為標(biāo)準(zhǔn),加上各種強(qiáng)力語言工具(語法糖)來擴(kuò)展語言本身。
MIT曾用Scheme作為計(jì)算機(jī)系入門課程的編程語言。計(jì)算機(jī)程序語言界著名的魔法書《計(jì)算機(jī)程序的構(gòu)造和解釋》(又稱SICP)正是利用Scheme來解釋程序設(shè)計(jì)。
歷史悠久的Scheme依然活躍,擁有針對(duì)各種計(jì)算機(jī)平臺(tái)和環(huán)境的實(shí)現(xiàn),例如Racket、Guile、MIT Scheme、Chez Scheme等。Guile是GNU工具體系里最重要的部件之一,被許多自由軟件和開源軟件作為內(nèi)置腳本語言使用。
歷史與特點(diǎn):
Lisp 語言歷史悠久,在計(jì)算機(jī)程序語言里,年齡僅次于Fortran。二十世紀(jì)五十年代,計(jì)算機(jī)科學(xué)家先是發(fā)明了針對(duì)數(shù)字計(jì)算的 Fortran 語言,后來針對(duì)符號(hào)計(jì)算,由MIT 的John McCarthy于1960年開發(fā)出了Lisp (list processing)語言。該語言起初為表處理而設(shè)計(jì),后來廣泛用于人工智能。Lisp 程序中充滿了一對(duì)對(duì)嵌套的小括號(hào),這些嵌套的符號(hào)表達(dá)式體現(xiàn)了遞歸。1994年時(shí)眾多Lisp版本得到了相當(dāng)?shù)慕y(tǒng)一,統(tǒng)一之后的版本稱為Common LISP。Common Lisp帶有龐大的函數(shù)庫(kù),語言的規(guī)范長(zhǎng)達(dá)千頁(yè)以上,包括面向?qū)ο蟮?CLOS。
Scheme語言的規(guī)范很短,總共只有50頁(yè),甚至連Common Lisp 規(guī)范的索引的長(zhǎng)度都不到,但是卻被稱為是現(xiàn)代編程語言王國(guó)的皇后。它與以前和以后的 Lisp 實(shí)現(xiàn)版本都存在一些差異。現(xiàn)特征如下:
(1)括號(hào)嵌套:Lisp 程序中充滿了一對(duì)對(duì)嵌套的小括號(hào),這些嵌套的符號(hào)體現(xiàn)了最基本的數(shù)學(xué)思想——遞歸。
(2)語法簡(jiǎn)潔:Scheme語言的規(guī)范很短,總共只有50頁(yè)。
(3)函數(shù)編程語言
一個(gè)函數(shù)(Function)是這個(gè)編程語言中所謂的第一等的公民。也就是說函式可以像一個(gè) int 或者 float 一樣被很方便的傳遞來傳遞去。這也就是所謂“Functional編程語言”中,F(xiàn)unctional 一詞的由來。
(4)自動(dòng)內(nèi)存管理
(5)支持尾遞歸:提高了遞歸效率
(6)continuation
(7)可移植性好
Scheme開發(fā)的程序有很好的可移植性,這是由于Scheme在不同的計(jì)算機(jī)平臺(tái)有相應(yīng)的解釋器和編譯器。
(8)腳本語言
由于scheme語法簡(jiǎn)潔,一個(gè)Scheme解釋器可以非常的小巧。Scheme可以作為腳本語言而內(nèi)嵌于一些工具之中。
(9)數(shù)據(jù)結(jié)構(gòu)
I.數(shù)字
下面都是合法的數(shù)字表示方法:47,1/3,2.3,4.3e14,1+3i。
II.字符
字符前面需要用#\做前綴。如下面都是合法字符:#\a #\A #\b #\B #\space #\newline
III.字符串:由雙引號(hào)括起來的字符組成字符串。如:"A little string"
IV布爾值:布爾值True和False分別用 #t 和 #f 表示。
V.列表:用圓括號(hào)括起來的,可以包含任何數(shù)據(jù)類型的稱為列表。如:(a little (list of) (lists))
VI.數(shù)組(vector):用#為前綴,如:#(1 2 "string" #\x 5)
VII.函數(shù)(或稱為過程):把函數(shù)作為一種數(shù)據(jù)類型,是包括Scheme語言在內(nèi)的Lisp的特色。
VIII.符號(hào)
符號(hào)除了不能夠以數(shù)字開頭的任何字符可組成符號(hào)。如:Symbols: this-is-a-symbol foo a32 c$23*4&7+3-is-a-symbol-too!
IX.注釋 分號(hào)開始一行注釋。 如:(+ 3 1) ;return 4
Scheme應(yīng)用實(shí)例
今天小編給大家講解的這個(gè)例子是關(guān)于shareinstall的。我們知道,Shareinstall其實(shí)是一個(gè)APP的推廣輔助工具,它主要的作用就是進(jìn)行渠道統(tǒng)計(jì)。另外,它還提供了免填二維碼、一鍵跳轉(zhuǎn)、自動(dòng)渠道打包、自動(dòng)建立社區(qū)關(guān)系等功能。而scheme語言主要應(yīng)用在一鍵跳轉(zhuǎn)功能上。
以IOS SDK為例,ShareInstall通過標(biāo)準(zhǔn)的scheme、universal link等技術(shù),在app安裝的情況下,從各種瀏覽器(微信、QQ、新浪微博、釘釘?shù)戎髁魃缃卉浖膬?nèi)置瀏覽器)喚醒 app 并傳遞自定義參數(shù),避免重復(fù)安裝。
我們可以從universal link配置作為載體,去觀察scheme的活躍性。如下:
Universal link是iOS9的一個(gè)新特性,通過Universal link,App可以通過各種瀏覽器跳轉(zhuǎn)到App(例如微信內(nèi)可不通過safari,一鍵跳轉(zhuǎn)到App),真正實(shí)現(xiàn)一鍵跳轉(zhuǎn)到相應(yīng)界面。 備注:iOS9以上推薦使用Universal link。
(1)配置developer.apple.com的相關(guān)信息
到蘋果開發(fā)者中心,為當(dāng)前的App ID開啟Associated Domains服務(wù):
(2)配置Xcode
在Xcode中配置ShareInstall為當(dāng)前應(yīng)用生成的關(guān)聯(lián)域名:Associated Domains 開關(guān)打開,添加 Domains:applinks:f6bkarebhf22eb.shareinstall.com
在AppDelegate中的continueUserActivity方法中調(diào)用,用來處理Universal link。
//Universal Links 通用鏈接
{
//判斷是否通過ShareInstall Universal Links 喚起App
if ([ShareInstallSDK continueUserActivity:userActivity]) {
return YES ;
}else{
//其他代碼
return YES;
}
}
(3)配置App的URL Scheme
iOS系統(tǒng)中App之間是相互隔離的,通過URL Scheme, App之間可以相互調(diào)用,并且可以傳遞參數(shù)。 備注:iOS9以下通過Url Scheme實(shí)現(xiàn)拉起。
(4) 在Xcode里選中Target—Info—URL Types, 配置shareInstall為當(dāng)前應(yīng)用生成的Url Scheme,如圖所示:
identifier 配置為 com.ShareInstall,URL Schemes從shareInstall獲取(dekf0466)。 注:identifier 一定要配置為com.ShareInstall
(5) URL Scheme相關(guān)代碼配置
注意:當(dāng)需要在shareInstall這個(gè)方法中處理第三方回調(diào)的時(shí)候(比如支付寶、微信回調(diào)等),請(qǐng)注意區(qū)分。
//iOS9以下 URI Scheme
-(BOOL)application:(UIApplication )application openURL:(NSURL)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
//判斷是否通過ShareInstall URL Scheme 喚起App
if ([ShareInstallSDK handLinkURL:url]) {
return YES;
}else{
//其他代碼
return YES;
}
return YES;
}
//iOS9以上 URL Scheme
{
//判斷是否通過ShareInstall URL Scheme 喚起App
if ([ShareInstallSDK handLinkURL:url]) {
return YES;
}else{
//其他代碼
return YES;
}
return YES;
}
(6)獲取喚醒參數(shù),直達(dá)具體頁(yè)
通過在url中附帶具體的參數(shù),喚醒a(bǔ)pp并跳轉(zhuǎn)到具體頁(yè)。
NSLog(@"喚醒參數(shù)params=%@",params);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL shceme 進(jìn)來的" message:[self DataTOjsonString:params] delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
//彈出提示框(便于調(diào)試,調(diào)試完成后刪除此代碼)
[alert show];
}
(7) 其他代碼配置
如果做測(cè)試,獲取參數(shù),則必須在Appdelegate.h加上如下測(cè)試代碼。
#pragma mark 將oc數(shù)據(jù)類型轉(zhuǎn)成NSString
-(NSString *)DataTOjsonString:(id)object
{
if (!object) {
return null;
}
NSString *jsonString = null;
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object
options:NSJSONWritingPrettyPrinted
error:&error];
if (! jsonData) {
NSLog(@"Got an error: %@", error);
} else {
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
return jsonString;
}
一鍵跳轉(zhuǎn)的優(yōu)勢(shì)
通過 URL Scheme 和 Universal Links 實(shí)現(xiàn)了在不同瀏覽器中拉起APP。這樣Shareinstall SDK就減少了應(yīng)用的代碼冗余,提供了通用的一鍵拉起接口,使用戶有了更加舒適的體驗(yàn),同時(shí)給移動(dòng)開發(fā)者對(duì)自己產(chǎn)品的管理和推廣,也提供了便利。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前名稱:什么是Scheme?原來還可以這樣應(yīng)用!-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://www.chinadenli.net/article28/ccigjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、面包屑導(dǎo)航、小程序開發(fā)、建站公司、營(yíng)銷型網(wǎng)站建設(shè)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容