読者です 読者をやめる 読者になる 読者になる

メモ

Common Lispで重複するコードを一つにまとめる

こういう重複したコードを一つにまとめたい (defun hoge (line fn) (do ((line line (line-next line))) ((null line)) (funcall fn line))) (defun piyo (line fn) (do ((line line (line-prev line))) ((null line)) (funcall fn line))) 二つのS式を渡し…

Common Lispのreplとstumpwmを同じプロセスで動かす

処理系はsbcl ;; run-stumpwm.lisp (ql:quickload :stumpwm) (defun run-stumpwm () (sb-thread:make-thread #'(lambda () (sb-thread:with-new-session () (stumpwm:stumpwm))))) (run-stumpwm) xterm -e sbcl --load run-stumpwm.lisp で起動する これでxt…

common lispでコンパイル時の余計な警告を抑制する

; test.lisp (defun f (x) (g x)) (defun g (x) x) * (load "test.lisp") ; file: /home/username/test.lisp ; in: DEFUN F ; (G X) ; ; caught STYLE-WARNING: ; undefined function: G ; ; compilation unit finished ; Undefined function: ; G ; caught …

common lispのstring-*関数はシンボルも受け付ける

(string-downcase 'hoge) ; => "hoge" (string-upcase 'hoge) ; => "HOGE" (string-trim "*" '*var*) ; => "VAR" (string= 'foo "FOO") ; => T 文字列のリストから目的の文字列を探してstring-upcaseをする (string-upcase (find "hoge" '("hoge" "piyo" "fu…

roswellからcommon lisp処理系を入れていたときのstumpwmのインストールが失敗する場合の対処

環境はubuntu 15.04 amd64とsbcl 1.2.14 configureで処理系の場所を指定する $ ./configure --with-sbcl="${HOME}/.roswell/impls/x86-64/linux/sbcl-bin/1.2.14/bin/sbcl" 生成されたMakefileを修正 LISP=ros sbcl_BUILDOPTS=-l ./make-image.lisp sbcl_INF…

stumpwmでfloating windowを使う

今のstumpwmのバージョンは0.9.8 いつからかstumpwmでfloating windowが使えるようになってた floating windowはfloating groupの中で使える gnew-floatコマンドでfloating groupを作る フレームをマウスの左ボタンで移動、右ボタンで大きさの変更が出来る …

コマンドラインからquicklispを使うスクリプト

#!/usr/local/bin/sbcl --script (load "~/quicklisp/setup.lisp") (defun usage () (format t "usage: ql command package command: search install ")) (let ((argv sb-ext:*posix-argv*)) (if (/= 3 (length argv)) (usage) (destructuring-bind (cmd pkg…

common lispのmerge

common lispでmergeを使って整列済みのリストに要素を挿入する (defun insert (x list &optional (pred #'<)) (merge 'list (list x) list pred)) (insert 2 (list 1 3 5 6)) ; => (1 2 3 5 6) mergeの使いどころがpaipのコードを見るまでわからなかった