hirax.net::Keywords::「パターンマッチング」のブログ



2008-06-28[n年前へ]

「Mathematica開発者のウルフラム」と「ファインマン」 

 今週頭に「数式処理アプリケーションのMathematicaが最初にリリースされてから、今日で20年たちました」と、開発者Stephen WolframからMathematicaユーザにメールが送られてきた。スティーブン・ウルフラムが28才の時の1988年の6月23日にMathematica 1.0 が出荷されたのである。

For twenty years we've pursued our long-term vision for Mathematica.

 Mathematicaは結局のところ、パターンマッチングを延々と行うプログラムである。データベースに登録されているパターン・規則にもどづいて、与えられた数式を置換していくことにより、Mathematicaは解(や所望の結果)を得る。

 ところで、「ファインマン物理学」で有名なR.P.ファインマンはカリフォルニア工科大学で1983年から1985年までの間、計算機科学の講義(ファインマン計算機科学)をしている。その頃の学生がスティーブン・ウルフラムである。

 ファインマンは「科学とは何か」の中で、「数学とはパターンにすぎない」「数学とはパターンを探すことだ」と端的に短く書き表している。この言葉を思い起こしながら、(おそらくそんな言葉を聞いていただろう)彼の学生でもあったウルフラムが「パターンマッチングによる数式処理アプリケーション」を商品化し市場に広まらせたのだ、と考えてみると何だか「面白い繋がり」を感じる。そんな繋がりを思い浮かべながら、Mathematicaの20年を集めたスクラップブック を眺めてみると、きっと楽しいと思う。

I'm looking forward to the next 20 years and hope that you'll continue to follow Mathematica on this exciting journey.

-- Stephen Wolfram

2009-05-19[n年前へ]

思想は変わらない「Wolfram|Alpha」 

 Wolfram Researchが作った「新しい検索エンジン」だという、Wolfram|Alphaを使ってみた。結局のところ、これは”まさに”Mathematicaである。「Mathematica開発者のウルフラム」と「ファインマン」でも書いたように、これは

 データベースに登録されているパターン・規則にもどづいて、パターンマッチングを延々と行い、また、データベースに登録されている値(とユーザが与えた値初期値)を用いて変換を続け、最終的に変換できなくなった時点で、それが「所望の結果」になっている
というものだ。結局のところ、「問題を解く」というの多くはそういうこと、そいう”パターン”が多いのかもしれない。

 それにしても、Solve[x^2-3x==1,x]と検索してみると、その答えを教えてくれる。それと同じように、"earthquakes near the Akashi-Kaikyō bridge"と検索すると、明石海峡大橋近くの地震に関する情報を教えてくれる。使ってみると、なかなかに楽しい。データベース、検索時に使う「関数(変換・作業を定義したもの)」「言葉」をユーザが追加していけたら、もっともっと面白そうだ。

 そうすれば、ユーザの力で拡張させることができる・発展することができる「新しい検索エンジン」ができるに違いない。

2011-02-04[n年前へ]

Wolfram|Alphaの機能をRubyから使う 

 Wolfram ResearchのWolfram|Alphaは、「科学・工学系の問いに答える」ことが得意な検索エンジンです。Wolframが長年開発して来た(データベース内の規則に沿ってパターンマッチングを繰り返すことでで)数式処理を実現するMathematicaと重なるところも多い、そんな検索エンジンです。

 Wolfram|Alphaの機能は、開発者登録すれば、(2000クエリー/月という、少なく限られた処理数ですが)WEB APIとして試し・使ってみることができます。先日、WEB APIのVer.2.0版が公開されたので、試しに使ってみることにしました。

 WEB APIへの入出力を楽にするために、

  • Java
  • Python
  • Ruby
  • Perl
  • PHP
  • .NET
  • Mathematica
といった、各言語用のライブラリが用意されていています(C++は近日登場ということです)。そこで、まずは、RubyからWolfram|Alphaの機能を使ってみることにしました。

 手順は、およそ、こんな具合です。まずは、 開発用APIコードを登録します。そして、各言語用ライブラリのダウンロードページから直接ライブラリをダウンロードするか、あるいは、gitから、

git clone git://github.com/ianwhite/wac.git
という具合に、Ruby用ライブラリをダウンロードします。このライブラリ"wac"は、処理の過程で"nokogiri"と"active support"を使うので、
sudo gem update --system
sudo gems install nokogiri
sudo gem install activesupport
といった感じで、先にインストールをしておきます。(新しい)"active_support"ではなく、(古い)"activesupport"をインストールするのは、(後述する)delegateのエラー回避を簡易に行うためです。

 そして、wac.rbの冒頭を

#require 'active_support'
require 'activesupport'
と書き換えます。つまり、古いActive Supportを読み込むように指定してやるのです。そのようにしてやらないと、"NoMethodError: undefined method `delegate' for…といったエラーメッセージに出くわすことになります。

 後は、たとえばirbで、

irb
>> require 'wac'
>> Wac.appid = "ここにAPIコード"
>> r = Wac.fetch 'solve[x^2+3==0,x]'
とすると、
Result: x = ±(i sqrt(3))
±(1.73205 i)
という風に答えてくれますし、あるいは、
>> r = Wac.fetch 'obama birthday'
と聞けば、
Result: Friday, August 4, 1961
と、教えてくれるのです。

 Mathematicaのパワーを使うことができるのは、とても魅力的です。「あなたのアイデア」+「Mathematicaのパワー」=「無限の可能性」という方程式を解いてみるのは、とても楽しいことに違いありません。コンピュータのデータベース・記憶力と、ヒトが持つ柔らかな発想を組み合わせれば、最強の何かを生み出すことができるはずです。



■Powered by yagm.net