【激突】関数型言語 VS オブジェクト指向言語2at TECH【激突】関数型言語 VS オブジェクト指向言語2 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト281:デフォルトの名無しさん 12/04/13 16:22:11.22 >>280 objectのmethodが返す値はまたobjectだけれど、 printで評価すると判定結果文字列を返すには、 こんな書き方くらいしかないのかな…? 多値のリスト返しでやってみようと思ったけれどうまい方法が思いつかなかったぜよ 282:デフォルトの名無しさん 12/04/13 17:12:42.66 >>281 package FizzBuzzGizz; sub new { my ($c, $n) = @_; bless \"$n." } sub fizz {my $t=shift; $_=$$t; bless do { /(^\d+)/; 0 == $1 % 3 ? \"${_}Fizz": $t }} sub buzz {my $t=shift; $_=$$t; bless do { /(^\d+)/; 0 == $1 % 5 ? \"${_}Buzz": $t }} sub gizz {my $t=shift; $_=$$t; bless do { /(^\d+)/; 0 == $1 % 7 ? \"${_}Gizz": $t }} 1; package main; do { my $fbg = new FizzBuzzGizz($_); print ${$fbg->fizz->buzz->gizz} . "\n" } for qw{1 3 5 7 15 21 35 105}; 283:デフォルトの名無しさん 12/04/13 17:29:05.85 >>272 何縛りのゲームなのかわからんけど、関数合成演算子でも駄目かね? import Data.Either import Prelude hiding ((.)) (.) f g n = case concat $ rights [f n, g n] of [] -> Left n s -> Right s fizzT f s n | f n == 0 = Right s fizzT _ _ _ | otherwise = Right [] fizz = fizzT (`mod` 3) "Fizz" buzz = fizzT (`mod` 5) "Buzz" gizz = fizzT (`mod` 7) "Gizz" main = print $ fizz.buzz.gizz $ 105 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch