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

  • Scheme:非正確な整数

    Gauche:Bugsから移動 (floor 10.5) -> 10.0 (0.8.9) OsN (2007/03/15 01:43:38 PDT): 勘違いしているかもしれませんが、、、 gosh> (floor 10.5) 10.0 floor, ceiling, truncate, round は integer を返す、とドキュメントに ありますので、(floor 10.5) で 10 でなく、10.0 が返ってくるのが違和感あります。 Shiro(2007/03/15 02:28:08 PDT): 10.0はintegerですよ。非正確数ではありますが。 ちなみに正確数を渡せば正確なintegerが返ります。 gosh> (floor 21/2) 10 逆に、整数を要求する手続きに非正確な整数を渡せば非正確な結果が得られます: gosh> (gcd 60.0 24.0) 12.0

    Scheme:非正確な整数
  • Scheme:ExplicitMonad

    Shiro: SchemeでMonadを書こう、という話はちょくちょくある。 OlegさんのMonadic Programming in Scheme Neelakantan KrishnaswamiのMonads in Scheme teranishiさんのページ howm wiki - モナド 実用的な見地からは、Monadが便利なのはモナド則を満たす基演算を定義 しておけば他の色々な操作がジェネリックに行えることだ。 (call-with-iteratorsさえ定義しておけばgauche.collectionの色んな ジェネリック関数が使えるようになりますよ、というのに似ている)。 ただ、Schemeのような実行時型判定を行う言語でMonadを使おうとすると どうもすっきりいかない。というのは、Monadの基演算が引数の型だけでなく 戻り値の型でディスパッチする必要があるからだ。

    Scheme:ExplicitMonad
  • Rui:ParsingExpressionGrammar

    (2006/12/13 20:22:55 PST): Ruiからページを分離しました。 Parsing Expression Grammar入力の抽象化バックトラックの制御命名規則文字列に特化したスキャナ怠惰な文字列構築エラーの通知参考文献開発記録性能目標 (2006/11/25 07:45:58 PST)PEGによる拡張可能な文法 (2006/11/23 18:19:07 PST)高速化手法の検討 (2006/11/21 19:24:29 PST)中間報告 (2006/11/21 08:34:45 PST)体への統合 (2008/05/20 04:26:20 PDT)とりあえずコミット Parsing Expression Grammar (2006/11/16 21:44:07 PST): HaskellのParsecのようなコンビネータパーザを作っています。コンビネータパーザは、再

    Rui:ParsingExpressionGrammar
  • Scheme:多値

    多値の機能はR5RSになってから追加された、Schemeでは比較的新しい機能だ。 CommonLispやDylanにはある。 純粋な意味での多値、すなわちコンティニュエーションに一つ以上の値が渡るという意味での 多値を実装している言語は、メインストリームではあまり無いと思う。 ただ、多重代入(データストラクチャをdecomposeして複数の変数に代入する機能) があれば、ほとんど多値と同じことができる。RubyPythonにはこの機能がある。 そのため、多値の必要性に関しては大きな議論があり、Schemeコアな人々の中でも 意見が割れている。最近もcomp.lang.schemeで 大きなスレッドが立った。 個人的には多値はかなり頻繁に利用している。 このページでは主として使いどころに関していろいろ書いてみる。 突っ込み歓迎。 --Shiro 方法 - どうやって使う?現象 - どんな時

    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