タグ

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

  • 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
  • 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:使いたい人のための継続入門
    sonota88
    sonota88 2018/05/20
  • Gauche:LandOfLisp

    ちょっとだけトリッキーなのはgame-readで、Common Lispのreadは 後続の空白文字(改行文字含む)を消費するので、 > (game-repl) とタイプしてRETを打った時、入力バッファは空で、game-read はすぐに ユーザの入力待ちになるのだけれど、Gaucheのreadは後続の空白文字を消費しない。 gosh> (game-repl) とタイプしてRETを打つと、REPLは閉じ括弧まで読んですぐに(RETを入力に残したまま) game-replを実行する。その中から読まれる game-read は最初に 残っていたRETを見るので、最初のread-line で空の文字列が帰ってくる。 移植版ではこのケースへの対応が入っている。 Shiro(2016/02/02 23:30:58 UTC): 現在の開発版Gaucheでは、REPLについては後続の空白を 読み飛ばす

    Gauche:LandOfLisp
    sonota88
    sonota88 2013/02/26
  • BugStories

    Shiro(2011/09/16 02:28:53 PDT):ハードなバグに関する話って読んでてとてもおもしろいのだけれど、 いざ事例を探そうとすると思うように探せないので、何となくまとめておこう。 好きなように足してください。自分で書いてリンクするのも歓迎。 (2017/05/06 17:40:34 UTC: 新しい記事を前に足してゆくように変更) How we found and fixed a rare race condition in our session handlingFinding a CPU Design Bug in the Xbox 360オーバーフローが引き起こした面白いバグの話The Horror in the Standard LibraryA tale of an impossible bug: big.LITTLE and cachingThis is s

    BugStories
    sonota88
    sonota88 2012/08/29
  • Scheme:コーディングスタイル

    koguroさんのとこで出た話題 コーディングスタイルifのbegin括弧の位置let式if式関数定義関数のサイズ編集環境括弧を書くタイミングemacsのキーバインディング括弧挿入のキーバインド全体的なコメントはこちら コーディングスタイル みなさんどんな風に Scheme のソースを書かれているのでしょうか。 他の人のソースを参考にしているのですが、どこかに明文化されたものがあるとうれしいです。(C みたいに K&R とか whitesmith とかいろいろ流派があるのでしょうか) とりあえず、バリエーションが出る要素を上げていってみましょ。Shiro 関連:Lisp:コメント ifのbegin もしC言語でif (...) { を if (...) (begin と書けといわれたらうんざりするでしょう。 C言語のswitch文にbreak;を書いているような気分になります。(gemma

    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が無いのか
  • 1