トップページtech
1001コメント379KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/07(火) 21:24:26
haskell.org
http://www.haskell.org/

日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://shidot.dyndns.org/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/

関連スレは>>2
関連書籍は>>3

・2chの仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0524デフォルトの名無しさん2007/01/13(土) 04:21:07
集約の関係なんてどうでもいいんだよハゲ
0525デフォルトの名無しさん2007/01/13(土) 04:57:05
>>522
C言語はchar配列が,いわゆる「文字列」じゃん
Haskellは [Char] が「文字列」

あと多相型を表現する(書き表す?)ために使われるのが型変数でそ
0526デフォルトの名無しさん2007/01/13(土) 05:23:40
じゃんじゃんでそでそ
0527デフォルトの名無しさん2007/01/13(土) 07:04:55
>>523
きっとインターネット以外のネットワークを使って2chにアクセスしてるんだよ。
0528デフォルトの名無しさん2007/01/13(土) 10:21:05
navi2chが使えて人がいればよくね?
0529デフォルトの名無しさん2007/01/13(土) 11:26:21
>>522
文字 Char
文字列 [Char]
文字のリスト [Char]
文字列のリスト [[Char]]
0530デフォルトの名無しさん2007/01/13(土) 11:27:01
type String = [Char]
0531デフォルトの名無しさん2007/01/13(土) 13:17:02
赤い彗星はシャア!
0532デフォルトの名無しさん2007/01/13(土) 14:05:00
     ll     ll
     l| -‐‐- |l
    ,イ」_  |ヽ_| l、
   /└-.二| ヽ,ゝl
   l   ,.-ー\/. 、l
  |  /.__';_..ン、    ビ〜ィ〜ム かがーやーく♪
  / /<二>  <二>!゙、
 //--─'( _●_)`ーミヘ    フラッシュバックに〜ぃ♪
<-''彡、   |∪|  、` ̄ ̄ヽ
 / __  ヽノ   Y ̄)  |
 (___)       Y_ノ
      \      |
       |  /\ \
       | /    )  )
       ∪    (  \
             \_)
         ll     ll
         l| -‐‐- |l
        ,イ」_  |ヽ_| l、
       /└-.二| ヽ,ゝl
       l   ,.-ー\/. 、l
      |  /.__';_..ン、  ヤツのかげーー♪
      / /<二>  <二>!゙、
     //--─'( _●_)`ーミヘ
    <-''彡、   |∪|  ミ __>
   (  (/     ヽノ_  |
    ヽ/     (___ノ
     |      /
   / /\  |
   (  (    ヽ |
  /  )    ∪
  (_/
0533デフォルトの名無しさん2007/01/13(土) 14:05:42

         _人人人人人人人人人人人人人人人_
           >  シャア♪  シャア♪  シャア♪  <
           ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
     ll     ll          ll     ll          ll     ll
     l| -‐‐- |l  __     l| -‐‐- |l  __     l| -‐‐- |l  __
    ,イ」_  |ヽ_| l、〈〈〈〈 ヽ  ,イ」_  |ヽ_| l、〈〈〈〈 ヽ  ,イ」_  |ヽ_| l、〈〈〈〈 ヽ
   /└-.二| ヽ,ゝl.〈⊃  } /└-.二| ヽ,ゝl.〈⊃  }./└-.二| ヽ,ゝl.〈⊃  }
   l   ,.-ー\/. 、l |   |. l   ,.-ー\/. 、l |   | l   ,.-ー\/. 、l |   |
  |  /.__';_..ン、!   ! |  /.__';_..ン、!   !|  /.__';_..ン、!   !
  / /<二>  <二>!゙、 // /<二>  <二>!゙、 // /<二>  <二>!゙、 /
 //--─'( _●_)`ーミ /.//--─'( _●_)`ーミ / //--─'( _●_)`ーミ /
<-''彡、   |∪|  / <-''彡、   |∪|  /  <-''彡、   |∪|  /
 / __  ヽノ /     / __  ヽノ /    / __  ヽノ /
 (___)   /     (___)   /     (___)   /
0534デフォルトの名無しさん2007/01/15(月) 22:00:10
ここが噂の関数型言語スレか
0535デフォルトの名無しさん2007/01/15(月) 22:04:01
>>534
関数型言語の総合スレはこちらです↓

関数型言語Part IV
http://pc10.2ch.net/test/read.cgi/tech/1083649982/
0536デフォルトの名無しさん2007/01/19(金) 01:52:30

廃れてんなぁ
なんかHaskelニュースとかねーのか
0537デフォルトの名無しさん2007/01/19(金) 09:31:31
http://sequence.complete.org/hwn
0538デフォルトの名無しさん2007/01/20(土) 19:04:51
語ろう是!
0539デフォルトの名無しさん2007/01/20(土) 21:06:22
任せ炉!
0540デフォルトの名無しさん2007/01/21(日) 08:45:34
じゃあ質問。
やさしいHaskellのp107から。
myIf :: Bool -> a -> a -> a
myIf True t e = t
myIf False t e = e
main = do myif (True) (putStrLn "then") (putStrLn "else")
という関数を定義して、このプログラムがthenだけ表示されれば、
アクションputStrLn "elseは評価されていないことが分かります。
とあるんだけれど、何が言いたいのか良く分からん。
このプログラムを実行したら、thenが表示されるのは当たり前じゃないのか?
これのどこが評価に必要な式だけが評価されることの証拠になるんだ?
Cの
if ( True == True){
printf("then\n");
}
printf("else\n");
とどこが違うんだ。
これも、printf("else\n");は評価されて無いぞ。
それともif文を実装した点に意味があるって事?
0541デフォルトの名無しさん2007/01/21(日) 08:53:33
>>540
int myif(int a, int b, int c) {
 return a ? b : c;
}
int main() {
 myif(1, printf("true"), printf("false"));
}
0542デフォルトの名無しさん2007/01/21(日) 09:38:09
>>541
うん、それもわかるよ。
でもそれだって結局ifの言い換えでしょう?
俺が聞きたいのは
main = do myif (True) (putStrLn "then") (putStrLn "else")
でthenが実行されるのは当然で、何がすごいのか分からないんだ。
これと遅延評価の何が関係有るの?
教えて、偉い人。
0543デフォルトの名無しさん2007/01/21(日) 10:02:42
>>540
Cには「中身が実行されないことがある構文」(ifとか)はあるけど、
「引数が評価されないことがある関数」はない。
例えば、Cでは、
f(4 / 0)
という式は、fがどんな関数であっても零除算でエラーだが、Haskellでは、
f (4 `div` 0)
がエラーになるかどうかはfに依存する。
同様に、三項演算子と同じはたらきをする「関数」はCでは実装できないが、Haskellではできる。

>main = do myif (True) (putStrLn "then") (putStrLn "else")
ややこしいことに、この例に限っていえば、遅延評価は関係ない。
たとえputStrLn "else"が評価されたとしても、それで「else」が出力される訳ではない。
これはHaskellのIOの話で、遅延評価とは別の問題。
だから、遅延評価の話をするときは、ややこしくなるのでIOの例を使わない方が良いと思う。
0544デフォルトの名無しさん2007/01/21(日) 11:09:27
理解もできず、実際にコードのコンパイル・実行をしない奴に説明しても。
0545デフォルトの名無しさん2007/01/21(日) 15:55:04
GHC速報
http://tv.goo.ne.jp/contents/program/008/0004/20070122_0250/index.html
0546デフォルトの名無しさん2007/01/21(日) 17:08:29
>>545
ゴルァ!
0547デフォルトの名無しさん2007/01/22(月) 00:20:55
[ n | (n,True) <- zip [1,2,3,4,5] [True,False,True,False,False] ]
他のletの中とかならマッチしない時点でエラーが出ると思うのですが
なぜこのやりかたで絞込みができるのでしょうか?
内包表記が特別扱いされてるとか?
0548デフォルトの名無しさん2007/01/22(月) 00:31:11
>>547
リストはMonadPlusで、内包表記はdo記法の略記。
doの中でマッチングが失敗するとモナドのfailが呼ばれ、リストのfailはmzeroを返すから
その後に続く式が無効化される。
05495482007/01/22(月) 02:06:48
>>548
Prelude> let hoge = zip [1,2,3,4,5] [True,False,True,True,False]
Prelude> do (n,True) <- hoge; return n
[1,3,4]
Prelude> hoge >>= \(n,True) -> return n
[1*** Exception: <interactive>:1:49-69: Non-exhaustive patterns in lambda
なるほど。特別扱いではあるけどユーザも使えるわけですね。
0550デフォルトの名無しさん2007/01/22(月) 19:51:17
do記法ってsyntax sugerじゃなかったのね
0551デフォルトの名無しさん2007/01/22(月) 20:06:18
do P <- E ; REST...

E >>= \x -> case x of
  P -> do REST...
  _ -> fail "message"
の構文糖
0552デフォルトの名無しさん2007/01/22(月) 23:45:48
>>551
> doの中でマッチングが失敗するとモナドのfailが呼ばれ
というところが構文糖だけじゃないんじゃない?ということだと思う。
0553デフォルトの名無しさん2007/01/22(月) 23:47:25
すまん、書いてから551をじっくり読んだ orz
0554デフォルトの名無しさん2007/01/23(火) 02:07:43
Haskell98はdo経由せずにそのまま変換するようになってるな
[ e | p <- l, Q ] =
  let ok p = [ e | Q ]
      ok _ = []
  in concatMap ok l
[ n | (n,True) <- zip [1,2,3,4,5] [True,False,True,False,False] ]
  => let ok (n,True) = [n]; ok _ = [] in concatMap ok (zip [1,2,3,4,5] [True,False,True,False,False])
意味はほぼ一緒だが
0555デフォルトの名無しさん2007/01/23(火) 02:27:29
>>554
Haskell98ではなくて、GHCではそうだね。
0556デフォルトの名無しさん2007/01/23(火) 15:17:18
update :: Assoc a b -> a -> b -> Assoc a b
update h x v y | x == y = v
| otherwise = lookup h y
という関数の定義に関して、
update :: Assoc a b -> a -> b -> Assoc a b
の第一パラメータとなっている、Assoc a b は、
update h x v y | x == y = v
| otherwise = lookup h y
という実装において、
Assoc a b の a が h に、 b が x に対応しているのでしょうか?

よろしくお願いします。
0557デフォルトの名無しさん2007/01/23(火) 16:08:51
>>556
type Assoc a b = a -> b
と定義してあると思うので、それを前提にする。

>Assoc a b の a が h に、 b が x に対応しているのでしょうか?
違う。仮引数の型は、
h :: Assoc a b
x :: a
v :: b
y :: a

これは、updateの型をAssocなしで書いてみると分かり易い。
update :: (a -> b) -> a -> b -> a -> b
        h     x   v   y
0558デフォルトの名無しさん2007/01/23(火) 19:05:54
>>557
返信ありがとうございます。

>これは、updateの型をAssocなしで書いてみると分かり易い。
>update :: (a -> b) -> a -> b -> a -> b
>        h     x   v   y

とのことですが、

update :: Assoc a b -> a -> b -> Assoc a b
という定義には、その
>update :: (a -> b) -> a -> b -> a -> b
>      h    x   v   y
                 ↑
にあるような、y に相当するパラメータの指定が、
関数定義に存在していないのが理解できません。

これは何か特殊な仕掛けがあるのでしょうか?
0559デフォルトの名無しさん2007/01/23(火) 19:07:50
>>558
ずれてる。>>557をもう一度見返して。
0560デフォルトの名無しさん2007/01/23(火) 19:35:24
>>558
もっと単純な例を挙げる。

foo :: Int -> String -> Bool

という関数があるとする。これはもちろん二引数関数。
括弧を補って丁寧に書くと、この型は次のようになる。(納得できないならカリー化を復習すべし)

foo :: Int -> (String -> Bool)

ここで(String -> Bool)の部分を別名に置き換えても意味は変わらない。

type StringProp = String -> Bool
foo :: Int -> StringProp

こう書くとfooはいかにも一引数関数だけど、型は最初のfooと変わらない。
よって、実装を書く際は引数を二つ使える。例えば、

foo :: Int -> StringProp
foo n s = length s < n

ついでだが、
>関数定義に存在していないのが理解できません。
「update :: Assoc a b -> a -> b -> Assoc a b」みたいなのは型シグネチャといって、
ふつう定義とはいわないと思う。
0561デフォルトの名無しさん2007/01/23(火) 19:54:15
Haskellの標準GUIライブラリはどこにありますか?
0562デフォルトの名無しさん2007/01/23(火) 20:58:58
どこにも。
0563デフォルトの名無しさん2007/01/23(火) 21:09:00
どこにでも。
0564デフォルトの名無しさん2007/01/23(火) 22:01:08
>>559
>>560
返信ありがとうございます。

理解するに至りました。
どうもありがとうございます。
0565デフォルトの名無しさん2007/01/24(水) 01:49:28
圏論コミュがありえない展開
0566デフォルトの名無しさん2007/01/24(水) 07:48:46
どこどこ
0567デフォルトの名無しさん2007/01/24(水) 18:11:51
どこにも。
0568デフォルトの名無しさん2007/01/24(水) 20:47:37
どこにでも。
0569デフォルトの名無しさん2007/01/27(土) 22:31:06
ソケットプログラミング(TCPもUDPも、IPv6も(!))したいんだが、
何を使うのがお勧め? GHCの付属モジュールにはないようなのだが。

とりあえず、socatという、STDIOをソケットにつなげるツールを
使ってwrapしてみようかとは思っているのだが。

そもそもHaskellでのネットワークプログラミングが、IOと同じ
要領でいいのかどうかも知らないけど。
0570デフォルトの名無しさん2007/01/27(土) 22:58:46
どれでも
0571デフォルトの名無しさん2007/01/27(土) 23:10:12
>>569
>GHCの付属モジュールにはないようなのだが。
Network.Socketじゃだめなのか?
0572デフォルトの名無しさん2007/01/27(土) 23:18:27
>571

な!

http://haskell.org/onlinereport/

が全てだと勘違いしてたよ。どうもありがと。
0573デフォルトの名無しさん2007/01/27(土) 23:18:40
GUIプログラミング(Windows上で)したいんだが、
何を使うのがお勧め? GHCの付属モジュールにはないようなのだが。
0574デフォルトの名無しさん2007/01/27(土) 23:27:34
Windowsだと一応Graphics.UI.ObjectIOがある。
でも資料がほとんどないねぇ。

GHC用のGUIライブラリってwxHaskell, gtk2hsとかほかにも幾つかあるけど、
2006年中に新バージョンがリリースされたものって1つもないよね。
0575デフォルトの名無しさん2007/01/28(日) 00:03:34
色んな人がライブラリを作ってたけど、どれも長続きしないね…
0576デフォルトの名無しさん2007/01/28(日) 00:31:28
サンプル見つけた よくできてる
http://www.haskell.org/ObjectIO/life.html
http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/hslibs/object-io/Examples/Life/

import Graphics.UI.ObjectIO
-- ghc hello.hs -package objectio -o hello.exe -optl "-Wl,--subsystem,windows"
main = startIO SDI () (openWindow undefined window) []
window = Window title controls attrs
  where
  title = "hello world"
  attrs = [ WindowClose $ noLS closeProcess, WindowViewDomain dom ]
  dom = Rectangle (Point2 0 0) (Point2 480 320)
controls = text :+: button
  where
  text = TextControl "Hello" [ControlPos (Center, Vector2 0 50)]
  button = ButtonControl "World" [pos, onClick]
    where
    pos = ControlPos (BelowPrev, Vector2 (-20) 20)
    onClick = ControlFunction $ noLS closeProcess
0577デフォルトの名無しさん2007/01/29(月) 18:44:30
ObjectIOは一度頓挫したのが引き継がれて、GHC-5.02の時期の更新を最後に
開発が止まってるね。
「GTKへの移植は次期リリースで」っていうのを見て期待してたんだけど。
0578デフォルトの名無しさん2007/01/29(月) 19:12:04
しかもVS2005を入れてもいいかなーって状況になりつつあって
気づいたらVisual Haskell 0.2が出てるんですが、
依然としてVisual Haskellさんは問題ありありな感じだったりします?
0579デフォルトの名無しさん2007/01/29(月) 19:30:04
>>578
もちろん、問題ありです。
現状では、Windowsでのプログラミング環境は、meadow + haskell-mode + GHCが一番使いやすいですね。
0580デフォルトの名無しさん2007/01/29(月) 19:49:30
あーやっぱそうですか
問題のありそな処理系使うほどもっさりIDE好きでもないのでスルーしておきますわ

アリガトウ アリガトウ
0581デフォルトの名無しさん2007/01/29(月) 20:08:20
>>580
IDE好きでないとのことですが、
IDEならEclipseもHaskellをサポートしているようですよ。
0582デフォルトの名無しさん2007/01/29(月) 20:25:26
情報ありがと
Eclipseも使う機会無くはないんですが冷静に考えると
haskellで大きいもの書くことがほぼ無いのでテキストエディタとghcで十分な感じです
0583デフォルトの名無しさん2007/01/29(月) 20:31:52
>>581

ttp://061196246067.cidr.odn.ne.jp/soutaro/20041004
> eclipseの標準入力がおかしいとか,実行ファイル名を指定できないとか,
> コンパイルオプションを指定できないとか,むきーってなる.

誰か、むきーってなった人いませんか?
0584デフォルトの名無しさん2007/01/29(月) 20:51:18
>>583
確かに、eclipseのhaskellプラグインも不完全だと思いました。
たとえば、内部でghciを起動したあと、そのプロセスを殺さずに、新たに内部でghciを起動すると、
前のghciのプロセスがそのまま残ってしまう、とか^^;
0585デフォルトの名無しさん2007/01/29(月) 20:54:08
あと、xyzzyのhs-modeも試してみましたが、
自動インデント機能がおかしくなる場合があるのを見つけたので、
結局、haskell-modeに落ち着いたわけです。
0586デフォルトの名無しさん2007/01/29(月) 21:01:37
>>584-585
情報アリガトウ
0587デフォルトの名無しさん2007/01/29(月) 21:26:42
漢は黙ってメモ帳+コマンドプロンプト
0588デフォルトの名無しさん2007/01/30(火) 05:53:45
hasktagって関数をちゃんと認識してくれないときがあるよね
0589デフォルトの名無しさん2007/01/30(火) 21:56:40
EclipseFPでHaskellのソースを
自動整形するのってどうやるの?

できなかったっけ?
0590デフォルトの名無しさん2007/01/30(火) 23:38:11
hasktagsのコードを見れば分かるが、
すんごい単純なコードだったよ。
ちょっと前の話なのであれだけど。
0591デフォルトの名無しさん2007/01/31(水) 15:15:10
さいきんC++でHaskellicなプログラムを書こうとして
名前の長さと括弧の多さにorzとなってる。
0592デフォルトの名無しさん2007/01/31(水) 15:42:09
>>591
C++ではどうがんばってもHaskellっぽく書くのは無理だと思う。
遅延評価ができないから。
0593デフォルトの名無しさん2007/01/31(水) 16:41:05
>>592
遅延評価ができなくとも、HaskellのリストをC++のイテレータだと思えば
リスト周りくらいはイテレータ間の変換として作れそうと思ったのです。
-- なんだかboostにありそうな気もするけど
0594デフォルトの名無しさん2007/01/31(水) 18:56:43
boost::iterator_adaptorsってやつ?
0595デフォルトの名無しさん2007/01/31(水) 19:23:54
http://d.hatena.ne.jp/Cryolite/20061211#p1
こういうのだろうか。

C++は驚くほどなんでもできるけど、何かしようとするといちいち手間が掛かるし、
細かい言語上の制約がうざったいので、遊び道具にするのも一苦労だ。
0596デフォルトの名無しさん2007/01/31(水) 20:08:27
smp版のghc(6.6)使ってる人いる?
core2duoのlinux上で試してるんだけど、独立した計算を2つのthreadで同時に
やると、1つずつやるより遅くなってしまう…

main = do
m1 <- newMVar iv
m2 <- newMVar iv
s3 <- takeMVar m1
s4 <- takeMVar m2
t1 <- forkIO (summer m1 80000000)
t2 <- forkIO (summer m2 80000000)  -- (1)
s1 <- takeMVar m1             -- (2)
s2 <- takeMVar m2
putStr $ "s1: " ++ (show s1) ++ " s2: " ++ (show s2)

summer m n = if s > 0 then putMVar m s else putMVar m 1
where s = summing n 0 -- summingは0からnまでの和を求める関数

上のcodeだと13秒くらいだが,(1)(2)を入れ替える(つまりthread t1の終了を待ってから
thread t2をはじめる)と、9秒くらいになる。
compile時は-smpをつけて、実行時には+RTS -N2を指定してるんだが…
0597デフォルトの名無しさん2007/02/01(木) 00:33:30
TemplateHaskellでコメントって扱えないのかな?
{-# NOINLINE hoge #-} を一杯生成したいんだが
05985962007/02/01(木) 19:57:45
誰かいませんかー?
0599デフォルトの名無しさん2007/02/01(木) 20:06:54
>>596
キャッシュ汚染のせいだと思う・・・
0600デフォルトの名無しさん2007/02/01(木) 20:25:58
>>599
どうもです。
一応summing(0からnまでの和を求める関数)も引数をeagerに評価させて
ほとんどメモリを消費しないようにしてるんだけど…

summing 0 a = a
summing n a | n > 0 && a >= 0 = summing (n-1) (a+n)

これでもキャッシュ汚染は起こりますか?
0601デフォルトの名無しさん2007/02/01(木) 23:03:28
高尚な話題の最中に素人っぽい話で割り込んでごめん。
HaskellのライブラリAPIって、ライブラリのソースから自動生成された
(あまり整理されているとは言えない)ドキュメントしかないの?
Network.Socket の使い方が全くわからず数日間悩んでいるのですが‥‥‥。

例えば receipe 集みたいなサイトご存知でしたら教えてください。
本は「ふつうの〜」しか持ってませんが、網羅的な本があったら
がんばって買ってもいいかも。
0602デフォルトの名無しさん2007/02/01(木) 23:07:53
「入門Haskell」ならある程度リファレンスになるけど、Networkは無いなあ…
0603デフォルトの名無しさん2007/02/01(木) 23:11:00
>>601
論文ぐらいしかないよ。
0604デフォルトの名無しさん2007/02/01(木) 23:30:55
>>601
それしかない。
Network.Socketについていうと、リファレンスにも書いてあるが、
インタフェースはCのAPIそのままだから、そっちを調べるべき。
関数に説明が付いていないのもこれが理由。
0605デフォルトの名無しさん2007/02/01(木) 23:33:18
キャッシュ汚染ってなーに?
0606P2Pソフトを妄想中2007/02/02(金) 00:24:58
>602-604

ありがとう。Cのsocket APIは理解しているつもりなので、想像はできたの
ですが、なんかHaskellicな書き方に慣れないせいか、もうちょっと手引きの
ようなものがあると楽なんですけどね。

なんとかがんばってみます。対向はとりあえずpythonあたりで作って
テスト環境を作ってみないと‥‥‥
0607デフォルトの名無しさん2007/02/02(金) 17:51:57
haskellよくわからないけど
あの不親切なドキュメントみながら書いてみた

import Network.Socket
main = putStrLn =<< do
sock <- socket AF_INET Stream 0
addr <- inet_addr "66.249.89.104" >>= \x -> return $ SockAddrInet 80 x
connect sock addr
send sock "GET / HTTP/1.1\nHost: www.google.co.jp\n\n"
recv sock 10000000 >>= \x -> sClose sock >> return x
0608デフォルトの名無しさん2007/02/02(金) 21:19:00
Network.Socket を利用する理由は?
ふつうにネットワークのクライアントプログラムを書くだけなら、 Network で充分じゃないかな。
それでは無理な細かいところを調整するために Network.Socket はある。

逆に言うと、そういう細かいところの欲求ってのはCレベルのAPIを叩きたいっ
てことなんだから、関数名と型名だけあれば、まあ充分なんじゃない。

使いづらいし、ちょっとわかりづらいってのは同意だが。
0609デフォルトの名無しさん2007/02/04(日) 23:36:03
Control.Monad.Stateってなくなるの?
代用品は?
0610P2Pソフトを妄想中2007/02/05(月) 09:39:47
>607

ありがとう。こっちも、
http://homepages.paradise.net.nz/warrickg/haskell/http/
っての見付けてきて勉強中です。

>608

UDP使いたいのですが、Networkでできる?
あとIPv6も(って、AF_INET6は定義されているが sockaddr_in6 に対応する
ものが無さげな罠‥‥‥)
0611デフォルトの名無しさん2007/02/05(月) 10:00:04
(´・ω・`)haskellにおけるキャッシュ汚染ってなんなのさ・・・
0612デフォルトの名無しさん2007/02/05(月) 11:52:32
>>609
詳しく。
0613デフォルトの名無しさん2007/02/05(月) 12:38:09
>611

Haskellじゃなくて、CPUのキャッシュをコンカレントなスレッドが
奪いあったのではないか、という指摘なんじゃないかと。

正直、core2duoのコアとキャッシュの関係を知らないので
そういうことがおこるかどうかは知らない。普通のSMPで、かつ
スケジューラが十分賢ければ、2つactiveなthreadが走ったら
それぞれのthreadをある程度固定化するようにスケジュールして
くれると思うんだけど。

06146112007/02/05(月) 13:26:20
>>613
さんくす。そういう問題もあるのか・・・。勉強になりますた。
0615デフォルトの名無しさん2007/02/05(月) 19:28:07
>596,>600 のプログラムだとワーキングセットが各コアのL1に十分おさまりそうだがな。
0616デフォルトの名無しさん2007/02/05(月) 21:43:29
とすると、
実はsmp対応になってなかっただけ、ってオチがいちばんありそうだな。
0617デフォルトの名無しさん2007/02/06(火) 00:58:28
Haskellわけわかんねぇ

まだ8bitのバイト列の書き出しすらできねぇ
俺様の頭は激しく悪いな


0618デフォルトの名無しさん2007/02/06(火) 01:27:51
つ[fromEnum 'a' => 97]
つ[putStr (map toEnum [104,111,103,101])]
つ[import Bits (.&. .|. xor shiftL shiftR)]
0619デフォルトの名無しさん2007/02/06(火) 01:38:04
>618

サンクス! さんざん苦労してこんなん書いてみたが馬鹿みたいだったな(笑)
頭固くなってしまったものだ‥‥‥ orz

class MessageElement a where
encode :: a->String
decode :: String->a

data MEWord8 = MEWord8 Word8 deriving (Show, Eq, Ord)
instance MessageElement MEWord8 where
encode (MEWord8 w8) = [(chr $ fromInteger $ toInteger w8)]
decode = MEWord8 . toEnum . ord . head

0620デフォルトの名無しさん2007/02/06(火) 09:42:40
キミの頭がわたしの200倍は良いことが判った

さぁVBの仕事してくるか・・・
0621デフォルトの名無しさん2007/02/07(水) 00:37:44
みんな〜 お・ま・ん・こ!

Haskell本二冊がどの本屋でも売れ残っているんだが、どっちがおしゅしゅめ?

ちなみに言語はZ80と6800のマシン語しか知らないよ。もう忘れたけど てへ 
0622デフォルトの名無しさん2007/02/07(水) 01:22:25
目を通してみて特に抵抗を感じないならふつうのHaskellの方がおまんこだと思う。
0623デフォルトの名無しさん2007/02/07(水) 01:36:35
どっちも似たり寄ったりのクズ本だけど、まだふつうのHaskellの方がマシだな。
2冊とも内容的に不十分なので、結局は生の論文を読むしかないと思う。
でも、はっきり言ってHaskellは流行らないと思うよ。
関数型言語の理論的なもとになっているラムダ計算自体が古くさい理論になりつつあるからね。
■ このスレッドは過去ログ倉庫に格納されています