[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
782: 778 2011/12/22(木)07:52 AAS
>>780 に指摘されて修正案を考えてる時に、
全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)

listA から x の位置を探す
x の位置の直後から
783
(2): 778 2011/12/22(木)07:55 AAS
途中でレスってしまった

>>780 に指摘されて修正案を考えてる時に、
全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)

listA から x の位置を探す
x の位置の直後から listB の要素数分の要素をリストとして取り出す listC
x が listB に無い場合、head listB が listC に有れば「前」
head listB が listC に無ければ「後ろ」
784
(1): 778 2011/12/22(木)08:55 AAS
>>783
訂正

> x の位置の直後から listB の要素数分の要素をリストとして取り出す listC

x の位置の直後から末端までをリストとして取り出す listC
785: 778 2011/12/22(木)12:54 AAS
>>783,784
式にするとこんな感じ

whereIncluded :: (Eq a) => [a] -> [a] -> a -> Where
whereIncluded as bs@(b:_) x
| elem x bs = Here
| elem b as' = After
| otherwise = Before
where as' = takeWhile (/=x) as

ダサいかな
786: 2011/12/22(木)20:08 AAS
Haskell Platform じゃなくて素の GHC の方には、
random パッケージってデフォルトでは入ってないんだね

地味に驚いた
787: 2011/12/22(木)21:36 AA×

外部リンク:www.haskell.org
788: 2011/12/22(木)21:56 AAS
遅延I/O怖い><
789: 2011/12/22(木)22:55 AAS
モナドって大した概念なの?
790
(2): 2011/12/22(木)22:59 AAS
ものごとを抽象化するための仕組みとしては大したもんだよ
791
(1): 2011/12/23(金)10:28 AAS
>>790
なんかいい例希望
モナドはものごと全部を抽象化するんじゃないよね?
792: 2011/12/23(金)10:30 AAS
STMとか?
793: 2011/12/23(金)12:02 AAS
>>790 >>791
そうだな。なんでも抽象化できるんならこれまた意味不明になるし。
だいたい、何なんだよ抽象化って。
794: 2011/12/23(金)17:44 AAS
モナドによる抽象化ってのは、だいたい(Monad m) =>で始まる型のある関数を書くこと
具体例はControl.Monadとか見れば
795
(1): 2011/12/23(金)17:52 AAS
それで、何をどう抽象できて、何は抽象できないの?
モナドで抽象する前と後とで何が変わるの?
796: 2011/12/23(金)18:06 AAS
いつもの糖質が現われる頃合いだな
797
(2): 2011/12/23(金)18:16 AAS
>>795
Control.Monadにあるようなものは抽象化できるし、
(Monad m) =>で書けなさそうなものは抽象化できない
言葉で言われて分かる類の問題じゃないから具体例を見たり書いたりして慣れるしかないよ

>モナドで抽象する前と後とで何が変わるの?
関数の型が変わって任意のモナドに対して使えるようになる。たとえば、
foreach :: [a] -> (a -> IO ()) -> IO () -- foreach xs f はxsの各要素に対してfを実行
をモナドに関して抽象化すれば、
forM_ :: (Monad m) => [a] -> (a -> m b) -> m ()
になって、IO以外でも使えるようになる
798: 2011/12/23(金)18:19 AAS
抽象化できないものの証明って難しいな。もうあるのだろうか。
799
(1): 2011/12/23(金)18:22 AAS
いい例かどうか分からないが
外部リンク[html]:blog.sigfpe.com
外部リンク:www.haskell.org
外部リンク:www.haskell.org
800: 2011/12/23(金)18:24 AAS
コードが書いてあるあたりだけでもざっと見ればいいよ
801: 2011/12/23(金)18:26 AAS
>>797
サンクス
802
(2): 2011/12/23(金)18:32 AAS
>>797
それってオブジェクト指向でメソッドの引数の型を
IO型からObject型にするのと、どう違うの?
803: 2011/12/23(金)18:47 AAS
メソッドの引数に限定する意味が良くわからないが
bindとかreturnというメソッドを持ったIO型を一般化して、
Monadという抽象クラスから派生するようにしたら便利なのと一緒。
804
(1): 2011/12/23(金)18:53 AAS
>>802
色んなものの「共通する性質」や「共通する関係」を抜き出し、
具体的な実態では無くその性質や関係のみで以て語るのが「抽象化」だから、
抽象化するという意味は同じ

どう抽象化するかという点で、IO型からObject型へとMonadへとで違いがでる

Haskell のモナドは (m を Monad クラスのインスタンスとして)
forall a b. m a -> (a -> m b) -> m b
forall a b. m a -> m b -> m b
a -> m a
String -> m a
という4つの「演算で抽象化」してる(うち2つだけで十分だが)

特にモナド同士の演算がまたモナドになるという性質と、
モナドの外からはモナドの具体的な実態は見えないという性質が特徴的だから、
そういう性質が活かせるところでもてはやされる

オブジェクト指向のObject型がどういう性質の抽象化なのかは忘れた
805: 2011/12/23(金)18:59 AAS
なんかHaskellPlatform DLできないんだけど鯖どうなってんこれ
806: 2011/12/23(金)19:27 AAS
>>799
ありがとう。読んでみる。
807
(1): 2011/12/23(金)19:37 AAS
>>802
その例だと、内部でやってることもだいたい同じ
実際の型に応じて実装が選ばれる
実装を選ぶタイミングがコンパイル時か実行時かは違う

型クラスは ad-hoc polymorphism を使いやすくしたものでオーバーロードの親戚
OOPのほうはsubtype polymorphismといって、部分かなり違う部分がある
例えばsubtype relationが推移律をみたすみたいな強い性質がある
subtypeがあるとどうなるかは、Scalaが壮大な社会実験中
808: 2011/12/23(金)20:08 AAS
Objectにしたらキャストがいるよね
interface Monadみたいの定義しないと
809
(1): 2011/12/23(金)21:29 AAS
抽象化と言うか普遍化だな。
810: 2011/12/23(金)21:51 AAS
同じ事やねんで
811
(1): 2011/12/23(金)21:51 AAS
モナドって、ひょっとしてHaskellにおけるデザインパターンのことかい?
1-
あと 167 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.041s