Lispy Days

趣味で Lisp な日々 (index) (weblog) (view) (edit) (help)

CL-Wiki 更新

CL and Tail-Call Elimination

Bill Clementson's Blog より

Common Lisp で実装した末尾再帰の最適化。おもしろい〜。

Acclaim Enhanced

lmonodor より lisp なプレゼンテーションツール。

BSD Magazine vol 20

「Emacs で生きる」という特集があったのでフラフラと購入してしまいました。

全体的に lisp 色は薄めの内容だったけど、これで Emacs を通じて lisp を触る人が増えると良いなぁ。簡単な設定から便利な使い方、面倒なフォントの設定まで一通りそろってました。以下気になった点をいくつか。

ツッコミ

作業用バッファには with-temp-buffer マクロを使うほうが楽じゃないかなー。buffer-string とか match-string で結果取り出せばいいような。

(defun imgsrc (filename)
  (interactive "Ffile: ")
  (let ((template "<img width=%s height=%s src=\"%s\" alt=\"[]\" />")
        (width 0)
        (height 0))
    (with-temp-buffer
      (shell-command (format "identify %s" filename) (current-buffer))
      (beginning-of-buffer)
      (re-search-forward "\\([0-9]+\\)x\\([0-9]+\\)")
      (setq width (match-string 1))
      (setq height (match-string 2)))
    (insert (format template width height filename))
    (search-backward "[")))

機能は減っているが、set-buffer, kill-buffer を手動でやるくらいなら with-temp-buffer を紹介したほうが良いような。

あと気になったのは

(while hoge-list
   (setq item (car hoge-list))
   (princ item) ;; 処理
   (setq hoge-list (cdr hoge-list)))

という書式。

(dolist (item hoge-list)
  (princ item)) ;;処理

のほうが楽だし後々便利な気がします。

(if 条件
  (progn 
     式1
     式2
     ...))

(when 条件
  式1
  式2
  ...)

のほうが括弧もインデントも少ないので初心者向けだと思います。

;; (setq list (cons (cons "key" "val") list)
(push '("key" "val") list)
;; (setq path (append '("/a/b/c") path))
(push "/a/b/c" path) 

…とかいうツッコミはおそらく私が Common Lisp な人だから気になるのかなぁ。でも Emacs の紹介が目的なら短くて簡潔な表記のほうが印象が良いと思いませんか?

あと match-paren 関数は Emacs 附属の FAQ では?それとも FAQ の元ネタの事なのかなぁ。