[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:01035] Re: site-lisp について



亀井さんこんにちは、島田です。

ドット対のお話、よく分りました。リスト (foo bar baz) は
(foo . (bar . (baz . nil))) の省略形なんだから、

[CAR . CDR]
  |     |
 foo    +-[CAR . CDR]
            |     |
           bar    +-[CAR . CDR]
                      |     |
                     baz   nil

という構造になっていて、ということは結局リストっていうのは、CAR と CDR 
の二つのポインタの対でできていると考えていいですか。

あ、これがセルですね。cons という関数はこれを生成するのか。

("c:/usr/home/bin/xyzzy/lisp" . ("c:/usr/home/lilp" . nil ))
だったらいいけど、
("c:/usr/home/bin/xyzzy/lisp" . "c:/usr/home/lilp")
だと CDR がセルを指していないので、これはリストではない、ということ
で検索にならないんですね。

*load-path* がどうしてこうなっちゃったかは分りました。

private-load-path を使ったあのマクロを書く際に、*scratch* でいろいろ試
しながらやっていたのですが、失敗するごとに *load-path* が長くなって(笑)
いくのに閉口して、いっぺん元の値に戻そうと思い、

(setq *load-path* "c:/usr/home/bin/xyzzy/lisp")

とやっちゃったんです。変数をリストに束縛すべきところに、文字列を直に
指してしまったんですね。ここを

(setq *load-path* '("c:/usr/home/bin/xyzzy/lisp"))

とすればよかったんでしょう。
実験。

|(setq test-foo "string")
|"string"
|
|(setq list-foo (cons "string" ()))
|("string")
|
|(setq string-foo "string2")
|"string2"
|
|(cons test-foo string-foo)
|("string" . "string2")
|
|(cons list-foo string-foo)
|(("string") . "string2")
|
|(cons string-foo list-foo)
|("string2" "string")

-- 
島田@自宅

Index Home