schemeインタプリタの実行

情報科学概論IIA

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/Joka2a-1998/print /run-scheme.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
情報科学概論IIA では、Lisp の一種 Scheme (スキーム) を使って記号 (symbol)を扱うプログラミング、セル、再帰、高階関数といったことを学びま す。

■schemeコマンド

この講義では、scheme の処理系として、対話的に用いるインタプリタを使い ます。情報科学概論IAで使ったC言語では、エディタでプログラムを書いたら、 cc コマンドでコンパイルして、実行しました。

% cc hello.c [←]
% a.out [←]
hello
% []
講義で使う scheme 処理系は、インタプリタなので、コンパイルする必要はあ りません。次のように、インタプリタを実行して、手続きを打ち込めばすぐに 実行できます。

----------------------------------------------------------------------
% scheme [←]
Welcome to Scheme 48 0.46 (made by guest on 1998年 2月17日(火曜日) 14時48分53秒 JST ).
Copyright (c) 1993, 1994 by Richard Kelsey and Jonathan Rees.
Copyright (c) 1996 by NEC Research Institute, Inc.
Please report bugs to scheme-48-bugs@martigny.ai.mit.edu.
Type ,? (comma question-mark) for help.
> 1)[←]
1
> (+ 1 2)[←]
3
> (* 3 4)[←]
12
> (+ 1 2 3)[←]
6
> (+ (* 2 2) (* 3 3))[←]
13
> (define (hello msg))[←]
(display "hello ")[←]
(display msg)[←]
(newline)[←]
> (hello "world")[←]
hello world
> ^D[←]
Exit Scheme 48 (y/n)? y[←]
% []
----------------------------------------------------------------------

インタプリタの実行
kterm の中で「scheme リターン」
scheme コマンドの終了
^D (コントロール・キーを押しながらd)

■拡張子は、.scm

schemeのプログラムをファイルに保存する時には、ファイルの名前の拡張子を 「.scm」にします。すると、mule で scheme を編集する時に 便利です。
----------------------------------------------------------------------
(define (hello msg)
  (display "hello ")
  (display msg)
  (newline))
----------------------------------------------------------------------

■Xウィンドウのコピー&ペースト

mule でプログラムを書いたら、それを scheme インタプリタで実行するには、 Xウィンドウのコピー&ペーストを使う方法があります。

kterm の場合(kterm の中で mule -nw で mule を実行た時):

  1. コピー元のウィンドウで、 マウスの左ボタンでコピーしたい先頭をクリックする。
  2. コピー元のウィンドウで、 マウスの右ボタンでコピーしたい最後をクリックする。すると、 先に左ボタンでクリックした所と右ボタンの間の部分の色が変わる。
  3. コピー先のウィンドウで、マウスの中ボタンを押す。
上の 1., 2. の代わりに、次のような方法でコピーする領域を決める方法もある。 mule の場合(mule がktermの外でウィンドウを開いている時):
  1. コピー元のウィンドウ(mule)で、コピーしたい先頭にカーソルを移動し、 C-SPC(コントロール・キーを押しながら、スペース・キー)を押す。 (一番下の行に「Mark set」と表示される。)
  2. コピー元のウィンドウ(mule)で、コピーしたい最後にカーソルを移動さ せて、ESC wと打つ。(何も表示されない。)
  3. コピー先のウィンドウで、マウスの中ボタンを押す。
上の 1., 2. の代わりに、次のように次のような方法でコピーする領域を決め る方法もある。

■muleの中でschemeを実行する

一度 mule を実行した後で、scheme を実行する方法があります。 それには、次のように打ちます。

ESC x run-scheme [←]
これで、scheme インタプリタが mule の1つのウィンドウ(バッファ)の中 で走ります。この状態では、mule の編集機能、カーソル移動などの機能が使 えるので便利です。

mule の中で scheme インタプリタを実行しながら作ったプログラムは、 mule のコピー&ペースト機能を使って別のファイルに保存します。

  1. scheme インタプリタの実行の結果で、必要な部分の 先頭にカーソルを移動し、 C-SPC(コントロール・キーを押しながら、スペース・キー)を押す。 (一番下の行に「Mark set」と表示される。)
  2. 必要な部分の最後にカーソルを移動させて、ESC wと打つ。(何 も表示されない。)
  3. C-x b キーなどで、保存したいバッファにカーソルを移動させ る。
  4. C-y キーで、ペーストする。

■load機能

小さなプログラムの場合や実行の場合では、コピー&ペーストが便利ですが、 大きなプログラムを定義する時には、load 機能が便利です。それには、次の ように打ちます。

> (load "hello.scm")
(load) 手続きの引数は、プログラムを保存したファイルの名前(この例では、 hello.scm)です。

■muleのschemeモード

ESC x run-scheme で scheme インタプリタを実行しながら、 C-x C-f などで、「.scm」の拡張子を持つファイルを編集すると、 そのバッファが「schemeモード」になり、次のような次のようなschemeのため の特別な機能が使えるようになります。
ESC C-x, C-c C-e (scheme-send-definition)
カーソルがある位置の回り定義やS式(括弧で括られた部分)を scheme インタプリタに送る。
C-x C-e (scheme-send-last-sexp)
カーソルがある位置の左のS式(括弧で括られた部分)を scheme インタプリタに送る。
C-c C-r (scheme-send-region)
C-SPC でマークした所から現在カーソル・キーがある 部分(これをmuleでは領域(region)と呼ぶ)を、schemeインタプリタに送る。
C-c C-l (scheme-load-file)
schemeインタプリタで (load) 手続きを実行する。
tab
その行をScheme流(Lisp流)で字下げをする。
ESC C-q (scheme-send-definition)
そのS式をScheme流(Lisp流)で字下げをする。

★練習問題5 schemeインタプリタの実行

いろいろな方法で scheme インタプリタを実行してみなさい。

★練習問題6 schemeプログラムの実行

簡単なプログラムの実行(手続き呼出し)を、いろいろな方法で試してみなさい。

★練習問題7 電子メールで送る

schemeのプログラムと実行した結果を、自分あての電子メールで送ってみなさ い。
↑[授業のページへもどる]
Last updated: 1998/04/14 01:36:44
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>