Source of Nothingness - フォーム

* Menu

[[About:self:AboutPage.txt]] | [[Profile:http://iddy.jp/profile/southly/]] | [[まとめ:self:1163859357.txt]] | [[オリジナル:http://ninjinix.x0.com/rn/]] | [[xyzzy:http://raido.sakura.ne.jp/southly/xyzzy/site-lisp/]] | [[あんてな:http://i-know.jp/southly/listall]] | [[■:http://raido.sakura.ne.jp/southly/lisp/ni/view.lisp]] | [[buzz:http://www.google.com/profiles/southly#buzz]]

* Common Lisp : 関数とマクロとスペシャルフォームの違い

http://d.hatena.ne.jp/pgf2/20080415/1208269126
ざっくりとした違いは関数は全ての引数が評価される、マクロとスペシャルフォームはそうとは限らないという点です。
関数が評価されるときは、まず引数を前から順番に評価し、全部の引数を評価したらその値を用いて関数のフォームを評価するという風に評価順序が決まっています。
マクロやスペシャルフォームは、評価順序が一定でなかったり、全ての引数が評価されなかったりします。
例えばスペシャルフォームの「if」はTHEN節とELSE節のどちらか一方しか評価されません。
評価規則が決まっている関数の枠組みでは「if」は定義できないということになります。

マクロの特徴は展開できるということです。
展開形は macroexpandmacroexpand-1 で確認できます。

スペシャルフォームは「[[3.1.2.1.2.1 Special Forms:lisp.org/HyperSpec/Body/sec_3-1-2-1-2-1.html]]」で挙げられているものです。
マクロとスペシャルフォームの関係は排他的ではないので、マクロでありかつスペシャルフォームというものがある実装もあるかもしれません。

まとめとして setq と set と setf の関係
(setq a "value") と (set (quote a) "value") はほぼ等価。(厳密には違います。xyzzyでその差が出るかどうかは不明)
(setq a "value") と (setf a "value") は等価。
なぜなら
(macroexpand '(setf a "value"))
=>(setq a "value")
だから。

* lisp : 破壊とか非破壊とかの話

[[SANOさんとこ:http://snmsts.dreamhosters.com/wiki/?%C6%FC%B5%AD%A4%C3%A4%DD%A4%AF%2F2007-08-11#i7f0cca5]]の補足のつもり。(だけど補足になれているかどうかは不明)
整理し切れていないので箇条書きで。

* xyzzy : 変数の種類

[[(ReadMore...) index.rb?1174689340.txt]]

* Scrapbook : フォームデータの送信 -- ごく簡単なHTMLの説明

http://www.kanzaki.com/docs/html/htminfo32.html

multipart/form-dataを作れるように