【激突】関数型言語 VS オブジェクト指向言語2
■ このスレッドは過去ログ倉庫に格納されています
0001営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 21:26:47.61一部には関数型言語を崇拝している人もいます
どちらが上なのか、この際はっきりさせましょう
前スレ http://toro.2ch.net/test/read.cgi/tech/1331328955/
0284デフォルトの名無しさん
2012/04/13(金) 17:30:10.61package FizzBuzzGizz;
sub new {
my ($c, $n) = @_;
bless \"$n."
}
sub comm { my ($t, $r, $s) = @_; $$t =~ /(^\d+)/;
0 == $1 % $r ? \"${_}$s": $t }
sub fizz {bless comm((shift), 3, 'Fizz')}
sub buzz {bless comm((shift), 5, 'Buzz')}
sub gizz {bless comm((shift), 7, 'Gizz')}
1;
package main;
for (qw(1 3 5 7 15 21 35 105)) {
print ${new FizzBuzzGizz($_)->fizz->buzz->gizz} . "\n"
}
0285デフォルトの名無しさん
2012/04/13(金) 17:31:15.65class String
attr_accessor :srcint
private
def f(n,s); (@srcint % n == 0) ? (self << s) : (self); end
end
class Integer
private
def f(n,s); (self % n == 0) ? (s.srcint = self; s) : (self); end
end
class Object
def fizz; f(3,'Fizz'); end
def buzz; f(5,'Buzz'); end
def gizz; f(7,'Gizz'); end
end
p [1,3,5,7,15,21,35,105].map{|n| n.fizz.buzz.gizz }
# => [1, "Fizz", "Buzz", "Gizz", "FizzBuzz", "FizzGizz", "BuzzGizz", "FizzBuzzGizz"]
p [1,3,5,7,15,21,35,105].map{|n| n.fizz.gizz.buzz }
# => [1, "Fizz", "Buzz", "Gizz", "FizzBuzz", "FizzGizz", "GizzBuzz", "FizzGizzBuzz"]
0286デフォルトの名無しさん
2012/04/13(金) 17:33:52.32package FizzBuzzGizz;
sub new {
my ($c, $n) = @_;
bless \"$n."
}
sub comm { my ($t, $r, $s) = @_;
0 == $$t % $r ? \"$${t}$s": $t }
sub fizz {bless comm((shift), 3, 'Fizz')}
sub buzz {bless comm((shift), 5, 'Buzz')}
sub gizz {bless comm((shift), 7, 'Gizz')}
1;
package main;
for (qw(1 3 5 7 15 21 35 105)) {
print ${new FizzBuzzGizz($_)->fizz->buzz->gizz} . "\n"
}
0287デフォルトの名無しさん
2012/04/13(金) 17:45:43.30package FizzBuzzGizz;
sub new { my ($c, $n) = @_;
bless \"$n." }
sub com { my ($t, $m, $s) = @_;
bless 0 == $$t % $m ? \($$t.$s): $t }
sub fizz {com(shift, 3, 'Fizz')}
sub buzz {com(shift, 5, 'Buzz')}
sub gizz {com(shift, 7, 'Gizz')}
1;
package main;
for (qw(1 3 5 7 15 21 35 105)) {
print ${new FizzBuzzGizz($_)->fizz->buzz->gizz} . "\n"
}
大差ないか…
0288デフォルトの名無しさん
2012/04/13(金) 17:54:12.600289デフォルトの名無しさん
2012/04/13(金) 17:58:22.56え?なぜ?
0290デフォルトの名無しさん
2012/04/13(金) 18:10:15.39ちゃんと書けているのは今のところRubyだけって感じか。
文字列オブジェクトにインスタンス変数(状態)を持たせられるのが強みだなぁ。
Smalltalkのはやってることが「独立した関数(メソッド)」と呼ぶにはどーよという内容だから失格。
関数型は型システムの制約でこういう仕様の関数モドキは書けないっていうことでFA?
0291デフォルトの名無しさん
2012/04/13(金) 18:22:32.06でも実際のところ、こんな書き方したくないけどね
実際にやるなら、何らかのコンテナにラップしてからmapして
それが終わったら、文字列や数値として取り出すと思う
原文がいきなり数値に対してメソッド呼んでるから、容赦なく組み込みクラスを弄ったが…
0292デフォルトの名無しさん
2012/04/13(金) 18:30:51.940293デフォルトの名無しさん
2012/04/13(金) 18:33:45.54まあクイズだからね。言語機能をどう使って無茶な要件をクリアするかのパズルみたいなもん。
0294デフォルトの名無しさん
2012/04/13(金) 18:35:01.97まずコード出せ。話はそれからだ。
0295デフォルトの名無しさん
2012/04/13(金) 18:57:18.700296デフォルトの名無しさん
2012/04/13(金) 19:00:25.490297デフォルトの名無しさん
2012/04/13(金) 19:35:12.73RubyはメソッドチェインOKなのに
関数型言語はfizz(buzz(gizz))しか認めないんだろ?
そりゃ静的型じゃ無理っつーか制限する意味が分からん
後からgizz等を追加できる拡張性あるコードを
書けないならともかく、そうでもないしな
0298デフォルトの名無しさん
2012/04/13(金) 19:40:42.95-- String "has-a" Integer
data HasA = HasA String Integer
instance Show HasA where show (HasA s n) = if s == "" then show n else show s
fizz (HasA s n) = HasA (s ++ if mod n 3 == 0 then "Fizz" else "") n
buzz (HasA s n) = HasA (s ++ if mod n 5 == 0 then "Buzz" else "") n
gizz (HasA s n) = HasA (s ++ if mod n 7 == 0 then "Gizz" else "") n
main = print $ map (gizz . buzz . fizz . HasA "") [1,3,5,7,15,21,35,105]
0299デフォルトの名無しさん
2012/04/13(金) 19:47:44.31似たようなコード書いてたら先に張られてた
個人的には hasA = HasA "" を定義しておくのが好み
それはともかく、.演算子使ってるからケチ付けられると思うぜ多分w
0300デフォルトの名無しさん
2012/04/13(金) 19:56:22.620301デフォルトの名無しさん
2012/04/13(金) 20:00:44.980302デフォルトの名無しさん
2012/04/13(金) 20:30:30.61var def_fizz = function (name, m) {
var fun = function () {
var tp = typeof this.valueOf();
var n = (tp === 'number') ? this : this.fizzbuzzval
if (n % m === 0) {
var s = name.charAt(0).toUpperCase() + name.slice(1);
if (tp === 'string') {
s = this + s;
}
s = new String(s);
s.fizzbuzzval = n;
return s;
} else {
return this;
}
} ;
Number.prototype[name] = fun;
String.prototype[name] = fun;
} ;
def_fizz('fizz', 3);
def_fizz('buzz', 5);
for (var i = 1; i <= 30; ++i) {
document.writeln(i.fizz().buzz());
}
0303デフォルトの名無しさん
2012/04/13(金) 20:36:17.98http://toro.2ch.net/test/read.cgi/tech/1313183984/190
‥‥ごめんなさい。
0304デフォルトの名無しさん
2012/04/13(金) 22:09:50.27http://toro.2ch.net/test/read.cgi/tech/1313183984/191
0305デフォルトの名無しさん
2012/04/13(金) 22:25:54.85ΟΓΖ
基本データ型のリテラル単独でクラスのインスタンスになり得ない言語である以上、new しないことにははじまらない‥‥。
0307デフォルトの名無しさん
2012/04/13(金) 22:42:51.66newを隠蔽すればいいだけ
0308デフォルトの名無しさん
2012/04/13(金) 23:24:10.63組み込みクラスにメソッドを追加できない言語では
普通に関数で実装すればいいと思うよ。gizz( buzz( fizz( n ) ) )みたいに。
0309デフォルトの名無しさん
2012/04/14(土) 00:02:15.95それが一番シンプルだと思う。
速度も早いだろうしね。
0310デフォルトの名無しさん
2012/04/14(土) 00:25:40.80それがね、gizz() buzz() fizz()の三関数をどれも特別扱いせず、
いずれの戻り値もいずれの引数となり得る柔軟さを備える仕様にし、かつ
print gizz( buzz( fizz( n ) ) )で
1
"Fizz"
"Buzz"
"Gizz"
"FizzBuzz"
"FizzGizz"
"BuzzGizz"
"FizzBuzzGizz"
という出力を得るのは、以外とマンドくさいのよ。
gizz()だけは文字列を返すなどそれぞれの関数のIFを個別に制約すれば子供の使いなみに楽。
つかこういう要求仕様でnewは使うなとか制限もうけること自体が仕様策定の段階でミスなんだろ。
0311デフォルトの名無しさん
2012/04/14(土) 00:32:11.230312デフォルトの名無しさん
2012/04/14(土) 00:51:08.06> .演算子使ってるからケチ付けられると思うぜ多分w
志村! HasA! HasA!
0313デフォルトの名無しさん
2012/04/14(土) 01:11:55.03そしたら、こうだな。
sub com {
my ($mod, $zz, $num, $str) = @_;
$str .= $zz
if 0 == $num % $mod;
$str ? ($num, $str) : $num
}
sub fizz {com(3, 'Fizz', @_)}
sub buzz {com(5, 'Buzz', @_)}
sub gizz {com(7, 'Gizz', @_)}
print "$_: " . gizz(buzz(fizz($_))) . "\n"
for qw(1 3 5 7 15 21 35 105);
実効例:
$ perl p_FizzBuzzGizzAret.pl
1: 1
3: Fizz
5: Buzz
7: Gizz
15: FizzBuzz
21: FizzGizz
35: BuzzGizz
105: FizzBuzzGizz
perlのscalar context/list contextを巧みに?利用してるんで、
それを知らない人には分かりにくいかもしれず、申し訳ないんだか…
※もうちょっと考えて出題して欲しいな、言っちゃ悪いがこういった仕様策定ミスをcodeでカバーすることに何の意味が…
0314デフォルトの名無しさん
2012/04/14(土) 01:16:27.94関数の引数にフラグを一個追加したもの
つまり、
foo(value, false) ・・・ スカラ呼び出し
foo(value, true) ・・・ リスト呼び出し
foo(value, flag)関数の説明
flagがfalseの場合、スカラタイプの値を返します。
flagがturの場合、リストタイプの値を返します。
まあ、こんなもん。
0315デフォルトの名無しさん
2012/04/14(土) 01:24:45.45志村、ここ、ここ。
my ($mod, $zz, $num, $str) = @_;
↑
$str ? ($num, $str) : $num
sub xxx {com(3, 'Fizz', @_)}
↑
print "$_: " . gizz(buzz(fizz($_))) . "\n"
と
print "$_: " , gizz(buzz(fizz($_))) , "\n"
の動作の違い
なんか、中途半端に知っている人が出てきたな…
寝るか…。ノシ
0316デフォルトの名無しさん
2012/04/14(土) 01:45:08.21sub com {
my ($mod, $zz, $num, $str) = @_;
$str .= $zz if 0 == $num % $mod;
$str ? ($num, $str) : $num
}
sub fizz {com(3, 'Fizz', @_)}
sub buzz {com(5, 'Buzz', @_)}
sub gizz {com(7, 'Gizz', @_)}
0317デフォルトの名無しさん
2012/04/14(土) 02:13:05.47print が ($num, $str) の $num を都合よく読み捨ててくれるのは何故?
print fizz(3) の出力は、3Fizz になりそうに思うんだが。よーわからん。
0318デフォルトの名無しさん
2012/04/14(土) 02:16:18.43そゆ話は質問スレ
ttp://toro.2ch.net/test/read.cgi/tech/1330666216/
0319デフォルトの名無しさん
2012/04/14(土) 02:40:58.54結局 Perl のはこのクイズの要求には到達できてなくて(関数単体では完結できていない)、
出力時の文字列との結合でごまかしているってカラクリ。map とかすればズルが露呈する。
0320デフォルトの名無しさん
2012/04/14(土) 02:52:04.92ズルはしてないよ。返戻contextの何番目を数値、何番目を文字列とし後続を省略時はundefとなる
利用しているだけでこういうやり方は使うときは使う。
でも、こういうズレたクイズはもういいよ。
関数型言語、オブジェクト指向言語の比較としてこの題材がどういう意味を持っているの?
これ単に>>297とか排除して特定の機能を持った言語を有利に導きたかっただったんじゃない?
0321デフォルトの名無しさん
2012/04/14(土) 03:04:43.03use 5.12.0;
sub com {
my ($mod, $zz, $num, $str) = @_;
$str .= $zz ;if 0 == $num % $mod;
$str ? ($num, $str) : $num
}
sub fizz {com(3, 'Fizz', @_)}
sub buzz {com(5, 'Buzz', @_)}
sub gizz {com(7, 'Gizz', @_)}
map{say "$_: " . gizz(buzz(fizz($_)))} qw(1 3 5 7 15 21 35 105);
0322デフォルトの名無しさん
2012/04/14(土) 03:07:01.05しくったorz、ifの前の;が余計だった。
use 5.12.0;
sub com {
my ($mod, $zz, $num, $str) = @_;
$str .= $zz if 0 == $num % $mod;
$str ? ($num, $str) : $num
}
sub fizz {com(3, 'Fizz', @_)}
sub buzz {com(5, 'Buzz', @_)}
sub gizz {com(7, 'Gizz', @_)}
map {say "$_: " . gizz(buzz(fizz($_)))} qw(1 3 5 7 15 21 35 105);
0323デフォルトの名無しさん
2012/04/14(土) 03:07:30.38print "$_: " , gizz(buzz(fizz($_))) , "\n"
だと 3: 3Fizz とかなる。
0324デフォルトの名無しさん
2012/04/14(土) 03:14:00.28「gizz,buzz,fizzの三関数をscalar contexで評価すると判定文字列が得られ
list contextで評価すると数値と判定文字列のリストが得られる関数である
ただし数値が3,5,7の倍数でない場合は返戻リストの第二要素の判定文字列は
undef(文字列として評価すると空文字列)」
という仕様の関数として書いている。
のだよ。code嫁よ。
0325デフォルトの名無しさん
2012/04/14(土) 03:17:44.46メソッドチェーンっていうのは関数の入れ子の呼び出し gizz(buzz(fizz(n))) と実質同じだろ?
組み込みの関数合成関数の使用を禁じている訳ではないのだから、要求通り関数で完結できてさえいれば
それらを合成しようがぜんぜん問題ないし、型システムのモデルが足を引っ張っている以外、
なにが不利なのかさっぱり分からん。Perl のズル同様で、関数で完結できてないくせに
合成関数のオーバーロードでつじつまを合わせようとするからなんだかなーとなる。
0326デフォルトの名無しさん
2012/04/14(土) 03:19:31.46"$_: " . ってのを無しでやっみてくんない?
0327デフォルトの名無しさん
2012/04/14(土) 03:21:01.17ずれてないよ。
値と評価文字列をlistdで返戻する。
scalarで評価するかlistで評価するかで
返戻を両方参照するか、そのうちの判定文字列だけを印字出力などのために使うか
選択しているだけだよ。
0328デフォルトの名無しさん
2012/04/14(土) 03:25:52.86sub com {
my ($mod, $zz, $num, $str) = @_;
$str .= $zz if 0 == $num % $mod;
$str ? ($num, $str) : $num
}
sub fizz {com(3, 'Fizz', @_)}
sub buzz {com(5, 'Buzz', @_)}
sub gizz {com(7, 'Gizz', @_)}
map {print gizz(buzz(fizz($_))) . "n"} qw(1 3 5 7 15 21 35 105);
0329デフォルトの名無しさん
2012/04/14(土) 03:27:01.290330デフォルトの名無しさん
2012/04/14(土) 03:27:10.20他の言語の立場がないな
0331デフォルトの名無しさん
2012/04/14(土) 03:27:54.81しくった。
"n" → "\n"
0332デフォルトの名無しさん
2012/04/14(土) 03:38:24.580333デフォルトの名無しさん
2012/04/14(土) 03:41:23.690334デフォルトの名無しさん
2012/04/14(土) 03:43:40.920335デフォルトの名無しさん
2012/04/14(土) 03:43:48.91そんなの認めるんなら、C++だと型キャストのオーバーロードがあるから楽勝じゃねーか。
operator const char*();
operator const int();
こんなんすりゃ良いんだろ?
ちなみに当たり前にオーバーロードがあるから、Fizz(3)とFizz(FizzBuzzObj)との区別もつくし。
C++ですら出来るんなら、この話もう終わりになっちまうじゃねーか。
0336デフォルトの名無しさん
2012/04/14(土) 03:45:12.07むしろrubyやJavaScriptがチートだろw
リフレクション使いまくってるしw
0337デフォルトの名無しさん
2012/04/14(土) 03:46:02.04書け書け。だれもC++をけなしてないぞw
後出しじゃんは、なしね。
0338デフォルトの名無しさん
2012/04/14(土) 03:59:30.30すでに >>261 に書いた。
0339デフォルトの名無しさん
2012/04/14(土) 04:40:06.83Haskellの>>283もありだよな
ていうか、>>325がズルと言ってるの理由がさっぱり分からん
演算子オーバーロードのある言語でそれ使って何が悪いの?
別にmapもできるぜ?
main = print $ map (fizz.buzz.gizz) [1,3,5,7,15,21,35,105]
0340339
2012/04/14(土) 05:12:10.70>>312の言う通りHasAも隠蔽すれば良いんだな?
data HasA = HasA String Integer deriving Eq
instance Show HasA where
show (HasA s n) = if s == "" then show n else s
instance Num HasA where
(+) (HasA r m) (HasA s n) = HasA (r ++ s) (m + n)
(-) (HasA r m) (HasA s n) = HasA "" (m - n)
(*) (HasA r m) (HasA s n) = HasA "" (m * n)
negate (HasA s n) = HasA s (-n)
abs (HasA s n) = HasA s (abs n)
fromInteger n = HasA "" n
signum (HasA s n) = HasA s (signum n)
fizz (HasA s n) = HasA (s ++ if mod n 3 == 0 then "Fizz" else "") n
buzz (HasA s n) = HasA (s ++ if mod n 5 == 0 then "Buzz" else "") n
gizz (HasA s n) = HasA (s ++ if mod n 7 == 0 then "Gizz" else "") n
main = print $ map (gizz . buzz . fizz) [1,3,5,7,15,21,35,105]
0341デフォルトの名無しさん
2012/04/14(土) 05:12:11.99let threadLocal = new System.Threading.ThreadLocal<_>()
let makeFizzBuzz name condition (x : obj) =
match x with
| :? int as number ->
threadLocal.Value <- number
if condition number then box name else box number
| :? string as names ->
box (if condition threadLocal.Value then names + name else names)
| _ -> failwith "ロジックエラー"
let fizz = makeFizzBuzz "Fizz" (fun x -> x % 3 = 0)
let buzz = makeFizzBuzz "Buzz" (fun x -> x % 5 = 0)
let gizz = makeFizzBuzz "Gizz" (fun x -> x % 7 = 0)
> [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"]
0342デフォルトの名無しさん
2012/04/14(土) 05:26:59.930343デフォルトの名無しさん
2012/04/14(土) 05:45:13.46Rubyじゃこんなの書けないだろ的なのを
スレタイの趣旨にも沿ってる
0344デフォルトの名無しさん
2012/04/14(土) 05:58:16.50排除しておかないと比較にも議論にもなんねーんだよ
0345デフォルトの名無しさん
2012/04/14(土) 05:59:25.03fizzbuzzのscheme多値版ね。マクロ使っちゃっちゃったけど。
(define-syntax fizz (syntax-rules () ((_ arg) (receive it arg (fuzzbuzz it "Fizz" 3)))))
(define-syntax buzz (syntax-rules () ((_ arg) (receive it arg (fuzzbuzz it "Buzz" 5)))))
(define fuzzbuzz
(lambda (arg name m)
(let* ((is-num (null? (cdr arg))) (s (if is-num "" (car arg))) (a (if is-num (car arg) (cadr arg))))
(if (= 0 (mod a m)) (values (string-append s name) a) (if is-num a (values s a))))))
(define main (lambda (_) (letrec ((loop (lambda (n) (if (<= n 30)
(begin (print (buzz (fizz n))) (loop (+ n 1))))))) (loop 1))))
0346デフォルトの名無しさん
2012/04/14(土) 06:40:24.02末尾再帰最適化の無い実装じゃスタックオーバーフロー
0347デフォルトの名無しさん
2012/04/14(土) 06:51:51.42組み込みクラスを弄るのはOK
組み込み演算子を弄るのはNG
何故?
0348デフォルトの名無しさん
2012/04/14(土) 10:00:34.731.プログラミングを学ぶことが目的
2.作りたいものがあって、その手段としてプログラミングが必要
で違う。
1なら関数型言語は良い選択
2ならオブジェクト指向言語やLLの方が早い
こういうスレの喧嘩は
1の人の多くは、プログラミングを座学として勉強しただけで実は何も作れない
2の人の多くは、作りたいものが動けばいいというだけでプログラミングに対する向上心がない
という現実を反映しているだけ。
0349デフォルトの名無しさん
2012/04/14(土) 10:10:56.563向上心のカタマリのオレ様にケンカうってんのかーーー
カワネーゾ
0350デフォルトの名無しさん
2012/04/14(土) 10:28:07.46いまは人工的に作ったお題の信用がなくなってるんだよ
そこでまた中立でない人間がお題を出しても、紙屑のように無視されるんじゃないの
0351デフォルトの名無しさん
2012/04/14(土) 10:47:19.60QZってこんなスレまで見てるんだな
0352デフォルトの名無しさん
2012/04/14(土) 11:03:19.87>>290や>>325のような上から目線で変なルール押し付けてくるウザいヤツが
居なければ、言語ごとのアプローチの違いが見れて
遊びとしては面白いんだがなぁ
しかもウザいのに限って口だけでプログラム書けないんだ
あ、もしかして>>290や>>325がこのスレに書いたコード在る?だったら謝るけど
0353デフォルトの名無しさん
2012/04/14(土) 11:31:51.96関数合成演算子(あるいは関数)を定義が必須な場合でも、関数 fizz だけ用いた
fizz 1 や fizz 3 はちゃんと組み込み型の数値や文字列である 1 や "Fizz" を返せるのでしょうか?
これって一応要件だと思うんですよね。C++ の回答についても同様です。
Ruby や JS 、Smalltalk の回答はすべてこれが出来ているみたいなんだけど。
0354デフォルトの名無しさん
2012/04/14(土) 11:49:35.83FizzBuzzオブジェクトから文字列型と数値型へのキャストをそれぞれ用意すればよし。
0355デフォルトの名無しさん
2012/04/14(土) 12:28:02.63今でも十分おもしろいと思うよ。せっそうのない動的言語(OOといえばOOだけど、
ストラウストラップの抽象データ型OOでなくて、ケイの動的OO寄りの考え方)では
可能だけど、理論的にきっちりした関数型言語では実現不可な境界がはっきりしてきてて。
出来ないと分かっていることを出来ないときちんと理由付きで示せる勇気も見れるし。
他方で、動的言語でもすんなりできるとは限らないから各言語での工夫の仕方も興味深い。
0356デフォルトの名無しさん
2012/04/14(土) 12:29:01.02>>341だけど、関数fizz, buzz, gizzをそれぞれ単独で使用した場合をテスト。
> [fizz; buzz; gizz] |> List.map(fun f -> [1; 3; 5; 7] |> List.map f);;
val it : obj list list =
[[1; "Fizz"; 5; 7]; [1; 3; "Buzz"; 7]; [1; 3; 5; "Gizz"]]
0357デフォルトの名無しさん
2012/04/14(土) 13:02:32.74F#以外の関数型言語の回答で、ですね!
わざわざの検証、いたみいります。
0358デフォルトの名無しさん
2012/04/14(土) 14:04:34.170359デフォルトの名無しさん
2012/04/14(土) 14:10:22.100360デフォルトの名無しさん
2012/04/14(土) 14:42:43.34>>340だけどテストしてみた
*Main> [map f [1,3,5,7] | f <- [fizz, buzz, gizz]]
[[1,Fizz,5,7],[1,3,Buzz,7],[1,3,5,Gizz]]
0361デフォルトの名無しさん
2012/04/14(土) 14:50:32.97ついでに>>283もテスト
正しく動かなかったので修正
fizzT f s = (\x -> Left x) . fizzT'
where
fizzT' n | f n == 0 = Right s
fizzT' _ | otherwise = Right []
これで >>360と同じコードが動いた
0362361
2012/04/14(土) 15:07:31.88ちゃんとコンパイル時に型エラーになったこと
Haskellの型システムやるじゃん、みたいな
0363デフォルトの名無しさん
2012/04/14(土) 15:54:35.13map するコードを [1, 2, "Fizz"] に対して同じことをするコードとまったく同様に書いて
問題なく実行できるかどうか試しみててよ! クイズの要件をみたしていればできるよね!
もちろんいうまでもなく追加定義や修正は無しだよ。Ruby や F# のはもちろんできるよ!
0364340
2012/04/14(土) 16:01:06.17fizz (HasA s n) = HasA (s ++ if mod n 3 == 0 then "Fizz" else "") (10 * n)
0366デフォルトの名無しさん
2012/04/14(土) 16:06:40.84じゃあ、組み込みクラスをグローバルに汚染するのも禁止しようぜ
classbox等で一部に制限できるならアリ
0367デフォルトの名無しさん
2012/04/14(土) 16:07:57.17あまつさえ勝手な解釈で適当なコード書いてドヤ顔なの? バカなの? 死ぬの?
0368デフォルトの名無しさん
2012/04/14(土) 16:11:06.66誰もお前の頭の中なんて知らないし興味ないんだから
言わないと分からないっつーの
ここはお前の要求仕様を満たす場じゃねーし
馬鹿はお前
あと、まさかコードも書かずに議論参加してたとか無いよな
書いたコードのレス示せよ
俺は>>340書いたぞ
0369デフォルトの名無しさん
2012/04/14(土) 16:16:29.12`(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)
0370デフォルトの名無しさん
2012/04/14(土) 16:21:51.37> ドヤ顔なの?バカなの? 死ぬの?
w
いまどき、こんな台詞をわざわざ書くやつがいるんだww
0371デフォルトの名無しさん
2012/04/14(土) 16:23:54.35言語や自分の発想の限界とかクリティカルなところはなんとか避けようとしているんだよ。
仕様を取り違えてるよってやんわりチェック方法をしめすと、
ルールを増やすな、後出しだ、仕様が欠陥だってなんやかやクレームつけて
相手が根負けして要求仕様のほうが変わるのを粘り強くじっと待つ戦略なんだ。
ある意味、賢いよ。
0372デフォルトの名無しさん
2012/04/14(土) 16:26:54.360373デフォルトの名無しさん
2012/04/14(土) 16:29:32.45> map するコードを [1, 2, "Fizz"] に対して同じことをするコードとまったく同様に書いて
Haskellは静的型付けだから数と文字列を同じリストには入れられないんだ
そんなことも知らずに議論してたんじゃないよね?
0374デフォルトの名無しさん
2012/04/14(土) 16:32:03.01>>368
> あと、まさかコードも書かずに議論参加してたとか無いよな
> 書いたコードのレス示せよ
って書いてるのに示さないってことは、まさか本当にコード書いてなかったの?
0375デフォルトの名無しさん
2012/04/14(土) 16:33:37.460376デフォルトの名無しさん
2012/04/14(土) 16:44:57.11最大限エスパーして書いてみた
>>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]
0377デフォルトの名無しさん
2012/04/14(土) 17:03:29.49=> [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"]
0378デフォルトの名無しさん
2012/04/14(土) 17:45:03.77「Javaドカタはコード書けない」説はまだ有効
0379デフォルトの名無しさん
2012/04/14(土) 17:57:01.510380デフォルトの名無しさん
2012/04/14(土) 18:26:18.940381デフォルトの名無しさん
2012/04/14(土) 18:49:30.59どんな言語使いから見ても口だけ野郎は最底辺のゴミだぞwww
0382デフォルトの名無しさん
2012/04/14(土) 18:52:07.050383デフォルトの名無しさん
2012/04/14(土) 19:54:38.00運が良ければ日本語で書いた戯れ言が
実行されるかもしれないぞ
■ このスレッドは過去ログ倉庫に格納されています