common-lisp

Common Lisp で JavaScript の JSON.stringify?

Common LispでJavaScriptのJSON.stringify←→JSON.parseのようなことをする - @peccul is peccuを見てちょっと気になったので。乱暴に言うと Common Lisp の出力には2種類あって、正しい呼び方があるような気がするけど知らないので "PRINC出力" "PRIN1出力" …

case の途中で (otherwise ...)

keys---a designator for a list of objects. In the case of case, the symbols t and otherwise may not be used as the keys designator. To refer to these symbols by themselves as keys, the designators (t) and (otherwise), respectively, must be…

Yet Another Common Lisp Problems #7 subseq

●問題7 リスト xs の n 番目から m - 1 番目までの要素を部分リストとして取り出す関数 subseq xs n m を定義してください。なお、リストの要素は 0 から数え始めるものとします。Common Lisp には同等の機能を持つ関数 subseq がありますので、ここでは関…

Yet Another Common Lisp Problems #6 drop

再開。 ●問題6 リスト xs の先頭から n 個の要素を取り除く関数 drop xs n を定義してください。なお、Common Lisp には同等の機能を持つ関数 nthcdr があります。 > (drop '(a b c d e) 3) (d e) > (drop '(a b c d e) 0) (a b c d e) > (drop '(a b c d e…

Yet Another Common Lisp Problems #5 take

●問題5 リスト xs の先頭から n 個の要素を取り出す関数 take xs n を定義してください。 > (take '(a b c d e) 3) (a b c) > (take '(a b c d e) 0) () > (take '(a b c d e) 6) (a b c d e) 解答 ホームページ移転のお知らせ - Yahoo!ジオシティーズ 無駄…

Yet Another Common Lisp Problems #4 my-last, my-butlast

●問題4 リスト xs の最後尾を求める関数 last と、最後尾の要素を取り除く関数 butlast を定義してください。Common Lisp には同等の機能を持つ関数 last と butlast がありますので、ここでは関数名を my-last と my-butlast としました。 > (my-last '(a …

Yet Another Common Lisp Problems #3 longerp

●問題3 リスト xs はリスト ys よりも長いか調べる述語 longerp xs ys を定義してください。 > (longerp '(a b c) '(a b)) t > (longerp '(a b) '(a b)) nil > (longerp '(a) '(a b)) nil 解答 ホームページ移転のお知らせ - Yahoo!ジオシティーズ これも O…

Yet Another Common Lisp Problems #2 doublep

●問題2 リストの要素が二つあるか調べる述語 doublep を定義してください。 > (doublep '(a b)) t > (doublep '(a b c)) nil > (doublep '(a)) nil 解答 ホームページ移転のお知らせ - Yahoo!ジオシティーズ doublep って double-float-p と間違えそうだ。…

Yet Another Common Lisp Problems #1 singlep

なんか見つけたので気が向いた時に解いていってみよう。 ●問題1 リストの要素がただひとつか調べる述語 singlep を定義してください。 > (singlep '(a)) t > (singlep '(a b)) nil > (singlep '()) nil 解答 ホームページ移転のお知らせ - Yahoo!ジオシティ…

アナフォリックマクロと package

via アナフォリックマクロとpacakge(2) - sileのブログit も一緒に export しといて使う側は use-package する、で個人的には困らないかなと思うのだけど、ライブラリとしてはまるっと use-package しなくてもマクロだけパッケージ名付きで `(anaph:awhen ..…

しょーもない再起動の使い方: typo

"apply" をよく "appyl" と typo して undefined-function とか怒られるので、もうちょっと気を利かせてくれないかな、とこんなことをした。 (defun appyl (fn &rest args) (restart-case (error 'undefined-function :name 'appyl) (apply () :report "「ご…

Re: Re: case 構文のキーを括弧でくくると何が変わるのか

Re: case 構文のキーを括弧でくくると何が変わるのか - the Unspeakable One http://d.hatena.ne.jp/kitokitoki/20101001/p1 参考: CLHS: Macro CASE, CCASE, ECASE otherwise-clause なしの case をざっくり実装してみると、こんな感じ。 (defmacro %with-c…

setf expansion

setf 式を展開するのに使う5つの値。get-setf-expansion(xyzzy だと get-setf-method-multiple-value)で取得できるあれ。何度読んでも覚えられないので中途半端だけどメモ。 CLHS: Section 5.1.1.2 Setf Expansion (setf (ACCESSOR . ARGS) NEW-VALUE) tem…

Condition System #2 error とかの引数

${XYZZY}/lisp/handler.l 参照。error, warn, signal 全部共通。 A. error CONDITION コンディション・オブジェクト(make-condition で作る奴)を渡すと、そのまま投げる。 B. error CONDITION-TYPE &rest ARGS CONDITION-TYPE のコンディション・オブジェ…

Condition System #1 handler-case と handler-bind の違い

${XYZZY}/lisp/handler.l 参照。 handler-bind (handler-bind ((CONDITION-TYPE 'HANDLER-FN)) FORM*) FORM* を実行中に CONDITION-TYPE 型のコンディションが投げられると、HANDLER-FN に引数として投げられたコンディションを与えて呼び出す。 handler-bin…

Condition を投げる人

誰も困らなさそうな非互換を見つけたのでとりあえずメモだけ残しとく。Common Lisp では condition 投げられたとき*1に、どの関数で投げたかで処理系の反応(デバッガ起動するか否か)が変わる。 ;;; Clozure CL にて ? (setq c (make-condition 'simple-con…

(setf (nthcdr N LIST) VALUE)

subseq は新しいリストを作る・・・だと? - 日々ごちゃごちゃと考える の最後に書いた (setf nthcdr) は、なんか罠くさいなーとおもってたらやっぱり罠だった。 http://cadr.g.hatena.ne.jp/g000001/20090719/1248011028 (SETF NTHCDR) - kozima の日記 - c…

symbol-macrolet 内で macrolet したら(sbcl にて)

(symbol-macrolet ((foo (+ 1 2 3))) (macrolet ((foo () `,foo)) (list foo (foo)))) => (6 30) (symbol-macrolet ((foo :symbol-macro)) (macrolet ((foo (foo) `(list ,foo foo))) (foo :local-macro-arg))) => (:LOCAL-MACRO-ARG :SYMBOL-MACRO) ふむ (s…