anything.elはcl関数を使う
cl関数は便利なのがおおい... unionとかremove-ifとかset-differenceとか...etc - IMAKADO::BLOG
anything.elは将来的に (require 'cl)をeval-whenで囲むようにする予定とかあるのかな...
予定があるのだったら移行する時のためにsource書くときにcl関数使わないようにしたほうが良いっすよね。
予定はない。cl関数思う存分使えばよい。むしろ推奨するくらいだ。Emacs Lispプログラマはガンガン(require 'cl)しろよ - http://rubikitch.com/に移転しましたで述べてるように俺は反体制な人間なので。
意味がない制限だし、短く書けるものを短く書けないなんて保守性の問題が出てくる。Emacs LispはうんこだとLisperによく言われるのは当然のこと。Emacs開発者がこの愚かな呪縛を解かない限り、前には進めない。俺は前に進みたい。
1年前anything.elがあれだけ祭りになったのは、(require 'cl)していたからではなくて、プログラムの発想がすごすぎだったからだ。祭りの中でgnu-emacs-sourcesで(require 'cl)につっこんだ人は誰一人いなかったと記憶している。形骸化しつつあると願いたい。
もっとも、loopを使えば等価なものは実現できるから救い。
(setq l '(1 2 3 4 5 6)) ; => (1 2 3 4 5 6) (remove-if (lambda (x) (> x 3)) l) ; => (1 2 3) (loop for x in l unless (> x 3) collect x) ; => (1 2 3) (remove-if-not 'oddp l) ; => (1 3 5) (loop for x in l when (oddp x) collect x) ; => (1 3 5) (some (lambda (x) (= x 3)) l) ; => t (loop for x in l thereis (= x 3)) ; => t
で、(unless (fboundp 'remove-if) (defun remove-if () ほにゃらら))でloopによる定義を加えておくのも一案だ。だが、貴重な時間をそんなくだらないことに使うくらいならば、新しいコードを書いたほうが有意義に過ごせるだろう。
remove-ifを別の意味で使う人なんていないよね。もしいたとしたらcl関数使っているパッケージは動かなくなる。 ふつうのLisperならば.emacsに(require 'cl)書いてるよねぇ。