[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 16:29 / Filesize : 199 KB / Number-of Response : 769
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型プログラミング言語Haskell



1 名前:潜伏していた1 mailto:sage [02/02/16 16:55]
何とか生き残れました。
前スレ
pc.2ch.net/test/read.cgi/tech/996131288/l50

関連 >>2 以降

737 名前:デフォルトの名無しさん mailto:sage [03/07/21 02:59]
>>733-736
そんなことをする必要はない。

randoms (mkStdGen 1) ::[Int]

のようにして無限乱数列が作れるのだから。
Make use of the power of lazy evaluation !

# あとはそれにmapでもなんでもして加工すればいい。

738 名前:デフォルトの名無しさん mailto:sage [03/07/21 15:25]
ハクションと似てなくもないような

739 名前:デフォルトの名無しさん mailto:sage [03/07/21 19:05]
>>737
なるほど!遅延評価を忘れてました。
しかしそれでも2個の乱数を取ってきたい時は、let (r1:r2:rs') = rs (以降はrs'から取る) みたく
乱数列を意識して渡していかないといけないような。いや、ずっと書きやすいではありますが。

740 名前:デフォルトの名無しさん mailto:sage=732 [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 名前:デフォルトの名無しさん mailto:sage=740 [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/07/21 20:39]
う、結局が二つも。

744 名前:デフォルトの名無しさん mailto:sage [03/07/22 01:26]
>> 740
Num a が気になる

745 名前:デフォルトの名無しさん mailto:sage [03/07/23 22:09]
GHCって実はfromIntが無かったりします…?
Variable not in scopeと言われるのですが



746 名前:デフォルトの名無しさん mailto:sage=740 [03/07/24 01:42]
>744
気にするな。

747 名前:デフォルトの名無しさん [03/07/24 10:52]
>>745
fromInteger じゃだめなの?
今のHaskell 98 の Prelude には fromInt は無いのでは。

748 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/08/01 10:11]
>>749
FloatやDouble…のつもりでしたが、それらもtoEnumでいけるのですね。
ありがとうございます。そして遅レスごめんなさい

751 名前:デフォルトの名無しさん [03/08/02 01:34]
ニセ手続き型?の基本的なもなどはなんとなくわかった(というか「同じやん」ということで)
けど、それ以外のモナドがワカンネ。
ライブラリ読んでみたりしたけど激むず。

モナド難しいですね。

ニセ手続き型を理解したあとは、どうしたらよいのでしょうか


752 名前:デフォルトの名無しさん mailto:sage [03/08/02 19:05]
GHCのText.Regexで
matchRegex (mkRegex "abc") "xabcx"
=> Just []
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("x","abc","x",[])
これってバグ?

753 名前:デフォルトの名無しさん mailto:sage [03/08/02 19:42]
あ、二つ目は書き間違い。
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("","abc","x",[])


754 名前:デフォルトの名無しさん mailto:sage [03/08/02 19:54]
モナドの問題点とかは特に上がってないのですか?
実行効率周りとか。

755 名前:デフォルトの名無しさん mailto:sage [03/08/08 01:02]
GHC 6.0.1 Released



756 名前:デフォルトの名無しさん mailto:sage [03/08/08 07:07]
>>755
いただきました

757 名前:デフォルトの名無しさん mailto:sage [03/08/11 13:30]
素朴な疑問なのですが Haskell の言語使用はかなり頻繁に変わるものなのでしょうか?
2000年あたりに出版された本で勉強しようかと思っているのですが、それいらい大きく変わったとか、
近いうちに大きく変わるとか、ありますか?

758 名前:デフォルトの名無しさん mailto:sage [03/08/12 00:36]
基本はHaskell98から変わってないんじゃないだろうか。
処理系によっては独自拡張があることも。

759 名前:デフォルトの名無しさん mailto:sage [03/08/12 21:05]
>>758
サンクスコ。
言語仕様は大きく変わってないから、そのころの本で勉強しても問題ないということですね。
がんばって勉強してみます。
(関数型言語は使ったことがないから、なじめるかわからないけど)

760 名前:デフォルトの名無しさん mailto:sage [03/08/13 20:49]
確かに言語仕様はほとんど変わっていないが、
ライブラリがかなり違うような気がする。
ライブラリは階層化ライブラリ(Data.Listとか)
で決まりでいいのだろうか。

標準ライブラリ以外になると混沌としか言い様がない

761 名前:デフォルトの名無しさん mailto:sage [03/08/13 21:45]
Hugsもライブラリを2通り持ってるね。

762 名前:デフォルトの名無しさん mailto:sage [03/08/13 22:52]
www.haskell.org/onlinelibrary/
ここにあるのが標準ライブラリーで、足りない部分は、
www.haskell.org/libraries/
から探すとか、自作するということですか?

www.haskell.org/ghc/docs/latest/html/libraries.html
で、これが HUGS についてくるライブラリー群?

763 名前:デフォルトの名無しさん mailto:sage [03/08/14 00:53]
Hugsのライブラリについて書いてあるよ。
cvs.haskell.org/Hugs/pages/hugsman/libs.html
GHCは5.04.1=>6.0でライブラリ関係が少し変わっているような気がする。

764 名前:デフォルトの名無しさん mailto:sage [03/08/15 02:04]
前スレは約一年に使い切ったのに、part2 に移行して少し停滞してます。

765 名前:デフォルトの名無しさん mailto:sage [03/08/15 02:29]
www.cse.ogi.edu/〜hook/cse532f99/haskell1.htm
↑赤黒木の実装に感動。
だれか、コンパクトなdelete実装しれ!



766 名前:山崎 渉 mailto:(^^) [03/08/15 16:09]
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

767 名前:デフォルトの名無しさん [03/08/19 11:49]
6.0.1入れたらwxHaskellが使えなくなっちまった

768 名前:デフォルトの名無しさん mailto:age [03/08/19 15:54]
win de GUI no hito mada-?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef