* Menu
[[About:self:AboutPage.txt]] | [[Profile:file/southly/]] | [[まとめ:self:1163859357.txt]] | [[オリジナル:http://ninjinix.x0.com/rn/]] | [[xyzzy:lisp/]] | [[あんてな:listall]] | [[■:lisp]] | [[buzz:files/southly#buzz]]
- 2008-04-23 :
- xyzzy topic : 第七回xyzzyオフ会
- 2008-04-22 : (ni-view xyzzy:*packages*) の件
- Scrapbook : reddit.com: Ask reddit: Tutorial for writing a Lisp interpreter?
- 2008-04-17 :
- Common Lisp : 関数とマクロとスペシャルフォームの違い
- 2008-04-13 :
- memo : xyzzy lisp FFI
- Scrapbook : dlisp - lisp-style string parsing library
- Scrapbook : LISPBUILDER
- Scrapbook : Common Lisp in Debian
- Scrapbook : Lisp/処理系 - assari
- 2008-03-24 :
- Common Lisp : ecl
- 2008-03-23 :
page 2 - << : 0 : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : >>
* 2008-04-23 :
ステータスバーの表示をいじるね〜
どんな情報があったらうれしいのだろうか。
モード行もあるしな〜
どんな情報があったらうれしいのだろうか。
モード行もあるしな〜
(start-timer 1.0 #'(lambda () (when (string= "T" *status-bar-format*) (winapi:SendMessage (winapi:FindWindowEx (get-window-handle) 0 (si:make-string-chunk "msctls_statusbar32") 0) #x0401 1 (si:make-string-chunk " --/--(--) --:-- ")))))
* xyzzy topic : 第七回xyzzyオフ会
view_event.pl?id=29769602&comm_id=30848
off7.png
第七回オフ会です。
「お酒を飲みつつお話しましょう」といった趣旨で行います。
集合場所はJR上野駅中央改札前辺り(目印として「入門xyzzy」を持って立ってます)
集合時刻は18:00
開催場所は未定です。(2008-04-13現在)
参加表明してくださった方には募集期限である5/20にNANRIの連絡先をお送りします。
参加表明・質問・その他はNANRIまで メール or mixi などでどうぞ。
off7.png
第七回オフ会です。
「お酒を飲みつつお話しましょう」といった趣旨で行います。
集合場所はJR上野駅中央改札前辺り(目印として「入門xyzzy」を持って立ってます)
集合時刻は18:00
開催場所は未定です。(2008-04-13現在)
参加表明してくださった方には募集期限である5/20にNANRIの連絡先をお送りします。
参加表明・質問・その他はNANRIまで メール or mixi などでどうぞ。
* 2008-04-22 : (ni-view xyzzy:*packages*) の件
- 974氏、多謝。直しました。
- なぜかはよく分かりませんが、302 Found が返ってきたものがあって read できないデータが保存されていました。
- 見れなくなるのはまずいので、readできないファイルができたら読み飛ばすようにでもしておきます。
* 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」は定義できないということになります。
マクロの特徴は展開できるということです。
展開形は macroexpand や macroexpand-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") は等価。
なぜなら
ざっくりとした違いは関数は全ての引数が評価される、マクロとスペシャルフォームはそうとは限らないという点です。
関数が評価されるときは、まず引数を前から順番に評価し、全部の引数を評価したらその値を用いて関数のフォームを評価するという風に評価順序が決まっています。
マクロやスペシャルフォームは、評価順序が一定でなかったり、全ての引数が評価されなかったりします。
例えばスペシャルフォームの「if」はTHEN節とELSE節のどちらか一方しか評価されません。
評価規則が決まっている関数の枠組みでは「if」は定義できないということになります。
マクロの特徴は展開できるということです。
展開形は macroexpand や macroexpand-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 :
- http://d.hatena.ne.jp/rairairou/20080410/1207837409
- ステータスバーを消せないっていうのは、[[亀井さんの発言:xyzzy/ml/msg07840.html]]で確かです。ステータスバーはエコー領域として必要ですし。
- タイトルバーを消せないっていうのは、どこの誤情報なんだろ? タイトルバーは普通に消せます。
;;; 消す (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 でできるできないの判断をするには、lispの知識とWindowsのAPIの知識とxyzzyの実装の知識が必要で、オレでも安易に結論を出せないです。
- できないって結論を出す前に質問として流すようにしてくれないかなぁ。
- ついでに改ページの話
- http://d.hatena.ne.jp/himadatanode/20080411/p5
xyzzyだと^\fなんて入ってなくてそのまま^Lが入っているような気がするんだけど$XYZZY/lisp/page.l を読んでいて、なぜ以下の部分(18行目)に気付かなかったのか不思議。xyzzy のリファレンスを参照していなさそうなのも不思議。
(or (boundp 'page-delimiter) (setq page-delimiter "^\f"))
* memo : xyzzy lisp FFI
いつかちゃんとまとめたい。
- 基本
- データ型関連
- int -> c:int, double -> c:double, ...
- ポインタ型は「(c:char *)」というようなリストの形で表現
- C の構造体は c:define-c-struct で定義
- C の関数を呼ぶ関連
- c:define-dll-entry で C 関数のインターフェースを作る
- c:define-dll-entry RETURN-TYPE NAME (&rest ARGS) DLL-NAME &optional EXPORT-NAME
- RETURN-TYPE 関数の戻り値
- NAME 関数名
- ARGS 関数の引数
- DLL-NAME DLLのパス
- EXPORT-NAME Cの関数名 (DLLでexportされているもの)
- データのやり取りは chunk を介する
- C から呼べる関数(callback関数)を作る関連
- c:defun-c-callable で作る
- c:defun-c-callable RETURN-TYPE NAME (&rest ARGS) &body BODY
- RETURN-TYPE 関数の戻り値の型
- NAME 関数名
- ARGS 関数の引数
- BODY 関数の定義
- データのやり取りは chunk を介する、ということで同上
- 注意点
- 下手をすると簡単に xyzzy が落ちることを頭に入れておく
- gc に注意する
- gc で回収されないオブジェクトを作らない
- C の関数が動いているときに chunk が gc されないように気をつける
- ポインタ型は全部「void *」とみなしても問題ない
- 「void *」は「unsigned long (32bit unsigned integer)」と等価として扱うこともできる
- xyzzy の未実装やバグにも注意
- その他、外部とのやり取り
- dde
- ole
* Scrapbook : dlisp - lisp-style string parsing library
* Scrapbook : LISPBUILDER
lispbuilder.sourceforge.net/