Basic Werk | Blog | Contact


MEMOMEM

CommonLisp_dbi_memo_1



CLISP は ffcall とセットでインストールしておけというメモ。



$ sudo port install ffcall $ sudo port install clisp +dynffi
;; CLISP > (ql:quickload :cffi)


参考:

macでclispでcffi - tmp

http://d.hatena.ne.jp/TAKUMA_N/20110429/1304058909


Is there a way to get the CLISP compiled with dynamic FFI support on Mac OS?

http://stackoverflow.com/questions/3901698/is-there-a-way-to-get-the-clisp-compiled-with-dynamic-ffi-support-on-mac-os


上記のステップを踏んで CLISP をインストールすれば Mac OS X で CL-DBI を使ってもエラーなく動作します。



(ql:quickload :dbi) (defvar *db* (dbi-connect :sqlite3 :database-name "sample.db")) (defvar query (dbi:prepare *db* "SELECT code, name FROM members")) (defvar result (dbi:execute query))
;; dbi の fetch は plist の形で返される (dbi:fetch result) ;; -> (:|code| 1 :|name| john)
;; なので特定のカラムのデータを抜き出すには getf を使う (getf (dbi:fetch result) :|code|) ;; -> 2 ;; 実行する度に1レコード進む


中途半端ですが一旦メモ。


参考:

cl-dbi

http://quickdocs.org/cl-dbi/api


Common Lisp用のデータベースライブラリ「CL-DBI」を作りました - 八発白中

http://d.hatena.ne.jp/nitro_idiot/20120130/1327926575


Common LispのProperty Listユーティリティ「Multival-Plist」を公開しました - 八発白中

http://d.hatena.ne.jp/nitro_idiot/20120228/1330425112


#CommonLisp #Lisp #cl-dbi #ffcall #CLISP #MacOSX #MacPorts #QuickLisp #SQL #SQLite



SN 2013/07/21 00:29:10

Archives > CommonLisp_dbi_memo_1.html





Gauche_sqlite3_dbd_install_MacOSX



Mac OS X (Mountain Lion) 環境で Gauche の SQLite3 ドライバーを入れる所でちょっとつまずいているのでメモ。


まずもって、 GitHub の mhayashi1120/Gauche-dbd-sqlite3 から、武蔵の日記さんのこちらの記事のやり方で試してみても、make の段階でエラーが出てしまい断念(勉強せいって話なんですが・・・)。


なので、こちらから gauche-dbd.sqlite3.080412b.tar.gz をダウンロードして gauche-package install で入れてみました。ここでもちょっとコツがあった。



# gauche-dbd.sqlite3.080412b.tar.gz を # ダウンロードしたディレクトリに移動した上で # リネーム $ mv gauche-dbd.sqlite3.080412b.tar.gz gauche-dbd.sqlite3.tar.gz
# リネーム済みの圧縮ファイルを指定する形で install $ sudo gauche-package install gauche-dbd.sqlite3.tar.gz


これで SQLite3 ドライバーのインストール自体はうまく行きました。


ただ、プログラミングGauche のP.368 前後に載ってる relation-accessor などは、SQLite には通用しないようで、発行した SELECT 文の各要素(カラムのデータ)にアクセスするには、dbi-get-value を使って番号でカラムのデータを取得するようです(ちょっと不便・・・)。



(use dbi) (use util.match) (use util.relation) (use gauche.sequence) (use gauche.parameter)
(define *db-name* "dbi:sqlite3:./schedule.db") (define db (make-parameter #f))
;; ・・・ ;; メモのため抜粋。いろいろ省略 (define (list-sch) (let* ((result (dbi-do (db) "SELECT day, plan FROM plans")) ;; (getter (relation-accessor result)) ;; この子が動いてくれない (plan-list (map (lambda (row) (cons (dbi-get-value row 0) ;; "day" (dbi-get-value row 1))) ;; "plan" result))) (for-each (lambda (p) (sch-print (car p) (cdr p))) plan-list)))


また時間見つけてもうちょっと調べてみる。


#Gauche #MacOSX #SQLite #dbd #dbi #relation-accessor #dbi-get-value #Scheme #Lisp



SN 2013/07/17 19:18:23

Archives > Gauche_sqlite3_dbd_install_MacOSX.html





Scheme_define-syntax



define-syntax 構文を使ったマクロの生成で、syntax-rules 直後のリストにはマクロ内で使用する識別子を指定する。

また、パターン内ではマクロの名前を _ で置換できる。



;; new-if (define-syntax new-if (syntax-rules (then else) ((_ predi then consq else altna) (if predi consq altna)) ((_ predi then consq) (if predi consq #f)) ((_ predi else altna) (if predi #f altna))))

gosh> (new-if (number? 0) then "Num" else "Not Num") "Num" gosh> (new-if (number? 0) then "Num") "Num" gosh> (new-if (number? "aaa") then "Num") #f gosh> (new-if (number? "aaa") else "Not Num") "Not Num" gosh> (new-if (number? 0) else "Not Num") #f


マクロ内で使用する識別子がない場合、syntax-rules の後は空リストでOK。



;; nand (define-syntax nand (syntax-rules () ((_) #f) ((_ a b) (not (and a b)))))
gosh> (nand #t #t) #f gosh> (nand #t #f) #t


参考:

素数夜曲: 女王陛下のLISP

P.453~


#Scheme #Gauche #Lisp #Macro #define-syntax



SN 2013/07/12 23:45:02

Archives > Scheme_define-syntax.html





20130707_Vim_memo



Vim memo


.vimrc を変更した時の再読み込み、リロード(よく忘れるのでメモ)



:source ~/.vimrc



ブラウザと同じように <Space> で <C-d>、<S-Space> で <C-u> にするには、Mac OS X 以外なら素直に、



:map <Space> <C-d> :map <S-Space> <C-u>


でよし。


Mac OS X はなんでか <S-Space> を認識してくれない。

苦肉の策で、そういえばタブ送りも下に行ったり上に戻ったりするな、と思ったので、



:map <Tab> <C-d> :map <S-Tab> <C-u>


としてみた。

ちなみに Google 日本語を入れてると <D-Space> でひらがなと英語の切り替え画面みたいのが出てきてしまう・・・。


#Vim #Vi #MacOSX #.vimrc



SN 2013/07/07 04:17:38

Archives > 20130707_Vim_memo.html





Gauche_print_with_color_on_Terminal



Mac の Terminal 上で文字に色付けして表示させるためのマクロ。

最後、文末でデフォルトの文字色(\x1b[0m)に常に戻してあげるのがコツ。



(define-syntax printc (syntax-rules () [(printc clr args ...) (let ((colors '((red . "\x1b[31m") (pink . "\x1b[35m") (purple . "\x1b[35m") (blue . "\x1b[34m") (green . "\x1b[32m") (water . "\x1b[36m") (yellow . "\x1b[33m") (dim . "\x1b[2m") (blight . "\x1b[1m") (u . "\x1b[4m") (rev . "\x1b[7m") (off . "\x1b[0m")))) (print (cdr (assoc clr colors)) args ... (cdr (assoc 'off colors))))]))


#Gauche #gosh #Shell #Mac



SN 2013/06/26 23:23:04

Archives > Gauche_print_with_color_on_Terminal.html