関数型プログラミング ..
[2ch|▼Menu]
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