简介

Scheme 是什么?

Scheme 是一种小巧而强大的程序语言。

Scheme 是小巧的,强大的,优雅的

Scheme 是 LISP 的一种方言,它继承了 LISP 的优点。这里对 Scheme 的描述大部分也适合其它 LISP 方言。

Scheme 不但设计非常干净,而且非常强大。说它小巧是因为它只有7种最基本的语法结构,甚至连循环语句都没有。它的核心语法用几页纸就可以全部叙述完毕。Scheme 的 report 只有 50 多页,还没有某些语言手册的索引长。你可以在这里下载一个 Scheme Report 的 PDF 版本。

然而这种看起来简单小巧的语言是那样的强大!

Scheme 可以可以实现几乎所有我们所知道的程序设计方法。函数式,强制式,消息传递式,逻辑式,…… 在 Scheme 里,所有的过程都可以被当成数据操作,而且它可以把通常隐藏在幕后工作的 continuation 作为对象来操作。

Scheme 可以实现优秀的软件工程。用 Scheme 编程可以摆脱普通语言的“计划—实现”的设计流程,而使用自底向上的设计方法。也就是说,你不需要在设计程序之前做好所有的计划。Scheme 语言随着问题改变,语言和问题都向着对方生长,最后达到一个完美的结合点。

Scheme 是非常优雅的,它具有数学的美感。Scheme 从一开始就被设计为一种通用的程序语言。它不是为了解决某个特殊的小问题的设计,不是功能堆砌在功能之上,最后搞的不可理解的语言。

Scheme 是稳定的。Scheme 注重的是“质量”,而不是工业上的利用价值,所以 20 年来 Scheme 基本上没有变化。你不用担心有一天收到这样烦人的消息:“我们鼓励大家使用 'Scheme2004' 的语法。” Scheme 的语法就像象棋的规则,一旦知道这个规则,剩下需要做的就是考虑怎样取得胜利。

Scheme 特别适合描述算法。用 Scheme 编程序,你可以专注于设计算法本身,而不是为语言本身的事情而烦恼,比如语法,内存泄漏之类。所以用这种语言教学,学生可以学会“解决现实世界的问题” 而不是困惑于 “电脑自己的问题”。学生会很快的理解到“计算” 的实质内涵,深刻体会到计算科学是什么。

Scheme 被很多大学用于各个领域的计算机教学,甚至一些中学和小学也开始利用 Scheme 来讲授计算科学。令人惊奇的是一些 10 岁小孩可以用 Scheme 写出 Don Woods 的 adventure 游戏。

使用 Scheme 作为教学工具的一个明显的特征就是,Scheme 语言本身从来不会成为学习的重点。使用 Scheme 作为工具的课程从来不会专门讲授 Scheme,因为没有这个必要。学生在初次接触计算机的几天里就能熟悉 Scheme,学习怎样用它来计算。之后,大家就开始到处找问题来计算,不再考虑语言的问题了。Scheme 的理念是程序语言不是拿来“学”的,而是拿来“用”的。

Scheme 在教育界被如此广泛的使用的结果就是,新一代的优秀的计算学家,很多人的“母语”是 Scheme。

可以免费得到的参考材料

Scheme 的社会是非常开放和自由的。所以你不用奇怪,最好的书都有免费的版本 :)

  • Structure and Interpretation of Computer Programs

    昵称 "The Wizard Book" 或者 "The Purple Book"。

    Scheme 的鼻祖 Gerald Jay Sussman 和计算机教育专家 Hal Abelson 合写的,20 年来影响整个计算机科学教育的著作,著名的 MIT 课程 6.001 的课本。这是 MIT 的电子工程和计算机科学专业本科生的必修课,其它与计算相关专业也鼓励参加。每年上这门课的 MIT 学生超过 500 名。全世界有超过 100 所大学采用这个教材。这里有一个不完全列表。

    它着重讲述的不是 Scheme 语言本身,也不是数据结构和算法。在简短的介绍 Scheme 的简单语法之后,课本马上开始讲述深入的计算概念:函数式程序设计,高阶函数,数据抽象,流,数据制导,消息传递,逻辑程序设计,解释器设计,编译器设计,寄存器机器模拟……

    这本书让学生从一个语言设计者和实现者的高度来看待问题,而不只是作为一个普通语言的用户。读了这些内容,学生可以真正体会到“计算科学”的实质内涵,而不是被一些细节束缚,只见树木不见森林。

  • Revised(5) Report on the Algorithmic Language Scheme

    Scheme 语言的规范定义。它可以到这里下载。也可以在本地下载双列 PDF 版本。

  • The Scheme programming Language

    R. Kent Dybvig 写的一本书。深入的解析了 Scheme 语言。CPS, syntax-case,……在这里都有详细的解释。

  • Teach Yourself Scheme in Fixnum Days

    Teach Yourself Scheme in Fixnum Days 可以作为一个有使用其它语言经验的程序员的教材,看这本书你可以很快接触到 Scheme 独一无二的强大特点。

  • An Introduction to Scheme and its Implementation

    一个深入的 Scheme 和 LISP 教材。适合 Scheme 解释器,编译器的设计者。

  • The Scheme Programming Language ,一个幻灯片。一目了然的介绍 Scheme 的基本特征。
  • The Internet Scheme Repository

    在这里可以找到许多有用的 Scheme 代码,几乎所有的免费 Scheme 实现,各种算法的 Scheme 实现,处理 Scheme 的工具比如 slatex,

  • http://srfi.schemers.org/

    这里是 SRFI(Scheme Requests for Implementation) 的基地。你如果觉得自己定义很多库函数,比如排序的,操作字符串的, regexp 很麻烦。但是又害怕使用不“标准”的函数库之后跟别人不兼容。

    那么在这里你可以找到一些“准标准”的函数库。SRFI 里定义的函数是鼓励 Scheme 解释器实现的。你会看到有很多工作已经有人帮你做了。你只需要调入 SRFI 的实现就可以使用很方便可移植的函数库了。

    SRFI 有点像 RFC。以后某一些函数一定会成为各种 Scheme 解释器都配备的东西,就像 ftp, http 一样,成为每台支持 TCP/IP 的机器支持的东西。

  • Grinnell College 的一门利用 Scheme 来讲授的计算机科学基础课

    以下的书籍没有电子版本

  • Concrete Abstractions: An Introduction to Computer Science Using Scheme

    另一本用 Scheme 描述计算机科学的教材。

  • Essentials of Programming Languages。
  • The Little Schemer

    一本 LISP 的入门书籍。难度没有 SICP 大,但是非常精辟。

Scheme 解释器和编译器

Scheme 的实现很多,几乎所有解释器和编译器都是自由软件,除了 Chez。

你可以随便选择 MzScheme, guile, bigloo, chez, chicken, gambit, kawa, SISC, GNU/MIT scheme, petite, plt, pscheme, scheme48, SCM, scsh, stk, STklos, ELK, Gauche, sxm, umbscheme, ...

每一种解释器都有强项,可以根据自己的需要选择。其中,Guile 和ELK 适合做嵌入式解释器;bigloo, GambitC 和 Chicken 可以把 Scheme 编译成机器代码,速度快;DrScheme/MzScheme 界面最友好, Kawa 和 SISC 支持 Scheme 到 Java 的转换,字节码编译;Scheme 48 非常简洁可靠;Scsh 在 Scheme 48 基础上做了很多根操作系统接合的界面,可以作为通用的的脚本语言;Stk 和 STklos 自带面向对象系统和 gtk 图形接口;Gauche 具有方便的 regexp, 网络,图形接口,UTF-8 支持,可以作为很方便的脚本语言,进行系统管理等操作;Chez 是Cadance Research systems 出品的商业 Scheme 解释器;Petite 是Chez 的免费版本,比 Chez 少了一个编译器。

更多的实现可以在 这里找到。关于部分解释器,有一个比较过时的比较在 这里 。

我个人推荐使用 Aubrey Jaffer 的 SCM。它遵守 R5RS,非常方便,调试能力很强,有 SLIB 支持,可以编译成 C。

神奇的 Scheme

展现 Scheme 最吸引我的地方。

Scheme 的应用

部分我所知道的 Scheme 的应用。看看 Scheme 被用在什么地方了。

MIT Project on Mathematics and Computation

AL 动画语言

Kali 分布式计算语言

Envision: scheme with pictures

BRL - the Beautiful Report Language

Scheme 的一些工程应用

一个 Scheme 写的量子计算机模拟器

Scheme Language相关推荐

  1. 算法语言Scheme修订6报告 R6RS简体中文翻译

    算法语言Scheme修订6报告 R6RS简体中文翻译 来源 https://r6rs.mrliu.org/ MICHAEL SPERBERR. KENT DYBVIG, MATTHEW FLATT,  ...

  2. linux c/c++ GDB教程详解

    Reference: https://blog.csdn.net/nancygreen/article/details/16962467 学习使用了GDB一段时间后,发现它真的好强大!好用! GDB是 ...

  3. webstorm常用设置

    改变注释的颜色 file----->setting----->Editor----->color Scheme ----->language Defaults   (块注释)b ...

  4. 比较全面的gdb调试命令

    用GDB调试程序  GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序 列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行 软件的优势在于 ...

  5. 用GDB调试程序(转)

    用GDB调试程序 GDB概述 ---- GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做 ...

  6. 用GDB调试程序(七)

    改变程序的执行 ------- 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你 ...

  7. GDB 使用详解-----转载

    很优秀的文章但不知哪位大神所写,多谢这位大神! 一.初始化 输入gdb进入gdb调试环境.或者直接输入gdb + progfile来加载文件. 注意该文件是使用gcc(或g++)编译得到的.为了使 g ...

  8. python反向缩进_在Pycharm中对代码进行注释和缩进的方法详解

    在Pycharm中对代码进行注释和缩进的方法详解 一.注释 1. #单行注释 2. """ 多行注释 """ 3. pycharm多行注释快 ...

  9. 转:用GDB调试程序

    从CSDN的网站上找到的GDB使用说明. 原文标题:用GDB调试程序     作者:haoel (QQ是:753640,MSN是: haoel@hotmail.com)     关键字:gdb 调试  ...

最新文章

  1. 360起诉山东卫视或有利于杜绝有偿新闻
  2. 计算机网络tcp传送,计算机网络基础课程—传输控制协议(Tcp)
  3. MVC与单元测试实践之健身网站(八)-统计分析
  4. 【C语言简单说】十一:switch 补
  5. 无盘服务器 cpu占用,顺网科技网维大师程序占CPU资源多的解决过程
  6. Netty in action—Netty简介
  7. java uploadify 3.2_jquery文件批量上传控件Uploadify3.2(java springMVC)
  8. 网页文件是用HTML语言编写的,用HTML语言制作简单的网页
  9. 视频教程-EOS 入门实战-区块链
  10. 一个浏览器播放5个或者6个flv的视频就不能播放了
  11. php的表达爱意的一句代码,表达爱意的诗句(精选50句)
  12. 一个强悍而优美的Android视频播放器
  13. 下落(fall)【模拟】
  14. 用命令提示符打开资源管理器目录
  15. 哈哈哈,假如计算机是中国人发明的,那代码应该这么写
  16. jmp指令流程图怎么写_流程图模板
  17. NFC无线充电(WLC)介绍
  18. 让王老吉崛起的三大营销战役
  19. Arch-01-02-互联网产品设计常用文档类型 BRD、MRD、PRD、FSD
  20. TL437x-IDK基于AM437x的FPGA与ARM通信测试

热门文章

  1. IT工程师为什么女生少?
  2. 【经验分享】Web前端开发测试常见问题总结
  3. HihoCoder 1246:王胖浩与环
  4. javascript实现鼠标移动两个小人的动画效果
  5. 斐讯空气检测仪M1使用Easylink配置WIFI的图文教程
  6. 程序猿也爱学英语,有图有真相
  7. JavaScript 之 核心语法 [ 对象 ]
  8. c语言和Python整除符号,互联网常识:python除法运算符有哪些
  9. 密码学之对称加密体系(2):AES、SM4的 S 盒具体算法的实现
  10. 中国式家长计算机科学家攻略,中国式家长特长图鉴一览表 Q版图表讲解各特长发展路线...