Scheme 语言 编程思想上

Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成。它是现代两大Lisp方言之一;另一个方言是Common Lisp。
Scheme遵循极简主义哲学,以一个小型语言核心作为标准,加上各种强力语言工具(语法糖)来扩展语言本身。
MIT曾用Scheme作为计算机系入门课程的编程语言。计算机程序语言界著名的魔法书《计算机程序的构造和解释》(又称SICP)正是利用Scheme来解释程序设计。
历史悠久的Scheme依然活跃,拥有针对各种计算机平台和环境的实现,例如Racket、Guile、MIT Scheme、Chez Scheme等。Guile是GNU工具体系里最重要的部件之一,被许多自由软件和开源软件作为内置脚本语言使用。
在Scheme 语言作为脚本语言,能够很快的对代码进行编译,无需复杂的检查变量以及函数或者方法的类型,而且对于这种函数式编程,逻辑思路也是非常的明确。在我初步学习的过程中只是利用了java jdk中的kawa工具包进行简单的函数式编程

     Scheme语言在实际中的用途也是比较多的,在我们的图形编辑软件GMIP中广泛应用,在GMIP中以Scheme作为脚本语言应用非常广泛。

1、一些Scheme的基本用法

1)cons:把元素加到链表里;(cons 1 '(2 3 4 5)),有两个参数.

2)quote:引用用来阻止记号被求值,它是用来用符号或者表原封不动的传递给程序,而不是求值之后传递,由于用的次数很多,被记为 ’ ,例如,(+ 2 3)会被求值为5,然而(quote (+ 2 3))则向程序返回(+ 2 3)本身。’(+ 2 3)代表列表(+ 2 3)本身

3append:把两个或多个链表组成一个链表;(append '( 1 2) '(3 4))  return (1 2 3 4)

4list:把两个或多个链表连成一个链表;(list '(1 2) '(3 4)) return ((1 2) (3 4))

5)lambda:用于定义过程。lambda需要至少一个的参数,第一个参数是由定义的过程所需的参数组成的表。lambda的语句体都是隐式的begin代码结构

6 let:用于定义局部变量,格式 (let binds body),变量的作用域scope为body体,[binds] → ((p1 v1) (p2 v2) ...)

7map:映射是将同样的行为应用于表所有元素的过程。R5RS定义了两个映射过程:其一为返回转化后的表的map过程,另一为注重副作用的for-each过程:(mapprocedure list1 list2 ...)

8apply:是将一个过程应用于一个表。此函数具有任意多个参数,但首参数和末参数分别应该是一个过程和一个表

9cond:类似于C语言的的case操作,(cond ((测试) 操作) … (else 操作))

10and:and后可以有多个参数,只有它后面的参数的表达式的值都为#t时,它的返回值才为#t,如果表达式的值都不是boolean型的话,返回最后一个表达式的值> (and #t 5) 5

2、Scheme中数据类型

Scheme提供了大量通用的数据类型,整数,浮点数,复数,有理数,字符串,布尔变量,散列,数组,矢量,点对,和列表。本次主要研究后几种数据结构。

(1)首先是点对,比如(1,2)是一个点对,一个点对包含两个指针,每个指针指向一个值。我们用函数cons构造点对。比如说(cons 1 2)就构造出点对(1 . 2)。因为点对总是又函数cons构造,点对又叫做cons cell。点对左边的值可以用函数car取出来,右边的值可以由函数cdr取出来。

Scheme 语言 编程思想上_第1张图片

如果一个点对右边不是一个值,而是一个指针,指向另外一个列表,我们就得到了列表。比如下面的图表示列表(1 2 3 4),实际上由点对构成:(1 . (2 . (3 . 4. ‘())。可以看出,列表本质是单向链表,图示如下:

Scheme 语言 编程思想上_第2张图片



你可能感兴趣的:(Scheme 语言 编程思想上)