日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scheme语言编译成c语言,Scheme语言--简单介绍

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言--简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。