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 xlispxlispstatのサンプルプログラムは /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の特徴はこういったデータのサイズを限定しなくてもすむことです.また, 自動的にガーベッジコレクションを行なうメモリ管理機能によって新しくデー タを作ってゆくという計算を行なっていっても,破綻をきたさないようになっ ています.