lisp

SLIME版のfind-functionはslime-edit-definition

SLIMEを使い始めてからずっと疑問だった関数定義の参照:elispでいうfind-functionはどれなのか。 それはslime-edit-definition (M-.)であった。なんという連想しにくい名前だ>< せめてslime-find-functionやslime-find-symbolとでも名付けてくれればすぐ…

変数・関数だけでなくパッケージにもdocstring持てるんだね

Common Lispのdefpackageはdocstringを持てる。 CL-USER> (defpackage temp (:use cl) (:documentation "pkg doc")) #<PACKAGE "TEMP"> CL-USER> (documentation (find-package 'temp) t) "pkg doc" けどSLIMEでそれを見ることってできないのかな。パッケージ名をslime-descr</package>…

Common Lispのdefpackageとin-packageを入力するskeleton

とりあえず作成。 (defmacro defun-abbrev (funcname table abbrev &rest body) "Defun a function and define an abbrev. Note that `table' is abbrev table to use." `(progn (defun ,funcname ,@body) (define-abbrev-function ,table ,abbrev ',funcnam…

make-sbcl-imageにあるパッケージを入れまくる

http://lispuser.net/commonlisp/sbcl.html:lispuser.netのsbclのページにあるmake-sbcl-imageは日本Lisp界で有名なonjoさんの使っているイメージファイル作成スクリプト。イメージファイルに入れるくらいだから常用していると思われる。彼の厳選したパッケ…

cl-iconvがasdf-installableに

http://www.cliki.net/iconv俺が5日前にiconvがweb-archiveされていることに気付いたのでclikiに書き込んだらついさっき誰かがxreaに保存してくれてた。asdfでインストールできると嬉しいよね。

cl-curlのインストール

http://common-lisp.net/project/cl-curl/asdfではインストールできないので手作業。しかもろくな解説がない(怒)言われたままに (clc:clc-require :curl) してみたがファイルがないとエラーになった。 CL-USER> (clc:clc-require :curl) ; loading system de…

Common LispでHTTP - DRAKMAがうまくいかない

(flexi-streams:octets-to-string (drakma:http-request "http://ja.doukaku.org/feeds/comments/" :force-binary nil :external-format-in :utf8 )) DRAKMAにバイナリとみなされるとURLの内容は文字列ではなくoctetのvectorで返される。 それを文字列化する…

loopとmaphashとiterate

http://d.hatena.ne.jp/ytakenaka/20070703/p1 Common Lispの話。 iterateも仲間に入れてくれw 値を設定 (in-package :iter) (defvar *hash* (make-hash-table)) (loop for x from 97 to (+ 97 25) and y = (random 1.0) do (setf (gethash (code-char x) *…

エロと風俗情報満載 どう抜く?にハマる

エロと風俗情報満載 どう抜く?簡単なお題で未解決なものを解きまくる。 過去に触れたことのある言語のリハビリにちょうどよかった。

続:Common Lispで使えるHTTPクライアントって何がいいんだろう

(drakma:http-request "http://www.rubyist.net/~rubikitch/" :force-binary nil :external-format-in nil) WARNING: Problems determining charset (falling back to binary): :ISO-2022-JP is not known to be a name for an external format. #(60 63 120…

あみだくじ問題

http://ja.doukaku.org/20/ 新しいお題。あみだくじ問題。 最初はとっかかりがつかめなかったので絵を描いてみる。そしたら規則性が見付かりプログラム化してみた。 とりあえずCommon Lisp、elisp、Scheme、D言語、Rubyで書いてみた。Schemeはなるべく再帰で…

iconv発見

Common Lispでnkfみたいなのはないのかと思ったらiconv発見。 (asdf-install:install "iconv") しても404だったのでweb archiveからとってくる。http://web.archive.org/http://www.swj.co.jp/~tahara/lisp/lib/iconv_0.2.tar.gz~/.sbcl/site/以下に展開し、…

Common Lispで使えるHTTPクライアントって何がいいんだろう

http://ja.doukaku.org/comment/685/Common Lispにはdrakmaという高機能なHTTPクライアントがあるけど…。 (require :drakma) (drakma:http-request "http://ja.doukaku.org/feeds/comments/" :force-binary nil) drakman:http-requestは7つの多値を返す。内…

どうかく?の問題

http://ja.doukaku.org/comment/511/楽勝。 (require :iterate) (in-package :iter) (defun remove-comments (in out) (iter (for line in-stream in using #'read-line) (unless (char= (aref line 0) #\#) (write-line line out)))) (defun test () (with-…

どうかく?の問題

http://ja.doukaku.org/3/んー、今のレベルじゃ難しい… (require :iterate) (in-package :iterate) (defparameter *coins* '(500 100 50 10 5 1)) ;; DRY *coins* (defun combinations (wallet) (labels ((cnt (coin) (or (cdr (assoc coin wallet)) 0))) (i…

iterate(iter)を使ってみる

loopの強力版といったところ。 loopとの比較 iterにuptoがないのはびっくりしたがほかはほとんど自然に翻訳できる。 loopのif/when/unlessはanaphoricになっているが、iterは自分でbindしないといけない。 hashの巡回が自然なのがいい。loop版はダサすぎる。…

elispでclosureもどきを実現する

http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html興味深い。elispではこれでclosureもどきが作れる。 (defun make-add (n) `(lambda (x) (+ x ,n)))

eql specializerは特異メソッド?

Rubyの特異メソッドとCLOSのeql specializer: ホットコーナーやっぱり同じようなものだったのか。初めてeql specializerを知ったとき、これって特異メソッド?と思ったものだ。

iterateパッケージ

俺はDebian GNU/Linux使いなので apt-get install cl-iterate でインストール。 ITER> (require :iterate) ITER> (iterate (for xx in '((1 . 1) (2 . 3))) (maximizing (+ (car xx)(cdr xx)))) 5 ITER> (iterate (for xx in '((1 . 1) (2 . 3))) (finding x…

sbclのコア作り、SLIME起動時間短縮

SBCL - Steel Bank Common Lispを参考にsbclのコア(イメージファイル)を作る。 俺はまだまだ彼ほど熟知していないのでpre-loadするライブラリは限られている。そこから削る削る。 そのかわりs-utils, arnesiをpre-loadしてみる。 (load "/usr/share/common…

*SLIME Description*バッファに色付けする

M-x slime-documentation や M-x slime-describe-symbol などを実行すると *SLIME Description* バッファにそのシンボルの説明が出てくる。これは便利だが色がついてないので俺は見辛く感じる。 CAR is an external symbol in #<PACKAGE "COMMON-LISP">. Function: #<FUNCTION CAR> Its associated</function></package>…

更新

SLIMEでLispシンボルをslime-documentationなどするとエントリ名(ファイル名)が大文字になってキモイので小文字にできるようにした。http://www.emacswiki.org/cgi-bin/wiki/download/usage-memo.el

ライブラリ探し

Common Lispの標準ライブラリはさほど充実していないので、フリーでポータブルなライブラリを漁ることにしてみた。 S-UTILS http://homepage.mac.com/svc/s-utils/s-utils.tar.gz7320bytes。 S-UTILS helps in:・ manipulating directory pathnames ・ copyi…

Erlisp

http://dirkgerrits.com/programming/erlisp/おもしろそう。Erlangのparallelismとdistributed programmingをCommon Lispに取り入れようとしているプロジェクト。 しかし開発は止まっているし、ブログも2年ほど更新していない…http://dirkgerrits.com/progra…

loopの疑問

CL-USER> (setq alist '((1 . 1) (1 . 3) (1 . 2))) ((1 . 1) (1 . 3) (1 . 2)) CL-USER> (loop for (a . b) in alist maximize (+ a b)) 4 足して最大になるような「数字の組」を求めたい。 loopマクロでできるのかな?? 値は出るんだけどなー。 多値で(+ …

どうかく?orgでCommon Lispプログラムを書いてみた。

http://ja.doukaku.org/http://ja.doukaku.org/8/ 1 (defun center (str len &optional (padchar #\ )) 2 "If LEN is greater than the length of STR, returns a new String 3 of length LEN with STR centered and padded with PADCHAR; 4 otherwise, retu…

loopの奥深さを知る

loopマクロってほんとにすごい。究極の言語内DSL。ここまでくるともう芸術品としか言えない。 loopをキモいと言うLisperは多そうだけど、それが設計できるのがLispなんだろう。 いろいろな例をREPLで実行中。結果は後でさっと見られるようにusage-memoに書い…

usage-memo.elリリース

http://d.hatena.ne.jp/rubikitch/20070629#1183119440やっとできた。ソースは↓からどうぞ。 http://www.emacswiki.org/cgi-bin/emacs/download/usage-memo.elどんなのかというとぶっちゃけ *Help* などのヘルプバッファに書き込み・保存が可能になるという…

替え歌

思い付いたけどカスラックに攻撃されたらまずいから消した。替え歌もやばそう。http://ja.wikipedia.org/wiki/%E6%9B%BF%E3%81%88%E6%AD%8C http://ja.wikipedia.org/wiki/%E4%BA%8C%E6%AC%A1%E5%89%B5%E4%BD%9C%E7%89%A9黙認されているもののあの著作権893…

SBCL 1.0.7

26日に1.0.6が出てるよーと言った翌日に1.0.7が出てら!なんというタイミング。P.S. もうSBCLに移行できました^^ 初インストールの時SBCL_HOMEを設定するとエラーで怒られていたので、unsetすると無事にSLIMEまで使えました。 Debian GNU/Linuxだから設定…