scheme语言编译成c语言,Scheme语言--简单介绍
一年前事實上有時間看完SICP這本書,后來由于種種原因,一直沒有繼續再學。由于SICP中使用Scheme確實應用不多。在Java,C++的語言眼里,Scheme確實非常另類。現在MIT已經放棄了使用Scheme作為SICP的教學語言而轉向python之際,我在此開始學習這本書與這門語言的學習。SICP主要使用Scheme語言來解決計算機科學中的一些問題。為了督促自己,每天都能學習。積小流而成江海,把自己的學習過程放在這里,以供自己復習。
本系列主要包含兩部分Scheme語言層面的問題及SICP中的課程方面,兩個部分相輔相成。今天開始Scheme語言的第一節。
Scheme簡單介紹
Scheme語言是Lisp語言的一種變種,是一種表處理語言。其語法簡單,easy學習,能夠使使用者專著于解決這個問題而非語言本身。
1.1 基本類型
scheme支持的基本數據類型有整數,實數,分數,復數,對這些基本類型能夠使用這些類型之上的各種操作如+-*/%等等。字符串””,記號quote。對于quote,(quote exp)表示exp為記號,不進行解析。常寫作’exp。
List有兩種類型,一種結尾元素為空表(),(list ‘a ‘b ‘c),等價與(cons ‘a (cons ‘b (cons ‘c ‘() ))),還有一種表為不正常表,表尾為結尾元素,(cons ‘a (cons ‘b ‘c)) 這樣的表的值是(a b.c),.表示其后元素為表的結尾元素。
表的操作
car:取表的第一個元素
cdr:表在取car后的其余部分,對于正常表,其結果是一個表,對非正常表,結果可能是一個元素。
cons:構造表,假設第二個參數是表,則將第一個參數作為總體放在第二個參數的表中。
List:構造表,將各個參數做為總體放在一個表中。
構造正常表的還有一種方法:使用quote即’ 如’(a b c)。
1.2 變量綁定
( let ((arg1 val1) (argv2 val2)? …) exp1 exp2 … )
變量綁定僅僅在當前的let表達式中有效,比如(let ((+ *)) (+ 2 3)? =6)
Let操作能夠嵌套運行,但綁定僅僅對let內部可見,對外層let不可見。
1.3 lambda表達式
(Lambda (arg1 …) exp1 exp2)
從演算來看,(let ((var value) …) exp1 exp2…) == ((lambda (var …) exp1 exp2 …) value … )
對于Lambda函數的參數
假設形參僅僅有一個,則能夠有隨意數量的實參,全部實參被格式化為一個list傳給函數。
假設形參list是不正常的list的形式,則形參相應的實參被一一映射,而后的實參被格式化成一個list傳給.后的形參,這也意味著,實參個數必須保證形參個數。假設形參是一個正常的list,則實參必須被一一映射。
因此((lambda (x) x) ‘a) = a 而((lambda x? x) ‘a) = (a)
1.4 define定義
Define定義的是全局可見的,在scheme中,能夠定義一個過程,當中使用一個沒有定義的過程,這不會引起錯誤,但假設你使用它,就會出現錯誤,除非你補充定義了所引用的過程。
(define mylist (lambda x? x))
1.5 條件表達式
If表達式:(if cond1 result1 result_other)
Cond表達式:( cond? (test1? exp1) (test2 exp2) … (else expn ))也能夠羅列全部,而不用else
Or表達式:(or exp1 exp2 …)
Not表達式:(not exp)使得#f #t之間轉換。
關于類型推斷:
(type? Var)能夠得出var是否是type類型的,典型的類型有null,number,string,list,pair…
Eqv?能夠推斷兩個值是否相等
1.6 遞歸過程
一個過程定義中調用了自己,遞歸過程一般分兩部分,終止部分與遞歸部分。
1.7 map操作
( map fun argv …)
映射操作將fun應用到agv..的各個元素上,并返回一個list。以下是兩個演示樣例:
(map abs '(1 -2 3 -4 5 -6)) => (1 2 3 4 5 6)
(define trans
(lambda (lst)
(cons (map car lst) (map cdr lst))))
(trans '((a.1) (b.2) (c.3))) => ((a b c) 1 2 3)
1.8 賦值操作
Set!用來設置變量的值。變量能夠是全局的,也能夠是局部的。Set!使用的變量必須是事先定義過的。能夠是let也能夠是define。
總結
以上是生活随笔為你收集整理的scheme语言编译成c语言,Scheme语言--简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北醒TF-mini激光雷达实现定位
- 下一篇: [转载]深入分析:我们为何需要DDR2内