違いがあるらしいということは知識としてあるのですが、&bodyはボディらしくインデントしてくれるらしい程度で、具体的にどう違うのか自分も分からないできました。 Symbolicsのマニュアルを読でいたところ詳しい解説があり、&bodyで宣言した引数は、インデント幅が1になるとのことです。また、&restは特にそのような設定はしません。なるほど。 確認したところSBCLでもデフォルトでそういう風になっているようです。 他の処理系でもpprintの設定をすればそういう風に表示してくれるのではないかと思います。 (defmacro macro-with-body-arg (a b &body body) `(list ,a ,b ,@body)) (pprint '(macro-with-body-arg 1 2 3 4)) ;;; SBCL ;>> ;>> (MACRO-WITH-BODY-A
半年くらい前に書いた「アナフォリックマクロとpacakge」の続き。この方法だとダメなケースを発見したので、その改善策(?)を考えてみる。 以前の方法 以前の方法は、アナフォリックマクロの定義と使用が別パッケージに分かれる場合に、アナフォリック変数のインターンを使用側パッケージで行う、というようなものだった。 (defpackage :util (:use :common-lisp) (:export a.when)) (in-package :util) (defmacro a.when (expr &body body) `(let ((,(intern "IT") ,expr)) ; ITシンボルは、マクロ展開時に使用側パッケージにインターンされる (when ,(intern "IT") ,@body))) この方法の利点は前回書いた通りなのだが、a.whenマクロを使用する関数が
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
;;;--------[ Multiple Common Lisp Implementations on Win32 + ASDF setup HOWTO ;;;--[ #x01 Get Emacs http://ntemacs.sourceforge.net/ Install somewhere in your harddisk, preferably in C:\emacs Emacs configuration file is .emacs, pronounced dot-emacs, and it's in C:\.emacs Add it to your path (Windows XP instructions): Right click on My Computer icon on desktop --> Properties --> Advanced Click on th
sbcl(1.0.28)では、実行可能ファイルを作成することができる。 > (sb-ext:save-lisp-and-die "実行可能ファイル名" :toplevel #'エントリ関数 :executable t) エントリ関数には(必須引数の数が0個なら?)どのような関数でも指定可能なのだが、いろいろクセがあるため期待通りに動く関数を一から作成するのは、若干手間取ったりする。 なので、エントリ関数作成用のマクロを作成した。 そこまで汎用的ではないので、その時々で手を加える必要があるとは思うが、テンプレートとしては十分だと思う。 以下コード: ;; パスのファイル名部分を取り出す (defun basename (pathstring) (let ((path (parse-namestring pathstring))) (format nil "~A~@[.~A~]" (pathn
最近のバージョンのSBCL*1では、処理速度を最優先にする宣言を行って関数をコンパイルした場合でも、デフォルトではコンパイラノート*2が表示されないことがある*3。 そのため、最適化を確実に行いたい場合は、コンパイラノートを出力するように明示的に宣言する必要がある。 (declare (optimize (debug 0) (safety 0) (speed 3) (compilation-speed 0)) ;; ↓これが必要 (sb-ext:unmuffle-conditions sb-ext:compiler-note)) また、これはどうやらdeclaimで宣言した場合は無効で、declareを使う必要があるようだ。 *1:今回試したのは1.0.28 *2:最適化を行うために修正が必要な箇所などを教えてくれる *3:多分compile-file関数でコンパイルを行う場合は、デフォル
You could be having fun with Common Lisp on your Mac right now; you know that, don’t you? ;) Lately I have been having a ball doing Common Lisp programming on my MacBook Pro. But as with all great starts, this was not without its pitfalls. After many frustrating hours, and questions asked on the #lisp IRC channel, I’ve come to realize that perhaps others may benefit from treading a path already tr
sbcl This manual is part of the SBCL software system. See the README file for more information. This manual is largely derived from the manual for the CMUCL system, which was produced at Carnegie Mellon University and later released into the public domain. This manual is in the public domain and is provided with absolutely no warranty. See the COPYING and CREDITS files for more information.
Common Lisp のライブラリ環境をそろえるのに幾つか方法があると思うが、私がどうしているかを書いておく。 Debian を使用。基本的に Debian のパッケージがあるものは Debian のパッケージを使う。 パッケージのないもの、あっても最新バージョンが欲しいものは~/letter/lisp/lib の下に各リポジトリからチェックアウトしている。Common Lisp 界は darcs が多かったけど git が主流になりつつある気がする。それらを asdf:*central-registry* に登録するために下記のようにcl-fad を使っている。 Debian パッケージもリポジトリの公開もないものは asdf-insatll している。 あとライブラリを探すときは CLiki と The Common Lisp Directory を参照する。 ~/.sbclrc は
This page is for collecting tips for avoiding problems with and making the best use of SLIME, the Emacs-based Lisp development environment No REPL by default: Slime no longer gives you a REPL by default, as you can use slime without a REPL. To specify that you want one (see file NEWS): (slime-setup '(slime-repl)) Connecting automatically: Making slime connect to your lisp automatically when you op
(directory "**/*.asd") のようにすると zsh みたいにサブディレクトリも検索してくれる。 いままで ~/.sbclrc の中で cl-fad を使って asd ファイルのあるディレクトリをasdf:*central-registry* に登録してたけど directory 関数で十分じゃないかと気づいた。 asdf-install を使わずに各リポジトリから最新を持ってきてたり、Windows でシンボリックリンクが使えなかったりという理由でディレクトリを走査して asdf:*central-registry* に登録している。 で、~/.sbclrc を修正 (setf (logical-pathname-translations "ancient") `(("**;*.*" "/home/ancient/letter/lisp/**/*.*"))) ;; ~/l
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く