関数型プログラミング ..
737:デフォルトの名無しさん
03/07/21 02:59
>>733-736
そんなことをする必要はない。
randoms (mkStdGen 1) ::[Int]
のようにして無限乱数列が作れるのだから。
Make use of the power of lazy evaluation !
# あとはそれにmapでもなんでもして加工すればいい。
738:デフォルトの名無しさん
03/07/21 15:25
ハクションと似てなくもないような
739:デフォルトの名無しさん
03/07/21 19:05
>>737
なるほど!遅延評価を忘れてました。
しかしそれでも2個の乱数を取ってきたい時は、let (r1:r2:rs') = rs (以降はrs'から取る) みたく
乱数列を意識して渡していかないといけないような。いや、ずっと書きやすいではありますが。
740:デフォルトの名無しさん
03/07/21 20:22
>>734
知らん。気になるのなら、たとえば、こうすればちゃんとモナドになる。
module Main where
instance (Num a) => Monad ((,) a) where
(>>=) (sub, main) f = (sub+sub', main') where
(sub', main') = f main
return main = (0, main)
>>733
まずちょっと修正...スマソ。
import Monad -- 追加
instance Monad ReadR where
ReadR r >>= fr = ReadR (\str -> [ret| (v,str') <- r str, ret <- fr v `runr` str'])
return v = ReadR (\str -> [(v, str)])
fail s = mzero -- 以下追加
instance MonadPlus ReadR where
mzero = ReadR (\s -> [])
mplus (ReadR f) (ReadR g) = ReadR (\s -> f s ++ g s)
用途としては、下のようなコード(やさしいHaskell 8.3節からコピペ)のtuvwxのような変数を書かなくてもよくすること。それだけです。
>readsTree :: (Read a) => ReadS (Tree a)
>readsTree s = [(Branch l r, x) | ("<", t) <- lex s,
> (l, u) <- readsTree t,
> ("|", v) <- lex u,
> (r, w) <- readsTree v,
> (">", x) <- lex w]
> ++
> [(Leaf x, t) | (x, t) <- reads s]
741:デフォルトの名無しさん
03/07/21 20:26
上のコードのReadR版
>rreadTree :: (Read a) => ReadR (Tree a)
>readsTree s = rreadTree `runr` s
>rreadTree = do "[" <- rlex
> l <- rreadTree
> "|" <- rlex
> r <- rreadTree
> "]" <- rlex
> return $ Branch l r
> `mplus`
> do x <- rread
> return $ Leaf x
742:デフォルトの名無しさん
03/07/21 20:38
>>739
なんかまだ手続き型の頭のような気がする:)
関数型だったら結局繰り返しは再帰で書くんだから、
結局こんな感じになると思う。
f 0 result rs = result
f n result (r1:r2:rs) = f (n - 1) (g r1 r2 result) rs
# f 10 [] randomlist のように使う。
# g で欲しいものを計算。
743:デフォルトの名無しさん
03/07/21 20:39
う、結局が二つも。
744:デフォルトの名無しさん
03/07/22 01:26
>> 740
Num a が気になる
745:デフォルトの名無しさん
03/07/23 22:09
GHCって実はfromIntが無かったりします…?
Variable not in scopeと言われるのですが
746:デフォルトの名無しさん
03/07/24 01:42
>744
気にするな。
747:デフォルトの名無しさん
03/07/24 10:52
>>745
fromInteger じゃだめなの?
今のHaskell 98 の Prelude には fromInt は無いのでは。
748:デフォルトの名無しさん
03/07/24 20:52
>>747
いえ、Intからの変換にfromInteger (toInteger n)と書くのが冗長な気がしただけです。
749:デフォルトの名無しさん
03/07/29 00:04
>>748
Enum クラスのメソッドが使えるのでわ。
toEnum :: Int -> a
fromEnum :: a -> Int
750:デフォルトの名無しさん
03/08/01 10:11
>>749
FloatやDouble…のつもりでしたが、それらもtoEnumでいけるのですね。
ありがとうございます。そして遅レスごめんなさい
751:デフォルトの名無しさん
03/08/02 01:34
ニセ手続き型?の基本的なもなどはなんとなくわかった(というか「同じやん」ということで)
けど、それ以外のモナドがワカンネ。
ライブラリ読んでみたりしたけど激むず。
モナド難しいですね。
ニセ手続き型を理解したあとは、どうしたらよいのでしょうか
752:デフォルトの名無しさん
03/08/02 19:05
GHCのText.Regexで
matchRegex (mkRegex "abc") "xabcx"
=> Just []
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("x","abc","x",[])
これってバグ?
753:デフォルトの名無しさん
03/08/02 19:42
あ、二つ目は書き間違い。
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("","abc","x",[])
754:デフォルトの名無しさん
03/08/02 19:54
モナドの問題点とかは特に上がってないのですか?
実行効率周りとか。
755:デフォルトの名無しさん
03/08/08 01:02
GHC 6.0.1 Released
756:デフォルトの名無しさん
03/08/08 07:07
>>755
いただきました
757:デフォルトの名無しさん
03/08/11 13:30
素朴な疑問なのですが Haskell の言語使用はかなり頻繁に変わるものなのでしょうか?
2000年あたりに出版された本で勉強しようかと思っているのですが、それいらい大きく変わったとか、
近いうちに大きく変わるとか、ありますか?
758:デフォルトの名無しさん
03/08/12 00:36
基本はHaskell98から変わってないんじゃないだろうか。
処理系によっては独自拡張があることも。
759:デフォルトの名無しさん
03/08/12 21:05
>>758
サンクスコ。
言語仕様は大きく変わってないから、そのころの本で勉強しても問題ないということですね。
がんばって勉強してみます。
(関数型言語は使ったことがないから、なじめるかわからないけど)
760:デフォルトの名無しさん
03/08/13 20:49
確かに言語仕様はほとんど変わっていないが、
ライブラリがかなり違うような気がする。
ライブラリは階層化ライブラリ(Data.Listとか)
で決まりでいいのだろうか。
標準ライブラリ以外になると混沌としか言い様がない
761:デフォルトの名無しさん
03/08/13 21:45
Hugsもライブラリを2通り持ってるね。
762:デフォルトの名無しさん
03/08/13 22:52
URLリンク(www.haskell.org)
ここにあるのが標準ライブラリーで、足りない部分は、
URLリンク(www.haskell.org)
から探すとか、自作するということですか?
URLリンク(www.haskell.org)
で、これが HUGS についてくるライブラリー群?
763:デフォルトの名無しさん
03/08/14 00:53
Hugsのライブラリについて書いてあるよ。
URLリンク(cvs.haskell.org)
GHCは5.04.1=>6.0でライブラリ関係が少し変わっているような気がする。
764:デフォルトの名無しさん
03/08/15 02:04
前スレは約一年に使い切ったのに、part2 に移行して少し停滞してます。
765:デフォルトの名無しさん
03/08/15 02:29
URLリンク(www.cse.ogi.edu)〜hook/cse532f99/haskell1.htm
↑赤黒木の実装に感動。
だれか、コンパクトなdelete実装しれ!
766:山崎 渉
03/08/15 16:09
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
767:デフォルトの名無しさん
03/08/19 11:49
6.0.1入れたらwxHaskellが使えなくなっちまった
768:デフォルトの名無しさん
03/08/19 15:54
win de GUI no hito mada-?
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5381日前に更新/199 KB
担当:undef