Source of Nothingness - lisp

* Menu

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

* Scrapbook : reddit.com: Ask reddit: Tutorial for writing a Lisp interpreter?

 http://reddit.com/info/6ehu9/comments/

* 2008-04-17 :

* 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")
だから。

* 2008-04-13 :

;;; 消す
(progn
  (winapi:SetWindowLong (get-window-handle)
                        winapi:GWL_STYLE
                        (logand (winapi:GetWindowLong (get-window-handle) winapi:GWL_STYLE)
                                (lognot (logior winapi:WS_CAPTION winapi:WS_SYSMENU))))
  (winapi:SetWindowPos (get-window-handle) 0 0 0 0 0 (logior winapi:SWP_NOZORDER winapi:SWP_NOSIZE winapi:SWP_NOMOVE winapi:SWP_FRAMECHANGED)))

;;; 戻す
(progn
  (winapi:SetWindowLong (get-window-handle)
                        winapi:GWL_STYLE
                        (logior (winapi:GetWindowLong (get-window-handle) winapi:GWL_STYLE) winapi:WS_CAPTION winapi:WS_SYSMENU))
  (winapi:SetWindowPos (get-window-handle) 0 0 0 0 0 (logior winapi:SWP_NOZORDER winapi:SWP_NOSIZE winapi:SWP_NOMOVE winapi:SWP_FRAMECHANGED)))

;;; ちなみにステータスバーを消そうとする
(winapi:ShowWindow (winapi:FindWindowEx (get-window-handle) 0 (si:make-string-chunk "msctls_statusbar32") 0) winapi:SW_HIDE)
xyzzyだと^\fなんて入ってなくてそのまま^Lが入っているような気がするんだけど
$XYZZY/lisp/page.l を読んでいて、なぜ以下の部分(18行目)に気付かなかったのか不思議。xyzzy のリファレンスを参照していなさそうなのも不思議。
(or (boundp 'page-delimiter)
    (setq page-delimiter "^\f"))

* memo : xyzzy lisp FFI

いつかちゃんとまとめたい。

* Scrapbook : dlisp - lisp-style string parsing library

 http://www.netfort.gr.jp/~dancer/software/dlisp.html.ja

* Scrapbook : LISPBUILDER