Common Lisp
Lispを学んでどうするのか...emacsをカスタマイズしまくることぐらいしか思い浮かばないが,その思想等を学ぶことは何かと役に立つはずだ.というわけで,Emacs LispはおいといてCommon Lispをやってみる.
なにはともあれCommon Lispでいろいろな式を書いてみる.
実行環境についての記述とサンプルのための入出力についての記述.
式の記述方法とその評価.
Lispにおけるデータについて概観する.
Lispにおける局所変数,大域変数,大域定数の定義と代入について.
リストオペレータについていくつか.
Lispプログラムは全てリストなので,if文といわずif式という.
Lispにおける反復の表現方法.
Lispにおける関数の定義と呼び出しについて.
ここまで記述したLispの基本を踏まえて練習をいくつかやってみる.この頁ではリストの最大値を返す関数を作成してみる.
練習としてリストの要素をソートしてみる.
LISt Processorという名前通り,リストはLispにおける基本的かつ中心的なデータ構造である.ここではコンスを通してまずリストについて前よりも詳しく記述し,さらにLispにおけるさまざまなデータ型やデータ構造についても記述する.
Lispのリストはコンスと呼ばれる一対のポインタで構成される.このことを詳しく見ていくと,Lispにおけるリストをもう少し深く理解できる.
二つのオブジェクトへのポインタがあるとき,そのポインタが指す先は同じ実体なのか,同じ値の異なる実体なのか,といった疑問を解決してみたい.
リストの任意のコンスや要素へのアクセスを可能にする関数の紹介.
キューの実装を通して破壊的な関数を作ってみた.
Lispの集合を扱う関数を試してみた.これらの関数のいくつかには,キーワード引数という引数がある.
今まで扱ってきたリストは真リストと言われる.Lispのリストにはこの他にドットリストというリストがある.
スタックはよく使用されるデータ構造なので,Lispにはリストをスタックとして扱うための関数がある.それをちょっと使ってみた.
新しいコンスを作成することをコンシングといい,コンシングすると当然新しいメモリ領域が確保される.こうして新しく作成されたコンスの多くはプログラムのある時点以降は不要なゴミとなる.Lispにおいてもゴミ問題が発生することがある.
Lispで配列を作ったり要素にアクセスしたりしてみた.そしてベクタについてもちょっと試してみた.
Lispの文字列は値が文字のベクタとして表現され扱われるが,多くのプログラミング言語と同様,文字用の表記方法や文字列用の表記方法が用意されている.
ストラクチャはいわゆる構造体だが,Lispのそれはなんかすごい.
Lispのハッシュを使ってみた.
練習としてLispで行列計算をやってみた
練習としてLispで連立1次方程式を解いてみた.
ここでは基本編でざっと眺めて来た基本事項の詳細に立ち入ってみる.
ブロックは,複数の式を一まとめにして一つの制御単位とするものである.他の多くのブロックと同じ概念であるが,Lispではブロックを表現する複数のオペレータがある.
Lispにはif式以外にも条件式があるらしいので調べてみた.
反復オペレータdoなどについてもう少し詳細に書いてみた.
Common Lispでは関数は値を0個以上返す.これまでは主に1つの値を返す場合の記述をしてきた.本頁では0個の値を返す,つまり値を返さない場合や2個以上の値を返す場合について記述する.
Common Lispではcatchとthrowを使用して例外処理を簡潔に記述することができる.
Common Lispでの関数の詳細についていろいろと試してみた.
Common Lispでの(主にファイルの)入出力関数を試してみた.
Common Lispのシンボルには,いろいろな情報が格納されている.また,Common Lispにはパッケージというものがあって,これによってシンボルの名前空間を拡張できる.
Common Lispでいろいろな数値計算をしてみた.
コードの生成とマクロについて調査してみた.
CLOSとはCommon Lisp Object Systemの略らしい.OOというのはメソッドというしばしば破壊的な関数がバンバンでてきて,Lispとは相容れない世界かと思っていたのだが,そうではないようだ.