1 名前:デフォルトの名無しさん [2012/10/17(水) 08:08:28.97 ] haskell.org ttp://www.haskell.org/ 日本語サイト ttp://www.sampou.org/cgi-bin/haskell.cgi ttp://www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/ Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/ Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/ Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/ Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/ Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/ Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/ Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/ Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/ Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/ Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/ Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/ Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
185 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 00:09:40.59 ] >>171 さすがにそんなことはないだろう、なんてことはないのだ。 恒等関手もモナドなのでモナドによって定まるKleisli圏の中に元の圏も 含まれている。形式的な話ではあるが。勿論モナドごとに一つのKleisli圏があり、異なる モナドをつなぐためにはめんどうな事をしないといけないが (この辺は自分もまだ未把握。モナドトランスファーが関係してるのかなぁ)
186 名前:デフォルトの名無しさん [2012/11/04(日) 00:41:32.78 ] コアンダ効果を通常の翼の速度分布の説明に使うのは不適切であると
187 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 04:30:56.21 ] 駄目だ! このスレ頭良い人達でいっぱいだ!
188 名前:デフォルトの名無しさん [2012/11/04(日) 07:59:40.61 ] >>185 そういう言いかたなら、関数は射なのだから,やっぱりそんなことはないのだ。
189 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 09:31:56.97 ] >>188 射は関数とは限らないから、それは反論になってないよ(ただ185の議論が強引なのは確か)
190 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 09:59:30.19 ] プログラムとは関数では無くKleisli圏の射のことなので、 関数よりモナドの方が広いと言うのはある意味正しい
191 名前:デフォルトの名無しさん [2012/11/04(日) 10:13:46.42 ] >>185 いまここではそもそもそのKleisli圏がどれだけ意味があるのかを聞かれているんじゃないかな
192 名前:デフォルトの名無しさん [2012/11/04(日) 10:22:17.47 ] >>190 米田の補題より、関数=射。 190より、モナド⊂プログラム=Kleisli圏の射⊂射。 したがって、モナド⊂関数。 これでOK?
193 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 10:36:35.07 ] 諸君、議論しているね
194 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 10:56:48.43 ] >>192 >米田の補題より、関数=射。 ちょっと意味が解らないんだけど、 米田の補題からどうやって関数=射(ここで言うイコールって何?)が導かれるのか説明してくれない?
195 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 13:53:18.43 ] むしろ、カルテジアン閉のような気がする
196 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 15:51:14.41 ] >>189 強引? 間違ってるっていうんだよw
197 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 16:08:25.97 ] Q. 何でIOと[]の共通部分をわざわざ括り出して名前を付けるの? A. 便利だから で済む話だろ
198 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 16:21:23.88 ] Moggiの論文読めば済む話なのに、何をごちゃごちゃ言ってるのんだよ
199 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 16:59:49.49 ] 英語を読んだら死ぬという噂だし…
200 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 17:41:22.96 ] >>197 IOをモナドで扱うのが便利なのは分かるが、 リストまで同じようにモナドで扱うのが便利な理由がいまいち分からん
201 名前:デフォルトの名無しさん [2012/11/04(日) 17:43:30.65 ] >>198 だからあMoggi論文が納得できないって言ってるんだろ それはそれでありだな
202 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 17:43:44.71 ] >>200 内包表記便利じゃん あれってモナドだからだよ
203 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:03:37.92 ] >>195 :(;゙゚'ω゚'):カルテジアンなの? カルテシアンだと思ってた
204 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:09:09.26 ] コードも書かずにモナドがどうやら大して理解もしてない圏論がどうやら、 実にHaskellerらしいスレですね
205 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:12:53.23 ] 圏論を深く理解したHaskellerでもなさそうなあなた様が このような場末に何の御用で
206 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:23:29.00 ] >>200 リストモナドは総当たり(深さ優先探索)するときに使う 問題によってはStateT s []がすごく便利
207 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:48:07.95 ] >>202 リスト以外で内包表記が役に立つ(適している)シーンが思い浮かばない リストもモナドで括る利点が内包表記ができるってだけなら、 内包表記はリスト専用構文でもいいような気がするのだが
208 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:51:07.34 ] >>206 すまん、総当たり(深さ優先探索)する簡単な具体例は何か無いだろうか (俺、ここでいう総当たりの意味がよく分かっていない) リストがモナドになっていない他の言語と比較してみたい
209 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:57:56.15 ] つうかモナド内包表記っていつのまにか復活してたのか
210 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 19:07:30.55 ] Listモナドが何なのかもわかってなくて煽ってたのかこいつは Listの各要素に関数を適用するmap程度のものだとか思ってたのか?
211 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 19:12:23.22 ] いろんな書き方が出来て楽しいのう do { x <- xs; y <- ys; return $ x + y } [x + y | x <- xs, y <- ys] (+) <$> xs <*> ys
212 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 20:02:05.01 ] >>211 一番下の知的な書き方に憧れます
213 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 20:51:41.09 ] >>210 それ以外に効果的だと感じる内包表記の使い方を見たことがない
214 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:03:01.89 ] わかってるじゃないか お前が見たことないだけだよ
215 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:12:11.35 ] >>211 みたいなの見てるとリストの要素から別のひとつの要素作ってるだけだから、 あんま効果的に見えないんだな リストモナドの場合、 要素からリストをつくる操作(リストが入れ子になるわけじゃないよ)とか 要素を排除する操作とか(途中ですべての要素が排除されたら処理は止まる)を混ぜることができて、 最終的に結果をひとつのリストとして得ることができる
216 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:13:48.86 ] 総当りというかバックトラックの例だが。 nQueen :: Int -> [[(Int,Int)]] nQueen n = nQueen_ 1 [[]] where nQueen_ m ans | m > n = ans | otherwise = nQueen_ (m + 1) [(m, x) : xs | xs <- ans, x <- [1..n], all (\ (i, j) -> x /= j && abs (m - i) /= abs (x - j)) xs]
217 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:14:33.43 ] 4つの4で0..100を作るパズル import Data.List import Control.Monad main = putStr $ unlines $ map (intercalate ", " . take 2 . fourFours) [0..100] fourFours :: Int -> [String] fourFours target = do (val, str) <- msum $ map makeWith [[4,4,4,4], [44,4,4], [4,44,4], [4,4,44], [444,4], [4,444], [4444]] guard $ val == fromIntegral target return str makeWith :: [Int] -> [(Rational, String)] makeWith [x] = return (fromIntegral x, show x) makeWith xs = do (left@(_:_), right@(_:_)) <- zip (inits xs) (tails xs) -- xsを二つに分ける leftVal <- makeWith left -- 左部分式を作る rightVal <- makeWith right -- 右部分式を作る combine leftVal rightVal -- 演算して組み合わせる combine :: (Rational, String) -> (Rational, String) -> [(Rational, String)] combine left right = do op <- [add, sub, mul, div] -- 演算を選ぶ op left right where add a b = return $ op2 (+) "+" a b sub a b = return $ op2 (-) "-" a b mul a b = return $ op2 (*) "*" a b div a b = do guard $ fst b /= 0 return $ op2 (/) "/" a b op2 valOp strOp (v0, s0) (v1, s1) = (valOp v0 v1, "(" ++ s0 ++ ")" ++ strOp ++ "(" ++ s1 ++ ")")
218 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:24:26.05 ] 君らがやってるのはトイプログラムとか頭の体操の類いだけじゃん たとえばゲーム製作の**の部分での利用とか、 会計ソフト製作での**の部分での利用とか、 Webサービス製作での**の部分での利用とか そういう実用的な部分での使い方はねーの?
219 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:26:14.32 ] いつからそんな話になったんだよww
220 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:30:31.40 ] jQueryなんかはListモナド的なものをうまく活用してるいい例かね Listモナドのアルゴリズムはわりと広範囲に応用可能だと思う 状態モナド的なものと比べて
221 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:30:39.00 ] >>218 なんで総当たりの実演をするのにそんな分野依存の知識を要求する例が欲しいんだ? リストモナドは総当たりが必要な時にはいつでも使える、ということさえ知ってれば プログラマなら応用できるだろ
222 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:34:13.80 ] まあでもはっきり言えばリストモナドは実用上そこまで重要じゃないと思う Maybeの方が10000倍大事
223 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:35:36.79 ] カードをプレイするためのコストが比較的複雑なTCGで、 手札のカードが場に出せるかどうかを判定するのにStateT a [] bを使ったような記憶はある
224 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:48:05.17 ] >>219 いや、だってさ 実用的なシーンではたいして使えない仕組みなんて、 あっても意味は無くないか? 何のためにプログラムしてるかと言えば、 アプリを作るためにしてる、というのが まぁ一般の大半のプログラマの意見だと思うし
225 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:50:01.24 ] あと、俺の言う仕組みって、リスト以外のモナド内包表記のことね
226 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:55:28.18 ] >>224 いや、>>208 に答えてリストモナドがどんな感じで動くかという話をしてるんであって、 リストモナドの存在意義を示すための例じゃないよ
227 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:56:42.71 ] >>225 お前は誰だよw文脈依存な書き込みするならコテつけろw
228 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:59:12.10 ] モナドの出番だな
229 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:18:45.82 ] >>226 だったらアンカーを適切に付けろ こっちはモナドを勉強中なんだから何に対しての何の意見なのか全く分かんねーよ で本題だが、すいませんでした、>>216 は参考になります これから他の言語と比較して理解を深めようと思います
230 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:32:03.03 ] リストがモナドである意味が分からないのか、 内包表記がリスト以外のモナドで使える意味が分からないのか、 それとも他に難癖付けてるのか レスが錯綜してて分からん
231 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:37:52.14 ] 非リストのモナド内包表記の活用例というのは俺も見てみたい 実際使ったことがない
232 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:43:10.02 ] >>230 > リストがモナドである意味が分からないのか、 これはとても難しい問題だと直感したから、ひとまず置いておく。 > 内包表記がリスト以外のモナドで使える意味が分からないのか、 まずはこれを知りたい。 しかも、意味は難しいそうだから、まずは例を。 遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。
233 名前:デフォルトの名無しさん [2012/11/04(日) 23:02:36.40 ] >>222 >Maybeの方が10000倍大事 Maybeが?ほんまかいな
234 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:07:02.43 ] > ほんまかいな メイビー(キリッ
235 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:09:02.03 ] センスNothing
236 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:17:29.69 ] 好きな書き方で書けば良いよ if y /= 0 then Just (x / y) else Nothing do { guard (y /= 0); return (x / y) } guard (y /= 0) >> return (x / y) [x / y | y /= 0]
237 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:37:47.36 ] いろんなライブラリ内で Maybe が使われているのを見るが、 [x / y | y /= 0] のような書き方を見ないのは何故だ?
238 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:38:52.87 ] モナド内包表記が復活したのって最近でしょ?
239 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:43:08.50 ] 可読性もありそう
240 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:50:31.34 ] そんなキモい書き方するのなんてゴルファー()ぐらいたろ
241 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:51:42.79 ] モナドのインターフェースを持ってるから、>>211 みたいに do形式や内包表記さらにはアプリカティブファンクターの式なんかの好きな書き方ができるんだよね
242 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:53:14.08 ] >238 復活といっても GHC の言語拡張ですよ。 if y /= 0 then Just (x / y) else Nothing [x / y | y /= 0] どちらがプログラムの意味を理解しやすいかは読み手の経験によるでしょうが、 私は前者の方を使いたいですね。
243 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:01:01.45 ] 内包表記をリスト以外に使うのがキモいのなら > 内包表記がリスト以外のモナドで使える意味が分からないのか なんて訊くまでもないよね。 だって使えるかどうかに関わらずキモいから使わないんでしょ?
244 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:26:31.37 ] >>243 >>323 > 遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。 [x / y | y /= 0] これが遊びでないと言うのなら、>>237 はどう説明する? なぜ書籍ではこのような書き方が紹介されない? 俺は内包表記がリスト以外のモナドで使えるのは、意味なんて何も無いと思う。 最初は、モナドだとどんなものでも内包表記ができちゃう事を発見したから、 プログラマがなんか役立つ使い方をしてくれるだろうという安直な考えで、 リスト以外にも使えるモナド内包表記が作られたんじゃないかな。 設計者自身に明確な目的なんてきっと無いでしょ。 その後、たいして上手い使い方も無いまま復活した理由が不明だが。
245 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:43:08.53 ] 結論ありきなら議論する意味なんて無いってだけだよ。 ていうか、書籍に書いてあるかどうかで判断したいなら こんなとこで他人に聞く必要もないだろ?
246 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:49:09.20 ] >>244 なんでリストで内包表記が使えるのは意味があるの? do構文があれば要らないよね?
247 名前:デフォルトの名無しさん [2012/11/05(月) 00:49:49.28 ] >なぜ書籍ではこのような書き方が紹介されない? そりゃ自分で書いてる通り、最近復活したからでしょ そのうちリスト以外でもイディオムが生まれてくるよ
248 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 04:01:00.46 ] >>236 :(;゙゚'ω゚'):内包表記って[と]で括られてるからリスト専用だと思ってた…… 今までは偽りの人生だった……
249 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 04:08:25.37 ] 本に書いてあって現場で使われているものにしか興味ないなら スレ間違えてるよな
250 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 04:19:05.02 ] エロゲの攻略法わかんなくてゲームの意義を問う というかZIPでくれと言い出す奴
251 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 05:35:28.68 ] サワーグレープセオリー
252 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 06:23:16.95 ] ghciだと:set -XMonadComprehensionsでモナド内包表記が有効になるのか これはなかなかおもしろいな
253 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 06:36:23.36 ] >>252 詳しい解説サンクス それならPerl忍者が荒らすのも分かる気がする(´・ω・`)
254 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:21:11.08 ] >>249 じゃあ、本は無しにしようか。 現場に限ってもいいし、 何なら HackageDB に登録されているライブラリ内に限定してもいいが、 それでもスレ違いか? プログラム言語において機能を実装するというのは、 使うことによってメリットがあると想定されるからだろう。 Haskell は実用もしっかりできる関数型言語を目指して生まれたのだから、 なおさらだ。 Haskell98 で言語仕様から消えたモナド内包表記が、 最近になってGHCの言語拡張として復活したのは、どういう意図があって? モナド内包表記が欲しいと思っていた人たちは、 どういうシーンでそれが活用できると考えていたの? その辺りが知りたい。 正直言って、>>236 の例では恩恵が実感できない。 「好きな書き方で書けば良い」という理由だけで復活したとも思えん。 それでは Perl みたいじゃないか。
255 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:28:03.96 ] 内包表記なんて長いコードに使うもんじゃない (長くなるならmapなりfilterなりdoなり使うべき) だから短いコードだから内包表記で書く意義が 分からないってワケじゃないだろう ってことは、こっちは>>254 様が納得する理由をエスパーしてやらなきゃ ダメってことなワケだが、なんでそんなことしてやる必要あるの?
256 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:28:37.24 ] >>254 >>247
257 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:49:04.08 ] >>254 hackage.haskell.org/trac/ghc/ticket/4370 hackage.haskell.org/trac/ghc/wiki/MonadComprehensions
258 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 12:01:23.74 ] サーセン Data.Vectorで組んで動いたコードをData.Vector.Unboxedに切り替えようと思ったんすよ そしたら急にVectorはファンクタじゃないからfmap使えないよ Probable fix 云々ってクレーム来たんすけど どゆことっすか?ファンクタでしょ?
259 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 15:54:09.94 ] >>258 メッセージ全文うpらないのは甘え
260 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:08:43.11 ] >>257 ありがと。 前者は単にモナド内包表記と同等の do 表記をいくつか例示してるだけじゃん。 誤解を恐れずに言えば、モナド内包表記の操作的意味論っぽいものを示してるだけ。 ただ、そのページに論文「Bringing Back Monad Comprehensions」へのリンクがあった。 こっちはざっと見たところ「現実的な問題提起 --> モナド内包表記による解決」 という感じで語っているような気がするから、実用的なことが書かれていそうだ。 これからじっくり読んでみるよ。 後者の方はこの論文と同名なんだが、同じもの? 至る所に訂正の跡があるのだが、最新版ってことかな? どちらにしても、「Bringing Back Monad Comprehensions」 こういう情報が欲しかったんだ。
261 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:12:58.71 ] >>258 unboxed vectorは関手じゃないよ(腹が立つのは分かる) 関手なら fmap :: (a -> b) -> Vector a -> Vector b が定義できなきゃならんけど、unboxed vectorだとb=Integerとかにできない (Unbox制約を満たさないといけないから)
262 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:21:08.08 ] 最近流行ってる関手って、そもそも何?
263 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:24:41.98 ] www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.0/Prelude.html#t:Functor Haskellでいう関手はこれ 圏論の関手は他を当たってね!
264 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:29:59.09 ] >>261 マジすか 複雑な事情っすね 実践よりもHaskell型システムの理解に的を絞ったサイトないっすか?
265 名前:デフォルトの名無しさん [2012/11/05(月) 19:30:38.26 ] >>262 map を関手の一つと考えると、関手から自然変換まで簡単に理解できる 簡単に理解できる = 毎日30分定義とにらめっこして1週間ぐらい悩むと分かる
266 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:41:26.25 ] >>263 Functor クラスが関手のことなら、なにも漢字で書かなくてもよくない? unboxed vector は Functor クラスのインスタンスじゃないから、 と言う方がはるかに分かりやすいというか、ストレートだと思うんだが と感じるのは私だけ?
267 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:44:20.77 ] 知らんがな
268 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:52:07.99 ] >>266 定着してる訳語があるのに横文字や片仮名を使うのは宗教上の理由でできんのです、ごめんなさい
269 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:55:12.71 ] >>268 ギャグとしてはあまり面白くない
270 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:02:00.78 ] 女だ! このスレに女が紛れ込んでるぞぉーっ! 魔女を焼き払えーっ!
271 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:04:44.17 ] 一人称を私にすると賢そうに見えるの法則
272 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:14:25.77 ] ん? Functor クラスそのものは関手なの? Functor クラスがたまたま持つ性質(種数やfmap関数など)を持つものが関手なの? たとえば Applicative なども関手? Functor クラス自身とそのインスタンスのみが関手? Functor クラスそのもののみが関手で、そのインスタンスは集合の要素みたいなもの? わけが分からなくなった・・・ >>271 一人称「私」なんて誰でも使うから、賢そうに見える要素にならないでしょ
273 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:20:11.08 ] >>272 二番目が一番近いと思う
274 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:24:02.72 ] >>273 そうだとすると、>>268 の言う「定着してる訳語」っておかしくないか? >>268 の言い方だと Functor の日本語訳が関手である、 と言っているように聞こえる
275 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:29:18.54 ] >>274 圏論でFunctorの訳語が関手だから、それ以外に訳しようがない
276 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:33:04.72 ] 圏論でFunctorと、haskellのFunctorクラスは同じもの?
277 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:38:18.43 ] わかった 今後Haskellのファンクタの意味で関手といいたい場合 いわゆる関手 と書くことにしよう
278 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:39:30.80 ] >>276 HaskellのFunctorクラスのインスタンスはある種の(圏論的な意味の)関手(の対象部分)になってる 具体的にはHask圏からHask圏への関手 逆に、ある型構築子が(圏論的な意味の)関手になっていてもFunctorのインスタンスとは限らない たとえば>>258 のunboxed vectorがそう
279 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:48:17.32 ] >>278 じゃあ、HaskellのFunctorクラスを安易に関手と言うのは、 文脈によっては危険じゃないか? どの文脈だと危険か正しく理解してる奴しか使えない訳語な感じがするが
280 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:53:08.78 ] >>279 もちろん混乱の原因になることはあるけど、 *Functorのインスタンスを関手と呼ぶ のをその論法で禁止したら、 *Monadのインスタンスをモナドと呼ぶ *Monoidのインスタンスをモノイドと呼ぶ *Numのインスタンスを数値型と呼ぶ あたりも言えなくなって不便じゃないか
281 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:53:32.47 ] 単位元と結合律を保存する高階関数は関手 という理解は正しいでしょうか?
282 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:59:21.14 ] >>281 「恒等関数と関数結合を保存する高階関数」と言った方が良さそう
283 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 21:09:19.73 ] 関手はFunctorではなくfmapじゃないのん?
284 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 21:12:51.87 ] >>280 なるほど、そう言われると、たしかに不便だな。 Haskell の話をしていると判りきっている時には Monad のインスタンスはモナドと言いたい。 (個人的にはFunctorのインスタンスはファンクタと言いたいが) でも、Haskell の話をしてるときに、いきなり圏論が姿を現し、 そのまま議論が進んでいくと、ややこしくならない? そういうシーンをこのスレでよく見かける
285 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:05:15.91 ] 271 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/05(月) 20:04:44.17 一人称を私にすると賢そうに見えるの法則 賢くみられたいからHaskellやるという法則