よれよれスクラップ帳 

2008/11/28 05:52:00

文字列のリストをカンマ区切りで出力

http://d.hatena.ne.jp/rui314/20070607/p1

特別な理由がなければstring-joinを、文字列が巨大なときにはintersperseの使用をお勧めします。


2008/11/23 00:26:00

returnなど

http://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:00

連想リストはハッシュテーブルと違うのか

http://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 になれるといいな。がんばろうー。


About Me
kitokitoki

10月2008年11月12月
1
2345678
9101112131415
16171819202122
23242526272829
30

Recent Articles
文字列のリストをカンマ...
returnなど
連想リストはハッシュテ...
このブログについて

Archives
2008-11

このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation