素数判定の処理を,再帰アルゴリズムで1文で書いたJavaScriptプログラムは
こうなる:
<body> <script> // 1から100までの素数を表示するプログラム // 全体を一つの文として宣言 var // 再帰ロジックによる // 素数判定関数 isPrime = function( n ){ return makeDivRecursive( n, Math.floor( Math.sqrt( n ) ) ); } , // ある数が割り切れるかどうか makeDivRecursive = function( n, d ){ // judge if( n < 2 ) return false; if( d == 1 ) return true; if( n % d == 0 ) return false; // make recursion if unjudged return makeDivRecursive( n, d - 1 ); } , // オブジェクト拡張系の処理 _extend = (function(){ // each関数 Array.prototype.each = function( func ){ for( var i = 0; i < this.length; i ++ ){ func( this[ i ], i ); } } , // map関数 Array.prototype.map = function( func ){ var arr = this; arr.each( function( x, index ){ // 指定された関数を適用して要素を置き換え arr[ index ] = func( x, index ); }); return arr; } , // filter関数 Array.prototype.where = function( func ){ var arr = new Array(); this.each( function(x, index){ // 条件に合うものだけを詰め替え if( func( x ) ) arr.push( x ); }); return arr; } , // 下限から上限までの数列を生成 Number.prototype.to = function( max ){ var orig = this; return ( new Array( max - orig + 1 ) ).map( function( x, ind ){ return orig + ind; } ); } , // 表示関数 String.prototype.display = function(){ window.alert( this ); } ; })() , // ◆◆◆ メイン処理 ◆◆◆ main = (1).to(100) .where(isPrime) .join(", ").display() ; </script> </body>
おことわり
複数行にまたがっているが,一応,1文だ・・・。(怪)
最後の部分で,「素数であるものだけを抽出」というのを .where メソッドで格好つけてコーディングしている。
なお,_extend という変数にはなんの意味もない。
そのクロージャの中でいろんな事前処理をしているだけなのだ。
ちょっとずるいね。
類似コード
c++ - recursively check if number is a prime - Stack Overflow
http://stackoverflow.com/questions/54...