lisp

clsqlが入らないからcl-rdbmsを入れようとしたが。

asdf-installで入らない。 どーやっていれればいいんだヨ。

CLSQLでプリペアドステートメント

clsqlのプリペアドステートメントがうまくいかない。 (clsql-sys:with-database (con '("localhost" "test_user" "test_user" "p") :if-exists :old :database-type :postgresql-socket) (let ((stmt (clsql-sys:prepare-sql "update tb0 set data1=? where …

lispとrubyとpythonと その9 DBアクセス(common lisp)

CommonLispでDBアクセスというとclsql。 いつもどおりasdfで入れて。。。と思ったが、依存関係があるのかうまく入らない。 DB関連だからしょうがないのかなぁと、Synapticパッケージマネージャで入れた。 DBはMySQLで。。。としてたんだけど、プリペアドステ…

lispとrubyとpythonと その8 ファイルIO(common lisp)

CommonLispでのファイルIOはこんな感じ。 一般的にはwith-xxxだけど、ファイル開きっぱなしの時とかはそうできない時もある。 (require 'cl-interpol) (cl-interpol:enable-interpol-syntax) ;;プリミティブなのはopen ;;まずはテキストファイル書き込み ;;:…

lispとrubyとpythonと その7 継続とFiber(rubyと少しだけlisp)

頭が継続脳になっていないためかもしれないけど、継続欲しいなー、、、と普段思うことはない。 でもまぁ継続があるのもrubyの特徴なのかなぁ、と思ったので書いてみる。 簡単な例。 require 'continuation' i = 0 c1 = nil callcc do|c| c1 = c end i = i + …

lispとrubyとpythonと その7 パターンマッチ(common lispだけ)

rubyとpythonにはパターンマッチがないみたい。たぶん。 comon lispではcl-matchでいける。 asdfで入れたヤツだとletmatchがなんかヘン。 二文字だけいじったら動いたけどあってんのかな。 ;;パターンマッチ ;;cl-matchを使う ;;asdfで入れとくこと (require…

lispとrubyとpythonと その6 正規表現(common lisp)

Common Lispでの正規表現。 cl-ppcreを使う。cl-interpolを入れとくと正規表現リテラルが使えるので、これも入れといた方がよい。 ;;正規表現はcl-ppcreで。 ;;asdfでインストールしておく ;;(require 'asdf) ;;(require 'asdf-install) ;;(asdf-install:ins…

lispとrubyとpythonと その5 例外処理(lisp)

try-finally的なことがしたいのであればunwind-protectでいい。 (defun aaa() (unwind-protect (progn (error "例外発生") (format t "処理・・・・")) (format t "後処理"))) (aaa) とすれば例外が発生しても(format t "後処理")は必ず実行される。 さらに…

lispとrubyとpythonとC# イテレータ

偶数だけ抽出して+1した数値を列挙するコード。 RubyとPythonとCommonLisp(series)とC#で書いた。Rubyは遅延評価しないのが微妙。 Ruby1.9のイテレータの意図がよく分からない。 ブロックを省略するとEnumeratorが返るけど、なんでそうなってるんだろ。 ブ…

lispとrubyとpythonと その4 Cライブラリの呼び出し(まとめ)

それぞれの言語でCと連携してみたまとめ、というか感想というか。 lispもRubyもPythonも呼び出し自体はわりと簡単。 ちゃんと動くかどうかは別として・・・。 一番すんなり理解できたのはSBCLだったような気がする。 Rubyの「拡張ライブラリをCで書く」って…

lispとrubyとpythonと その4 Cライブラリの呼び出し(lisp)

今回はCライブラリの呼び出し。 SBCL限定なので注意。 sb-alienにCを呼び出すために必要なもろもろが入ってる。 一応動いてるんだけど、これであってんのかなぁ。 C側でmallocした時とか、GCのコンパクションでまずいことになったりしないんだろうか・・・。…

seriesの戻り値がヘンな件

でseriesの戻り値がヘンと書いていたのですが、タイムリーにg000001さんのところにseriesの結果が変 - 'T - cadr groupってエントリが。asdf-installで入れると (subseries (series 'b 'c) 0 5) #Z(LIST B C LIST B) こうなっちゃうみたい。 まぁいいか。

lispとrubyとpythonと その3 リスト(lisp series-collectors)

Lisp、series-collectors編 Collectorsはseriesをはずして中身を取り出す ;; COLLECT-FIRST ITEMS &optional (DEFAULT NIL) [Function] ;; これは単純。 ;; 最初の要素取り出し (collect-first (scan-range)) ;;出力 ;;0 (collect-first #z()) ;;出力 ;;NIL …

lispとrubyとpythonと その3 リスト(lisp series-mapping)

Lisp、series-mapping編 mappingはseriesの加工。 ;; MAP-FN ;; いわゆるmap ;; MAP-FN TYPE FUNCTION &rest SERIES-INPUTS (map-fn 'integer #'(lambda (i) (1+ i)) (subseries (scan 'integer '(1 2 3 4 5)) 0 4)) ;; 出力 ;; #Z(2 3 4 5) ;;複数指定は例…

lispとrubyとpythonと その3 リスト(lisp series-scanners)

Lisp、series-scanners編 リファレンスを見ながらseriesのメソッド一通りみてみた。 Alterationはよくわかんなかったので飛ばしたけど。 えらく長いのでエントリを分けます。 まずはscannersから。 ;;seriseを使えるようにする (require 'series) (series::i…

lispとrubyとpythonと その2(common lisp)

common lispでの ・文字列 連結 分割 切り出し 比較 ・同値性、同一性 ・変換 数字→文字列 文字列→数字 文字列→時刻 時刻→文字列 ・標準出力に文字列出力 ・標準入力から読み込み ・コマンドライン引数の受け取り が以下。 やっぱりというか標準ライブラリが…

lispとrubyとpythonと その2

ずいぶんあいたけど続き。 このペースだといつまでかかるか、そもそも続くのか分からないけど、目標は下の一覧に書いたことをlisp、ruby、Pythonで一通りやてってみることが目標。 ほんとはschemeとhaskellとOCamlでもやりたい。あ、一応、javaかC#もあれば…

lispとrubyとpythonと(感想)

三つ触ってみて思ったこと。 python タイプ量が少ないような気がした。 オフサイドルールが結構いい。ブレース打ったり括弧打ったりする手間が丸ごとなくなるって思ったより快適だった。 lisp書いたあとにpythonを書くと「なんだかサクサクすすむな」という…

lispとrubyとpythonと (REPL)

common lispとPythonを比べてみた。 pythonには興味があったし、いい加減MS以外のことをやりたくって。。。 で、、、ついでにRubyも触ってみた。 schemeも触ろうか、と思ったんだけどそこまでは時間がない。まずはいじるためにemacsとREPLの整備 common lisp…

疲れたらリスト操作で遊ぶ L99

なれない会社でぐったりです。 今は耐える。仕事で見なきゃいけないソリューションがvssで管理されているらしい。 そういえばそんなのあったな。 そりゃ使うか。。。そうか。。。vssか。。。会社でMSプロダクトばかり使っているとLispがやりたくなる。 でも…

Yコンビネータ復習

前にCommonLispで書いてみたんだけど、もう全然覚えてない。 書き方もひどいな。こりゃ。 というわけでもう一度やり直してみた。 今度はもう少し詳しく書く(つもり) 使ったのはallegro common lisp。 Yコンビネータができるまで (if (zerop n) 0 (+ n (fun…

Two-Phase Termination

さてTwo-Phase Termination - qnzm.log(クニジマログ)。javaのinterruptを再現したかったけど、諦めた。 sb-thread:interrupt-threadで割り込みはかけられるんだけど、スレッドのステータスをとる方法が分からない。 ffiを使って取得してみようか、と一瞬考…

windowsのcommonlisp処理系て何がいいんだろう

linuxでSBCLを使っててそれはそれでいいんだけど。 windowsでもSBCLだったんだけど、Asdf-Installが動いてくれないのがイヤになってきた。 windowsではスレッドも動かないし・・・。http://read-eval-print.blogspot.com/2007/08/common-lisp-windows-sbcl-a…

Futureパターン

Future - qnzm.log(クニジマログ)をやってみた。 一応書いたけど中途半端だし、いまいち。元のサンプルがOOPなんだけど、そのままじゃつまらないからLispっぽい方法はないものかと思ったんだけど思いつかず。。。 それならプロキシを生成する部分をマクロで…

seriesのリードマクロ

(series::install) すればmap-fnを#M seriesを #Z でかけるんだー。しらなかった。 こんな感じ。 CL-USER> (require :series) ("SB-CLTL2" "SERIES") CL-USER> (series:collect (series:map-fn 'integer #'+ (series:scan '(1 2 3)))) (1 2 3) CL-USER> (ser…

マクロ

展開形にsetfが出てくる場合には注意。 複数回評価したら問題が出る。 define-modify-macroでかけたらかく ; SLIME 2007-05-24 CL-USER> (defmacro incfw(x &optional (y 1)) `(setf ,x (+ ,x ,y))) INCFW CL-USER> (setf lst nil) NIL CL-USER> (incf (car …

;;どう書く?org 入出力の中継 を Common lispで

どう書く?orgの入出力の中継に手をつける。 コマンドライン引数は*posix-argv*に入ってくるらしい。 プロセスの起動はsb-ext:run-programでやるのがいいのかな? sb-posix:forkというのもあるので、fork→execする手もあるのか?と思ったらexecはない。 ??…

Common lispでURLエンコード、デコード

URLエンコード、デコードする関数。 sb-extを使ってるのでsbcl限定。 (make-array 0 :element-type '(unsigned-byte 8) :adjustable t :fill-pointer 0) 可変長の配列 (vector-push-extend (read-octet strm) vec) 配列を拡張して追加 (peek-char t strm nil…

common lisp と clsql と SQLite

clsqlでSQLiteにつないでみた。 CL-USER> (require 'clsql) NIL CL-USER> (require 'clsql-sqlite3) NIL CL-USER> (clsql:connect '("memory") :database-type :sqlite3) # CL-USER> (clsql:create-table 'tb0 '((id integer :not-null :unique :primary-key…

vecorとstringと

眠いから適当。 (make-array 0 :element-type 'character :fill-pointer 0 :adjustable t) で可変長のcharacterのベクタを作る。 adjustableの指定で可変になるらしい。 fill-pointerの意味がよくわからん。 (vector-push-extend #\+ vec) でベクタに要素追…