jsで遅延評価
課題をやっていたはずなのになぜかこんなものができてしまった。ふしぎ。
function Promise(x) { this.cache=null; this.force=function() { if(this.cache==null) this.cache=x(); return this.cache; } } function tarai(x,y,z) { if(x<=y) return y; return tarai(tarai(x-1,y,z), tarai(y-1,z,x), tarai(z-1,x,y)); } function tarai_d(x,y,z) { return tarai_d_impl(new Promise(function(){return x;}), new Promise(function(){return y;}), new Promise(function(){return z;})).force(); } function tarai_d_impl(x,y,z) { var tarai=tarai_d_impl; if(x.force() <= y.force()) return y; else return tarai(tarai(new Promise(function(){return x.force()-1;}),y,z), tarai(new Promise(function(){return y.force()-1;}),z,x), new Promise(function(){return tarai(new Promise(function(){return z.force()-1;}),x,y);})); }