Next: 11 課題
Up: ソフトウェア特論 講義資料 C言語によるLisp処理系
Previous: 9.4 C 曲線の表示
10 xlispstat
Macintoshの上で走る形に拡張された処理系として,
Luke Tierney という人が拡張したXlispstatという処理系があります.これは,
統計学などで利用される関数とグラフィックス表示用関数を備えており,
UnixのXwindow上でも走るようになっています.
現在(2003.6.18)は,以下のところから
ftp://ftp.stat.umn.edu/pub/xlispstat/3-52/
ソースプログラム 一式(xlispstat-3-52-19.tar.gz)を
もってくることができる.
Cygwin1-3-22の環境でこれを作成するには,
% configure --width-gcc --x-includes=/usr/X11R6/include
% make
と行い,X11BSDstuff.cの最後のmemmove P3Cのところでエラーがでるので
この関数をコメントアウトし,ハードリンクを結ぶコマンドでエラーがでるので
Makefileの中で,下のようにシンボリックリンクに直して,
xlisp: ${GRAPHSYS}xlisp
-ln -s ${GRAPHSYS}xlisp xlisp
もう一度makeし,最後に make installすれば
/usr/local/lib/xlispstat以下に環境が作られます.
~/prog/lisp/xlisp/xlispstat/xlispstat-3-52-19> xlispstat
XLISP-PLUS version 3.04
Portions Copyright (c) 1988, by David Betz.
Modified by Thomas Almy and others.
XLISP-STAT Release 3.52.19 (Beta).
Copyright (c) 1989-1999, by Luke Tierney.
> (exit)
以下は,xlispstat 2.1のバージョンの例ですが,
このXLISP-PLUS version 3.04でも同じ関数を使うことが
できます.ただ,手元のranduなどのXwindowをマウス操作する
デモは操作が表示が少しうまくいかないようです.
ursa<inaba> xlispstat
XLISP version 2.1, Copyright (c) 1989, by David Betz
XLISP-STAT version 2.1 Release 2, Copyright (c) 1989,
by Luke Tierney.
....
> (histogram '(1 2 2 3 1 2 3 4 1 2 3 4))
#<Object: 1618488, prototype = HISTOGRAM-PROTO>
>
このhistogramという関数は,ディスプレイ上にウィンドウを表示し,ヒスト
グラムを棒グラフで示します.そのウィンドウには,Menuボタンなどがあり,
それを用いるといろいろなことを指定できます.
Xlispstatに関しては,上にあげたニュースグループを参照するか,xlispstat
について書かれた以下の書籍を参考にするといいと思います.
@book{XLispstat,
author = "Luke Tierney",
title = "Lisp-Stat: An Object-Oriented Environment for
Statistical Computing and Dynamic Grapics",
publisher = "Wiley-Interscience",
year = 1990}
1376 xlisp2.1
78 xlisp.pc
20 makefiles
173 lsp/txt
110 lsp/comp
16 lsp/winston
250 lsp/back
283 lsp/eus
1358 lsp
1066 xlispstat/msdos
26 xlispstat/CL/CLS1.0A1/Data
2 xlispstat/CL/CLS1.0A1/Examples
228 xlispstat/CL/CLS1.0A1/lib
583 xlispstat/CL/CLS1.0A1
614 xlispstat/CL
26 xlispstat/xlispstat2.1R2/Data
41 xlispstat/xlispstat2.1R2/Examples
3 xlispstat/xlispstat2.1R2/machines/vax
3 xlispstat/xlispstat2.1R2/machines/sun3
7 xlispstat/xlispstat2.1R2/machines/pmax
3 xlispstat/xlispstat2.1R2/machines/generic
4 xlispstat/xlispstat2.1R2/machines/encore
3 xlispstat/xlispstat2.1R2/machines/sun4
7 xlispstat/xlispstat2.1R2/machines/ibmrt_bsd
2 xlispstat/xlispstat2.1R2/machines/decstation
2 xlispstat/xlispstat2.1R2/machines/next
36 xlispstat/xlispstat2.1R2/machines
335 xlispstat/xlispstat2.1R2/macintosh
9 xlispstat/xlispstat2.1R2/emacs
2527 xlispstat/xlispstat2.1R2
6 xlispstat/fixes
1041 xlispstat/mac
873 xlispstat/doc
627 xlispstat/xlispstat.doc/postscript
1095 xlispstat/xlispstat.doc
247 xlispstat/glim
7470 xlispstat
10303 xlisp
xlispstatのサンプルプログラムは /usr/local/lib/xlispstatの
Examplesにあります.
9 24 308 abrasiondemo.lsp
27 144 1206 addbox.lsp
39 174 1361 addhandrotate.lsp
50 206 1542 bcdemo.lsp
94 398 3062 dataprotos.lsp
10 47 295 fstat.lsp
189 693 7448 inspect.lsp
293 1268 11158 plotcontrols.lsp
38 183 1274 regdemo.lsp
130 502 4948 rotatedemo.lsp
32 136 1260 tour.lsp
8 27 255 tourdemo.lsp
919 3802 34117 total
たとえば,
> (load
"/usr/local/lib/xlispstat/Examples/rotatedemo.lsp")
; Loading ...
; "/usr/local/lib/xlispstat/Examples/rotatedemo.lsp"
; "/usr/local/lib/xlispstat/Examples/addbox.lsp"
; "/usr/local/lib/xlispstat/Examples/addhandrotate.lsp"
; "/usr/local/lib/xlispstat/Data/tutorial.lsp"
T
> (demo 'abrasion)
NIL
とすると,ウィンドウが表示され,
> (demo 'randu)
; loading "/usr/local/lib/xlispstat/Data/randu.lsp"
RANDU
>
とすると,そのウィンドウが次に示すようなウィンドウに置き換わります.
このウィンドウの右上のMenuボタンを右ボタンでクリックすると,
様々な設定が可能になります.
また,下にある,Pitch,Roll,Yawのボタンを押し続けると三次元表示されている
グラフが回転して表示されます.
また,xlispstatの組み込み関数は拡張されたものが多くなっています.
> (setq a '(1 2 3))
(1 2 3)
> (setq b '(2 3 4))
(2 3 4)
> (+ a b)
(3 5 7)
> (- a b)
(-1 -1 -1)
> (* a b)
(2 6 12)
> (/ a b)
(0.5 0.666667 0.75)
> (%* a b)
20
というぐあいに,リストデータの四則演算が定義されています.
また,リストを行列やベクタのように扱うことも可能です.
行列(matrix)に関連する関数に何があるかを調べるための
関数としてaproposという関数を用いることができます.
> (apropos "matrix")
INSPECT-MATRIX-DIALOG-PROTO
IDENTITY-MATRIX
COVARIANCE-MATRIX
SCATTERPLOT-MATRIX
SWEEP-MATRIX
MATRIXP
:SWEEP-MATRIX
:X-MATRIX
MATRIX
UNIT-MATRIX
MAKE-SWEEP-MATRIX
PRINT-MATRIX
NIL
たとえばidentity-matrixの機能や引数について
知りたいとすると,helpという関数を用いることができます.
> (help 'identity-matrix)
IDENTITY-MATRIX
[function-doc]
Args: (n)
Returns the identity matrix of rank N.
NIL
という具合にひとつの引数をもつ関数で単位行列を作るということが
わかります.また,逆行列を求めるinverseというのもありますが,
それをhelpすると,
> (help 'inverse)
INVERSE
[function-doc]
Args: (m)
Returns the inverse of the square matrix M;
signals an error if M is ill conditioned or singular
NIL
となります.
これらを使った例を上げれば以下のようになります.
> (setq c (identity-matrix 3))
#2A((1 0 0) (0 1 0) (0 0 1))
> (%* c a)
(1 2 3)
> (%* c b)
(2 3 4)
> (%* b c)
(2 3 4)
> (%* c c)
#2A((1 0 0) (0 1 0) (0 0 1))
> (setq d (+ c c))
#2A((2 0 0) (0 2 0) (0 0 2))
> (inverse d)
#2A((0.5 0 0) (0 0.5 0) (0 0 0.5))
> (matmult d (inverse d))
#2A((1 0 0) (0 1 0) (0 0 1))
これらの行列のサイズは自由ですから非常に利用範囲は
広いということがいえます.
Lispの特徴はこういったデータのサイズを限定しなくてもすむことです.また,
自動的にガーベッジコレクションを行なうメモリ管理機能によって新しくデー
タを作ってゆくという計算を行なっていっても,破綻をきたさないようになっ
ています.
generated through LaTeX2HTML. M.Inaba 平成18年5月6日