M.Hiroi's Home Page
http://www.geocities.jp/m_hiroi/

Functional Programming

Scheme Programming

[ Home | Functional ]

WHAT'S NEW

CONTENTS


お気楽 Scheme プログラミング入門

CONTENTS

パズルの解法

Yet Another Scheme Problems

オブジェクト指向編


はじめに

Scheme は 1975 年に Gerald J.Sussman と Guy L. Steele Jr. によって作成された Lisp の方言です。伝統的な Lisp はダイナミックスコープですが、Scheme はレキシカルスコープを採用しています。その後、Common Lisp でもレキシカルスコープが採用されました。Scheme は Common Lisp に比べ、言語仕様がコンパクトにまとまっていて、関数を first class object として扱うことができます。参考文献 [2] では、first class object を「一等値」と訳していますが、ようするにプログラミング言語で計算対象となるデータ(値)のことです。

関数型言語の場合、関数は他のデータと同等に扱うことができます。つまり、関数を変数に代入したり、関数を引数として渡すことができます。また、関数を値として返すこともできます。ところが、Common Lisp の関数は完全な first class object ではありません。次の例を見てください。

> (setq func #'(lambda (x y) (+ x y)))
#<FUNCTION :LAMBDA (X Y) (+ X Y)>
> (funcall func 1 2)
3

上の例は CLISP で実行した場合です。ラムダ (lambda) 式は無名の関数を返します。それを変数 func に格納して呼び出すことができます。Common Lisp の場合、変数に格納された関数は (func 1 2) のように呼び出すことはできません。funcall や apply を使って呼び出します。これに対し、Scheme は (func 1 2) と呼び出すことができます。次の例を見てください。

> (define func (lambda (x y) (+ x y)))
func
> (func 1 2)
3

このように、Common Lisp よりも簡単に関数を取り扱うことができます。また、「継続 (continuation) 」を取り扱うことができるのも Scheme の特徴です。継続はプログラムの実行状態を保存しておいて、あとから実行を再開することができます。これは Common Lisp にはない強力な機能です。

Scheme には多数の処理系がありますが、このページでは Shiro Kawai さんが開発されている Gauche をメインに使いたいと思います。M.Hiroi は Scheme 初心者ですが、「継続」を使いこなすことができるようにがんばりたいと思います。たいしたことはできませんが、よろしければお付き合いくださいませ。


Scheme Junk Scripts

M.Hiroi が Scheme の勉強で書いたジャンクスクリプトです。


参考文献, URL

  1. R. Kent Dybvig (著), 村上雅章 (訳), 『プログラミング言語 SCHEME』, 株式会社ピアソン・エデュケーション, 2000
  2. Ravi Sethi (著), 神林靖 (訳), 『プログラミング言語の概念と構造』, アジソンウェスレイ, 1995
  3. 紫藤貴文, 『もうひとつの Scheme 入門』, 紫藤のページ
  4. Dorai Sitaram (著), Nobuo Yamashita (訳), 『独習 Scheme 三週間』, WWW.SAMPOU.ORG

権利・免責事項など

『お気楽 Scheme プログラミング入門』と『Scheme Junk Scripts』の著作権は筆者「広井誠 (Makoto Hiroi) 」が保持します。無断使用や無断転載は禁止いたします。お気楽 Scheme プログラミング入門と Scheme Junk Script で作成したプログラムはフリーソフトウェアとします。ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。その際は、出典を明記してくださるようお願いいたします。

ただし、これらのプログラムは無保証であり、使用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi) 」は一切の責任を負いません。また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。

Copyright (C) 2006-2013 Makoto Hiroi
All rights reserved.

[ Home | Functional ]