基本介紹
Racket源自著名的專家型語言PLT Scheme,同時又是Lisp語言的一個分支。它適用於從腳本Script到應用程式開發的任務執行工具,包括圖形用戶界面,Web伺服器等。支持編譯器的虛擬機,創建獨立的可執行程式的工具,Racket Web伺服器,具有豐富而全面的功能庫,適用於初學者和專家編程。
開發者 | PLT Inc. |
軟體版本 | R5.2.1 / February 2, 2012 |
作業系統 | 跨平台(如Unix、Linux、MacOSX、Windows) |
程式語言 | 13種(如Scheme、LISP、Algol60等) |
編程方式 | IDE圖形化集成編程環境 |
授權方式 | GNU LGPL |
標準 | R5RS, R6RS: Scheme |
開發狀態 | 活躍 |
Scheme最早由美國麻省理工學院MIT的Guy Lewis Steele Jr.在1970年代發展而來,後由Felleison發起PLT Scheme項目,其主要目的還是作為函式式編程的啟蒙和教學語言,因此Racket很適合作為一個學習語言來學習,並於2010年6月將PLT Scheme更名為Racket,同時將DrScheme更名為DrRacket。
發展歷程
Lisp語言的歷史很久,幾乎與史上第一個高級語言Fortran一樣長。1957年計算機科學家首先發明了針對數字計算的Fortran語言,後來針對符號計算,由MIT的John McCarthy於1958年開發了Lisp (List processing)語言。DrRacket就起源於同Fortran一樣古老的Lisp語言,其主要的技術發展歷程如下:
歷程 | Lisp語言系列 | 貢獻者 | 備註 |
1950s | IPL語言 | 美國Carnegie-Mellon大學 的Newell、Shaw、Simon | 首創“表結構” |
1958 | Lisp誕生 | John McCarthy於美國MIT | 僅比Fortran晚一年 |
1975 | Scheme | 由MIT的Gerald J. Sussman 和Guy L. Steele Jr.完成 | 與其他lisp不同的是scheme 可以編譯成機器碼的 |
1983 | xlisp | David Betz | 具備面向對象功能,是AutoLisp之源 |
1984 | Common Lisp | Guy L. Steele | 實現標準化 |
1990 | IEEE Scheme | IEEE | IEEE standard, 1178–1990 (R1995) |
1994 | ANSI Common Lisp | ANSI | ANSI X3.226-1994 |
2005 | Practicle Common Lisp | Peter Seibel | Open Source (free online) |
2007 | Scheme Standard | R6RS | |
2010-6 | 更名為Racket | Matthias Felleison | 同時將DrScheme更名為DrRacket |
計算機語言的種類非常的多,總的來說可以分成機器語言,彙編語言,高級語言三大類。高級語言又可分為面向對象、過程式、函式型、邏輯型語言四種不同類型,其中lisp語言為經典的函式型程式語言。TIOBE世界程式語言排行榜展現了程式語言的流行趨勢,而且每個月都有最新的數據被更新,詳見右圖。相對於各種嵌入在特定產品中的語言Emacs Lisp和AutoLISP,LISP語言的主要現代版本包括Common Lisp,Clojure和Scheme。Scheme的一個主要特性是可以像運算元據一樣操作函式調用,其的主要目的是訓練人的機器化思維,以其簡潔的語言環境和大量的腦力思考而著稱。
主要功能
Racket可通過創建大量的語法系統來支持和創建新的程式語言,包括Typed Scheme,ACL2, FrTime, Lazy Scheme和ProfessorJ等 。作為程式語言的通用測試平台,Racket軟體包主要工具包括:
* racket——系統核心部分,主要包括編譯器、解釋器和運行庫程式;
* DrRacket——原為DrScheme,是一個基於Racket的開源、跨平台系統的IDE集成編程環境,更加適用於初學者的GUI圖形化用戶編程界面;
* raco——基於字元界面的命令行執行工具,用於執行Racket命令集,如安裝系統組件功能包,創建函式館等。
Racket的特點是具有全面而豐富的庫,可用於實現xml, web-server, web-framework, multiple-threads, pattern match, latex, slides, posix, GUI等,其實用性不比Common Lisp差。另外其與眾不同的特點在於macro和continuation,並引入了syntax object和compilable macro的概念。
具體說來,LISP有以下幾個主要特點:
1.計算用的是符號表達式而不是數;
2.具有表處理能力,即用鍊表形式表示所有的數據;
3.控制結構基於函式的複合,以形成更複雜的函式;
4.用遞歸作為描述問題和過程的方法;
5.用LISP語言書寫的EVAL函式既可作為LISP語言的解釋程式,又可以作為語言本身的形式定義;
6.程式本身也同所有其他數據一樣用表結構形式表示。
已經證明:LISP的這些特點是解決人工智慧核心問題的關鍵。它和後來由英國倫敦大學的青年學生柯瓦提出、由法國馬賽大學的考爾麥勞厄(Alain Colmerauer)所領導的研究小組於1973年首先實現的邏輯式語言PROLOG並稱為人工智慧的兩大語言,對人工智慧的發展起了十分深遠的影響。
可視化編程示例
Lisp 程式中充滿了一對對嵌套的小括弧,這些嵌套的符號表達式體現著“遞歸”。遞歸是數學上的基本概念之一,從遞歸理論出發,一切可以計算的函式最終都可以劃歸為幾種基本的遞歸函式的任意組合。Lisp語言擁有理論上最高的運算能力。
#lang slideshow
;; 下列代碼將簡單的四方形以遞歸的方式生成右側相對複雜的幾何圖形
(define (square n) (filled-rectangle n n))
(define (series mk) (hc-append 4 (mk 5) (mk 10) (mk 20) ))
(define (four p) (define two-p (hc-append p p)) (vc-append two-p two-p))
(define (checker p1 p2) (let ([p12 (hc-append p1 p2)] [p21 (hc-append p2 p1)]) (vc-append p12 p21)))
(define (checkerboard p) (let* ([rp (colorize p "red")] [bp (colorize p "black")] [c (checker rp bp)] [c4 (four c)]) (four c4)))
(series (lambda (size) (checkerboard (square size))))
Web伺服器編程示例
利用Racket所提供的擴展庫可以較方便地開發出web伺服器應用程式,例程如下:
#lang web-server/insta
(define (start request)
(response/xexpr
'(html
(head (title "My Blog"))
(body (h1 "Hello DrRacket World")))))
利用DrRacket編輯並運行提示如下(詳見右圖),系統將自動打開web瀏覽器並顯示相關網頁內容。
Welcome to DrRacket, version 5.1.3 [3m].
Language: racket #lang web-server/insta; memory limit: 128 MB.
Stop this program at any time to terminate the Web Server.
>