Island Life

2009/10/22

トップレベル式

天泣記2009-10-19 (Mon)

ありゃ、なんか誤解してるかな?

    gosh> x
    *** ERROR: unbound variable: x
    Stack Trace:
    _______________________________________
    gosh> (car (begin (define x 1) '(1 2)))
    1
    gosh> x
    1

あーそれはGaucheの手抜きです。R5RSでは不正な式に対して エラーを通知することは要求されてないので、 「こんな式書かないだろう」と私が勝手に思ってる不正な式については不定な動作をします。 その動作が将来にわたって保たれる保証はありません。

あんまりエラーチェックに熱心じゃないので、「Schemeではどうなるか」 というリファレンスとして使うのに良い処理系じゃないです。 仕様書を見てもらうことが一番確実ですね。

Tags: Programming, Gauche

2009/10/18

begin

天泣記2009-10-19 (Mon)

ここで思ったのだが、Lisp ではなんで prog1 や progn (Scheme なら begin) は関数じゃないんだっけ? 引数の評価順序が決まってないから?

では、引数の評価順序を決めてしまえば普通の関数にしていい?

効率?

ちょっと考えてみたんだけど、順序と効率以外にSchemeの場合、次の点が問題になりそうだ。

  • beginの途中の式には、「値を返さない」式 (0個の値を返す式) が許される。 また、beginの最後の式は複数の値を返すかもしれない。関数にしてしまうと、 すべて一つの値を返さなければならなくなる。 (prog1に相当するGaucheのbegin0も、最初の式で複数の値を返すことができる)。
  • beginフォーム自体が末尾式の場合、beginの最後の式は末尾コンテキストで 評価されなければならない。関数にしてしまうと引数評価は末尾コンテキストにならない。 例えば次の式が末尾再帰にならない:
    (let loop () (begin ... (loop))
    
    begin0の場合はこれは関係ない。
  • beginは定義式を含むことが許されてて、 これらの定義式はbeginが現れた位置にspliceされる。 複数の定義式へと展開されるマクロを書くため。

CLの場合は末尾再帰が要求されてないし、多値の受け取りの条件も緩いので、 問題になるのはprognの最後の式が2つ以上の値を返す場合のみかな?

まあ現実問題として、(prog1 exp0 exp1 ... exp100) なんて式でprog1が 関数だと、100個分の結果を必要もないのにどっかに貯めておくなんてもったいない って思っちゃうので、実用上は効率が一番気になるかもしれん。

Tags: Programming, Scheme, Lisp

2009/10/16

Chaton-Twitter bridge

うまく動いてるみたいだし、思ったより便利なので、こっちでも宣伝しとこう。

Lingr閉鎖に伴ってGauche部屋他の避難所として作った チャットChatonだが、 要望があったのでtwitterとのブリッジを動かしてる。

chaton->twitterの方はcometで通知するんでほぼリアルタイムだけど、 twitter->chatonは1分おきのポーリングなので多少ラグがある。 あと、twitterとのアクセスに失敗した場合のリトライとかやってないし、 こっちの都合でブリッジを落とすこともあるので、完全に信頼できるものではない。 ただまあ、フォローしとくと発言がまとめてウオッチできるのは便利。

あと、今の流量だとAPI制限にはまずひっかからないので何も対策してないけど、 突然ポピュラーになったらひっかかるかも。

ソースはsf.netのリポジトリ中のexamples/chaton-twitterに。 この手のスクリプトのサンプルにもなるかと。 ただしGaucheのsvn trunkが必要。最近足した機能を使ってるので。

Tags: Programming, Gauche

2009/10/09

らむ太演技録

らむ太は時々ちょっと熱を出すんで、大事をとってプレスクールを休ませることがある。 「風邪引きはおとなしく寝てなさい!」と言っても全然聞かないんだけど。 今日もそんな日。

  • (どたどたどたどた)「とうさん!とうさん!」(突然弱々しくなって、咳真似をしながら)「けほ、けほ…あいすくりーむを…たべたら…なおる…けほ、けほ」

そんな演技を教えた覚えはありません。

Tag: 生活

2009/10/08

らむ太語録

  • ら:とうさん、ここさわってー
  • 私:何で?
  • ら:さわってよー
  • 私:(ぺた)
  • ら:Don't touch!
  • 私:(それが言いたかったのか…)
  • ら:とうさん、押してー
  • 私:(えいっ)
  • ら:Don't push!
  • 私:(やっぱり…)

プレスクールで何を言われてるのか想像がつくぞ、らむ太よ。

Tag: 生活

More entries ...