トップページ > プログラム > 2015年01月30日 > gVgHpLV/

書き込み順位&時間帯一覧

7 位/222 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000001121000000000005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
関数型プログラミング言語Haskell Part27_©2ch.net

書き込みレス一覧

関数型プログラミング言語Haskell Part27_©2ch.net
353 :デフォルトの名無しさん[]:2015/01/30(金) 09:18:18.88 ID:gVgHpLV/
>>350,351
そこは別に短い方にあわせれば問題ない。zipと一緒。
この定義でもAplicativeにできることは確認した。

ただ、zipWith ($) fs xs で充分なんで使いドコロがあまりない。
関数型プログラミング言語Haskell Part27_©2ch.net
355 :デフォルトの名無しさん[]:2015/01/30(金) 10:37:10.94 ID:gVgHpLV/
>>354
型定義からは、関数のリスト[a->b]をリスト[a]からリスト[b]への関数にするだけなんで、
素直でないとはいえない。
リストをタプルの拡張みたいなものとして考えればむしろ自然。
ただ、pure x を「ミニマルな無限リスト repeat x」と考える必要がでてくるだけ。
関数型プログラミング言語Haskell Part27_©2ch.net
357 :デフォルトの名無しさん[]:2015/01/30(金) 11:28:37.14 ID:gVgHpLV/
>>356
>リストの順序を変えると結果が変わる

普通のApplicativeだって、結果のリストの順序は変わるから結果は変わるだろ。
非決定性の計算として見た場合にはリスト内の順序が重要ではないとはいえ。
順序対として見た場合に順序が変わると結果が変わるのは当然、というかそうでないと困る。
関数型プログラミング言語Haskell Part27_©2ch.net
358 :デフォルトの名無しさん[]:2015/01/30(金) 11:54:16.82 ID:gVgHpLV/
あ、だいたいzip型のApplicativeの原理を理解した気がする。

[a] は Int -> a な(部分)関数と等価、 [a->b] は Int -> (a->b) と等価なので、
[a->b]<*>[a] の <*> を Int -> a と Int -> (a->b) から Int -> b を合成する関数とみれば、
実はこの <*> は (->)Applicative の <*> そのものになるんだ。
なんで、同様にして(->) Monadと同じような構造を持ったMonadも作れるはず。
ただ、あくまで部分関数なので、そこのところをMaybeと同様に処理してやらなきゃいけないだろうけど。
関数型プログラミング言語Haskell Part27_©2ch.net
360 :デフォルトの名無しさん[]:2015/01/30(金) 12:39:02.10 ID:gVgHpLV/
>>359
>Control.Applicative.ZipList
>join を diagonal とすれば対応するモナドが出る

それだと長さが違うリストの時にdiagonalが取れないのだよ。
各リストの長さを無理やり揃えて足りない分はNothingで埋めるみたいなことをしないといかん。
で、そのNothingを放置できないので最終結果から削ったりとかするとMonad Lawsが破れる……


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。