【激突】関数型言語 VS オブジェクト指向言語2
■ このスレッドは過去ログ倉庫に格納されています
0001営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 21:26:47.61一部には関数型言語を崇拝している人もいます
どちらが上なのか、この際はっきりさせましょう
前スレ http://toro.2ch.net/test/read.cgi/tech/1331328955/
0399デフォルトの名無しさん
2012/04/15(日) 11:52:01.47いやあ俺は>>341のF#(er)が一番エレガントだと思うぞ。
無茶な要求仕様も黙ってすべて満たしつつ、簡潔できれいなコード出してきてるし。
0400デフォルトの名無しさん
2012/04/15(日) 11:57:38.79ThreadLocalが一番エレガントって
どういうセンスしてんだよ
0401デフォルトの名無しさん
2012/04/15(日) 12:04:48.59#include <string.h>
int v,w,t;char buf[4<<10];void*fizz(void*n){if(!t&&!v){v=(int)n;t=!t;}
if(!(v%3))goto a;else if(!(w&0x7))goto b;else goto c;a:{size_t
(*f)(char*restrict,const char*restrict,size_t);f=(w&0x7)?strlcat
:strlcpy;w|=0x1;f(buf,"Fizz",4<<10);}goto c;b:{char b[2<<8];;;;;;;;;;;
snprintf(b,2<<8,"%d",v);strlcpy(buf,b,2<<8);}goto c;c:return buf;}void
*buzz(void*n){if(!t&&!v){v=(int)n;t=!t;}if(!(v%5))goto a;else
if(!(w&0x7))goto b;else goto c;a:{size_t/**/(*f)(char*restrict,const
char*restrict,size_t);f=(w&0x7)?strlcat:strlcpy;w|=0x2;f(buf,"Buzz",
4<<10);}goto c;b:{char b[2<<8];snprintf(b,2<<8,"%d",v);strlcpy(buf,b,
2<<8);}goto c;c:return buf;}void*gizz(void*n){if(!t&&!v){v=(int)n;t=!t;}
if(!(v%7))goto a;else if(!(w&0x7))goto b;else goto c;a:{size_t (*f)
(char*restrict,const char*restrict,size_t);f=(w&0x7)?strlcat:strlcpy;
w|=0x1;f(buf,"Gizz",4<<10);}goto c;b:{char b[2<<8];;;snprintf(b,2<<8,
"%d",v);strlcpy(buf,b,2<<8);}goto c;c:return buf;}int main(void){printf
("%s\n",gizz(buzz(fizz(105))));}
0402デフォルトの名無しさん
2012/04/15(日) 12:22:36.47>あと、まさかコードも書かずに議論参加してたとか無いよな
>>395
>でも出てきた解はRubyが一番汚いという
このスレの特徴まとめ
0403デフォルトの名無しさん
2012/04/15(日) 12:34:01.13グローバル変数ではまずいと考えてThreadLocalにしたみたいに見える
まずいという認識がありながら、それを上に報告しないのはおかしい
結局、要求に対する不平不満は正直に言えばいいんだよ
0404デフォルトの名無しさん
2012/04/15(日) 12:52:12.220405デフォルトの名無しさん
2012/04/15(日) 13:06:57.34お前のコードかけないドカタって概念がおかしいけどねw
0406デフォルトの名無しさん
2012/04/15(日) 13:29:07.47あれ?まだこのスレに居たの?
派遣仕事で使い慣れたJavaを使って良いから
早くエレガントな解を出してくださいよwww
0407デフォルトの名無しさん
2012/04/15(日) 13:32:57.130408デフォルトの名無しさん
2012/04/15(日) 13:55:54.00求められているのは動くアプリだ。
0409デフォルトの名無しさん
2012/04/15(日) 14:23:06.70副作用を使わずにこのクイズは解けない。
よって純粋な関数型パラダイムでは対応不可。終了。
0410デフォルトの名無しさん
2012/04/15(日) 14:32:35.610411デフォルトの名無しさん
2012/04/15(日) 14:38:59.15この場合の「など」は、関数呼び出しにもいろいろありますよね、
buzz(fizz(3)) 、 (buzz (fizz 3)) 、buzz fizz 3 など―とかの「など」だと思われ。
0412デフォルトの名無しさん
2012/04/15(日) 15:23:11.97関数型言語で作るには
どうしたらいいのだろうか?
0413デフォルトの名無しさん
2012/04/15(日) 15:27:19.67副作用なしに解いたSchemeさんが涙目です
0414デフォルトの名無しさん
2012/04/15(日) 15:35:03.47三つ目が>>385だね(カリー化されてれば)
それとも見た目だけの問題?
0415デフォルトの名無しさん
2012/04/15(日) 16:42:00.03type MainBuilder() =
member this.Return x =
x |> List.map (function
| _, Some names -> box names
| number, None -> box number)
let main = MainBuilder()
let makeFizzBuzz name condition (x : obj) =
match x with
| :? int as number -> number, if condition number then Some name else None
| _ ->
let number, names = x :?> int * string option
number, if condition number then (defaultArg names "") + name |> Some else names
// fizz, buzz, gizzの定義は>>341と同じなので省略
> main { return [1; 3; 5; 7; 15; 21; 35; 105] |> List.map (fun x -> gizz(buzz(fizz x))) };;
val it : obj list =
[1; "Fizz"; "Buzz"; "Gizz"; "FizzBuzz"; "FizzGizz"; "BuzzGizz"; "FizzBuzzGizz"]
0416デフォルトの名無しさん
2012/04/15(日) 17:46:44.230417デフォルトの名無しさん
2012/04/15(日) 17:53:43.12mainがダウト、なんじゃないか?
0418デフォルトの名無しさん
2012/04/15(日) 18:08:11.82main { return ... } 部分をただのコードブロックとみせかけて
実は戻り値を変換しているという作戦だったのに、バレたか。
0419デフォルトの名無しさん
2012/04/15(日) 18:31:37.860420デフォルトの名無しさん
2012/04/15(日) 18:34:04.580421デフォルトの名無しさん
2012/04/15(日) 18:34:51.92この期に及んで汚ないチートとかなにこのものすごい残尿感。
0422デフォルトの名無しさん
2012/04/15(日) 18:40:05.540423デフォルトの名無しさん
2012/04/15(日) 18:43:46.950424デフォルトの名無しさん
2012/04/15(日) 18:47:39.470425デフォルトの名無しさん
2012/04/15(日) 18:52:45.850426デフォルトの名無しさん
2012/04/15(日) 18:53:02.180427デフォルトの名無しさん
2012/04/15(日) 19:04:47.51汚いコードだけが「合格」www
勝手に判定してる(コード書けない)バカのセンスが露呈してますな
0428デフォルトの名無しさん
2012/04/15(日) 19:05:21.22perl書いたのオレなんだけれどもさ、その通りなんだよな…
0429デフォルトの名無しさん
2012/04/15(日) 19:08:10.88すげえ無理矢理くさくて笑えるw
関数型がオブジェクト指向を取り入れるのはもっと自然なのに
オブジェクト指向っていうかC系列はもう駄目なんだと思う
0430デフォルトの名無しさん
2012/04/15(日) 19:18:55.29そりゃ無理やりくさくもなるさ
0431デフォルトの名無しさん
2012/04/15(日) 19:28:01.70最近のC#の機能なんてC#以前から概念として存在してたはずなのに。
必要ないという当初の目論見は外れてるわけだ。
というか、資産っていうのはC風の構文そのものなんだよね・・・
C風じゃないとヤダヤダいう人が多すぎてD言語とかいちいち作られてる気がする。
C++、Java、C#、D言語
このへんは全て老害でしょ。
0432デフォルトの名無しさん
2012/04/15(日) 19:30:26.050433デフォルトの名無しさん
2012/04/15(日) 19:41:07.47fizz 3 -- "Fizz"
buzz 5 -- "Buzz"
buzz fizz 15 -- "FizzBuzz"
だったらHaskellでも解ける?
0434デフォルトの名無しさん
2012/04/15(日) 19:45:23.420435デフォルトの名無しさん
2012/04/15(日) 19:50:00.84C系列でまともなのはCだけ
0436デフォルトの名無しさん
2012/04/15(日) 19:50:26.06型の不整合が生じるから無理
0437デフォルトの名無しさん
2012/04/15(日) 19:52:02.10C#はどんどんダメな方向に向かってる気はするわー。
0438デフォルトの名無しさん
2012/04/15(日) 20:01:50.150439デフォルトの名無しさん
2012/04/15(日) 20:11:47.98>>303-304
0440デフォルトの名無しさん
2012/04/15(日) 20:19:32.18後付で入れてもらったのがScala、Clojure、F#でしょ
なんで後付を悪く言うのかな
0441デフォルトの名無しさん
2012/04/15(日) 20:41:24.35偉い人にはそれがわからんのです
0442デフォルトの名無しさん
2012/04/15(日) 21:08:30.57アホか
それらは最初から関数型言語として作られてるでしょ。
関数型は糞、オブジェクト指向最高ってスタンスで作ってたはずのもんが
なんで今更関数型の要素を入れようとするんだよ。
0443デフォルトの名無しさん
2012/04/15(日) 21:16:51.80オーバーライドした toString() を println() に暗黙に呼ばせるとかいう
使い古されたチートをキメ顔で出してこられても…。
new myInteger(3).fizz() が "Fizz" を返せるとか少しは挑戦しようよ。
0444デフォルトの名無しさん
2012/04/15(日) 21:17:08.32くらいのノリだろ。たぶん
dynamic型導入したときもそんな感じだったし
0445デフォルトの名無しさん
2012/04/15(日) 21:18:37.55もともとJavaへの嫉妬から始まった言語だし。
0446デフォルトの名無しさん
2012/04/15(日) 21:21:52.66手続き型言語がまずあって、
そこへOOの機能を取り入れた。
こんどはさらに関数型の機能も取り入れようとしているだけ。
0447デフォルトの名無しさん
2012/04/15(日) 21:40:30.50C#だってCっぽくないとヤダヤダっていう老害のために
無理矢理作ってるんだから全然人のこといえねーわ。
ラムダとかそんなに良いんならなんで最初から関数型言語使わないんだよw
0448デフォルトの名無しさん
2012/04/15(日) 21:46:15.09> 関数型は糞、オブジェクト指向最高ってスタンスで作ってたはずのもんが
> なんで今更関数型の要素を入れようとするんだよ。
オブジェクト指向最高はそうかもしれないが、
関数型は糞なんて言ってないだろ。
現実世界における物質(オブジェクト)に対応づけやすい
自然な発想に基づくオブジェクト指向。
そこに便利な関数型を取り入れただけ。
りんごの方程式とは何か?を考えれば
オブジェクト指向と関数型の関係がわかるだろう。
0449デフォルトの名無しさん
2012/04/15(日) 21:48:54.81だから、C#じゃクロージャ作るのに引数や戻り値にvoidがあると作れないw
やるには予めデリゲートを定義しなきゃならん。
クロージャを使うのを考えさせられる。
ありえん。手軽さが全然ない。
F#はローカル変数(厳密には違うが)を定義するのもクロージャを定義するのも同じ手間しかかからない。
クロージャをバンバン使っていけるのでクロージャの応用もどんどん閃ける。
F#やった方がC#が上手くなるという現実。
C#はやればやるほど馬鹿になる言語。
0450デフォルトの名無しさん
2012/04/15(日) 21:50:04.90関数型でOOPをするときは、返り値として変更したオブジェクトを返すより、新たなオブジェクトを返したほうが関数型ぽいのかね?
F#のことも思い出してあげてください
0452デフォルトの名無しさん
2012/04/15(日) 21:59:08.450453デフォルトの名無しさん
2012/04/15(日) 22:00:17.15どちらが糞でどちらが最高かなんて、問い詰められても答えなくていいと思うんだが
沈黙が正解って小学生でも知ってる奴は知ってるだろ
0454デフォルトの名無しさん
2012/04/15(日) 22:54:52.02>>443
がんばってみたんですが、糸口がみえてきません。もしよろしければアドバイスをいただけないでしょうか。
>new myInteger(3).fizz() が "Fizz" を返せる
�@ これは、「メソッド fizz() が副作用として "Fizz" を出力する」ということですか?
この場合、fizz(), buzz(), gizz() を通過してきて 3 でも 5 でも 7 でもわりきれなかった場合に元の数字を出力する、ということが不可能だと思います。
>>303 では妥協して endl() というメソッドを準備してこの処理を行うしかありませんでした。
�A それとも「メソッド fizz() の返り値が String("fizz") であるべき」ということですか?
String にメソッド fizz() を追加したいのであれば、 String から新しいクラスmyString を継承して、そこにメソッドを定義するということだろうと思いますが、
(new myString(3).fizz() が myString("Fizz") を返す)
�A-1 java.lang.String は final。
�A-2 メソッド fizz() が "Fizz" を返してしまうと、もとの String("3") を忘れてしまい、buzz(), gizz() が処理できない。多値を返したいのですが >>304 で精一杯。
>>304 の toString()#Object をオーバーライドする、ってこういうときには普通にすることだと思っていたんですが、何かまずい問題でもあるのでしょうか?
0455デフォルトの名無しさん
2012/04/15(日) 23:40:26.220456デフォルトの名無しさん
2012/04/15(日) 23:47:29.56>>303 の方針でがんばってみました。gizz() は最後に置かなければならない、と決めうちすることにしました。
http://toro.2ch.net/test/read.cgi/tech/1313183984/194
0457デフォルトの名無しさん
2012/04/15(日) 23:49:17.320458デフォルトの名無しさん
2012/04/15(日) 23:50:41.61> fizz() が "Fizz" を返してしまうと、もとの String("3") を忘れてしまい、buzz(), gizz() が処理できない
その一見回避不可能な問題を解決する方法を考えるのがこのクイズがクイズたるゆえんです。
言語によっては型システムの制約によりどうやっても実現できないこともあります。
0459デフォルトの名無しさん
2012/04/16(月) 00:02:21.18関数型に限らず、GCのあるOOPLだと
属性変更をせずに新規オブジェクトをサクサク作るやり方も結構使うね
0460デフォルトの名無しさん
2012/04/16(月) 00:45:51.08>>341の方法(元の数値をどこかにメモしておいて適宜参照)はJavaでも使えます。
0461デフォルトの名無しさん
2012/04/16(月) 01:11:55.59OOとPFの言語比較としてこのようなクイズを出したのは、
どのような観点からこれら両者のパラダイムの優劣を比較しようとしたのか
聞きたい
0462デフォルトの名無しさん
2012/04/16(月) 01:13:44.79このクイズではせっかくの労力を生産的でないことに費やしている
0463デフォルトの名無しさん
2012/04/16(月) 01:30:58.12クイズなんかそんなもんだろ。しょせん暇つぶし。
つーか、こんな程度のクイズ解くのに「労力」なんか大仰なもん必要か?
0464デフォルトの名無しさん
2012/04/16(月) 01:38:59.770465デフォルトの名無しさん
2012/04/16(月) 01:48:07.750466デフォルトの名無しさん
2012/04/16(月) 02:07:04.82tieとマクロ使ったのも書こうと思ったけれど手間がもったいなくなってやめた。
パラダイム比較としてもうすこし書く値打ちのあるテーマ出せよ、
このクイズじゃ再帰は使いどころないし
javaのnewだめ静的型システムダメ
何を有利に誘導したいんだか
せめて前スレのpermutationレベルのテーマを出題の下限レベルとしてクレヨ
0467466
2012/04/16(月) 02:18:35.03プログラムプロムナード、ナノピコ教室、Cマガ課題、オイラー4、AIアルゴリズム、OR最適化、
パーサ、マッチング、グラフ問題あたりの
小問題で再帰・高階/部分適用、遅延・カーリー化vsOOの比較できる題材が妥当かもな
step数は2chの1レスに収まるくらいの小問題でいいからサ
0468466
2012/04/16(月) 02:26:58.99たとえばqsortはperlやhaskellでpivotを適当に選択して再帰した短いコードと
pivot選択くどくど頑張ったCやjavaの長いコード比較してファンクショナルの再帰はマンセーみたいな
サイトがあちこちにあるだろ、
あのレベルでも今回のFizzBuzzGizzよりましだろ
0469466
2012/04/16(月) 02:35:35.130470466
2012/04/16(月) 02:44:04.67どのみち記述する言語の特徴または弱点、癖の比較レベルの議論に落ちがちな稀ガス
ズット前スレでヨンだが、意味論的にはOOとPFは相容れない物らしい
しかし生々しい実装レベルではいまんとこ清濁併せ呑んで実現するし
まあいいや寝るか。ノシ
0471デフォルトの名無しさん
2012/04/16(月) 02:46:25.77ズル呼ばわりされるわ、Rubyの>>377の挙動も再現できなかったしで散々だったしね。
0472デフォルトの名無しさん
2012/04/16(月) 02:53:06.66これ以上C++では無理かも。0xだと知らんが。
template< int e, unsigned t >
struct fizzbuzz
{
int in; std::string out;
fizzbuzz( int i ):in( i ){ init(); }
template< int e2, unsigned t2 >
fizzbuzz( const fizzbuzz< e2, t2 > &r )
:in( r.in ),out( r.out ){ init(); }
void init(){ if( in%e ) return;
unsigned tmp=t; out.append( (char*)&tmp, 4 ); }
operator const char *(){ return out.c_str(); }
operator int(){ return in; }
};
typedef fizzbuzz< 3, 'zziF' > fizz;
typedef fizzbuzz< 5, 'zzuB' > buzz;
typedef fizzbuzz< 7, 'zziG' > gizz;
int main()
{
int i = (gizz)(buzz)(fizz)1;
std::string t = (gizz)(buzz)(fizz)15;
std::string u = (gizz)(buzz)(fizz)105;
std::string v = gizz((buzz(fizz(105)))); //こうも書けるね
return 0;
}
0473466
2012/04/16(月) 02:54:29.65あれはね最初に書いたnewはだめって言われて仕方なくの面はあるのよ
$scalar = 関数(関数
と明示的にscalarで主値だけを受けとるように明示するのがホントは作法なんだ。
Rubyの>>377に関しては読んでなかったから挙動の再現にそもそも着手してないよ。
rubyは文法がかなりカオスになって来ちゃって残念だね
0474466
2012/04/16(月) 02:59:22.51それより前スレのpermutaion perl版はwebなど参照せず一から考えて書いて
オレなりに結構な自信作だったのに
なんの反応もなかったことの方が寂しかったな
0475デフォルトの名無しさん
2012/04/16(月) 03:19:21.920476デフォルトの名無しさん
2012/04/16(月) 06:20:08.75涙目でdisるスレです
0477デフォルトの名無しさん
2012/04/16(月) 06:53:26.91必死に難癖付けてて笑ったわww
0478デフォルトの名無しさん
2012/04/16(月) 08:13:17.85数や文字列に状態持たせる以外の方法が
理解できないんだろう
0479デフォルトの名無しさん
2012/04/16(月) 08:32:48.03数や文字列に状態持たせる方法が
許容できないんだろう
0480デフォルトの名無しさん
2012/04/16(月) 08:38:53.990481デフォルトの名無しさん
2012/04/16(月) 08:50:48.960482デフォルトの名無しさん
2012/04/16(月) 09:44:46.42Haskellとかでコンストラクタ無しで1以外の引数をとるとコンパイル時に
型エラーになる関数って定義できたっけ?
0483デフォルトの名無しさん
2012/04/16(月) 10:00:08.87template<> void func<1>(){}
・・・
func<2>();//エラー
0484デフォルトの名無しさん
2012/04/16(月) 12:34:04.90{-# LANGUAGE TemplateHaskell #-}
module FooTH where
import Language.Haskell.TH
foo 1 = [| 1 |]
foo _ = error ""
> cat Main.hs
{-# LANGUAGE TemplateHaskell #-}
import FooTH
main = print $(foo 1) -- foo 2 に変えるとコンパイルエラー
0485デフォルトの名無しさん
2012/04/16(月) 12:50:08.98あれ覚えてるよ、実は感心してた
ていうか、このスレでPerlの評価が結構変わったよ(もちろん高い方へ)
でも、読み易さ優先で書いてあれとは
Perl使いとは分かり合えないな...と思ったけどw
0486デフォルトの名無しさん
2012/04/16(月) 20:25:48.62許容はしてるだろう
エレガントさから程遠いと言ってるだけで
0487デフォルトの名無しさん
2012/04/16(月) 22:19:41.52エレガントってやつかw
0488285
2012/04/17(火) 00:46:48.85問題があれだし書き捨てだからやったが、実際には絶対にやりたくないな
0489デフォルトの名無しさん
2012/04/17(火) 00:47:44.00FizzBuzzすら書けない口だけ野郎の基準よりマシだろwww
お前はこのスレでは最底辺のカスなんだから敬語使えw
0490デフォルトの名無しさん
2012/04/17(火) 00:53:04.36ぶっちゃけ>>479のバカが理解できたのが
たまたまRubyのコードだっただけでRuby厨ですらねーと思うぜ
むしろバカにクソコード褒められてRuby可哀想ってなもんだ
0491デフォルトの名無しさん
2012/04/17(火) 00:59:54.740492466
2012/04/17(火) 01:35:17.45アレは学部・卒研レベルの課題をここに投げたのかなーと
オレは感じた。(真相はシラネ)
もしかしてオレ様はボクちゃんに利用されたのかなとww
0493デフォルトの名無しさん
2012/04/17(火) 10:56:11.26オープンクラスは使わずにブロック(無名関数)で。
| fb fizz buzz gizz |
fb := [:x :cond :str |
| p n |
p := Processor activeProcess.
(x isKindOf: Integer)
ifTrue: [p instVarNamed: #env put: (n := x). x := '']
ifFalse: [n := p instVarNamed: #env].
(cond value: n) ifTrue: [x, str] ifFalse: [x ifEmpty: [n]]].
fizz := [:x | fb value: x value: [:n | n isDivisibleBy: 3] value: 'Fizz' ].
buzz := [:x | fb value: x value: [:n | n isDivisibleBy: 5] value: 'Buzz'].
gizz := [:x | fb value: x value: [:n | n isDivisibleBy: 7] value: 'Gizz'].
self assert: (fizz value: 1) = 1.
self assert: (fizz value: 3) = 'Fizz'.
self assert: (buzz value: (fizz value: 1)) = 1.
self assert: (buzz value: (fizz value: 3)) = 'Fizz'.
self assert: (buzz value: (fizz value: 5)) = 'Buzz'.
self assert: (buzz value: (fizz value: 15)) = 'FizzBuzz'.
self assert: (gizz value: (buzz value: (fizz value: 105))) = 'FizzBuzzGizz'.
self assert: (buzz value: (gizz value: (fizz value: 105))) = 'FizzGizzBuzz'.
0494デフォルトの名無しさん
2012/04/17(火) 12:02:41.83Pythonも同じ方針のやつ
import threading
fbdata = threading.local()
def fb(x, cnd, msg):
if isinstance(x, int):
fbdata.m = n = x
s = ""
else:
n = fbdata.m
s = x
if cnd(n):
return s + msg
elif s <> "":
return s
else:
return n
def fizz(n): return fb(n, lambda n: n%3==0, "Fizz")
def buzz(n): return fb(n, lambda n: n%5==0, "Buzz")
def gizz(n): return fb(n, lambda n: n%7==0, "Gizz")
assert fizz(1) == 1
assert fizz(3) == "Fizz"
assert buzz(fizz(1)) == 1
assert buzz(fizz(3)) == "Fizz"
assert buzz(fizz(5)) == "Buzz"
assert buzz(fizz(15)) == "FizzBuzz"
assert gizz(buzz(fizz(105))) == "FizzBuzzGizz"
assert buzz(gizz(fizz(105))) == "FizzGizzBuzz"
0495デフォルトの名無しさん
2012/04/18(水) 13:10:30.340496デフォルトの名無しさん
2012/04/18(水) 13:31:40.560497デフォルトの名無しさん
2012/04/19(木) 02:49:08.33sub { my $x = shift;
$f->($f->($x)) } };
$rst = $t->($t)->($t)->($t)->(
sub{ my $x = shift;
$x + 1 })->(0);
print $rst, "\n";
0498デフォルトの名無しさん
2012/04/19(木) 09:02:56.87ケチがついた、オープンクラス、メソッドチェーン、リフレクションは無しで
require 'test/unit'
def fb(x, cnd, msg)
th = Thread.current
x.kind_of?(Integer) ? (th[:m] = n = x; s = "") : (n = th[:m]; s = x)
cnd[n] ? s + msg : !s.empty? ? s : n
end
def fizz(n); fb(n, proc{ |n| n%3==0 }, "Fizz") end
def buzz(n); fb(n, proc{ |n| n%5==0 }, "Buzz") end
def gizz(n); fb(n, proc{ |n| n%7==0}, "Gizz") end
class FizzBuzzQuizTest < Test::Unit::TestCase
def test_fbq
assert_equal( fizz(1), 1 )
assert_equal( fizz(3), "Fizz" )
assert_equal( buzz(fizz(1)), 1 )
assert_equal( buzz(fizz(3)), "Fizz" )
assert_equal( buzz(fizz(5)), "Buzz" )
assert_equal( buzz(fizz(15)), "FizzBuzz" )
assert_equal( gizz(buzz(fizz(105))), "FizzBuzzGizz" )
assert_equal( buzz(gizz(fizz(105))), "FizzGizzBuzz" )
end
end
0499デフォルトの名無しさん
2012/04/19(木) 09:53:30.31クソみたいな実装が出てくる出題だったけど
言語比較に役立つ何かは得られましたか?
■ このスレッドは過去ログ倉庫に格納されています