1 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 21:26:47.61 ] 一般的には、オブジェクト指向型言語が優勢でが 一部には関数型言語を崇拝している人もいます どちらが上なのか、この際はっきりさせましょう 前スレ toro.2ch.net/test/read.cgi/tech/1331328955/
367 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:07:57.17 ] というか、ここのHaskellerはどうしてこうも要求仕様を読み取れないくせに あまつさえ勝手な解釈で適当なコード書いてドヤ顔なの? バカなの? 死ぬの?
368 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:11:06.66 ] >>367 誰もお前の頭の中なんて知らないし興味ないんだから 言わないと分からないっつーの ここはお前の要求仕様を満たす場じゃねーし 馬鹿はお前 あと、まさかコードも書かずに議論参加してたとか無いよな 書いたコードのレス示せよ 俺は>>340 書いたぞ
369 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:16:29.12 ] (defmacro defun-fizz-buzz (name divisor) `(defmacro ,name (form) `(multiple-value-bind (int str) ,form (values int (if (= (mod int ,',divisor) 0) (concatenate 'string str (string ',',name)) str))))) (defun-fizz-buzz fizz 3) (defun-fizz-buzz buzz 5) (defun-fizz-buzz gizz 7)
370 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:21:51.37 ] >>367 > ドヤ顔なの?バカなの? 死ぬの? w いまどき、こんな台詞をわざわざ書くやつがいるんだww
371 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:23:54.35 ] 勘違いしたふりして頓珍漢なコード出してきて、 言語や自分の発想の限界とかクリティカルなところはなんとか避けようとしているんだよ。 仕様を取り違えてるよってやんわりチェック方法をしめすと、 ルールを増やすな、後出しだ、仕様が欠陥だってなんやかやクレームつけて 相手が根負けして要求仕様のほうが変わるのを粘り強くじっと待つ戦略なんだ。 ある意味、賢いよ。
372 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:26:54.36 ] お題提出者の解答ってもう出てるの?
373 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:29:32.45 ] >>363 > map するコードを [1, 2, "Fizz"] に対して同じことをするコードとまったく同様に書いて Haskellは静的型付けだから数と文字列を同じリストには入れられないんだ そんなことも知らずに議論してたんじゃないよね?
374 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:32:03.01 ] >>371 >>368 > あと、まさかコードも書かずに議論参加してたとか無いよな > 書いたコードのレス示せよ って書いてるのに示さないってことは、まさか本当にコード書いてなかったの?
375 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:33:37.46 ] まさかの口だけ野郎説浮上www
376 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 16:44:57.11 ] >>363 は問題が頓珍漢だけど(静的型で [1, 2, "Fizz"] はねーよw) 最大限エスパーして書いてみた >>283 はこんな感じ conv (Left n) = Left $ 10 * n conv (Right s) = Right $ map toUpper s main = do print $ map conv [Left 1, Left 2, Right "Fizz"] print $ map conv $ map fizz [1,2,3] >>340 はこんな感じ conv (HasA s n) = HasA (map toUpper s) (10 * n) main = do print $ map conv [1, 2, "Fizz" `HasA` 3] print $ map conv $ map fizz [1,2,3]
377 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 17:03:29.49 ] >> xs = (1..3).map{ |n| n.fizz } => [1, 2, "Fizz"] >> xs.map{ |x| case x when Integer then x*10 when String then x.upcase end } => [10, 20, "FIZZ"] >> ys = [1, 2, "Fizz"] => [1, 2, "Fizz"] >> ys.map{ |x| case x when Integer then x*10 when String then x.upcase end } => [10, 20, "FIZZ"]
378 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 17:45:03.77 ] ◆QZaw55cn4c が出てきて有耶無耶になってるけど 「Javaドカタはコード書けない」説はまだ有効
379 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 17:57:01.51 ] ◆QZaw55cn4c はドカタではないとでも
380 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 18:26:18.94 ] Haskellでコード書くだけで天才になれた気がした15の夜
381 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 18:49:30.59 ] 敵はハスケラだけと思ってるところがウケるw どんな言語使いから見ても口だけ野郎は最底辺のゴミだぞwww
382 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 18:52:07.05 ] おまえもなw
383 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 19:54:38.00 ] コード書けないドカタは「なでしこ」使えば良いんじゃないか? 運が良ければ日本語で書いた戯れ言が 実行されるかもしれないぞ
384 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 21:39:02.30 ] >>383 お前は詳しそうだな、その言語。 興味持って使ってみたのか?w
385 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:22:56.77 ] まだPythonは出てなかったので class F(object): def __init__(self, f): self.fs = f if hasattr(f, '__iter__') else [f] def __call__(self, x): if isinstance(x, int): s = ''.join(f(x) for f in self.fs if isinstance(f(x), str)) return x if s == '' else s else: return F(self.fs + [x]) fizz = F(lambda x: 'Fizz' if x % 3 == 0 else '') buzz = F(lambda x: 'Buzz' if x % 5 == 0 else '') gizz = F(lambda x: 'Gizz' if x % 7 == 0 else '') print [fizz(buzz)(gizz)(x) for x in [1,3,5,7,15,21,35,105]]
386 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:31:36.36 ] F#、さすがだな。
387 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:48:20.05 ] >>385 可能なら、 gizz(buzz(fizz(105))) is "FizzBuzzGizz" となるようなヤツをお願いします。
388 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:55:31.60 ] >>387 理由を聞いても良い? Pythonでは>>385 のほうがデコレータでも使えて良いんだけど…… @fizz @buzz def bizz(x): if x % 11 == 0: return 'Bizz' else: ''
389 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:03:37.43 ] 静的型言語にIntを返したりStringを返したりする関数って縛りがそもそも無理
390 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:07:14.65 ] >>388 >>254
391 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:08:32.55 ] PerlとかSchemeの、多値をうまく使ったのが一番エレガントかな。 RubyとかJSは、同じようなコードをStringとNumberの両方に生やすとか、 見事に汚い解だw
392 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:13:32.41 ] 関数を返す関数(カリー化されてりゃ普通)にケチがつくとか スゲーなこのスレ
393 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:16:23.31 ] >>390 ちゃんと「など」って書いてるぞー > オープンクラス機構やメソッドのない言語では関数(buzz(fizz(3)) #=> "Fizz" など)で。 それとも高階関数は関数じゃないんですかー
394 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:20:37.25 ] >>389 それだけじゃない。 継続の状態如何で関数に振る舞いを変えさせるとか 関数型には無理な事ばかり要求している。 悪意に満ちたクイズだ。
395 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:23:20.66 ] >>394 素直に考えれば、オープンクラスのある言語が良いという 意見に持っていきたい問題だからね でも出てきた解はRubyが一番汚いという
396 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:25:11.88 ] >>389 型クラスとかってこういう時には使えないの?
397 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:30:40.55 ] 要求による。 問題の「#=> "FizzBuzz"」が意味しているものが、REPLでそのように表示されるもの、 という意味なら、Show型クラスでいいんだけど、String型([Char]型)を要求してるなら無理。
398 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:32:07.68 ] 静的型 vs 動的型スレ向きの問題だよね
399 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:52:01.47 ] >>391 いやあ俺は>>341 のF#(er)が一番エレガントだと思うぞ。 無茶な要求仕様も黙ってすべて満たしつつ、簡潔できれいなコード出してきてるし。
400 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:57:38.79 ] >>399 ThreadLocalが一番エレガントって どういうセンスしてんだよ
401 名前:デフォルトの名無しさん [2012/04/15(日) 12:04:48.59 ] #include <stdio.h> #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))));}
402 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 12:22:36.47 ] >>368 >あと、まさかコードも書かずに議論参加してたとか無いよな >>395 >でも出てきた解はRubyが一番汚いという このスレの特徴まとめ
403 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 12:34:01.13 ] >>399 グローバル変数ではまずいと考えてThreadLocalにしたみたいに見える まずいという認識がありながら、それを上に報告しないのはおかしい 結局、要求に対する不平不満は正直に言えばいいんだよ
404 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 12:52:12.22 ] コード書けないドカタとプログラマでは綺麗さの認識が違う
405 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 13:06:57.34 ] そうだね お前のコードかけないドカタって概念がおかしいけどねw
406 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 13:29:07.47 ] >>405 あれ?まだこのスレに居たの? 派遣仕事で使い慣れたJavaを使って良いから 早くエレガントな解を出してくださいよwww
407 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 13:32:57.13 ] くやしいんだねw
408 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 13:55:54.00 ] 仕事しろ。言語の勉強はするだけ無駄。 求められているのは動くアプリだ。
409 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 14:23:06.70 ] そもそも関数としての体をなしてないのだから、 副作用を使わずにこのクイズは解けない。 よって純粋な関数型パラダイムでは対応不可。終了。
410 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 14:32:35.61 ] Scalaならいろいろ駆使して書けそうだけどな
411 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 14:38:59.15 ] >>393 この場合の「など」は、関数呼び出しにもいろいろありますよね、 buzz(fizz(3)) 、 (buzz (fizz 3)) 、buzz fizz 3 など―とかの「など」だと思われ。
412 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 15:23:11.97 ] 関数じゃないものを 関数型言語で作るには どうしたらいいのだろうか?
413 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 15:27:19.67 ] >>409 副作用なしに解いたSchemeさんが涙目です
414 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 15:35:03.47 ] >>411 三つ目が>>385 だね(カリー化されてれば) それとも見た目だけの問題?
415 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 16:42:00.03 ] F#でThreadLocal等の副作用もないバージョン。 type 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"]
416 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 17:46:44.23 ] 新ルール「カリー化禁止」
417 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 17:53:43.12 ] >>415 mainがダウト、なんじゃないか?
418 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:08:11.82 ] >>417 main { return ... } 部分をただのコードブロックとみせかけて 実は戻り値を変換しているという作戦だったのに、バレたか。
419 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:31:37.86 ] Smalltalkが流行らないように関数型メインは流行らないよ
420 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:34:04.58 ] ついに「流行らない」以外に縋るものがなくなっちゃったか
421 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:34:51.92 ] 副作用ありとは言え、唯一まともな解出しててF#△だったのに この期に及んで汚ないチートとかなにこのものすごい残尿感。
422 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:40:05.54 ] .NET発表時のHaskell.NETはどこに行ったんだよ?
423 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:43:46.95 ] マクロ使っていいならそもそも多値なんぞ使わんでも楽勝だろ。
424 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:47:39.47 ] FizzBuzzって流行ってるけど何が面白いの?
425 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:52:45.85 ] 低能はFizzBuzzすら書けないという事実が面白い
426 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 18:53:02.18 ] >>423 具体的にドーゾ
427 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:04:47.51 ] オープンクラスとか副作用有り等の 汚いコードだけが「合格」www 勝手に判定してる(コード書けない)バカのセンスが露呈してますな
428 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:05:21.22 ] >>423 perl書いたのオレなんだけれどもさ、その通りなんだよな…
429 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:08:10.88 ] C#とかも関数型言語のエッセンスを取り入れるけど すげえ無理矢理くさくて笑えるw 関数型がオブジェクト指向を取り入れるのはもっと自然なのに オブジェクト指向っていうかC系列はもう駄目なんだと思う
430 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:18:55.29 ] 守らなければならない資産がたくさんあるからな そりゃ無理やりくさくもなるさ
431 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:28:01.70 ] 後付で入れなきゃならなくなる時点で失敗だったはずなんだけどなぁ。 最近のC#の機能なんてC#以前から概念として存在してたはずなのに。 必要ないという当初の目論見は外れてるわけだ。 というか、資産っていうのはC風の構文そのものなんだよね・・・ C風じゃないとヤダヤダいう人が多すぎてD言語とかいちいち作られてる気がする。 C++、Java、C#、D言語 このへんは全て老害でしょ。
432 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:30:26.05 ] C#、D言語は設計に一貫した思想がないからアホっぽくなるのは仕方ない。
433 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:41:07.47 ] fizz 1 -- "1" fizz 3 -- "Fizz" buzz 5 -- "Buzz" buzz fizz 15 -- "FizzBuzz" だったらHaskellでも解ける?
434 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:45:23.42 ] 可変長引数とかさーー
435 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:50:00.84 ] >>431 C系列でまともなのはCだけ
436 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:50:26.06 ] >>433 型の不整合が生じるから無理
437 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 19:52:02.10 ] >>432 C#はどんどんダメな方向に向かってる気はするわー。
438 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:01:50.15 ] Javascriptは結構好きなのよん > C系文法族
439 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:11:47.98 ] >>406 >>303-304
440 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:19:32.18 ] >>431 後付で入れてもらったのがScala、Clojure、F#でしょ なんで後付を悪く言うのかな
441 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:41:24.35 ] C#は言語設計に一貫性がなく節操のないところが最大の魅力 偉い人にはそれがわからんのです
442 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:08:30.57 ] >>440 アホか それらは最初から関数型言語として作られてるでしょ。 関数型は糞、オブジェクト指向最高ってスタンスで作ってたはずのもんが なんで今更関数型の要素を入れようとするんだよ。
443 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:16:51.80 ] >>439 オーバーライドした toString() を println() に暗黙に呼ばせるとかいう 使い古されたチートをキメ顔で出してこられても…。 new myInteger(3).fizz() が "Fizz" を返せるとか少しは挑戦しようよ。
444 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:17:08.32 ] 「.Netファミリーに関数型言語入ったからC#でも使えるようにすっか!」 くらいのノリだろ。たぶん dynamic型導入したときもそんな感じだったし
445 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:18:37.55 ] いやC#の場合は「C#で〜が出来ないと言わせない」という一貫した姿勢があると思う。 もともとJavaへの嫉妬から始まった言語だし。
446 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:21:52.66 ] >>442 手続き型言語がまずあって、 そこへOOの機能を取り入れた。 こんどはさらに関数型の機能も取り入れようとしているだけ。
447 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:40:30.50 ] C#厨ってVB.NETをVB厨のための言語って馬鹿にしてたけど C#だってCっぽくないとヤダヤダっていう老害のために 無理矢理作ってるんだから全然人のこといえねーわ。 ラムダとかそんなに良いんならなんで最初から関数型言語使わないんだよw
448 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:46:15.09 ] >>442 > 関数型は糞、オブジェクト指向最高ってスタンスで作ってたはずのもんが > なんで今更関数型の要素を入れようとするんだよ。 オブジェクト指向最高はそうかもしれないが、 関数型は糞なんて言ってないだろ。 現実世界における物質(オブジェクト)に対応づけやすい 自然な発想に基づくオブジェクト指向。 そこに便利な関数型を取り入れただけ。 りんごの方程式とは何か?を考えれば オブジェクト指向と関数型の関係がわかるだろう。
449 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:48:54.81 ] C#作った奴らはvoidを型と思っていなかった。 だから、C#じゃクロージャ作るのに引数や戻り値にvoidがあると作れないw やるには予めデリゲートを定義しなきゃならん。 クロージャを使うのを考えさせられる。 ありえん。手軽さが全然ない。 F#はローカル変数(厳密には違うが)を定義するのもクロージャを定義するのも同じ手間しかかからない。 クロージャをバンバン使っていけるのでクロージャの応用もどんどん閃ける。 F#やった方がC#が上手くなるという現実。 C#はやればやるほど馬鹿になる言語。
450 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:50:04.90 ] 速度やメモリ・言語ごとの風習で最適かどうかは変わるのだろうけれど、 関数型でOOPをするときは、返り値として変更したオブジェクトを返すより、新たなオブジェクトを返したほうが関数型ぽいのかね?
451 名前: ◆QZaw55cn4c mailto:sage [2012/04/15(日) 21:51:05.55 ] >>447 F#のことも思い出してあげてください
452 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:59:08.45 ] 関数型言語でWindowsアプリを開発したいっつー需要がどれだけあるかだな
453 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 22:00:17.15 ] >>442 どちらが糞でどちらが最高かなんて、問い詰められても答えなくていいと思うんだが 沈黙が正解って小学生でも知ってる奴は知ってるだろ
454 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 22:54:52.02 ] >>443 >>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 をオーバーライドする、ってこういうときには普通にすることだと思っていたんですが、何かまずい問題でもあるのでしょうか?
455 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:40:26.22 ] トイプログラムしか書かない奴は言語なんて何でもいいだろw
456 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:47:29.56 ] >>443 >>303 の方針でがんばってみました。gizz() は最後に置かなければならない、と決めうちすることにしました。 toro.2ch.net/test/read.cgi/tech/1313183984/194
457 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:49:17.32 ] 苦しいねぇ
458 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:50:41.61 ] >>454 > fizz() が "Fizz" を返してしまうと、もとの String("3") を忘れてしまい、buzz(), gizz() が処理できない その一見回避不可能な問題を解決する方法を考えるのがこのクイズがクイズたるゆえんです。 言語によっては型システムの制約によりどうやっても実現できないこともあります。
459 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 00:02:21.18 ] >>450 関数型に限らず、GCのあるOOPLだと 属性変更をせずに新規オブジェクトをサクサク作るやり方も結構使うね
460 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 00:45:51.08 ] >>454 >>341 の方法(元の数値をどこかにメモしておいて適宜参照)はJavaでも使えます。
461 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:11:55.59 ] >>458 OOとPFの言語比較としてこのようなクイズを出したのは、 どのような観点からこれら両者のパラダイムの優劣を比較しようとしたのか 聞きたい
462 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:13:44.79 ] もうこのお題はcloseでいいんじゃないの? このクイズではせっかくの労力を生産的でないことに費やしている
463 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:30:58.12 ] >>462 クイズなんかそんなもんだろ。しょせん暇つぶし。 つーか、こんな程度のクイズ解くのに「労力」なんか大仰なもん必要か?
464 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:38:59.77 ] このクイズのくだらなさはかなり問題。
465 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:48:07.75 ] くやしいのうw
466 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 02:07:04.82 ] 全然くやしくないぜよ。perlでobjectのnew版も多値版もさらりと書いた。 tieとマクロ使ったのも書こうと思ったけれど手間がもったいなくなってやめた。 パラダイム比較としてもうすこし書く値打ちのあるテーマ出せよ、 このクイズじゃ再帰は使いどころないし javaのnewだめ静的型システムダメ 何を有利に誘導したいんだか せめて前スレのpermutationレベルのテーマを出題の下限レベルとしてクレヨ
467 名前:466 mailto:sage [2012/04/16(月) 02:18:35.03 ] 大体fizz buzzってのが下らないんだよ プログラムプロムナード、ナノピコ教室、Cマガ課題、オイラー4、AIアルゴリズム、OR最適化、 パーサ、マッチング、グラフ問題あたりの 小問題で再帰・高階/部分適用、遅延・カーリー化vsOOの比較できる題材が妥当かもな step数は2chの1レスに収まるくらいの小問題でいいからサ