1 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 01:34:05 ] C/C++>>>>(越えられない壁)>>>Haskell
417 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 00:29:46 ] >>416 IOは上から順に実行されるのが原則(getContentsは例外)で、 評価と違って「値の要求があって初めて」実行したりはしない。 だから r <- mapM hoge $ lines cs とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。 これは、そうでないと動作の順序を予測するのが難しくなって不便だからだ。 どうしてもその挙動が必要なら、unsafeInterleaveIOという関数を使えば実現できる。 ちなみにそのコードは行ごとにputStrしているだけで、 mapM_ putStrLn $ lines cs と書いているのとかわらない。 何がしたいかをもう少し詳しく教えてくれたら、もうちょっとまともな助言ができると思う。
418 名前:413 mailto:sage [2006/12/04(月) 01:51:46 ] >>417 >評価と違って「値の要求があって初めて」実行したりはしない。 >だから >r <- mapM hoge $ lines cs >とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。 あぁ、なるほど。なんでうまくいかなかったのか、やっとすっきりした。 結果が必要かどうか関係ないのね・・・。 自分が作りたかったのは、ハッシュテーブルに入力されたものを入れて、そのときのハッシュテーブルの中身を返すという関数。 ↓こんな感じなのを作ったのだが、入力が終わらないと処理が先に進まなくて困ってる次第。 import Data.HashTable as HashTable main = do cs <- getContents hash <- new (==) hashString r <- mapM (hoge hash) $ lines cs putStr $ unlines r hoge :: (HashTable String Int) -> String -> IO String hoge _ [] = return [] hoge hash key = do insert hash key 1 h <- toList hash return $ show h
419 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 03:03:58 ] >>418 それと同じことをするだけなら、mapMでハッシュ表の操作と同時に出力もすれば良い。 mapM_ (\line -> hoge hash line >>= putStrLn) $ line cs 元のコードのように、値を生成する部分(mapM hoge)と利用する部分(putStrLn)をプログラム上で分離したい場合は 多少の工夫がいる。例えば、入出力をしながらa型の値を生み出すジェネレータを次のように定義して、 newtype Generator a = Gen (IO (Maybe (a, Generator a))) mapMで[String]を生み出す代わりにGenerator Stringとして記述するとか。 ただし、標準のリストと違って操作関数が用意されていないので面倒ではある。
420 名前:413 mailto:sage [2006/12/04(月) 14:08:07 ] >>419 そうか、なるほど、mapM_の中で完結させれば良かったのか・・・。 mapMの返り値を受け取って処理しないといけない、って思いこんでた。 なんて頭が固いんだ、俺はorz ジェネレータを使って云々かんぬんってのはまだ理解できないので、もっと勉強してみるよ。 ほんとにありがと!
421 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 11:29:31 ] 417を読むまで、doの中に列挙されているものは上から下へ遅延評価されるものだと思ってたorz getContentsは例外なのね・・・。GHCのソースを見たらunsafeInterleaveIOを使ってたよ。
422 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 17:55:53 ] 本スレを見たあとこっちに来るとなんかほっとする
423 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:16:27 ] んじゃ、そろそろ圏論勉強会をここではじめるか
424 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:36:06 ] AAで頼むわ
425 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:42:03 ] >>423 仕切ってくれるの? ちょっと期待
426 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 19:18:52 ] AAじゃなくてもたのむわ この間友達に訊かれて、Haskell使いでないけど興味持った。
427 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 20:28:19 ] 2ちゃんっぽい解説をわくてかしながら待ってますよ
428 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 21:32:19 ] おまいら、なんで本スレに行かないんだよw
429 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:00:51 ] だって本スレ2chのノリじゃねーんだもん
430 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:12:22 ] あそこは2chじゃねーよなw
431 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:21:23 ] あそこはプログラミングする気が無い奴らに犯されてしまった 今からここが本スレになります
432 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 15:01:43 ] 早く家に帰ってHaskellを犯りたい(*´д`)
433 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 18:34:26 ] www.haskell.org/ghc/docs/latest/html/users_guide/primitives.html ここ見てUnboxed typeを使ってみようとしたんだが、Top-level bindings for unlifted types aren't allowed と出てコンパイルできん。 まあ、使い方を全然理解してないせいだと思うのだが(top-level bindingsとかunliftの意味もわからんし)、どこか解説ページないかな。 つか、あのページの説明だけでみんなは理解できるのだろうか(・∀・;)
434 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:00:25 ] >どこか解説ページないかな。 なさそう。 >top-level bindings モジュールレベルの束縛のこと。 module Foo where f x = let y = x + 1 in y * 2 なら、fはトップレベルの束縛で、yはそうではない。 >unlifted types unboxed typesとほとんど同義だと思う。 というか本スレに書けyo
435 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:02:43 ] 見てみたら>>433 のリンク先にlifted typeの説明あるじゃん。 >Primitive types are always unlifted; that is, a value of a primitive type cannot be bottom.
436 名前:433 mailto:sage [2006/12/11(月) 21:43:56 ] >>434 詳しい説明をありがとう。 >>top-level bindings >モジュールレベルの束縛のこと。 さんくす!さっきのエラーは出なくなった! 今度は#がはずせないという問題にぶち当たったけど、こっちはI#の存在に気づいて解決した。 >というか本スレに書けyo あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。 >>435 >見てみたら>>433 のリンク先にlifted typeの説明あるじゃん。 すまん。読んでたけどそっちも全く意味わからんかった。
437 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 22:57:29 ] >>436 >すまん。読んでたけどそっちも全く意味わからんかった。 ボトムっていうのは、停止しない/エラーになる計算の結果を表す概念上の値のこと。 (この辺厳密じゃないかも。間違ってたら分かってる人が突っ込んでくれることを期待) 例えば b :: Int b = b と定義したとする。bを評価しようとすると止まらないから、bにはふつうの意味での値はない。しかし、 f :: Int -> Int f x = 4 という関数があったとして、f bは4を返す。つまりfは問題なく呼ばれている。 では呼ばれたときの引数は何か、というのが問題になるが、これを「fはボトムを引数にして呼ばれた」 ということにする。つまり、bは評価しても止まらないけど、ボトムという仮想的な値を持っていることにする。 こうすると議論が単純になる。ちなみに、こう考えると、BoolにはTrue、False、ボトムの三値があることに なるし、32ビットマシン上のGHCではIntに2^32+1個の値があることになる。 一方、実装を考えると、fに渡されるのは未評価のbで、これの実体はクロージャ、 あるいは関数ポインタ。bを評価することは、この関数ポインタを呼び出すことに相当する。 この場合はbを評価しようとすると止まらないわけだけど、こういう挙動がありえるためにはそもそも bが関数ポインタでなきゃならない。 unboxed typeはただの計算器上の整数で、関数ポインタを隠し持つ余地はない。 Int#は厳密に2^32個の値しかとれない。つまり、ボトムになれない。よってunlifted type。 >あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。 たまたま圏論の話題で盛り上がっていただけで、気にすることはないと思う。 もともとそういうスレじゃないし。むしろ俺にも分かる話題は歓迎w
438 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 23:39:10 ] haskellはプログラムを書く以外にも楽しみ方がある言語だから、棲み分けが起きてもいいんじゃないかな。次スレはちゃんとしたタイトルにしようぜ
439 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 23:44:58 ] たとえ住みわけが必要だとしても、板の趣旨からして、 本スレはプログラムの話題、 理論的な話は情報学板、のほうがいいんじゃないだろうか。
440 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 15:37:04 ] モナドから値を取り出す関数ってないんでしょうか? hoge :: m a -> a みたいな.
441 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 15:53:12 ] >>440 個々のモナドごとにある。 head :: [a] -> a fromJust :: Maybe a -> a fromMaybe :: a -> Maybe a -> a evalState :: State s a -> s -> a runST :: (forall s. ST s a) -> a unsafePerformIO :: IO a -> a -- 副作用があるので取扱い注意 ちなみにIOモナドだけは値を取り出す必要がない。 取り出さずに全部まとめてそれにmainを束縛すれば良いので。
442 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 20:07:25 ] >>440 >>=関数を使ってください
443 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 21:50:17 ] 計算の途中でIOがつくと、その後ずっとついて回るからなんか気持ち悪い
444 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 22:35:08 ] >>443 それによって参照透明性を保ってるんじゃないの? 詳しい人教えて!
445 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 16:00:42 ] インストールに7時間かかりました。なにこの敷居の高さ
446 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 18:03:20 ] >>4457 時間もあきらめずにインストールした喪前が大好きだよ!
447 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 22:40:42 ] 敷居が高いけど、なれてくるとかなり楽しい。 ひょっとして、haskellはツンデレ美少女なんではなかろうか。 haskell「ごめんね素直じゃなくて」 俺「いや、しょうがないって」 haskell「・・・。お兄ちゃん、IOモナドの仕組みが知りたい、って言ってたよね」 俺「ん? まーな」 haskell「でも、そのためには私の中身を見ないとだめだよね・・・」 俺「い、いや、無理しなくていいよ」 haskell「・・・。見てもいいよ」 俺「え?」 haskell「見てもいいよ! お兄ちゃんだったらいいよ!」
448 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 23:12:10 ] ↓Haskell Brooks Curryの肖像
449 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 02:44:08 ] www.haskell.org/bio.html ( ・∀・) <呼んだ?
450 名前:デフォルトの名無しさん mailto:dage [2006/12/14(木) 12:04:41 ] 今日はUnsafe IOの日だから中に出しちゃだめー!!!
451 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 17:34:55 ] >>443 データ構造書くのはIOを入れずにやれという暗黙のメッセージだと思う プログラムのしくみ本体とIOの部分を分けるということ その方が実際動作が速いみたいだし
452 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 21:30:35 ] もう、中に出すからforkIOしちゃったじゃないo(*`ε´*)o
453 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 21:49:49 ] HashTableがIOを返すのがにんともかんとも・・・。
454 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 20:27:21 ] 本スレは活気があっていいなぁ・・・
455 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 23:32:22 ] また俺がAA書いてやろうか?
456 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 10:19:52 ] haskell中級者になったクマきぼん
457 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 23:04:25 ] >>456 俺が初心者な以上、それは無理ってもんだ
458 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 00:06:46 ] 今でも遅延ストリーム萌な人いませんか?
459 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 01:35:34 ] みなさんハスケルのどこが萌えですか。 僕は似たような記号を多用するその文体のとっつきにくさに萌えです。
460 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 01:42:02 ] やっぱ>>447 じゃね?
461 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 03:06:45 ] 俺はモナドという不思議な雰囲気を持ったツンデレ美少女なところに萌えてる。 haskellたんを知ってから仕事に全く集中できなくなってしまったよ・・・
462 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 06:46:57 ] あの、質問しても良いです? 「ふつうのHaskellプログラミング」からなんですが、 length [""] -> 1 length [] -> 0 の""というのは文字が一文字も無い文字列を表しているのでしょうか? もう一つ。 a b c みたいに一行ずつ保存されているファイルは、エディタからはそうみえるだけで 実際には"a\nb\nc\c"みたいに保存されているのでしょうか? そうじゃないとlines関数でリストに出来ないですもんね?
463 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 17:38:31 ] >の""というのは文字が一文字も無い文字列を表しているのでしょうか? その通り。 >実際には"a\nb\nc\c"みたいに保存されているのでしょうか? その通り。
464 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 16:06:05 ] >>463 回答有り難うございます!
465 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 07:23:21 ] こういう関数をHaskellで書くとしたら どう書くのがベターでしょうか? # Rubyですが def hoge(ary) ary.each_index do |i| j = rand(i+1) ary[i], ary[j] = ary[j], ary[i] end end
466 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:09:05 ] >>465 こんな感じになった。やたらと面倒だったので改善案募集。 {-# OPTIONS_GHC -fglawgow-exts #-} module Test where import System.Random import Data.Array.IArray import Data.Array.ST import Control.Monad.ST hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen) hoge ia gi = runST act where act :: forall s. ST s (a i e, StdGen) act = do ma <- thaw ia let _ = ma :: STArray s i e g' <- shuffle ma gi first ra <- unsafeFreeze ma return (ra, g') (first, last) = bounds ia shuffle a g i = case ran of [] -> return g _:next:_ -> do let (j, g') = randomR (i, last) g x <- readArray a i y <- readArray a j writeArray a i y writeArray a j x shuffle a g' next where ran = range (i, last)
467 名前:466 mailto:sage [2007/01/11(木) 23:19:28 ] まちがってた。 {-# OPTIONS_GHC -fglasgow-exts #-} module Test where import System.Random import Data.Array.IArray import Data.Array.ST import Control.Monad.ST hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen) hoge ia gi = runST act where act :: forall s. ST s (a i e, StdGen) act = do ma <- thaw ia let _ = ma :: STArray s i e g' <- shuffle ma gi (range bo) ra <- unsafeFreeze ma return (ra, g') bo@(_, last) = bounds ia shuffle a g [] = return g shuffle a g (i:is) = do let (j, g') = randomR (i, last) g x <- readArray a i y <- readArray a j writeArray a i y writeArray a j x shuffle a g' is
468 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 17:10:31 ] >>465 >>467 の人のようにこういう操作はArrayの方が得意だけど無理矢理やってみた 手抜きして右からまわしてる import Random -- main = print [1,2,3] >> hogeIO [1,2,3] >>= print hogeIO :: [a] -> IO [a] hogeIO xs = getStdRandom (hoge xs) hoge :: (RandomGen g) => [a] -> g -> ([a], g) hoge xs g = foldr iter ([],g) xs where iter x (xs,g) = (x':xs', g') where ((x', _:xs'), g') = replaceR x (x:xs) g replaceR :: (RandomGen g) => a -> [a] -> g -> ((a, [a]), g) replaceR x xs g = (replace i x xs, g') where (i,g') = randomR (0, length xs - 1) g replace :: Int -> a -> [a] -> (a,[a]) replace n x xs = (z, ys ++ x:zs) where (ys, z:zs) = splitAt n xs
469 名前:468 mailto:sage [2007/01/13(土) 21:04:49 ] Stateで書き換えてみたけど相変わらず長い (replaceやmainの定義は同じ) import Control.Monad.State type Rand a = State StdGen a hogeIO :: [a] -> IO [a] hogeIO xs = do g <- newStdGen return $ evalState (hoge xs) g hoge :: [a] -> Rand [a] hoge xs = foldr ((=<<).iter) (return []) xs where iter x xs = do (x', _:xs') <- replaceR x (x:xs) return (x':xs') replaceR :: a -> [a] -> Rand (a,[a]) replaceR x xs = do i <- State $ randomR (0, length xs - 1) return $ replace i x xs
470 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:20:57 ] runSTとかunsafeFreezeとかさっぱりわからん。 なんかくやしい。
471 名前:デフォルトの名無しさん [2007/02/14(水) 00:17:05 ] 良スレ 保守
472 名前:380 mailto:sage [2007/02/14(水) 23:30:00 ] 【第一部】 AAでHaskellのお勉強(超初心者用) >>380-410 【第二部】 AAで圏論のお勉強(入門編) Coming soon!
473 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:00:34 ] ,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;; {;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; ヾ;;;ハ ノ .::!lリ;;r゙ 圏論は難しい・・・ `Z;i 〈.,_..,. ノ;;;;;;;;> ,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f そんなふうに考えていた時期が ~''戈ヽ `二´ r'´:::. `! 俺にもありました
474 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:01:18 ] / .\ / .\ \ / \ / \ ___________ . / \ ./ \ / | \/ \/...| | | | | | | | | .._ |_| |_|_.. | | さあ‥ 逝こうか‥‥ | | | | | | | | | | | | | | | |/ ..\| | | | | | .._|/| _ _ _ _ _ _ _ _ ...|\|_ / ..| | _−_−_−_−_− _ | | \ | |/_/━ ━ ━ ━ ━ ━\_\| | .._| /_/━ ━ ━ ━ ━ ━ ━ \_\.|_ /_/━ ━ ━ ━ ━ ━ ━ \_\ / /━ ━ ━ ━ ━ ━ ━\ \
475 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:54:57 ] ∩___∩ | ノ ヽ / ● ● | たった一つの命を捨てて |◎) ̄  ̄|| ̄ ̄ ) ミ 生まれ変わった不死身の体 彡、___||_/`\ 鉄の圏論を叩いて砕く / __ /´> ) クマーンがやらねば誰がやる (___) / (_/ | / | /\ \ | / ) ) ∪ ( \ \_)
476 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 23:04:19 ] _i^i__i^i_ i^i ._i^i_ __, -―- 、___ |*||*| ∩___∩ i^i _i^i_ | | |@ll|(_/,,,, ,,,, ヽ_) |≡||≡|| ノ ヽ ([])|;□;|.(≡)|_| |● ● | どうすれば圏論をわかりやすく . 二二/ ● |二二( (二二二二 彡(_●_ ) ミ 説明できますかね? | ミ ) ) / ` ''∪'' / ヽ 彡、 _ノ Gノ'フ= ___ / /i ` ー '" iヽ | / ヽ / / | ! / / | | | .l. i ..──|ヽ ヽ/─==i─Y-(_ノ──i二i───(⌒) ___ヽ /ヽノ └-┘ ┴ ..└┘ . ̄ | ___ i
477 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:59:18 ] ∩___∩ |ノ⌒ ⌒ ヽ / ●) ●) | Let's | ( _●_) ミ Haskell♪ 彡、 |∪| 、` / ヽノ ヽ / 人 \\ 彡 ⊂´_/ ) ヽ__`⊃ / 人 ( (_ノ (_)
478 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:00:25 ] A B ∩___∩ /) | ノ ヽ ( i ))) / ● ● | / / | ( _●_) |ノ / 彡、 |∪| ,/ / ヽノ /´ ここにオブジェクトAとオブジェクトBがあるクマ
479 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:02:12 ] A → B ∩___∩ | ノ ヽ / > < | じつはAさんはBさんを好きなんだクマ | //// ( _●_) ミ 彡、 l⌒l ノ / __ \ \ヽ . (___) \__)
480 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:07:27 ] ∩___∩ | ノ ヽ / ● ● | と、いうように | ( _●_) ミ ある対象とある対象がなんらかの関係をもっていることを 彡、 |∪| 、`\ 圏論では「射」と言うクマ / __ ヽノ /´> ) (___) / (_/ | / | /\ \ | / ) ) ∪ ( \ \_)
481 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:09:55 ] ∩___∩ | ノ ヽ A → B / ● ● | | ( _●_) ミ この場合、Aさんを「ドメイン」、Bさんを「コドメイン」と言うクマ 彡、 |∪| 、`\
482 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:15:49 ] ∩___∩ | ノ _, ,_ ヽ / ● ● | 別にBさんを好きじゃなくてもいいんだクマ | ( _●_) ミ Bさんを嫌いでもいいし 彡、 |∪| ノ BさんはAさんの嫁でもいいし ⊂⌒ヽ / ヽノ ヽ /⌒つ AさんがBさんをレイ-プする、という関係でもなんでもいいクマ \ ヽ / ヽ / \_,,ノ |、_ノ
483 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:19:20 ] ∩___∩ | ノ ヽ / ● ● | A → B | ( _●_) ミ ココ!! 彡、 |∪| 、`\ / __ ヽノ /´> ) この図では「→」がAさんとBさんの関係を表してるクマ (___) / (_/ 関係というものには方向性が付き物なんだクマ | / | /\ \ この「関係を表した矢印」こそが「射」クマー! | / ) ) ∪ ( \ \_)
484 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:20:05 ] てらわかりやす
485 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:21:35 ] まだまだ続クマ? \  ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ (´´ \(⌒-⌒) o (´⌒(´ (・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡  ̄ ̄ (´⌒(´⌒;; ズザーーーーーッ
486 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:40:43 ] / ̄) ∩____∩. | | AさんからBさんへの「射」は1つとは限らないクマー! | ノ ヽ.| | / ● ● || | くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「好き好き射」 | ( _●_) .ミ | 彡、. |∪| | くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「エロエロ射」」 / ,へ  ̄ ̄`ヽ / / \ t──┐ | (__/ > ). | |_ / / (___) ( \ \__)
487 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:56:02 ] 、 l _, ヽ/⌒ヘ~ ., 't,_,ノ丶 ∩、 ∩ / ! '` | '──-' '\ ,/ ● 'i, / ( _●_) ● i, 彡 しノ ミ あたまをやわらか〜くするクマ〜 |`:、\ 'ii __,/ 'i、 ̄~~ ij 乙__ノi ^-ァ __,ノ r^~"i' 'l !、 ! l ~^''!, ,_ ,!_ \ l,~^''‐--::,,⊃ ) ) ) ) `'‐’
488 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:02:26 ] X Y Z ∩___∩ /) | ノ ヽ ( i ))) / ● ● | / / | ( _●_) |ノ / 彡、 |∪| ,/ / ヽノ /´ ここにオブジェクトXとオブジェクトYとオブジェクトZがあるクマ
489 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:06:57 ] ∩____∩ / ヽ X → Y YさんはXさんのいとこクマ / ● ● | Y → Z ZさんとYさんのいとこクマ | ( _●_ ) ミ 彡、,, |∪| / /__ ヽノ l\ (___u) (uニ ).  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
490 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:09:49 ] |::::::::::::::::::::::::::::::: |" ̄ ゙゙̄`∩:::::::::::::::: |,ノ ヽ, ヽ::::::::::::::::::::::::: X → Y |● ● i'゙ ゙゙゙̄`''、:::::::::::::::: | (_●_) ミノ ヽ ヾつ:::::::::: ↓ | ヽノ ノ● ● i:::::::::: {ヽ,__ )´(_●_) `,ミ::::::: Z | ヽ / ヽノ ,ノ:::::: あれ?XさんとZさんは・・・いとこ?
491 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:17:59 ] ∩─ー、 / ● 、_ `ヽ / ( ● ● |つ | /(入__ノ ミ 所詮、XとZが 、 (_/ ノ いとこだろーと、はとこだろーと \___ノ゙ 関係ないのさ・・・ / 丶' ⌒ヽ::: / ヽ / /::: ただひとつ言えることは / /へ ヘ/ /::: XからZへのなんらかの関係があるかもしれない / \ ヾミ /|::: ってことだ (__/| \___ノ/::: / /::: これを圏論では射の「合成」と呼ぶ / y )::: / / /::: / /:::: X → Y / /::::: ( く:::::::: ↓ |\ ヽ::::: | .|\ \ ::::: Z \ .| .i::: \ ⌒i:: \ | /:::: ヽ 〈:: [XからZへの矢印が考えられる] \ | i:::::: (__ノ: __ノ )::::: (_,,/\
492 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:19:52 ] | |.-──-、 | : : : : : : : : \ |: : : : : : : : : : : ヽ |-…-…-ミ: : : : :', | '⌒' '⌒' i: : : : :} | ェェ ェェ |: : : : :} | ,.、 |:: : : :;! どこで出ていこうかな・・・・・ | r‐-ニ-┐| : : :ノ |! ヽ 二゙ノ イゞ‐′ | ` ー一'´丿 \ | \___/ /`丶、 | /~ト、 / l \
493 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:50:43 ] ,..-──- 、 /. : : : : : : : : : \ 関数Xは /.: : : : : : : : : : : : : : ヽ クラスYを引数にする ,!::: : : :,-…-…-ミ: : : : :', X(Y) {:: : : : :i \ / i: : : : :} ちなみにYは {:: : : : | ェェ ェェ |: : : : :} 合成のほかの例え!! Zという属性を. , 、 . { : : : :| ,.、 .. |:: : : :;! 持っている ヽ ヽ. _ .ヾ: :: :i r‐-ニ-┐ .| : : :ノ } >'´.-!、ゞイ! ヽ二゙ノ イゞ‐′ | −! \` ー一'´丿 \ ノ ,二!\ \___/ /`丶、 /\ / \ /~ト、 / l \ / 、 `ソ! \/l::::|ハ/ l-7 _ヽ
494 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:52:45 ] _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | //  ̄7/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / わかりづらいクマ
495 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:10:53 ] _ /- イ、_ /: : : : : : : : : : : ( /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ; 関数X → クラスY .{:: : : :ノ --‐' 、_\: : ::} .{:: : :ノ ,_;:;:;ノ、 ェェ ヾ: ↓ .l: :ノ /二―-、 |: ::ノ.. | //  ̄7/ /::ノ 属性Z . 〉(_二─-┘{/ /、//|  ̄ ̄ヽ わかんないかなコレ・・・
496 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:14:39 ] class X { method( Y ) {} } class Y { Z z; } class Z {}
497 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:38:27 ] \ i / ─── ・ ── ← ヌッケ  ̄ 二─ _ // | \  ̄ 、 - 、 / / | -、\ \ / / \\ \ / \ヾ ヽ ヽ / \ ヾ、 | i クマソッ // |! `i | /// | | / ( | | <_,へ 丶-、 | | __●_ rm \ \ |! リ | / ヽ-'⊇) ̄`ヾ │ / | | ⊂/ ● /\_,.-、 / / / / │ /\ / _/ / / // ⊂丿 ミ (⌒)  ̄ / / / \__ミ / / //_ / \_/ _二─
498 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:39:35 ] A → B → C H ↓ ↑ ↑ ↓ D E → F → J ↑ ↑ G H → I くまー r -、,, - 、 __ ヽ/ ヽ__ くまー ,"- `ヽ, / ● l ) / ● \__ (● ● i" __/ ●)  ̄ )"__ "`; .(_i ● ' __, '"  ̄`'(___/.i⌒i 丶_ ,i⌒i,,_(_/ ● i ̄ ̄ )_|__ __, '"  ̄ ヽ! ● ●) ミ~ ̄_● ヽ) くまー (_/ ● i ∪ / ⊂{● | くまー l ●( _●) (  ̄)- / -' i /ヽ、 |∪l T i ● '") くまー
499 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:43:17 ] i⌒i⌒i | ヽ / 人__ヽ∩ / / ヽ >>498 のように人間は人間同士いろんな関係をもってるクマ / / ● ● | 物事だってそうだクマ ( | ( _●_) ミ コレとかアレのいろんな関係で成り立っているクマ \ 彡、 |∪| ( \ ヽノ `ー´⌒\ \ /\ \、 \ / (  ̄) \ | ( ̄ ̄ ̄ ̄) \ ヽ/ / ̄ ̄ \__/
500 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:48:31 ] ∩___∩ / ノ \ ヽ | ● ● | 彡 (_●_) ミ /、 |∪| ,\ 複数の「対象」と複数の「射」の集まり , -‐- くJ( ヽノ ゝ-rr- 、、 ~~~~~~ ~~~~~ /Y ,r 、 `ー r'"^〃 、 つヒヽ これこそが「圏」 = 「カテゴリー」 ,ノ '^` i! =テミ i' 天ニ ミ、 ='"^ヾ } ,/ ''=''" ノ-‐'ヾ-人,,__ノnm、''::;;,, イ i! ,∠-―-、、 `ー'フヾ、 j 圏論(カテゴリー論)の基礎となるものだクマ f'´ ノし `丶、 ー=ミ-JE=- / ヾ=ニ- 彡^ 〃 ,,>、、`''ー-::,,_,,ノ ``ー--┬:, ''"~´フ ソ´`7'' ''"´ ,に (`゙゙´ノ f^ヽ ,ハ ,ィ' ,;-ゝ、 /ミ`ーt!,_,ィ-‐彡''"^ヽ / ヾ::::::::::::::::r''" ぃ ;} l t:::::::::::/ ノ / l! `'T7′ / /
501 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 05:06:35 ] 圏(カテゴリー) ┏━━━━━━━━━━━━━━━━━━━━━┓ ┃クマー クマー クマー ┃ ┃~~~~~~ ~~~~~~ ~~~~~~ ┃ ┃ ↑[神] ↑[神] ↑[神] ┃ ┃ [好き] [好き] . ┃ ┃ A君 → Bちゃん → . C君 ┃ ┃ ~~~~ ~~~~~~~~ ~~~~~ . . ┃ ┃ ↑[好き] ↓[爆破] ┃ ┃ . . [保有] ┃ ┃ . . D君 → フェラーリ ┃ ┃ ~~~~ ~~~~~~~~~~ ┃ ┃ ↓[ペット] . .┃ ┃ [同類] . .┃ ┃ヌッケ ← 犬 .┃ ┃~~~~~~ ~~~ . ┃ ┗━━━━━━━━━━━━━━━━━━━━━┛
502 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 05:16:08 ] 【まとめ】 ┏━┓ 射 ┏━┓ ┃.A.┃ → ┃.B.┃ ┗━┛ ┗━┛ 対象 対象 (ドメイン) (コドメイン) 上の図が基本要素 これが複数あつまり関係しあったものを圏という
503 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 05:20:23 ] ふぅ、つかれたクマー ∩___∩ | ノ ヽ ( ) / ● ● | ( ) __| ( _●_) ミ__ ( ) (_. 彡、 |∪| 、`__ )─┛ / / ヽ ヽノ /_/:::::/ |::::::::::| / ( ̄ ̄ ̄ヽ |:::::::| ̄ |::::::::::| |  ̄ ̄ヽ .ノ |:::::::| / / ̄ ̄旦 ̄ ̄ ̄ ̄ ̄ ̄ ̄/|/ /__________/ | | | |-------------------| |
504 名前:デフォルトの名無しさん [2007/02/25(日) 09:49:35 ] これは分かりやすいw
505 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 12:04:29 ] GJ!!
506 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 08:23:38 ] >>502 それがちょっと違う。 たとえば A → B → C という2つの射があったときに ここでA → Cという上の2つの射の*合成*が定義されてなかったら圏にならない。 すべてのコドメインとドメインが一致する射の組について合成が定義される 場合について、その全体を圏と呼ぶことが出来る。 ↑のAAもがんばってくれw
507 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 19:20:21 ] オーム社から「クマでわかる圏論」マダー?
508 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:59:49 ] >>506 あー、なるほどね。そういう条件が必要だったのか。 Wikipediaのこの文章をみてちょっと理解しきれなかったんだな。 >圏 C についてその射(と射の合成可能性)だけでも全部わかっていれば、 >そのうちで恒等射になっているものが対象を示しているので著者によっては >上の公理を満たす射の集まりを持って圏と定義することもある。 恒等射ってのがなんなのかわからん。ググっても出てこないし! >>507 クマーとかを本に使って金もらうと炎上しそうだなw
509 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 02:24:05 ] クマーはGPLってことで
510 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 03:06:50 ] >>508 恒等射っていうのはドメインとコドメインが等しくて、 何回合成してもそれ自身と等しくなるような射。 圏のすべての対象について、一個ずつ恒等射があること が必要。逆に言うと、恒等射があるとそれに対応する 対象がちょうどひとつあるので、恒等射と対象は 1対1に対応している。(したがって、人によっては、恒等射を 対象そのものとみなすって言うのが↑の記事、、
511 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 03:15:03 ] >>510 冪等射と恒等射は別じゃないか?
512 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 04:11:06 ] あ、そうだわ、・・・集合の圏とかだと冪等射がたくさん・・・orz... だから、上の条件にプラスして、他の任意の合成可能な射 と合成して相手を変化させないという条件も必要。 ちゃんと書くと、 1:A→Aという射で他の任意の射 f:A→Bと合成して、f1=f g:C→Aと合成して、1g=g となるようなもの、・・・
513 名前:デフォルトの名無しさん [2007/03/18(日) 18:43:55 ] 臨時あげ
514 名前:デフォルトの名無しさん [2007/03/18(日) 18:46:41 ] ここで、Stringableの是非を議論すればいいのか?
515 名前:デフォルトの名無しさん [2007/03/18(日) 18:47:12 ] 馬鹿が本スレ埋めやがったな
516 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 18:47:46 ] 止めれw 次スレが立つまでの避難所ということで
517 名前:デフォルトの名無しさん [2007/03/18(日) 18:54:27 ] よく読むとアンチスレなのにまともな議論されてるなw