タグ

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

  • Scheme:!と?

    Schemeの名前づけの慣習には、一応こんなのがある。 a. 破壊的操作を行う手続き、構文には!をつける (set-car! etc) a'. !のついた手続きの返り値は未定義(portableには利用できない) b. 真偽値を返す手続きには ? をつける b'. ?のついた手続きの返り値は真偽の判断のみに使える(#t以外の有用な 値を返すことはあてにできない) a, bについてはほとんどの場合守られているといえるだろう。 ただ、よりきつい縛りであるa', b' については、srfiやライブラリレベルでは 守られていないこともあり、混乱を生じやすい。 ちょっとまとめてみる。 !の返り値!の返り値が「利用できてしまう」もの!の返り値を「利用せざるを得ない」もの?の返り値#f, #t以外を返す?-関数述語としてもよく使われるが、#f, #t以外を返すために?がついていないものその他の記号/*$

    Scheme:!と?
    ogijun
    ogijun 2010/04/05
  • Scheme:call/ccと副作用

    c.l.sで興味深い議論が進行していたのでメモ。 purely functional Lisp + call/cc = ? 発端は、Nils M Holmの 「Purely functionalなマイLispにcall/ccをつけてみたよ」 という投稿。 それに対し、Schemeの大御所達から 「call/ccは、副作用を生じるよ」 と突っ込みが入る。 言い替えれば、「set!などの明示的な副作用オペレータを一切持たない purely functionalなLispに、call/ccを導入すると、それはもはや purely functionalではなくなる」ということ。 実例 これは簡単な例によって示すことができる。szgygによる例: (let ((f (lambda (x) (call/cc (lambda (k) k))))) (cons (f 0) (f 0))) (f 0)の2回

    Scheme:call/ccと副作用
    ogijun
    ogijun 2009/11/30
  • Chaton

    Chaton (pronounced like [sha-ton], a 'kitten' in French) is a simple Comet-based Webchat server written in Gauche. Originally it is developed to host a successor of Gauche chat room on Lingr ( http://www.lingr.com ), when Lingr announced to terminate its service. Although Chaton never aims at serving in such a large scale and with tons of features like Lingr, the "look and feel" of the interface s

    ogijun
    ogijun 2009/06/09
  • 学生のためのベンチャー指南---A Student's Guide to Startups

    学生のためのベンチャー指南---A Student's Guide to Startups Paul Graham Copyright 2006 by Paul Graham. これは、Paul Graham:A Student's Guide to Startups を、原著者の許可を得て翻訳・公開するものです。 <版権表示> 和訳テキストの複製、変更、再配布は、この版権表示を残す限り、自由に行って結構です。 (「この版権表示」には上の文も含まれます。すなわち、再配布を禁止してはいけません)。 Copyright 2006 by Paul Graham 原文: http://www.paulgraham.com/mit.html語訳:Shiro Kawai (shiro @ acm.org) <版権表示終り> Paul Graham氏のエッセイをまとめた『ハッカーと画家』の 邦訳

    学生のためのベンチャー指南---A Student's Guide to Startups
    ogijun
    ogijun 2006/10/10
    書いた
  • Shiro:OpenSourceMagazine0606 パワーハッカーへの道

    (これは、オープンソースマガジン2006年6月号の「ハッカー養成塾!」という コーナーに寄稿した記事の、編集前の原稿です。) パワーハッカーへの道ハッカーは書いて理解するハッカーは道具をつくるハッカーは頭の中を掃除するハッカーにも書けない時があるおわりに次回注釈ハッカー養成塾! 他の方の原稿 パワーハッカーへの道 川合 史朗 そこそこ、プログラムは書けると思う。 エリック・レイモンド(*eric)の言うとおり言語もいくつか かじってみたし、有名なソフトのソースコードも読んでみた。 でも、もっと良いコードを、ばりばり書けるようになりたいな。 稿では、ハッカーの世界の入口を通り抜けたそんな人が、 次を目指すにはどうすれば良いかを考えてみたい。 ハッカーは書いて理解する フルタイムのプログラマとして働き出して間もない頃、 ある有名なハッカーと話していて、 少し前に発表された論文の技法はどう思う

    Shiro:OpenSourceMagazine0606 パワーハッカーへの道
    ogijun
    ogijun 2006/08/08
    Shiroさんの『ハッカー養成塾』原稿
  • 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
    ogijun
    ogijun 2006/05/02
    復習
  • Practical Scheme

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

    Practical Scheme
    ogijun
    ogijun 2006/05/02
    復習
  • Practical Scheme

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

    Practical Scheme
    ogijun
    ogijun 2006/05/02
    もう1回読み直さなくっちゃ
  • 1