About smegy things


by smeg_head
カレンダー
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリ:lisp( 9 )

関数おぼえないと

lisp むずいな。
知らない関数が多いし。関数一覧を探したんだけど、elispのやつがあった。

http://www-antenna.ee.titech.ac.jp/~hira/hobby/symbolic/lisp/build-in.html

追記
lispを覚えようとして、何かが足りないと思っていたが、help機能がないんじゃないか?
man とか。
実はあるけど、俺が知らないだけなんだろうな。
[PR]
by smeg_head | 2006-09-23 22:14 | lisp

末尾再帰

http://user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/functionalProgramming.html
を見ながら見様見まねでためしてみた。
今日の要点は、

  • 関数型プログラミングでは、Cのように手順を記述するのではなく、仕様を記述する。

  • 末尾再帰はスタックをくいつぶさない

  • 副作用がないということは、いいことだ


仕様を記述するというのは、コンピュータが行なう処理の手順を定義していあげるのではなく、どんな結果が欲しいかを定義するということなんだけど、直観的によくわからない。
末尾再帰というのは、関数呼出しの戻り先アドレスとかなんとかがどうとかっていう話で、最後に評価した値が関数の戻り値になるように再帰関数を作ると、コンパイラが最適化したときに、loopになる(からスタックを食いつぶさない)ということらしい。今の俺は、頭が関数型になってないので、「ならloopで書けば」とつっこみを入れそうになる。
あと副作用というのは、代入とか値を変更してしまう処理のことのようです。副作用によるプログラミングは、よくない。と。頭が関数型でないので、これもピンと来ませんね。関数型プログラミングは、なるべく副作用によらずにプログラミングできるために、バグが少なく、品質が高いものが短時間でできるということでした。

リンク先のソースそのままですが、リストを逆順に並べかえる関数を書いた。
(defun my-rev (arglist)
(labels ((rev-local (prelist suflist)
(if (null prelist)
suflist
(rev-local (cdr prelist) (cons (car prelist) suflist)))))
(rev-local arglist nil)))


cygwinの clisp で実行してみると動くようで。
で、末尾再帰にもなってることだから、ちょっとでかいリストを食わせてみようと、要素が2000個くらいのリストを引数に実行すると何ごともなかったように結果もエラーも表示せず終了する。なんでだろう?
clispが悪いのかもしれないので、別のlisp実装で試してみたい。
[PR]
by smeg_head | 2006-09-18 00:16 | lisp

common lispの文書

よさそうなlispの文書を見つけた
http://user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/
[PR]
by smeg_head | 2006-09-17 00:34 | lisp

標準入力の取得

環境変数が参照できれば、httpのgetが受けられる。
標準入力が参照できれば、httpのpostが受けとれる。
ということで標準入力を参照する方法を調べた。
---
#!C:/usr/clisp-2.28/lisp.exe -M C:/usr/clisp-2.28/lispinit.mem

(format t "Content-Type:text/html~%~%")
(format t "<html><body>")
(format t "<form method='post'>")
(format t "<input type='text' name='text'>")
(format t "<input type='text' name='text2'>")
(format t "<input type='submit' value='post'>")
(format t "</from>")
(format t "~A" (read-line *standard-input*))
(format t "</body></html>")
---
これで、postで送信したパラメータが取得できていた。
#formatしか使ってないな。
[PR]
by smeg_head | 2006-07-09 23:28 | lisp

ぼちぼちやって行こうと思っていたけど、標準出力のstreamを参照することまで調べたところで、streamの扱いを調べていたら、これからやろうとしている問題の答のページを見つけてしまった。車輪の再発明をしようとしてたのに。RPGの攻略本を見つけてしまった感じだよ。

http://cybertiggyr.com/gene/lisp-cgi/
まぁ、独りでやるとすぐ飽きるので、投げだす前に参考にさせてもらいます。
#さっきメモしたサイトだった。老化orz.

参考にしたいサイトのgoogle cache
http://72.14.235.104/search?q=cache:rotJDYH7LB4J:user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/functions.html+labels+lisp&hl=ja&gl=jp&ct=clnk&cd=4&lr=lang_ja&client=firefox
[PR]
by smeg_head | 2006-07-09 22:52 | lisp

環境変数の取得

cgiなら、環境変数にアクセスできなければ始まらない。ということで、google先生に聞いてみるものの、なかなか情報が少ない。
clispのソースを見ちゃいました。
/* (EXT:GETENV string) return the string associated with the given string
in the OS Environment or NIL if no value
if STRING is NIL, return all the environment as an alist */

getenvという関数がある?ものは試し。
ーーー
#!C:/usr/clisp-2.28/lisp.exe -M C:/usr/clisp-2.28/lispinit.mem

(format t "Content-Type:text/html~%~%")
(format t "~s" (getenv "WINDIR"))
ーーー
「"C:\\WINDOWS" 」と表示されました。
調子にのって、querystringを。
ーーー
#!C:/usr/clisp-2.28/lisp.exe -M C:/usr/clisp-2.28/lispinit.mem

(format t "Content-Type:text/html~%~%")
(format t "~s" (getenv "QUERY_STRING"))
ーーー
で、http://localhost:8888/cgi-bin/args.cl?test にアクセスして、「"test" 」と表示された。
これでWeb1.0が実現できそうな気がしてきたw
[PR]
by smeg_head | 2006-07-09 21:58 | lisp

lisp cgi

lisp って勉強しにくいと思った。
で cgi を作りながらなら覚えられるかな思ったので、Hello Worldしてみた。
とりあえず、OSはWindows最初cygwinのclispとWin版のapache2で
動かそうとごにょごにょやったが、よくわからず、結局、an httpdとWin版
clispでやった。

CLISPインストールガイド for Win32
http://www.et.hum.titech.ac.jp/~shin/archive/clisp.html
an httpd
http://www.st.rim.or.jp/~nakata/

anhttpd で、port番号を8888にして、clという拡張子を登録して(「#!の行を調べる」にチェックした)、下の内容のファイルを、cgi-binに置いた。
ーーー
#!C:/usr/clisp-2.28/lisp.exe -M C:/usr/clisp-2.28/lispinit.mem

(format t "Content-Type:text/html~%~%")
(format t "Hello, World!")
ーーー
これで、http://localhost:8888/cgi-bin/hello.cl にアクセスしたら、「Hello, World! 」が表示されました。めでたしめでたし。これをベースに拡張してみようかな。たぶん3日坊主ですが。
[PR]
by smeg_head | 2006-07-09 21:13 | lisp

cgi

メモ
http://cybertiggyr.com/gene/lisp-cgi/
[PR]
by smeg_head | 2006-07-09 16:08 | lisp

jvm上のlisp環境

jvm上のlisp環境
http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/jakld/index-j.html
http://www.remus.dti.ne.jp/~narua2/JLindex.html
http://armedbear.org/abcl.html
http://www.red-bean.com/pipermail/lispweb/2000-May/000013.html
http://www.in-vitro.jp/blog/index.cgi/2006/04/
[PR]
by smeg_head | 2006-06-27 03:44 | lisp