Closed1

RMSはcl-lib.elが嫌い

g000001g000001

以前、Emacs Lispに導入されなかったRMSの嫌いな機能というのをまとめてみたが、最近のelisp界に於てRMSのCommon Lisp嫌いが悪化しているらしい

RMSは&keywordやキーワード引数が嫌いというのは先日のまとめにも書いたが、今回もそれが切っ掛けとなり、コアな機能にもcl-lib.elが使われているというのが問題だというところまで延焼しているらしい。
cl-pushnewが使われていることが槍玉に上げられ、RMSによる代替コードが示されている。

        (while (string-match "\\W" abbrev pos)
          (cl-pushnew (aref abbrev (match-beginning 0)) badchars)
          (setq pos (1+ pos)))

ではなく、

        (while (string-match "\\W" abbrev pos)
          (or (memq (aref abbrev (match-beginning 0)) badchars)
              (push (aref abbrev (match-beginning 0)) badchars))
          (setq pos (1+ pos)))

と書くのが良いと。

しかし、私はRMSマニアなので、たまたまRMSがpushnewを、しかも今回問題視されているキーワード引数付きで使っているのを何故か憶えていたので引用しておこう。コードは1983年あたりのLispのコードウォーカーである。

    (pushnew (car exp) *all-functions* :test 'eq)

ちなみに、pushnew自体は、Common Lispより前のZetalispから存在する。
なぜRMSは当時pushnewを使ったのかといえば、この局面ではぶっちゃけ便利だからだというのは、上述のコードの書き換えを見てもあきらかだろう。

個人的にはLispマニアなのでcl-libは使わず、elispしばりで書くというのも全然嫌いではない。

このスクラップは4ヶ月前にクローズされました