独学 Common Lisp

Chapter 1. イントロダクション

概要

ANSI Common Lispの第1章のうち、歴史非推奨機能 について説明します。

歴史

Lisp は様々なプログラミング言語の「語族(family)」を示す言葉です。

1956年に最初の鍵となるアイディアを発明したのは John McCarthy です。彼は人工知能研究のために代数を扱うことが可能なリスト処理法を開発しようとしていました。

1960〜65年には広く使われた初期の実装である Lisp 1.5 が登場しました。この Lisp 1.5 からは MacLispInterlisp という2つの主要な処理系が派生しました。Common Lispは Interlisp からloopマクロなどの機能を取り入れています。

1970~80年頃にはLispの処理を機械的に実行可能な商用Lispマシンが XeroxSymbolics などから登場しました。その頃には MacLispLisp Machine Lisp と呼ばれるようになり、これがCommon Lispを策定する際に中心となりました。

1970年代にはもう一つ、主要なLispファミリーが誕生しました。Gerald J. SussmanGuy L. Steele Jr. によって発明された Scheme です。Scheme はC言語などのもとになった ALGOL の影響を受けており、「レキシカルスコープ(1)」を採用していました。以前のLispは動的スコープを持っていましたが、Common Lispではレキシカルスコープの採用により「クロージャ(2)」を扱うことができるようになり、より多様な処理を実現することが可能になりました。

分散したLispファミリーを統合するべく、1981年にDARPA(3)の支援を受けてCommon Lispに繋がるプロジェクトが始動しました。1986年にはANSI(4)の中に X3J13 と呼ばれるテクニカルワーキンググループが作られ、仕様の策定が進みました。作業は途中で2回書籍化され、Common Lisp: the Language(CLtL) として出版されました。CLtL1CLtL2 を基礎として最終的に1994年に ANSI Common Lisp が策定され、多様なLispは統一されました。

Schemeについて

唯一、Scheme のグループだけは Richard P. Gabrie (Common Lisp策定の主要なメンバー) による再三の勧めにも関わらず ALGOL 系としての独自の道を歩んだため、Common Lispに統合されずに残りました。現在でも Scheme の標準仕様は再三に渡り改定されており、実質的には各処理系が独自の機能拡張を行なっています。

Lispについて学ぶ際は Scheme だけを学ぶのが望ましいという声もあるかと思いますが、ANSI Common Lispが実際に使用されている唯一のLisp標準仕様であり、Scheme を学んでも使うときにはCommon Lispを選択する、ということはよくあることだと思います。そのため、このサイトではCommon Lispを標準Lispと見なし、Lispの説明言語として用いています。

非推奨の機能

以下に列挙する機能(関数や変数)はANSI Common Lispの仕様で「 非推奨 」とされており、過去との互換性のために導入されているため、現代において使用することは極力控えてください。

関数

以下の関数は非推奨です。

また、gensym関数にて数の引数を取ること、及びassocなどの関数にて:test-notというキーワード引数を使うことも非推奨とされています。

変数

現在のLispイメージにロードされているモジュールの一覧を示す変数*modules*(処理系依存)は非推奨です。

リーダーマクロ

構造体を表す#Sリーダーマクロは非推奨です。


  1. ソースコードの文面上(lexical)、変数の範囲が静的(static)に決定するような規則。
  2. 関数が定義された時点で参照可能な変数などの状態を保持して関数が生成されること。
  3. DARPA = Defense Advanced Research Projects Agency (米国国防高等研究計画局)
  4. ANSI = American National Standards Institute (米国国家規格協会)

Copyright (c) 2017-, satoshiweb.net. All rights reserved.