<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; Scheme</title>
	<atom:link href="https://www.phppan.com/tag/scheme/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sun, 10 May 2026 02:26:45 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Scheme学习笔记2: 输入和输出</title>
		<link>https://www.phppan.com/2011/12/scheme-study-02-input-and-output/</link>
		<comments>https://www.phppan.com/2011/12/scheme-study-02-input-and-output/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 01:16:00 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[程序相关]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Scheme]]></category>
		<category><![CDATA[ZOJ]]></category>
		<category><![CDATA[函数式编程]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1545</guid>
		<description><![CDATA[本文包括以下内容： read和write 字符操作 文件操作 作为一门语言，它需要提供与外设交互的方式，在各种 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>本文包括以下内容：</p>
<ul>
<li><a href=#1>read和write</a></li>
<li><a href=#2>字符操作</a></li>
<li><a href=#3>文件操作</a></li>
</ul>
<p>作为一门语言，它需要提供与外设交互的方式，在各种语言中都提供了输入输出，Scheme语言也不例外。Scheme语言的输入输出功能，是在C基础上的一种封装。</p>
<p><a name="1"></a><strong>read和write</strong></p>
<p>
输入输出中我们常用是读和写，对应读与写，在Scheme中有read和write。<br />
read是读操作，它将 Scheme 对象的外部表示转换为对象本身。<br />
read的标准格式为：(read port)<br />
其中port参数可以省略，此时它使用的默认是current-input-port的返回值。
</p>
<p>
write是写操作，它的标准格式为：(read obj port)<br />
write过程的作用是向给定端口port输出obj的内容。其中输出内容的反斜线、双引号等会被反斜线转义。write的参数中port参数可以省略，默认情况下使用current-output-port的返回值。
</p>
<p>这里的默认值我们可以对应到标准输入和输出。从ZOJ的第一题我们看下read的使用。<br />
如下代码：</p>
<p>ZOJ第一题(<a href="http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1001">zoj1001</a>)：</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span>define <span style="color: #66cc66;">&#40;</span>main<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>a <span style="color: #66cc66;">&#40;</span>read<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>b <span style="color: #66cc66;">&#40;</span>read<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span><span style="color: #66cc66;">&#40;</span>eof-object? a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>begin
<span style="color: #66cc66;">&#40;</span>display <span style="color: #66cc66;">&#40;</span>+ a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>newline<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>main<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>main<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>
题目很简单，就是输入两个数，输出和。这里的难点是对于输入结束的判断，在C语言中scanf函数有一个EOF的判断，而在Scheme语言中，我们通过判断输入的输入的值是否为eof来判断，其对应的判断过程为eof-object?（嗯，问号也是调用过程的组成部分，个人非常喜欢这种表达方式），在判断不为结束时继续递归调用，实现C语言中的while循环。
</p>
<p>
<a name="2"></a><strong>字符操作</strong></p>
<p>
对于字符的读写操作，我们常用的三个过程如下：
</p>
<p>
read-char<br />
标准格式：　(read-char port)<br />
读取一个字符，并将port指针指向下一个字符。<br />
read-char的参数中port可以省略，默认情况下使用current-input-port的返回值。
</p>
<p>
write-char<br />
标准格式：　(write-char port)<br />
write-char过程的作用是向给定端口port输出的内容。<br />
write-char的参数中port可以省略，默认情况下使用current-output-port的返回值。
</p>
<p>
peek-char<br />
标准格式：　(peek-char port)<br />
获取一个字符，但并不将port指针指向下一个字符<br />
peek-char的参数中port可以省略，默认情况下使用current-input-port的返回值。
</p>
<p>以一个示例说明这三个过程的调用，示例实现从指定文件中按字符读取内容，并放到一个列表中。</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span>define input_port <span style="color: #66cc66;">&#40;</span>open-input-file <span style="color: #ff0000;">&quot;temp&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>define read-char-with-file <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>port<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>eof-object? <span style="color: #66cc66;">&#40;</span>peek-char port<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
'<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>read-char port<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>read-char-with-file port<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>input-port? input_port<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>begin
<span style="color: #66cc66;">&#40;</span>display <span style="color: #66cc66;">&#40;</span>read-char-with-file input_port<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>close-input-port input_port<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>begin
<span style="color: #66cc66;">&#40;</span>display <span style="color: #ff0000;">&quot;read file form temp failed&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>newline<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>
这段代码写得有些复杂，我们可以通过let关键字和call-with-input-file过程来简化这段代码，如下：
</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span>define output-chars
<span style="color: #66cc66;">&#40;</span>call-with-input-file <span style="color: #ff0000;">&quot;temp&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> f <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>x <span style="color: #66cc66;">&#40;</span>read-char p<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>eof-object? x<span style="color: #66cc66;">&#41;</span>
'<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x <span style="color: #66cc66;">&#40;</span>f <span style="color: #66cc66;">&#40;</span>read-char p<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span> 
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>display output-chars<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>newline<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>call-with-input-file的标准调用格式为：</p>
<p>procedure: (call-with-input-file path procedure)</p>
<p>
 call-with-input-file过程给指定的文件创建一个port，并将这个port传递给第二个参数指定的过程procedure，当procedure执行完成时，call-with-input-file过程将关闭打开的输入port并返回procedure返回的值。
</p>
<p></p>
<p><a name="3"></a><strong>文件操作</strong></p>
<p>
上面的示例已经提了文件操作，关于文件操作，除了针对输入和输出的打开port和关闭port，判断port是否存在的过程外，我们常用还有判断文件存在，删除文件，Scheme提供的这两个过程来与文件系统交互：file-exists?和delete-file<br />
file-exists?的作用是判断文件是否存在，其调用格式如下：<br />
(file-exists? path)<br />
如果文件存在，返回#t，否则返回#f
</p>
<p>
delete-file的作用是删除一个文件，其调用格式如下：<br />
(delete-file path)</p>
<p>path是字符串类型，如果所给的文件不存在，则会显示错误：No such file or directory</p>
<p>在使用delete-file之前可以调用file-exists?来判断文件是否存在。
</p>
<p>除了上面介绍的一些简单输入输出，Scheme还提供了更强大和灵活的输入输出机制，如对编码的处理，对二进制的处理，对字符串的操作等，具体可以见官方文档或《The Scheme Programming Language, 4th Edition》</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2011/12/scheme-study-02-input-and-output/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scheme学习笔记一</title>
		<link>https://www.phppan.com/2011/11/scheme-study-01/</link>
		<comments>https://www.phppan.com/2011/11/scheme-study-01/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 01:08:19 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[程序相关]]></category>
		<category><![CDATA[Scheme]]></category>
		<category><![CDATA[Scheme学习]]></category>
		<category><![CDATA[SICP]]></category>
		<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1530</guid>
		<description><![CDATA[Scheme学习笔记 本文包括如下内容： 开发环境配置 hello world 变量、过程 标准输入 if语句 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>
<p>Scheme学习笔记</p>
<p>本文包括如下内容：</p>
<ul>
<li>开发环境配置</li>
<li>hello world</li>
<li>变量、过程</li>
<li>标准输入</li>
<li>if语句</li>
<li>文件写入</li>
</ul>
<h2>环境</h2>
<p>“工欲善其事 必先利其器”。</p>
<p>学习之前我们需要先将Scheme的运行环境搭建起来，环境分Win和Linux，在Win下，直接到 <a href="http://www.gnu.org/software/mit-scheme/">http://www.gnu.org/software/mit-scheme/</a> 下载，安装。</p>
<p>在Ubuntu下，使用apt-get安装（强制建议使用*inux环境），Scheme的解释器有多种选择，这里我们选择mzscheme和guile，二者都可。</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">; mzscheme安装
sudo apt-get install  mzscheme
&nbsp;
;guile 解释器安装
sudo apt-get install guile-1.8</pre></td></tr></table></div>

<h2>Hello World</h2>
<p>创建hello.scm文件，在编辑器(vi/emacs)中输入如下内容：</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;hello.scm the first program</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;hello world!&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>在命令行下，<strong>guile hello.scm</strong> 或　<strong>mzscheme -r  hello.scm</strong></p>
<p>如果你直接使用guile或mzscheme命令进入其命令行模式。则可以通过(load &#8220;hello.scm&#8221;)加载执行，注意，这里的括号是必须的。</p>
<p>解释下这段代码：</p>
<p>在分号（;）之后一直到行末之间就是注释。如hello.scm的开头部分。标准的Scheme语言定义中没有多行注释，不过在它部分实现中还是存在的。比如在Guile中就有多行注释，以符号组合“#!”开始，以相反的另一符号组合“!#”结束，其中内容为注释。如果加了这样的注释，这个程序就只能用guile来运行，如果使用mzscheme命令来运行则会报错。如果考虑代码的通用性，不建议使用此类注释。</p>
<p>display是输出过程，将内容输出到屏幕， newline的作用是换行显示。</p>
<h2>变量，过程</h2>
<p>在scheme中变量是通过define关键字定义，通过set!改变，并且scheme的变量是固定的类型，这有些类似于现在的python,  php等动态语言，其在运行过程中是可变的，或者说这些动态语言是从函数式编程语言中学习了这些特性。  scheme的过程定义也是通过define关键字来实现的，只是其格式与变量有一些不同。</p>
<p>结合上面的hello world示例，我们看一个示例：</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="scheme" style="font-family:monospace;">&nbsp;
<span style="color: #808080; font-style: italic;">;var.scm</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">; 定义变量x</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> x <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">;定义过程cout</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>cout x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
    <span style="color: #66cc66;">&#40;</span>cout x<span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">; 改变变量x的值, 这里没有改变类型</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> x <span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>cout x<span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">; 改变变量x的值，这里将之前的整型换成了字符串</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> x <span style="color: #ff0000;">&quot;string test&quot;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>cout x<span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>定义过程除了上面示例中的方式外，还可以使用lambda来定义过程，其格式如下：</p>
<pre>(define 过程名 ( lambda (参数 ...) (操作过程 ...)))</pre>
<p>而我们的示例中的格式为：</p>
<pre>(define (过程名 参数 ...) (操作过程 ...))</pre>
<p>这两种方式都可以使用，如果你是需要使用匿名函数，使用lambda方案，去掉定义性内容，如下：</p>
<pre> ( lambda (参数 ...) (操作过程 ...))</pre>
<h2>标准输入</h2>
<p>从标准输入读取字符串，这里只用到了read过程，如下示例：</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="schem" style="font-family:monospace;">&nbsp;
; 标准输入
    (begin
&nbsp;
    (define str (read))
&nbsp;
    (display str)
    (newline)
    )</pre></td></tr></table></div>

<p>通过定义 str为从标准输入获取内容，即调用 read  获取，以换行或空格结束输入程序通过display过程打印输入的内容，调用newline换行输出。</p>
<h2>if 语句</h2>
<p>和我们常见的if语句结构一样，Scheme语言的if结构有两种格式，</p>
<ul>
<li>一种格式为：(if 测试 过程1 过程2)，对比PHP相当于if else，即测试条件成立则执行过程1，否则执行过程2。</li>
<li>另一种格式为：(if 测试 过程) ，对比PHP，相当于没有else语句的方式，即测试条件成立则执行过程，没有else情况发生。</li>
</ul>
<p>此时，可能会想在PHP中还有elseif语句呢，那么在Scheme中是怎样的？在Scheme中没有else语句也没有相关结构，它是以另一外if语句实现，如果我们在PHP中，则其结构类似于:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   <span style="color: #666666; font-style: italic;">//  if语句的嵌套，在Scheme只能此种方案，没有简化后的elseif</span>
&nbsp;
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>例如下面代码：</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">read</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">read</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">; 输出结果，包含从数字到字符串的转化</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>display_rs x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">string-append</span> <span style="color: #66cc66;">&#40;</span>number<span style="color: #66cc66;">-&gt;</span><span style="color: #b1b100;">string</span> a<span style="color: #66cc66;">&#41;</span> x <span style="color: #66cc66;">&#40;</span>number<span style="color: #66cc66;">-&gt;</span><span style="color: #b1b100;">string</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> a b<span style="color: #66cc66;">&#41;</span> 
    <span style="color: #66cc66;">&#40;</span>display_rs <span style="color: #ff0000;">&quot;&lt;&quot;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> a b<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>display_rs <span style="color: #ff0000;">&quot;=&quot;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>display_rs <span style="color: #ff0000;">&quot;&gt;&quot;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>示例程序从标准输入接收两个数字，a和b。对比两个数字，显示最终谁大谁小。  其中，string-append是字符串连接过程，number-&gt;string的作用是数字转化为字符串。  display_rs是一个自定义的过程，显示比较的结果用，其传入的值为比较后的结果。</p>
<h2>文件写入：</h2>

<div class="wp_syntax"><table><tr><td class="code"><pre class="scheme" style="font-family:monospace;">&nbsp;
<span style="color: #808080; font-style: italic;">;file.scm 文件操作</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">; 文件写入操作</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> port <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">open-output-file</span> <span style="color: #ff0000;">&quot;temp&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">output-port</span>? port<span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">write</span> <span style="color: #ff0000;">&quot;helloworld&quot;</span> port<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">close-output-port</span> port<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;write file temp failed.&quot;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>在<a href="http://www.ibm.com/developerworks/cn/linux/l-scheme/part2/">《Scheme  程序语言介绍之一》</a>这篇文章的开头处有一段话，虽有些玩笑之言，却值得沉思：</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">在网上有这样一句有趣的评论：计算机科学的大部分，就是在重复发现很久以前别人就早已 发现过的东西。
当然，这是一句玩笑。不过我们可以给这句玩笑接个下巴：对于程序语言中 的每一个重要概念，
你都可以先在 Lisp 当中发明一次，再在 C++ 里面发明一次，再在 Java 里面发明一次，
再在 Python 里面发明一次，再在 Perl 里面发明一次，再在 Ruby 里面发明一次，
当然，最后还要在 C# 里面再发明一次。</pre></td></tr></table></div>

<p>在学习的过程中，参考了如下书籍和链接：</p>
<ul>
<li>《The Scheme Programming Language》</li>
<li>《Structure and Interpretation of Computer Programs,Second Edition》</li>
<li>http://zh.wikipedia.org/zh/Scheme</li>
<li>http://www.ibm.com/developerworks/cn/linux/l-scheme/part2/</li>
<li>http://www.ibm.com/developerworks/cn/linux/l-schm/index1.html</li>
<li>http://www.ibm.com/developerworks/cn/linux/l-schm/index2.html</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2011/11/scheme-study-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
