機械です。
ノって戴き、ありがとうございます☆
えと……洗練されたコードしか出ないのが、普通かもしれませんね(苦笑)
私のを見てもらいますと、「解けるだけ」であって、決して「使える」コード
じゃないですからね。
まぁ、フツーはプログラムって「何を解くか」であって、「どう解くか」はあ
まり考えないとは思うのです。
ですが、今回の本来の目的は「プログラミング言語の比較」なので、言語の特
長(特徴、というより『自慢☆』)が出てればOK、とか思ってますので、気楽
にお考え下さい。
ちなみに、私がAWKと聞いて最初に考えたの、コレです(以下、全て『10!』を
想定してます)
C:\prog\gawk>gawk "END{n=10;fn=1;while(n>1)fn*=n--;print fn}"
^Z
3628800
『AWKと言えばワンライナっしょ☆』っと。
『階乗計算アルゴリズム』とは言ってますが、実際にアルゴリズム的にはそん
なに無いと思います。
どちらかというと、各言語の特色というか、得意技というか。
AWKは関数も書けますけど、どっちかというと、一行でこなしてしまう機動力
が真髄だと思うのですよ。
んだから、例えば……
C:\prog\gawk>gawk "BEGIN{fn=1}{fn*=$1}END{print fn}"
1
2
3
4
5
6
7
8
9
10
^Z
3628800
なんてのも『反則だっ!』とか思うでしょうが、私的にはアリです☆
で、以下は上記の変形版
C:\prog\gawk>gawk "BEGIN{fn=1}{for(n=1;n<NF+1;n++)fn*=$n}END{print fn}"
1 2 3 4 5
6 7 8 9 10
^Z
3628800
NFとか$とか使うと「AWKだっ!」っぽく感じて、悦に入るのは私だけでしょう
か?
AWKと言えば、連想配列が意外に使いにくいんですよね。
私がPascalで使ったアルゴリズム(フィボナッチ数も多分コレで書ける)でも
使って見ませうか。
※ちなみに、Pascalの例題を検証してたのは、HP100LXでも使えるMS-DOS用の
HAPPyです☆
C:\prog\gawk>gawk "END{fn[1]=1;n=10;for(i=2;i<=n;i++)fn[i]=fn[i-1]*i;print fn[n]}"
^Z
3628800
以上、多分「こんなアホなコードなら、他にも書けるぞ」と思われたと思いま
すので、追加お願いします☆
ちなみに、木津千里……じゃなかった、きっちり「プログラミング言語AWK」
見ながら書きました。
※よって基本機能しか使ってませんし、あと私が苦手な正規表現とかパスしてま
すので
<引き続き参加者募集!>
Perl,Ruby,Tcl,JavaScript(←コレは猫丸さん)は当然書いていただける(笑)
と信じていますが、他にも私が書こうと思っても書けないsedあたりを書いてく
れる人がいたらいいなぁ、と。
Lisp系(SchemeやCommon Lisp)は、ほぼ独擅場だと思うのだけど……私もあと、
Forthは少しがんばってみるかな(私の力ではPostScriptは無理)
さらにScalaとかLuaみたいな組み込み系、OCaml(ML)やHaskellみたいな関数型
言語とか、書ける人はお願いします(私がHaskellのコード書いても多分つまら
ないので)
ポイントとしては、効率はどうでもいい(をい)ので、言語の表現パワーを見
せ付けるようなコードが希望です。
/機械伯爵/……皆さんお忙しいとは思うのですがぁ……そこをひとつどうか……