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

Re: [bep] learning lisp: let



 高橋玲子です。
今日も暑くなりそう……?

Reply Koichi INOUE <inoue@...>'s message:

} 文字列は文字をいくつかならべて、ちょうどいい大きさの箱に入れたと考えてく
} ださい。
} 「?a」と書くと「a」という1文字を表すのに対して、
} 「"a"」ではaという1文字が入ったちょうどいい大きさの箱を表します。
} 「"ab」では?a ?b を順に入れた箱です。
} このあいだ坂本さんの話題ででてきたconcatなどの関数では引数として文字列を
} たくさん与えてつなげることができますが、文字を与えることはできません。
} 文字から文字列への変換は、たとえば
} (char-to-string ?a)
} とすると1文字が入った長さ1の文字列"a"になるのでこれを使います。

 ええと、難しいです……。
「文字」と「変数」も、また違うものなんですよね??
たとえば、「文字列」は、ふつうに書く言葉の一部みたいに、ほんとうに「文字
列」でしかない、だから、つなげたり切ったり(?)できる(でいいのかな??)と
いう感じ……?
でも、なぜ「箱」があるのでしょう?
それから、もっとわからないのは「文字」です。
変数や関数になる文字(シンボル?)が必要なのはわかる気がするのですが、「
文字」はどういうときに必要なのでしょう?

} "Messages"バッファに一応エラーの表示が残ります。
} 後、*scratch*バッファで遊ぶ前に
} (setq debug-on-error t)
} を評価してからやるとエラーになったときに例のバックトレースバッファが開く
} のでなんとなく分かるかも知れません。

 本筋とは関係ないのですが、Lispを知らなかったら「実行」と言いたくなりそ
うな作業を「評価」というんですね?(ほんとうは値を返してもらうのが「評価」
なのだけれど、それイコール副作用も起こる実行になるみたいな)。
(setq debug-on-error t)すると、debug-on-errorにt(を評価した値だけどやっ
ぱりt)が入るんですね?

} # ただし、このときBEPを使っているとad-何とかというのによく出くわすかも知
} # れません。これはBEP自身がしゃべるために使っているadvice機能によるもの
} # なので、多少エラーメッセージが複雑になります。

 次回lisp-interaction-modeで遊んだときに見てみます。

} printという関数の説明
} C-h f print RET
} で見ると、
} output the printed representation of OBJECT, with newlines around it.
} となっているので、printがそういうものなのでしょう。
} OBJECTはprintに与える引数のことを指しています。

 あっ、すみません。ちゃんと↑みたいにやってprintの意味を見てみればよかっ
たんですね。次回から。

} (let ((a 1 ) (b 1)) ...)
} というところで、1は実は「評価」された上でaやbに代入されます。ここに変数
} を入れるということは、その変数の評価結果が入るということになります。関数
} だったときも同じです。
} だから、
} (setq x 10)
} した上で
} (let ((a x)) a)
} とすると10が結果になります。
} xをクオートした場合はxというシンボルになるので、
} (let ((a 'x)) a)
} の結果はxになります。

 わかりました。
letの中で指定したものは中でだけ有効になるけど、
その前に(?)指定されたものはletの中でも有効なんですね。

} >  これは、勝手に、aにnilという3文字が入る、ということですね(なにも指定
} > しないのに、3文字も入るだなんて、なんだかずるい感じです(^_^;))。
} 
} 3文字というか、nilというシンボル(普通は「偽(ギと読む)」を表します)が
} 入ります。nilは前にも話がでましたが何回評価してもnilというシンボル自分自
} 身です。

 今ごろそんなことを!?って言われてしまいそうですが、2文字以上でもシン
ボルになれるんですね?
1文字シンボルの連続と、どうやって区別されるんですか?(スペースを入れる
のかな……?)

} # 自分でチェックしながら書いていると時間がかかりますね。N高橋さんにおま
} #   かせするべきなのかも。

 時間をかけて丁寧に書いてくださってありがとうございます。
でも、私の基準で見ると、ものすごく返信が早かった気が……(^.^)。


**-***-***-***-***-***-***-***-***-***-***-***-**
           Reiko TAKAHASHI  (高橋玲子)
         E-mail:  HFC03614@...
         ICQ UIN: 85924121  (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**