Let's start Scheme

2012-12-10

R7RS 8thドラフト斜め読み

7thドラフトから1ヶ月しか経っていないのにもう8thが出るとは。ちょっと油断していた。

今回のドラフトは7thのtypoと非正確数のeqv?あたりぐらいだろうと思っているので軽く斜め読み。Chibi-Schemeもこれにあわせてか、0.6.1とバグフィックス版を出してきている。

前回からの変更点
  • (eqv? 0.0 -0.0)が処理系が負の0.0を識別するなら#fと明示された
  • read-bytevector!の引数順が変更になり、それに伴ってオプショナル引数が4つに増えた
これくらいしか見つけられなかった。さすがに斜め読みすぎたか。eqv?の変更はメーリングリストでかなり険悪な状態までいっていたりしてどう落ち着くのか不安ではあったが、R6RSとの整合性が保たれていたのでちょっと安心。でも、未だに(eqv? 0.0 -0.0)が#fでなければならないプログラムを見たことないが、atanとかバリバリ使う人だと問題になるんだろうか?

やべ、こんなに変更点がないとは思っていなかった。書くことがないw

とりあえず、宣伝。
0.3.8でドラフト7に対応したんだけど、Chibiのテストが結構こけてたりしてたんだけど、次のリリースでは全て問題なく通る。それにプラスして、Chibiでは(たぶん、まだ)サポートされていないinclude-library-declarationsもサポートされているので、現状ではR7RS Smallをフルサポートしている処理系ということになる。今週末リリースする予定(あくまで予定)。

2 comments:

shiro said...

(eqv? 0.0 -0.0) => #f はMLで主張していた人の言う通りmemoize書く時に嬉しいんじゃないですかね。それ以外での具体的な応用はちょっと思いつかないけれど、(eqv? x y) => #t なのに純粋な関数fについて (f x)と(f y)の結果が異なるってのは確かに気持ち悪いので妥当なんじゃないかと思います。

kei said...

やっぱりmemoizeですか。

浮動小数点をcaseで使うとかいろいろ考えたんですけど、いまいちこれが明確にされていて嬉しい場所を思いつかなかった割には、MLの議論はびっくりするくらい白熱していたので。

確かに副作用がないのに同値として扱える関数が別の値を返すのは気持ち悪いですね。

Post a Comment