[SML 7881] Re: 連想計算というリフレクティブな手法

Shin Sahara from Home shinsahara @ shinsahara.com
2010年 12月 17日 (金) 10:24:29 JST


佐原です。

VDM++だと、高階関数使ってもリフレクション的なことはできそうもないので、数値アルゴリズムで作りました :-)
リフレクション使うより速いので、シンボリック実行しているVDM++インタープリタでも、fastFib(-1)からfastFib(100)まで全部計算しても、一瞬で終わりますが、多倍長計算できないのでfastFib(92)=7540113804746369024までしか計算できません。
fastFib(93)からfastFib(100)までは、fastFib(100)の場合、Error 4065: Value 3.542248481792631E20 is not a nat などと怒られます :-)

class Fibonacci
values
static sqrt5 = new MATH().sqrt(5);
static phi = (1+sqrt5) / 2;

functions
static public fastFib : nat +> nat
fastFib(n) ==
	floor (phi ** n / sqrt5 + 0.5);

end Fibonacci

On 2010/12/14, at 17:56, AOKI Atsushi wrote:

> (10/12/14 17:11), Narita Takaoki wrote:
>> 同様にぎやかしですが、それどころか Smalltalk にもなってません。
> 
> おぉ!いとにぎやかし。
> 
>> 計算量は、O(log(n))なので、数値格納のメモリーさえ確保できれば20
>> 万項目くらいまでなら我慢できる時間で計算可能ですが、計算できたか
>> らって何に使うんでしょうね・・・
> 
> 何に使う、何に役立つ、・・・
> そんなんばかりを追っていたら、科学することが伝わらないかしらん。
> 
> --- 青木淳@本日も学生たちとペアプログラミング
> 



-----------------------------------------------------------------------
Imagine the World Movement!
Shin Sahara
E-Mail: ss @ shinsahara.com    http://shinsahara.com
Mobile:  +81-80-1114-3378(in the world), +81-80-3089-7518(in the world)
------------------------------------------------------------------------











SML メーリングリストの案内