作者: 機械伯爵
日時: 2009/4/30(19:01)
 機械です。

 ノって戴き、ありがとうございます☆

 えと……洗練されたコードしか出ないのが、普通かもしれませんね(苦笑)

 私のを見てもらいますと、「解けるだけ」であって、決して「使える」コード
じゃないですからね。

 まぁ、フツーはプログラムって「何を解くか」であって、「どう解くか」はあ
まり考えないとは思うのです。

 ですが、今回の本来の目的は「プログラミング言語の比較」なので、言語の特
長(特徴、というより『自慢☆』)が出てれば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のコード書いても多分つまら
ないので)

 ポイントとしては、効率はどうでもいい(をい)ので、言語の表現パワーを見
せ付けるようなコードが希望です。

/機械伯爵/……皆さんお忙しいとは思うのですがぁ……そこをひとつどうか……