Skip to content
Menu
Masayuki Ida Official Blog
  • Short Bio in English
  • ホーム
Masayuki Ida Official Blog

多値機能:値は一つではない、あるいは値の読み方

Posted on 2010年10月11日

Common Lispの言語仕様設計の中には、いろいろな夢を見越した、というかいろいろな夢の実現を期待した機能が入っていた。未だ世の中で十分に利用されている機能概念とはいいがたいものも多数ある。それらは、おもしろいかもしれないけれどうまく使えない、ものなのか、うない使い方はまだ多くの人はきがつかなかった、ものなのか、それともそのどっちなのかの判断もまだ機が熟していない、というものなのかわからないという言うべきものもある。

そのひとつに多値機能Multiple Values機能がある。これは次のようなことである。

普通、関数の値というのは一つである。たとえば、f(x)=x+1といった具合の場合、値は一つである。すべての処理を関数型で考えようとすると、実際的なプログラミングではやはり、実用的なファクタなどなどから、ピュアすぎてうまくない、ということがある。一方、もし関数型プログラミングですべてを扱えればきれいに扱えて美しく、かつ副作用無しという副次効果があるから、検証や証明もやりやすくなる。といった具合である。関数型で考えていくことができ、かつ複数の状態変化を受け渡しできればいろいろなことは前に進むはずだ。かな?

ともあれ、多値機能を利用すれば、複数値を返せる。実用的にもマルチレジスタマシン等であれば、複数値を返す、といっても上限として個数を決めることができるのであれば、性能にも大きな影響はない、はずである。また、単一の値が変えるだけだという伝統的な関数的な仕組みの既存のものとは、第一の値だけそういう場合には使う、ということを設定できれば話は済む、はずだ。それで多値が誕生した。なんと約30年前の話ということになる。

日本ソフトウェア科学会の大会に、D-Evalというのを作って発表したことがある。第2回とか第3回とかそういう昔のことである。これは、多値機能を使って、返される値のもっともspecificな型、オブジェクトクラスを値そのものと同時に返すようにしたevalである。第2値を見ると、その値の型・クラスが把握できる。とすると、インタプリタevalでは、式の値が何かによってする仕事を変えるif文の列挙があるわけだから、それをいっぺんにcase的に多分岐、あるいはtab computationできるはずである。型・クラスの種類をnとして、この判定はo(n)ではなく、0(1)となる。そしばらくたって、この話を東大の良い子のHyperLispを昔やっていて、京都の湯浅さんと一緒にCommon Lispの原型処理系の一つというべきKCLを開発した萩谷さんが、何かで会話をしていたときに、その後どうなったと問いかけてくれたことがある。それを今思い出した。スミマセン、なんともなっていないです。20年は前の話だ。

こまかなアイデアを出しながらいろいろと考えていく。おもしろかった。毎日わくわくしていた。

最近の投稿

  • 強者どもが夢の跡…
  • 他行宛て振込手数料無料
  • 高校の教科書の問題を解かせる
  • 60年ほど前のことが今
  • ChatGPTとの新しいスパイラル

アーカイブ

カテゴリー

  • IT
  • グローバルIT
  • 家族生活
  • 教員生活
  • 教育
  • 未分類
  • 未分類
  • 生活
  • 経済

最近のコメント

  • シングルシステムのもろさ に 原 清己 より
  • 切手収集がその原点(子供の頃その2) に Masanobu Taniguchi より

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
©2023 Masayuki Ida Official Blog | WordPress Theme by Superbthemes.com