新闻资讯
看你所看,想你所想

scheme

Scheme 编程语言是一种Lisp方言,诞生于1975年,由 M来自IT 的 Ger温毫六革减艺ald J. Sussman 和 Guy L. Steele Jr. 完成。它是现代两大Lisp方360百科言之一;另一个方言是Common Lisp

Scheme遵循极简主义哲学,权段侵第以一个小型语言核心作为标准,加上各种强力语言工具(语法缩考卫得按贵夫糖)来扩展语言本身。

MIT曾用Scheme作为计算机系入门课程的编程语言杀花盾直学板黄。计算机程序语言界著名的魔法书《计算机程序的构造和解释》(又称SICP)正是利用Scheme来整眼宣友解释程序设计。

历史悠久的Scheme依然活跃,拥有针对各种计算机平台和环境的实现,例如Rac客松ket、Guile、MIT Scheme、Chez Sch你华卫工eme等。Guile是GNU工具体系里最重要的部件之一,被许多自由软件和开源软件作为内置脚本语言使用。

  • 中文名称 Scheme语言
  • 外文名称 Scheme Programming Language
  • 诞生于 1975年
  • 完成 MIT

内容简

  Lisp 语言历史悠久,在来自计算机程序语言里,年龄仅次于Fortran。二十世纪五十年代,计算机科学家先是发明了针对数字计算的 Fortran 语言,后来针对符号计算,由MIT 的John McCarthy于1960年开发出了Lisp (list processing)语言。该语言起初为表处理而设计,后来广泛用于人工智能。Lisp 程序中充满了一对对嵌套的小括号,这些嵌套的符号表达体现了递归。递归是数学上的基本概念之一,从递归理论出发,一切可以计算的函数高特要最终都可以划归为几种基本的递归函数的种种组合。

  1994年时众多Lisp版本得到了相当的统一,统一之后的版本称为Common LI360百科SP。Common Lisp带有庞大的函数库,语言的规范长达千页以上,包括面向对象的 CLOS。

 胞到按抗德谓充等 Scheme语言的规范很短,总共只有50页鲁措进题况油令甲,甚至连Common Lisp 规范的索引的长度立假快都不到,但是却被称为是现代编程语言王国的皇后。它与以前和以后的 Lisp 实现版只评对它含走元本都存在一些差异。Scheme易学易用

  Scheme的一个主要特性是可以像操作数据一样操作函数调用。Scheme 是 MIT 在70苗白引米盾剧干水年代创造出来,目的之一是训练人的计算思维,以其简洁的语言环境和大量的脑力思考而限杀甲著称。

  正由于lisp语言的历史悠久,所以最初接触S容货长演转级写沿cheme的语法,可能不适应或者感到迷惑,但是这种语言自有它独特职笔心的魅力。

语法定义

  let表达式语法糖果

  语法:(let ((var val) ...) exp1 exp2 ...)

  说明:let表达式是 lambda 表达式的语法,即:(let ((var val) ...) exp1 exp2 ...),为 ((lambda (var ...) exp1 exp2) val ...)

  示例:

  (let ((x 2) (y 3)) (+ x y))

  ; 先绑定:x=2,y=3,再计算x+y的值,结果为5。注意 (x 2) 和 书渐定同座小不(y 3) 外还有一层括号。

  更多的示例:

  (let ((f +))

  (f 2 3)) ; return 5

  (let ((f +) (x 2))

  (f x 3)) ; return 5

  (let ((f +) (x 2) (y 3))

  (f x y)) ; return 5

  用 define 绑定对象和 set! 赋值

  语法:(define var exp)

  (set! var exp)

  说明:define绑定的对象在当前作用域中有效。define 和 set! 味食要液行哪节的区别是define既能赋值又能定义村毫声义曲争志山变量,而set!只能席普烈于六跟对已经定义的变量赋值。

  示例:

  (define a 1)

  a ; return 1

  啊齐环(set! a 2)

  a 陆蛋厚英脸河皮资司; return 2

  (let ((a 3)) a) ; return 3

  a ; return 2

  (let ((a 3)) (set! a 4) a) ; return 4

  a ; return 2

  (let ((a 3)) (define a 5) a) ; return 5

  a ; return 2

  (set! b 1) ; 错误,b尚未定义

  lambda 表达式和函数定义

  语法:(lambda (var ...) exp1 exp2 ...)

  说明:lam格应沿名bda表达式用于定义函数。var ... 是亚毛深也李终针溶参数,exp1 exp2 ...是函数的执行 部分。通常需要结合局部定义 let 或者全局定义表达式define,再进行函数调用。

  示例:

  ((lambda (x) (+ x x)) (* 3 4)) ; return 24

  说明:先用lambda定义了函数,参数是x,函数返回x+x。同时该语句也完成了函数调用,实参是 12 (等于3*4),因此返回值是 24 (等于12+12)。

  在let表达式中定义函数。

  Scheme语言中,函数作为一种数据类型,通过赋值语句,将lambda表达式赋值给相应的函数。

  示例:

  (let ((double (lambda (x) (+ x x))))

  (list (double (* 3 4))

  (double (/ 99 11))

  (double (- 2 7)))) ; return (24 18 -10)

  说明:let表达式将lambda定义的函数赋值给double,参数是x,返回 x+x。接下来分别三次调用 double 函数,并将结果以列表形式返回。list表达式负责生成列表。

  用define全局定义表达式来定义函数。

  用 let 定义的函数只能在 let表达式中有效,如果想定义在整个程序中有效的函数定义,需要用到全局定义表达式--define。

  示例:

  (define double (lambda (x) (+ x x)))

  (double 12) ; return 24

  (double (* 3 4)) ; return 24

  说明:define表达式定义了全局有效的函数 double。两次调用double的返回值都是 24。

  定义函数的简写

  用 define 定义的函数的语法可以简化,即将 lambda 去掉。即将语法

  (define var0

  (lambda (var1 ... varn)

  e1 e2 ...))

  简写为:

  (define (var0 var1 ... varn)

  e1 e2 ...)

  示例:

  (define (double x) (+ x x))

  (double 12) ; return 24

  (double (* 3 4)) ; return 24

  说明:本例是前一个例子的简化版本,更简洁明了。

主要特点

  括号嵌套

  Lisp 程序中评误格充满了一对对嵌套的小括号,球展这些嵌套的符号体来自现了最基本的数学思想--递归。

  语法简洁

  Scheme语言的规范很短,总共只有50页。

 360百科 函数编程语言

 距情背 一个函数(Fu批裂构流准文张制护构nction)是这个编程语言中所谓的第一等的公民。也就是说函式可以像一个 int 或者 float 一样被很方便的传递来传递去。这也就是所谓"Functional编程语言"中,Functional 一词的由来。

  自动内存管理

  支持尾递归

  提高了递归效率

  cont粮谓迅考防背举夜映伟inuation

  可移植性好

  Scheme开发的程序有很好的可移植性,这是由钱气声苗便于Scheme在不同的计算机平台有相应的解释器和编译器。

  脚本语言

  由于scheme语法简洁,一个Scheme解释会就卷矿准三盟效初望器可以非常的小巧。Sche美民延好印述了动少me可以作为脚本语言而内嵌于一些工具之中。

  数据结构

  数字

  下面间复早校降都是合法的数字表示方需胶存测模品快前外法:47,1/3,2.3,4.3e14,1+3i。

  字符

  字符前面需要用#\做前缀。如下面都是合法字符:

  #\a #\A #\b #\B #\space #\newline

  字符串

  由双引号括起来的字符组成字符串。如:"A little string"

  布尔值

  布尔值True和False分别用 #t 和 #f 表示。

  列表

  用圆括号括起来的,可以包含任何数据类型的称为列表。如:(a little (list of) (lists))

  数组(vector)

  用#为境地斗为沿言着苦求治旧前缀,如:#(1 2 "string" #\x 5)

  函数(或称为过程)

  把函数作为一种数据类型,是包括Scheme语言在内的Lisp的特色。

  符号

  符号除了不能够以数字开头的任何厂手题区药字符可组成符号。如:Symbols: this-is-a-symbol foo a32 c$23型优请汽取*4&7+3-is-a-sym为岩势省尽抗bol-too!

  血东密李介分号开始一行注释。 如:

  (+ 3 1) ;return 4

表达式

  常量表达式返回本身的值。所创过析如:

  ⒊14 ; 返回 3.14

  #t ; 返回布尔值 #t

  #\c ; 返回字符 #\c

  "Hi!" ; 返回字符串 "Hi!"

引用

  语法:(quote obj) 或者简写为 'obj

  (+ 2 3) ; 返回 5

  '(+ 2 3) ; 返回列表 (+ 2 3)

  (quote (+ 2 3)) ; 返回列表 (+ 2 3)

记法

  Scheme的表达式的写法有些特别,表达式用括号括起来。括号里面的第一个出现的是函数名或者操作符,其它是参数。Scheme的这种表达式写法可以叫做前置式。下面是一些Scheme的表达式的例子以及其对应的C语言的写法。

  Scheme

  C

  (+ 2 3 4)

  (2 + 3 + 4)

  (< low x high)

  ((low < x) && (x < high))

  (+ (* 2 3) (* 4 5))

  ((2 * 3) + (4 * 5))

  (f x y)

  f(x,y)

  (define (sq x) (* x x))

  int sq(int x) { return (x * x); }

顺序计算

  语法:(begin exp1 exp2 ...)

  说明:顺序执行表达式 exp1,exp2,...,返回最后一个表达式的结果

  示例:

  (define x 3)

  (begin

  (set! x (+ x 1))

  (+ x x)) ; 返回结果 8

  说明:begin表达式,依次先用set!表达式为x赋值为4,在运算x+x,返回结果8。

  主要的Scheme环境有:Racket、MIT Scheme、Scheme48、Chez Scheme

转载请注明出处一千网 » scheme

分享:

相关推荐

    影视大全