Scheme

维基百科,自由的百科全书

跳转到: 导航, 搜索
Scheme
多范型
面市時間
1970年代
設計者
Guy L. SteeleGerald Jay Sussman
强类型动态类型
主要實作產品
PLT Scheme, MIT/GNU Scheme, Scheme 48, Chicken, Gambit, Guile, Bigloo, Chez Scheme, STk, STklos, Larceny, SCM, Kawa
衍生副語言
T
啟發語言
Lisp, ALGOL
影響語言
Common Lisp, JavaScript, Ruby, Dylan

Scheme,一種多範型的程式語言,它是兩種Lisp主要的方言之一。它是由Guy L. Steele跟Gerald Jay Sussman在1970年代發展出來。現在的標準是R5RS,並且R6RS目前已经被批准了。Scheme也是第一個使用靜態而非動態變數區域的Lisp方言。

Scheme的哲学是:设计计算机语言不应该进行功能(feature)的堆砌,而应该尽可能减少弱点(weakness)和限制(restriction),使剩下的功能显得必要。[1]

目录

[编辑] 語言元素

[编辑] 注释

在分號(;)之后一直到行末之間就是注释。 变量是由definelet或一些其他的函数所定義的。在上层的变量若以define定義的話,則會變成全局变量如下所示:

(define variable value)

let定义变量的方法如下圖所示

(let ((var1 val1) (var2 val2) ...))

[编辑] 函数

函数定义如下所示:

1 (define (func arg1 arg2 ...) ...)
2 (define func (lambda (arg1 arg2 ...) ...))

在scheme里,函数是第一类对象(first-class object),这代表说可以被当成对象传递,也可以作为函数的返回值。

[编辑] 数据类型

Scheme提供了多个数据类型。如:整数,分数,实数,复数,字符串,符号等等。

[编辑] 條件判斷

(if test then-expr else-expr)

如果test为真,則执行then這個表达式,要不然就执行else這个表达式

(cond (test1 expr1...)
      (test2 expr2...)
       ...
      (else expr))

如果test1為真,則執行expr1。test2為真,執行expr2。要是都不符合的話,就執行expr。

[编辑] Scheme 的 hello, world 程式

sheme 的實作品通常是個 PEPL 的 programming environment 如果要寫成 script,可以使用 guile 直譯器

#! /usr/bin/env guile
!#
 
(write "hello, world")

[编辑] 复活节彩蛋

如果在圣诞节那天运行scheme,开启画面就会从巨大蓝红Lambda变成米开朗基罗梵蒂冈西斯廷礼拜堂天顶上绘制的,创始纪中的创造亚当(2001年圣诞节测试)[2]

[编辑] 實作

[编辑] 参见

  1. ^ http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-3.html
  2. ^ 创造亚当 http://artcess.files.wordpress.com/2008/07/creationofadam.jpeg

[编辑] 外部链接

个人工具