2008/11/28 05:52:00http://d.hatena.ne.jp/rui314/20070607/p1
特別な理由がなければstring-joinを、文字列が巨大なときにはintersperseの使用をお勧めします。
2008/11/23 00:26:00http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A%E3%81%AA%E3%81%9CScheme%E3%81%AB%E3%81%AFreturn%E3%81%8C%E7%84%A1%E3%81%84%E3%81%AE%E3%81%8B
でも、どうしてもfor-eachからreturnを使いたいなら、call/ccってのを使ってこうも書けるよ。
(中略)
(call/cc (lambda (return) ...)) は説明すると長くなるけど、まあ、 returnってラベルを定義してるもんだと思ってくれればいい。
call/ccってのがあると、returnとかbreakとかcontinueみたいな構文要素は全部表現できるし、さらにもっとすごいこともできるんだ。それなら、call/ccだけをプリミティブで持ってればいいって考えなのさ。
(return, break, continue等の構文は)、ブロックなり外側の関数なりを特別扱いしているから意味を持つ。一方Schemeでは、(全てはlambda)だ。関数も、ブロックも、変数束縛さえも。
それによって、Schemerはプログラムを自由自在に(分解して)(再合成する) ことができる。
Schemeでは、(関数の定義)と(変数の束縛)とを区別せず、(関数の定義)とは (無名関数を作ってそれを変数に束縛すること)という、 (非常にシンプルなモデル)を採用した。しかし、そのモデルでは、 (トップレベルの関数定義だけ特別扱いする)ということは不自然だ。トップレベルであろうが、他の関数の内部であろうが、lambdaはlambdaだからね。
- return、break、continueなどをSchemeで実装するためには、それの飛び先を示すことが必要だ。
- 飛び先を示すには、ブロックにラベルをつけてやればいい
- ラベルに継続を束縛するようにすれば、ラベルだけ特別扱いすることもないし、そこに飛ぶための特別な構文も必要としない。
let は lambda の糖衣構文だし、
変数束縛っていうのは本質的にはlambdaである
わかりやすかった。
2008/11/22 23:31:00http://d.hatena.ne.jp/rui314/20070625/p1
連想リストはハッシュテーブルのように使うことができますが、ハッシュテーブルとは異なる性質を持ちます。
- ルックアップにO(n)の時間が必要
- キーに新しい値をセットするときに破壊的変更を避けられる
- 値からキーを引くことができる
写経メモ
- (assq foo alist) は (assq 'foo alist) だと思う。
- (assq-ref foo alist) は unbound variable: foo と言われた。
- (assq-ref 'foo alist) にすると unbound variable: assq-ref と言われた。
2008/11/22 23:07:00このブログは、WEB 上でみつけた、「ほほー」という情報を、いちいち自分の言葉に咀嚼することなく、ペタペタ貼り付けていく、私のスクラップブックです。そのうち一人前の Lisper になれるといいな。がんばろうー。
|
|
| | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|
| | | | | | 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 | | | | | | |
|
|
|