タグ

ブックマーク / practical-scheme.net (10)

  • Lisp:S式の理由

    S式は人に優しいか Shiro: Lispの不人気の理由として筆頭に上げられるのが、括弧だらけの 独特の見た目。とっつきにくい、一般的な表記法と違っていてわかりにくい、 等々、様々なことが言われてきました。しかし、 S式を捨てたLispも開発されましたが 流行ったとはいい難く、Lispな人々はいまだに括弧に固執しているかのようです。 S式のメリットをLisperに尋ねれば、エディタがどうの、マクロがどうの、といった 回答が真っ先に返って来ると思うんですが、そういう理屈をいくら理解しても S式がダメな人がS式を好きになったりはしません。どうも、もっと根的な 感覚に大きな隔たりがあるような気がします。非Lisperから理解しがたい、 Lisperの持つ感覚とはどんなものなんでしょうか。Lisp脳から見た世界は どんなものなのでしょうか。 構文木を人間が書く? S式は言ってみれば言語の構文木そ

    Lisp:S式の理由
  • Scheme:使いたい人のための継続入門

    使いたい人のための継続入門継続渡し形式call/ccは普通の関数call-with系関数call-with-procedurecall-with-continuation-procedurecall-with-current-continuation評価順序と継続call/ccパズルお手元マルチスレッド部分継続reset/pcとcall/pc環境破壊と部分継続部分継続の使用法PRINT-AND-NEXT-REPL議論質問お手元マルチスレッドのサンプルプログラムについて 使いたい人のための継続入門 とりあえず殴り書き。 くどかったり冗長な文章になってたり、重複してたり、間違ってたり、 おおいなる勘違いをしてたり、恥をカいてたりするかもしれないけどご愛敬。 藁をもつかみたい気持ちで継続を使えるようになりたい人は読んでみてください。 ただし所詮は藁です。(w 継続渡し形式 例によって階乗fact

    Scheme:使いたい人のための継続入門
  • Top (Gauche Users’ Reference)

    Top This is a reference manual of Gauche, an R7RS Scheme implementation.

  • Lisp:S式の理由

    S式は人に優しいか Shiro: Lispの不人気の理由として筆頭に上げられるのが、括弧だらけの 独特の見た目。とっつきにくい、一般的な表記法と違っていてわかりにくい、 等々、様々なことが言われてきました。しかし、 S式を捨てたLispも開発されましたが 流行ったとはいい難く、Lispな人々はいまだに括弧に固執しているかのようです。 S式のメリットをLisperに尋ねれば、エディタがどうの、マクロがどうの、といった 回答が真っ先に返って来ると思うんですが、そういう理屈をいくら理解しても S式がダメな人がS式を好きになったりはしません。どうも、もっと根的な 感覚に大きな隔たりがあるような気がします。非Lisperから理解しがたい、 Lisperの持つ感覚とはどんなものなんでしょうか。Lisp脳から見た世界は どんなものなのでしょうか。 構文木を人間が書く? S式は言ってみれば言語の構文木そ

    Lisp:S式の理由
  • Practical Scheme

    Shiro Kawai 7/3/2000初出、3/29/2002更新 まあとりあえずカッコは我慢しよう。ラムダとやらも、関数ポインタ+環境データ ということで納得しよう。しかし、Schemeのループ構文(do)は許せないなあ。 ごちゃごちゃしてるし、途中で脱出できないし。 CやPerlのforやwhileの方がずっと使いやすいね。 え? doなんて使わない? じゃあどうやってループを書くんだ? 消えるループ 簡単だけど、よくありそうな例として、こんなのを考えてみよう。 入力テキストの行数を数える関数count_linesを書きたい。 Cで書くとすれば、こんな感じだ。 /* 例1 */ int count_lines(void) { int count = 0, c; for (c=getchar(); c!=EOF; c=getchar()) { if (c == '\n') count+

    Practical Scheme
  • Practical Scheme

    Shiro Kawai 11/20/2000初出、3/29/2002更新 Cに慣れたプログラマがSchemeのコードを見て面らうことのひとつは、 無名の関数やローカル関数の多用だろう。 特に実行効率に敏感なプログラマにとっては「関数呼出しは高価」 という感覚が染み着いているため、 至るところに散りばめられたlambdaに眉をひそめてしまうようだ。 しかしSchemeにおいては、 コード上に関数が書いてあるからといって 実行時にスタックフレームの生成やレジスタの退避などのオーバヘッドが起こるとは限らない。 例えば関数の最後に別の関数を呼び出す末尾呼び出し(tail call) はただのjumpインストラクションに置き換え可能だ。 ここでは、Cプログラマを対象に、 lambdaで生成される関数群が実際にどのように実行され得るのかを書いてみたい。 (なお、Schemeの規格ではlambdaフォ

    Practical Scheme
  • Practical Scheme

    これはあくまで実装の一例であって、詳細は言語処理系のデザインに任されています。 また、以降の例ではスタックは下方(アドレスの低い方)に伸びるものとします。 まず、C等の手続き型言語におけるスタックフレームの使い方を復習しておきましょう。 次のように、関数Aが関数Bと関数Cを呼び出しているものとします。 int A(int a, ...) { int b, c; B(b); C(c); } int B(int b) { int b1; /* other calculation */ } int C(int c) { int c1; /* other calculation */ } 関数Aが呼ばれた直後のスタックには、保存された呼び出し元のレジスタ、戻りアドレス、 そしてAの引数 (a等) とローカル変数 (b, c) 等が積まれます。スタックポインタ(SP)はスタックの再下端を指し、またフ

    Practical Scheme
  • Scheme:なぜSchemeにはreturnが無いのか

    あるいは、なぜcall/ccがプリミティブなのか、に関する一考察 (Shiro: 「なんでも継続」に入れようかと思ってたネタだけど、 あっちがいつ書けるかわからんので、忘れないようにこっちにまとめとく) (話の流れがあるので、誤りの修正以外のコメントは途中ではなく、一番下にお願いします) returnはどこだ? Aliceは、リストlisと述語手続きpredを取り、lisの各要素に順にpredを適用して、 predが真の値を返したら直ちにその要素を返すような関数findを 書くことを考えた。 (findは便利なので、実はsrfi-1に定義されてるけど、 Aliceはまあ自分の勉強のために書いてみることにしたと思いねえ)。 AliceはPerlなら良く知っている。Perlならこんな感じで書けるはず。 sub find { ($pred, $lis) = @_; foreach $elt (@

    Scheme:なぜSchemeにはreturnが無いのか
  • Practical Scheme

    Shiro Kawai まだ下書き Schemeの特徴をあげるときに、「継続」や「call/cc」が出て来ないことはない。 でも、R5RSのcall/ccの項をいくら読んでも、どうもよくわからない。 call/ccを使えばC言語のbreakみたいなのとか、コルーチンとかいう スレッドもどきとかが書ける、というのはわかったけど、一体そういうのが書けて 何が嬉しいのか、そこんとこがピンと来ないんだ。 今、そこにある継続 プログラミングの世界の概念には、禅の公案のようなものがある。 それを説明する文章はほんの一文なのに、最初に目にする時、 その文は全く意味をなさない、暗号のように感じられる。 だがひとたびその概念を理解すると、 その概念の説明は確かにその一文で説明されているのがわかるのだ。 そんな、「分かれば分かる」という禅問答の中でも 「継続」は最も謎めいたものの一つと言えるだろう。 文献を紐

    Practical Scheme
  • 国語を「文系」に入れるのやめにしない? - wiliki.cgi?Shiro#b25428338f9ee4006289d1aa7a92bb93

    Schemeを愛するプログラマ。 Practical Scheme http://practical-scheme.net/ Island Life (blog) http://blog.practical-scheme.net/shiro 書いたり訳したりしたもののフォローアップ 著書 『プログラミングGauche』サポートページ 翻訳書 Shiro:HackersAndPainters: 『ハッカーと画家』サポートページ Shiro:LandOfLisp: 『Land of Lisp』サポートページ Shiro:ProgrammingClojure: 『プログラミングClojure』サポートページ Shiro:ProgrammingClojure2: 『プログラミングClojure 第2版』サポートページ UnixUser, OpenSourceMagazine記事 Shiro:Uni

    国語を「文系」に入れるのやめにしない? - wiliki.cgi?Shiro#b25428338f9ee4006289d1aa7a92bb93
  • 1