[xyzzy:07813] xyzzy 起動時の defstruct と byte-compile の関係について
- Subject: [xyzzy:07813] xyzzy 起動時の defstruct と byte-compile の関係について
- From: OHKUBO Hiroshi <ohkubo@xxxxxxxxxxxxxxxxxxxxx>
- X-mailer: EdMax Ver2.84.3F
みなさまこんにちは。大久保博之です。
最近自分で lisp を書いてみるようになり、色目をだして defstruct なんて
ものを使ってみたところ壁にぶつかってしまいました。
少し説明をさせてください。
■状況1: 以下のような "hoge-struct.l", ".xyzzy" がある場合。
========================================
-- hoge-struct.l -----------------------
========================================
(defstruct hoge-struct
:hoge1
:hoge2
:hoge3)
(defvar *hoge-struct-list*
'(#S(hoge-struct hoge1 "1" hoge2 "2" hoge3 "3")
#S(hoge-struct hoge1 "a" hoge2 "b" hoge3 "c")))
========================================
-- .xyzzy ------------------------------
========================================
(load-library "hoge-struct")
========================================
・1: hoge-struct.l を byte-compile していない場合。
→ 無事 xyzzy 起動
・2: hoge-struct.l を byte-compile した場合。
→ 起動時に "未定義の構造体です: hoge-struct" というエラーが生じる。
■状況2: 以下のような "hoge-struct.l", ".xyzzy" がある場合。
========================================
-- hoge-struct.l -----------------------
========================================
(defstruct hoge-struct
:hoge1
:hoge2
:hoge3)
(defvar *hoge-struct-list*
(list
(make-hoge-struct :hoge1 "1" :hoge2 "2" :hoge3 "3")
(make-hoge-struct :hoge1 "a" :hoge2 "b" :hoge3 "c")))
========================================
-- .xyzzy ------------------------------
========================================
(load-library "hoge-struct")
========================================
・3: hoge-struct.l の byte-compile に関わらず正常に起動。
以上から、どうも構造体の定義が byte-compile されている場合、
xyzzy の起動が終了するまで、#S(hoge-struct ...) のような記述は存在して
はならないのだと考えました。
しかし現在私が行いたいことは、hoge-struct.l を byte-compile してある
状態で上記 *hoge-struct-list* の内容を次回 xyzzy 起動時にも覚えていて
くれないかな、ということなんです。
========================================
-- .xyzzy ------------------------------
========================================
(load-library "hoge-struct")
(define-history-variable *hoge-struct-list*)
========================================
上記のように .xyzzy に記述すると、hoge-struct.l を byte-compile してい
ない場合は *hoge-struct-list* の値が復元され xyzzy も正常に起動すると
いったように期待通りに動作するのですが、byte-compile した場合には、
xyzzy の起動時にエラーはでないのですが *hoge-struct-list* の内容は
nil のままで、また、いつも表示させているバッファタブが消えてしまってい
ます。
メニューの「表示」→「ツールバー」の所も灰色く disenable の状態になっ
ています。
# 要は何がしたいかというと、車輪の再開発で無駄な感じもする pickup-pattern.l
# という文字列の強調用 lisp で使っているパターンリストを次回起動時にも
# 引き継ぎたいということなんです。
長々と書かせていただいてしまいましたが、普通はこうするんだよ的なアド
バイス、解決策等がありましたらご教授宜しくお願い致します。
---
OHKUBO Hiroshi
konata_o@xxxxxxxxxxx
http://members.tripod.co.jp/ohkubo/xyzzy/index.html