Closed1
RMSはcl-lib.elが嫌い
以前、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ヶ月前にクローズされました