Scheme语言--简介
???? 一年前其實有時間看完SICP這本書,后來因為種種原因,一直沒有繼續再學。因為SICP中使用Scheme確實應用不多。在Java,C++的語言眼里,Scheme確實很另類。如今MIT已經放棄了使用Scheme作為SICP的教學語言而轉向python之際,我在此開始學習這本書與這門語言的學習。SICP主要使用Scheme語言來解決計算機科學中的一些問題。為了督促自己,每天都能學習。積小流而成江海,把自己的學習過程放在這里,以供自己復習。
???? 本系列主要包括兩部分Scheme語言層面的問題及SICP中的課程方面,兩個部分相輔相成。今天開始Scheme語言的第一節。
Scheme簡介
Scheme語言是Lisp語言的一種變種,是一種表處理語言。其語法簡單,容易學習,可以使使用者專著于解決問題而非語言本身。
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语言--简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机组成原理实验脱机运算器,计算机组成
- 下一篇: ai在计算机教学中的应用,浅谈人工智能在