[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/14 13:02 / Filesize : 255 KB / Number-of Response : 780
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【激突】関数型言語 VS オブジェクト指向言語2



1 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 21:26:47.61 ]
一般的には、オブジェクト指向型言語が優勢でが
一部には関数型言語を崇拝している人もいます

どちらが上なのか、この際はっきりさせましょう

前スレ toro.2ch.net/test/read.cgi/tech/1331328955/

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レスに収まるくらいの小問題でいいからサ

468 名前:466 mailto:sage [2012/04/16(月) 02:26:58.99 ]
最悪、基本アルゴリズムの再実装でもいいや
たとえばqsortはperlやhaskellでpivotを適当に選択して再帰した短いコードと
pivot選択くどくど頑張ったCやjavaの長いコード比較してファンクショナルの再帰はマンセーみたいな
サイトがあちこちにあるだろ、
あのレベルでも今回のFizzBuzzGizzよりましだろ

469 名前:466 mailto:sage [2012/04/16(月) 02:35:35.13 ]
あと、言い出しっぺの法則はナシだぞw


470 名前:466 mailto:sage [2012/04/16(月) 02:44:04.67 ]
つか、OOとPFの単純比較って何か意味あるのか?
どのみち記述する言語の特徴または弱点、癖の比較レベルの議論に落ちがちな稀ガス
ズット前スレでヨンだが、意味論的にはOOとPFは相容れない物らしい
しかし生々しい実装レベルではいまんとこ清濁併せ呑んで実現するし
まあいいや寝るか。ノシ

471 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 02:46:25.77 ]
多値使うアイデアはイケてたはずなのに、仕上げの文字列との結合やprintとの併用で
ズル呼ばわりされるわ、Rubyの>>377の挙動も再現できなかったしで散々だったしね。

472 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 02:53:06.66 ]
なぜかC++で挑み続ける俺。
これ以上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;
}



473 名前:466 mailto:sage [2012/04/16(月) 02:54:29.65 ]
>>471
あれはね最初に書いたnewはだめって言われて仕方なくの面はあるのよ

$scalar = 関数(関数

と明示的にscalarで主値だけを受けとるように明示するのがホントは作法なんだ。

Rubyの>>377に関しては読んでなかったから挙動の再現にそもそも着手してないよ。
rubyは文法がかなりカオスになって来ちゃって残念だね

474 名前:466 mailto:sage [2012/04/16(月) 02:59:22.51 ]
fizzbuzzgizzはいいんだどうでも。
それより前スレのpermutaion perl版はwebなど参照せず一から考えて書いて
オレなりに結構な自信作だったのに
なんの反応もなかったことの方が寂しかったな

475 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 03:19:21.92 ]
何このスレ

476 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 06:20:08.75 ]
ruby無双をしたかった奴が、もっとエレガントな解を他言語で出されて、
涙目でdisるスレです

477 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 06:53:26.91 ]
Rubyと違う解法が出る度に
必死に難癖付けてて笑ったわww

478 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 08:13:17.85 ]
頭が固くて馬鹿だから
数や文字列に状態持たせる以外の方法が
理解できないんだろう

479 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 08:32:48.03 ]
頭が固くて馬鹿だから
数や文字列に状態持たせる方法が
許容できないんだろう

480 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 08:38:53.99 ]
世の中は状態がある世界なのにねw

481 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 08:50:48.96 ]
じゃあFixnumのインスタンスに特異メソッド定義してみろRuby厨

482 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 09:44:46.42 ]
元ネタのCLのEQLスペシャライザならそういうことできたよな。

Haskellとかでコンストラクタ無しで1以外の引数をとるとコンパイル時に
型エラーになる関数って定義できたっけ?



483 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 10:00:08.87 ]
template< int n > void func(){int i="";}
template<> void func<1>(){}
・・・
func<2>();//エラー

484 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 12:34:04.90 ]
> cat FooTH.hs
{-# 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 に変えるとコンパイルエラー






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<255KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef