elispでgrepする

普通に書くならば、

(let (matched)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward regexp nil t)
      (push (match-string 0) matched))
    (nreverse matched)))

正直ヘドが出るコードだ。
だがloopマクロを使うと簡潔に書ける。

(save-excursion
  (goto-char (point-min))
  (loop while (re-search-forward regexp nil t)
        collect (match-string 0)))