ズズズなブログ

はてブロ出戻り組です〜

elispでブロックコメント

たとえば、Cで

/*
    comment
*/

とするところをelispでどうやるか。

結論:ブラケット[]で囲む(と一応できる)。

リンク:elisp - How can I create block (multiline) comments in Lisp code? - Emacs Stack Exchange

以上。


以下は補足というか注意事項。

まあ、elispにブロックコメントがないというのは昔から知られている。

じゃあ、一時的にコメントアウトして動作を確認したいときとかどうするのかというとM-x comment-regionとかやればええやん、というのが通説である。

じゃあなんでブラケットで囲むのが一般的でないのかというと、ちょっと問題があってそれほど便利なわけでもないからだと思う。

たとえば、下のfoo関数を評価してM-x fooしてもcomment!はエコーされない。これは意図通り。

(defun foo ()
  (interactive)
  (message "foo")

  [
   (message "comment!")
   ]

)

でも、シンタックスハイライトでコメントの色がついたりしないから、正直つかいにくい。あと、インデントもなんか変。

参考にしたリンク先によると、「ブラケットで囲んだものは、elispではベクタ(配列っぽいやつ)として扱われて、ベクタの中身は評価されない」という習性を利用してるだけらしいので、これは当然ではある。

ベクタを書くためのブラケットを変な使い方してる、いわゆるバッドノウハウなのであまり人に勧められないんだろう。でもまとりあえず手数を減らすには便利なこともあると思う。

ところで、common lisp#| ... |#でブロックコメントできるのに、なんでelispにはないのかと昔から思ってた。

そこで、21世紀になって20年以上経った今ならもしや…と思って

(require 'cl-lib)

してみたけど、やっぱり#| ... |#は構文エラーになるので、今もelispにはブロックコメントがない模様。