Scheme简明教程
序言:
这是一份Scheme编程语言的入门教程。旨在作为一份快速上手指南,以便初学者在步入更广更深的正式课程前可以获取该语言上手所需的应用知识(入门后,请读者更深入的学习Scheme)。
本教程将引导读者写出简明实用的Scheme代码。尽管不会覆盖到Scheme语言的方方面面,但我们也不会避开这门语言中的很有用处但让人觉得难理解、生涩、罕见、不标准、甚至奇怪的部分。比如call-with-current-continuation、系统接口和多样化的方言等。我们会基于解决问题来做一些讨论,但不会是单纯的探索高深的纯语言理论。我因此删除了许多经典的Scheme指南。所以本教程不会出现深层次的教学方法、不会详细的关注Scheme语义、没有元数据解释、没有对深层次的实现的讨论、也没有对Scheme语言优点的评价。这并不是说这些内容不重要,但它们对想快速上手的初学者来说没有实际意义。
到底能够有多快?我不确定是否有人能够在三周时间内自学完Scheme,但我确实听说了Scheme的入门应该只需要半天的工夫。Scheme标准手册,虽然很细至完备,但也只不过只有50页。最终在某个下午,你会完全理解Scheme和它的标准,但在那之前没有人会知道需要度过多少个让人觉得满头雾水的下午。希望读者能尽快领悟,这就是我的简明教程。
Acknowledgment: Matthias Felleisen , Matthew Flatt (鸣谢部分翻译省略)
开发环境:译者用的是Berkeley大学的STK环境,可在附属文件中查找。
Berkeley大学的Scheme课程资料
MIT大学的Scheme课程资料
第一章 进入Scheme编程
按惯例,我们总是以一个可以输出”Hello, World!”字符串的控制台程序开始。打开你最习惯的文本编辑器,用以下内容创建一个名为hello.scm的文件:
;The first program
(begin
(display "Hello, World!")
(newline))
第一行是注释语句,当Scheme遇到一个分号,它将忽略该分号以及这一行分号之后的语句。
begin是Scheme中一种用来标明语句段开始的语句。这个语句段中有两个子语句段。第一段调用了display过程来向控制台输出它的参数(“Hello, World!”字符串)。它后面调用newline 过程输出一个回车换行。
要运行这段程序,首先得启动你的Scheme。通常在操作系统的命令运行窗口直接输入执行Scheme环境启动程序就可以了。比如MzScheme,只要在命令窗口中输入运行mzscheme就可以了。(如果是STK-Win32 ,只需要双击运行MS-Win32下的相应bat文件就行了)
这将启动Scheme的命令提示行程序,它将读取你的输入并执行,然后会将结果打印在命令窗口上,再等待接程序的输入。由此我们通常称之为 输入-执行-打印 循环。这和操作系统的命令行提示没什么区别,它也是读取你的命令并执行,然后再等待更多的命令被输入。就像操作系统的命令提示行一样,Scheme的命令行有它自己的提示符,通常是 > 符号,也可能是其它类似符号。
在Scheme命令提示符后输入命令加载hello.scm文件。在提示符后输入:
(load "hello.scm")
Scheme将执行hello.scm文件中的程序,输出Hello, World!和回车换行。之后又会回到命令提示符,等待新输入。
有这样一个勤劳的命令提示行,你没有必要总是把程序写到文件再加载。有时候可以更简单一些,尤其是当你在分析代码的时候,可以直接在命令提示符后直接输入表达式来查看结果。比如直接在命令提示符输入
(begin (display "Hello, World!")
(newline))
马上在提示符后得到输出结果。
Hello, World!
实际上你可以更简单的直接在命令行中输入”Hello, World!”字符串,然后你可以立刻得输出的字符串结果,
"Hello, World!"
因为命令行会马上运算字面量 "Hello, World!" 得到 "Hello, World!"。(注意结果有双引号)
除了第二种方式产生的结果具有双引号外,两段程序还有一个标志性的区别。第一段(用begin开头的)并没有做任何的运算,而显示的结果是display和newline过程的副作用向标准输出写出来的。第二段程序,"Hello, World!"运算得到的结果在这个情况下和这个字符串本身是一致的。
以后,我们会使用标记 => 来表示运算。就像这样 E => v 表示语句段E 运算得到结果值为v。例如,
(begin
(display "Hello, World!")
(newline))
=>
(没有结果),尽管它有输出 Hello, World!到标准输出的副作用。而另一个程序段,
"Hello, World!"
=> "Hello, World!"
在上面两种代码情况下,我们运行完后还是停在命令提示符后。如果要退出Scheme,输入
(exit)
代码段,这样会退出Scheme命令行。
Scheme命令行非常便于交互式的测试程序和程序片段。然而这绝不是必须的。你当然可以坚持传统的方式完全在文件中来创建程序,然后用Scheme来执行它们但并不使用任何明显的命令行。在MzScheme中,例如你可以在操作系统的命令行中这样输
mzscheme –r hello.scm
这样不需要和Scheme命令行打交道就可以产生问候的结果了。在问候结果产生后,mzscheme将会退回操作系统的命令提示。这几乎就像是你直接写了echo Hello , World!
你甚至可以把hello.scm当成是一个系统命令来看待(一个内核脚本或批处理文件),但具体得等到第十六章来讲解。
译:heros
分享到:
相关推荐
5. Fluent-Scheme-UDFs的高级特性,例如如何使用RP_Get和RP_Set函数在运行时获取和设置变量的值。 6. Fluent-Scheme的内置函数库,可能包括用于数学计算的函数、字符串处理函数等。 7. 与Fluent图形用户界面(GUI)...
这是一本在国外比较有名的Scheme编程语言的入门教材。本教材适合任何对Scheme编程语言感兴趣的人阅读,尤其是有其他编程语言(特别是动态语言)编程经验,希望快速了解Scheme的不同点并且快速上手写点东西的人。
由于提供的文件内容片段实际上并没有提供关于标题“fluent——scheme简明中文手册”的具体内容,而是呈现了一些无序的数字和章节标题,我们无法直接基于这些片段生成详尽的知识点。但我们可以根据手册的标题,以及...
Scheme-Lib是一个专门为Scheme编程语言设计的库,特别针对Android平台进行了优化和适配。Scheme是一种历史悠久、功能强大的Lisp方言,以其简洁的语法和强大的函数式编程特性著称。在Android平台上使用Scheme-Lib,...
标题与描述中的“统一方案(unified scheme)”与“基于笔触的自适应渲染(adaptive stroke-based rendering)”是本文的关键概念,涉及到计算机图形学领域中的非摄影真实感渲染技术(NPR)。该论文由Hyung W. Kang...
在Scheme语言的中文教程中,初学者可以通过详细学习其语法和规则,来掌握如何使用这种语言进行编程。教程中会详细讲解各种基础概念,例如: - 操作符和数据类型:包括基本的数值操作符如加法(+)、减法(-)、乘法...
3. **Arithmetische Funktionen, globale und lokale Scheme-Variablen**: - 算术函数部分介绍了在Scheme中进行数学计算的函数,如加、减、乘、除等。 - 全局变量和局部变量部分解释了Scheme语言中变量的作用域和...
CorSegRec: A Topology-Preserving Scheme for Extracting Fully-Connected Coronary Arteries from CT Angiography CorSegRec:拓扑保持 全连通提取方案 冠状动脉CT血管造影
本教程将详细讲解如何使用MIT-Scheme进行编程,包括在命令行环境和Emacs编辑器下的操作。 一、MIT-Scheme简介 MIT-Scheme是一个开源的Lisp方言,广泛用于教学和研究。它的设计目标是提供一个纯净的Scheme环境,便于...
- **标题**:“mit-scheme-fererence”(应当是“MIT Scheme Reference”的误拼)指向了MIT Scheme的一个版本的手册,这是一份详尽的技术文档,用于指导用户如何有效地使用MIT Scheme这一Lisp方言进行编程。...
### Scheme语言基础教程 #### Scheme语言概述 Scheme作为MIT基于LISP语言开发的一种变体,具有独特的地位。它不仅保留了LISP的核心理念——一种功能性的编程方式,而且通过简化和标准化,使得学习和使用更加便捷...
"A Preprocessing Scheme for High-Cardinality Categorical Attributes"这个主题探讨的就是如何有效地处理这类问题。 一、高基数类别变量的挑战 1. 维度灾难:高基数会导致数据的维度增加,这可能会引起过拟合,...
作者特别感谢Matthias Felleisen引领其进入Scheme和高效编程领域,并感谢Matthias Flatt创建的MzScheme,作为教程示例语言。 #### 四、开始编程旅程 **知识点8:Hello World程序** 教程通过“Hello World”程序...
4. Fluent-Scheme-UDFs 接口 Fluent Scheme 提供了一个 UDFs(User-Defined Functions)接口,允许用户定义自己的函数。该接口包括: * 数据交换:通过使用 `udf` 函数,可以在 Fluent 和 Scheme 之间交换数据。 *...
《Teach Yourself Scheme in Fixnum Days》是一本详尽的教程,旨在帮助读者在有限的时间内掌握Scheme语言的基础及进阶知识。此书由Dorai Sitaram撰写,并且在网络上部分中文翻译已经存在(参考链接:...
在FLUENT软件中,UDF(User Defined Functions)和Scheme编程是两种强大的工具,用于扩展其内置功能,解决复杂的流体动力学问题。本主题主要关注如何利用这两种技术进行混合编程,以模拟蓄热式熔铝炉的工作过程,包括...
通过YSAT中译版的学习,读者将能掌握Scheme的基本语法和核心概念,为参与SCIP或进行更高级的Scheme编程打下坚实基础。在实践过程中,不断探索和应用这些知识点,将有助于提升对函数式编程的理解和技能。
《HA-ColorSchemeDesigner09-yfy:探索配色艺术与专业工具的奥秘》 在数字设计领域,色彩搭配是至关重要的一环,它能够直接影响到用户对产品的第一印象和使用体验。"HA-ColorSchemeDesigner09-yfy" 是一款专为设计...
### Lisp语言教程(Scheme)知识点概述 #### 一、Scheme语言简介 - **起源与发展**:Scheme语言作为Lisp家族的一员,诞生于1975年的麻省理工学院(MIT)。尽管它没有像C++、Java这样的语言在商业领域得到广泛应用...