chakokuのブログ(rev4)

日々のごった煮ブログです

LISPを学ぶ・・

今でもLISP(Scheme)は適材適所で活用されていると思うけど、学習コストが高いのが課題(手頃な解説本があまりない)。
これからLISPを勉強しようと思う人が非常に少ないから、本を出してもうまみがないんだろう。

そんな状況だけど、、ネットで探すと解説記事がいくつかある。
丁寧に説明された入門編記事(Common Lisp)
Lisp/始めの一歩/経験者用チュートリアル - Wikibooks

上記は翻訳版で、オリジナルは英語版↓
Common Lisp/First steps/Beginner tutorial - Wikibooks, open books for an open world

ネット上には、かつての書籍が無料公開されていてDL可能になっている。ありがたい。
On Lisp DLサイト
http://www.paulgraham.com/onlisptext.html
和訳サイト (野田氏による翻訳サイト)
http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/


「Paradigms of Artificial Intelligence Programming」
DLサイト
Release Original sources · norvig/paip-lisp · GitHub
1章「Introduction to Lisp」は簡潔にまとまっていてわかりやすいと思う。


現在のところ、購入できる書籍としては、Practical Common Lispが一般的なのだろうか。。

CommonLispの書籍 Practical Common Lisp(洋書)
Practical Common Lisp

Practical Common Lisp

Practical Common Lisp

  • 作者:Seibel, Peter
  • 発売日: 2014/12/02
  • メディア: ペーパーバック


電子出版されているのは以下(PayPalで支払ってダウンロードする)
Common Lisp人工知能プログラミング」
本のまえがき | 本の購入サイト
熱い著者によるCommon Lisp本と思われます。言語編、AIプログラム編(だったか)と、上下に分かれている。かなり深い所まで解説されているようです。特に再帰プログラミングの解説にも注力とあります。かなり詳しく書かれていると推測されますが、内容がほとんど分からない。見本もあるにはあるけど。

CommonLispが業界標準だろうけど、手軽に動かすのにEmacsLispを使う手もある(と自分は思うのだが)。。
以下はEmacsLispのマニュアルと手引き(Emacsの上で動く)

Programming in Emacs Lisp: Programming in Emacs Lisp
GNU Emacs Lispリファレンスマニュアル: Top

学生のころは、培風館LISP(ウインストン著)で勉強したけど、、今は絶版だ(中古では買えるようだが)。MACLISPだし。今はCommon Lispに改定されているようだ。

Lisp

Lisp

楽しく学べそうなLand of Lisp。高いけど、本屋では売られているようで、内容を確認できる。

Land of Lisp

Land of Lisp



最も基本となるcar/cdr/consとリスト内部構造の解説記事
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp_8.html
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp_10.html#SEC124


A Road to Common Lisp 翻訳 · GitHub




LISP学習パス(案)

[LISP概要を理解](LISPという言語を俯瞰、LISPってどうよ)
   LISPとはどんな言語なのか?なぜLISP?何がいの?その特徴は?

[LISP実行環境を整える](手を動かさないと染み込まない)
   Windows/Linux/macOS上にLISPインタプリタを導入

[LISPの初歩の初歩を打ち込んでみる](最初はシンボルとリスト操作に専念)
     基本5関数(atom,eq,car,cdr,cons)  (Pure Lisp)
     http://www.wbricken.com/pdfs/02teach/05proglang/14-purelisp.pdf

 シンボル、 t/nil
    car cdr  cons
    bind
    cond  prog let atom boundp
    atom
  リスト操作してみる

[ループ、条件式、defunを使ってみる](アルゴリズムが表現できるようになる)
  (順次、選択、反復をLISPでどう表現するのかが分かればLISPでアルゴリズムが表現できるはず。。きっと)
[LISPのデータ構造(リスト内部表現)を学ぶ](LISPを深く理解)

[LISPが扱えるデータ型は?](いろんなデータが扱えてまともな言語にする)

[再帰してみる](LISPの本領発揮というか)

[ややこしい概念に取り組んでみる]
 ・マクロ式
 ・動的スコープ、静的スコープ
 ・etc

[次の課題を探してみる]
 ・データ型
 ・オブジェクト指向
 ・Lambda式
 ・mapcar等
 ・パッケージ
 ・ライブラリ
 ・デバッグ

■追記
あらためて、LISP解説記事を読み直していると、多くのサンプルはCommonLispベースで紹介されており、自分が知らない概念や表記がいろいろある。自分のLISPスキル習得はMACLISPで始まりCommonLispを少しかじって、EmacsLispで凍結している。入社から5年ぐらいまではEmacsLispで自分のEmacs環境をせっせとカスタマイズしていた。それ以降は仕事で使う主力言語もC、PerlJavaC++,Pythonと時代とともに移り変わってきた。(Cは組み込み関連でずっと使い続けてきたが、、最近は組み込みもMicroPythonに頼っている・・・エディタはEmacsからMeadowになってEmacsLispはちょっとした計算で使ってるけど、EmacsLispでプログラムすることはない)
そう思うと、主力言語は時代とともに移り変わり、一つの言語を長い時間かけてとことん学びつくすというのは難しいと思えるのだ(自分が飽き性なせいか??言語だって年が経つと仕様が変わるし。。)

■参考URL
Emacs-Lisp入門 2021