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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:28:13 ]
haskell.org
www.haskell.org/

日本語サイト
www.sampou.org/cgi-bin/haskell.cgi
www.shido.info/hs/

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

・2chの仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。

403 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:50:16 ]
現状まともにプログラミングできる環境がemacsしかない
eclipseは使いづらいし、xyzzyのhaskell-modeはバグだらけだしwindowsでしか動かないし。

404 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:52:19 ]
>>402
モナドなんてHaskellではただのデータ型なんだから、別に難しいことなんかないよ。

405 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 09:01:44 ]
>>403
vim にもあるでしょ?俺は vim 使ってるよ

406 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 11:04:47 ]
俺は、viはほとんど使えないんだ。
設定ファイルをちょこっと編集するぐらいなら使うが、深い使い方は覚えてない。

407 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 15:34:50 ]
>>401
ここに由来が書いてあります。
www.haskell.org/haskellwiki/Pointfree

408 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:39:13 ]
darcs2って今までのdarcsとどう違うの

haskellの組み込み言語atomを詳しくおしえて

409 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 18:22:16 ]
関数型初心者です。

今、SICPを少しずつ読んでるのですが、set!のようなものをHaskellがモナド化するのは
単に純粋であることに拘るからでしょうか。IORefみたいなものがset!に当たるかと思います
が、副作用アリだぞ、ということを意識させる以上のメリットとかがよく分かりません。



410 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 20:10:23 ]
>>409
プログラマに直接メリットはない。

メリットは最適化コンパイラを作るのが楽になること。

411 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:05:03 ]
関数型言語をやる人の多くは、学生も含め研究者です。
研究テーマはプログラミング言語の中でも、
意味論やプログラム解析などが多く、
そういう研究では参照の透明性が非常に有益な性質です。

たとえば、Javaで盛んに研究されているエスケープ解析も、
初期の成果では、関数型言語で行われたものが多いです。

また参照の透明性を保つことは、実務プログラマにとっても大変有益で、
プログラムの簡明さを保つことにつながります。
良く理解すれば、他の言語でも使える一つの方法論を得たことになります。



412 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:32:28 ]
C99のコンパイラ作ってくれ。

413 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:33:24 ]
インタープリタで頼む。CなのにGCがオプションであったりとか。

414 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 08:18:04 ]
CINTがあるじゃないか

現状どうなってるか全く知らないけど

415 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 09:06:52 ]
>>410-411
そんな小難しい話しなくても、評価順の決まっていない言語で副作用を使うのが
どれだけ厄介か考えれば済むことじゃないか?

416 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 09:42:37 ]
>>409
確かに純粋であることに拘っているからという点は大きい。
しかし、それだけではなく、例えば、
Haskellではリストを使ったプログラムを書いている途中でそれを非決定性計算と
みなしてプログラムの一部を書くとか、IOに限らずモナドを気軽に使う人もいる。
そのためモナド一般を扱う便利関数(mapMとかモナド変換子とか)が多く用意されている。
IOがモナドになっているとそういった便利関数が使えるので便利。


また、モナドになっていると読みやすさのためにコードをまとめたり
移動させたりといった操作が気軽にできる。
例えば副作用のある言語で

f x = x + y + (副作用のある式)
where
y = (副作用のある式)

とかやるとどの順番で副作用が現れるかとか、yはどのタイミングで
何回評価されるのかわからない。
Haskellであればそのような問題はないので気軽にwhereにコードを
まとめたりできる。


417 名前:409 mailto:sage [2008/01/12(土) 11:02:27 ]
皆さん、ご回答ありがとうございます。

>>415
そうなんですが、モナドはdo記法が可能で、これは実質手続き型の
記述ですよね。手続き型の記述が関数型言語内で可能だから、IOが
モナドになっていると思うのです。

>>416
モナド自体は演算のリレーということで分かるんですが、副作用の発生
する式をそうする理由は、上に書いたように、単に順番が保証されるのが
モナドである、という以上の理由は無い気がします。

どちらかというと、>>410さんの書いていることがメインなのでしょうかね。




418 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 12:10:33 ]
モナドのおかげで、
CやSchemeよりコンパイラの最適化がより進むって事はないんで、
そこのところは誤解しないように。

参照の透明性から、プログラム変換しやすくなるので、
コンパイラの研究がやりやすいってだけ。


419 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 12:10:54 ]
>>417
>単に順番が保証されるのがモナドである
違う。遅延処理ではg . f(x)でf → gと簡約されるかどうかがわからないのと同じように
¥x -> mf >>= mg でmf → mgと簡約されるかどうかはわからない。

モナド自体には「計算のリレー」の意味はあるけど「順番に実行する」意味はない。
IOモナドみたいな奴は、計算のリレーが示すその一連のIOアクションがmainに渡されたときに
(遅延しないHaskell処理系が)順番に実行することで「順次実行」を実現している。

IOがモナドになっているのは「計算がリレーの形になっている」ことを保障させるためだけ。

UnsafeInterleaveIOはIOモナドから出してすぐ入れるだけの処理だけどIOアクションが遅延するようになる。
これは計算のリレーを途中で切断したからその部分だけ順次実行できなくなったんだね。
これを使ってる関数にはgetContentsやinterleaveとかがある。


420 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 14:57:58 ]
前に読んだことがある論文で、
HaskellのIOの実装に関する論文なんだが、
タイトルを忘れてしまった。
それらしい論文のタイトルを挙げてくれませんか?

421 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 15:08:02 ]
俺はsimonpjのこれが面白かった。
Tackling the awkward squad:
monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell
research.microsoft.com/%7Esimonpj/Papers/marktoberdorf/mark.pdf



422 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 17:23:16 ]
>>421
これだこれだ
ありがとう

423 名前:421 mailto:sage [2008/01/12(土) 18:09:21 ]
うぉー、一発的中!
ご褒美に最近読んで面白かったHaskell論文のタイトルくれ

424 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:35:49 ]
web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html
これに書かれてる、
> Ericssonによる 電話のソフトウェアを用いた一連の実験によれば、9から25倍の向上が 見られました
の部分の根拠となる論文って何?

425 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 12:27:39 ]
2組のタプルの値を交換する関数って
標準でありますか?

exTuple (x,y) = (y,x)

みたいな感じの。無いならいいんですが・・・。

426 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:26:01 ]
無いと思う。強いて言えばuncurry (flip (,))だけど。

427 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:39:28 ]
なるほど uncurry ですか。
flip (,) までは考えてたんですが

ありがとうございます。

428 名前:デフォルトの名無しさん [2008/01/14(月) 15:15:28 ]
十進数 (e.g. [1,2]) を二進数 (e.g. [1,1,0,0]) に変換するプログラムを,
foldl を用いて書け,という問題を連休中ずっと考えてるんですが,
脳味噌が手続き型で凝り固まっていてさっぱりわかりません.

どうやって書くのか教えて頂けませんか.

429 名前:デフォルトの名無しさん [2008/01/14(月) 15:19:02 ]
手続き的になら書けるの?

430 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:26:32 ]
教科書的に書こうとしてみたが、こんなんでいいか?
import List

-- n進数表示から整数へ
fromBaseN :: Integer -> [Integer] -> Integer
fromBaseN n ds = foldl f 0 ds
  where
    f acc d = n * acc + d

-- 整数からn進数表示へ
toBaseN :: Integer -> Integer -> [Integer]
toBaseN n 0 = [0]
toBaseN n x = reverse $ unfoldr f x
  where
    f 0 = Nothing
    f x = Just (mod x n, div x n)

-- 十進数から二進数へ
decToBin :: [Integer] -> [Integer]
decToBin = toBaseN 2 . fromBaseN 10

431 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:30:33 ]
>>430
教科書的なら一発でできる方法があるはずだ



432 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 20:10:49 ]
>>431
mjd?

433 名前:デフォルトの名無しさん [2008/01/14(月) 20:36:34 ]
ghc6.6のころはSystem.Console.Readlineってデフォルトではいってましたよね?
当方Windowsなんですが、
久しぶりにHaskellやろうと思って6.8.2をインストールしたんだけどSystem.Console.Readlineがない・・
一年くらい前につくったインタプリタがビルドできないっす;;
にわかなのでライブラリインストールもままならないのですが、cabal-installってWindowsでも使えますでしょうか?

434 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:05:11 ]
n進数→十進数をfoldlでやるならわかるけど
その逆は思いつかんなあ

435 名前:デフォルトの名無しさん [2008/01/14(月) 22:12:17 ]
なつめって初めて知ったけど、こんな所にも Haskell を使ってる人が居るとは面白い

natume.sourceforge.jp/

436 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:17:04 ]
重すぎて使い物にならないけどな

437 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:29:35 ]
>>433
Haskellプログラム書くならHaskell98に準拠しないと互換性なくなるぜ?

438 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:30:28 ]
どなたか>>424の質問の返答をおねがいします

439 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:18:49 ]
>>430
428 では無いんだが

Just (mod x n, div x n)

ここって modDiv 使った方が速いのか?
そうすると >>425 みたいなのを使うべき?

440 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:19:50 ]
modDiv -> divMod
だった。ごめん。

441 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:40:44 ]
>>439
divMod 使う方が速いんじゃないかな。
かといって>>425は読みにくいから
Just (r,q) where (q,r) = divMod x n
でいいんじゃない。



442 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 06:56:19 ]
なるほど、サンクス。

443 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 11:52:42 ]
数が小さいと分かっている時: (なおかつ実行効率が必要なら)
modとdivの計算コストは小さいから、
タプルを消費しないように書いた方がいい。

444 名前:430 mailto:sage [2008/01/16(水) 13:48:57 ]
実行効率なんて全然考えてなかったよ
とりあえず実測してみた。ghc-6.8.2 -O2、入力はrandomRIO (0, 2^16)で

19.6 19.2 toBaseN
14.2 14.6 toBaseN_where
12.6 13.1 toBaseN_loop
8.6 10.8 toBaseN_case
7.9 7.0 toBaseN_loop_case

左から、%time、%alloc、関数名。_whereは>>441のやりかた。_caseはwhere節の代わりにcase式を使ったもの
_loopはreverse+unfoldrの代わりに手でループ(末尾再帰)を書いたもの
総実行時間の約1/4がGCだった

数が小さくてもdivとmodのコストが大きいな

445 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 17:30:40 ]
無知でスマソ
末尾再帰ってことは $! を使ってるってこと?
良ければソースを見せて貰えませんか。

446 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:00:45 ]
>>445
なぜか$!に慣れないのでseqを使ってるけど

toBaseN_loop_case :: Integer -> Integer -> [Integer]
toBaseN_loop_case n 0 = [0]
toBaseN_loop_case n x = f x []
  where
    f 0 ds = ds
    f x ds = case divMod x n of
      (r, q) -> f r (q:ds)

toBaseN_loop :: Integer -> Integer -> [Integer]
toBaseN_loop n 0 = [0]
toBaseN_loop n x = f x []
  where
    f 0 ds = ds
    f x ds = let q = div x n; r = div x n in
      q `seq` r `seq` f r (q:ds)

447 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:22:34 ]
今気付いたけど、toBaseN_loopのdivは片方modじゃないといかんな
そういうわけで>>444の結果は間違ってる

448 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:16:16 ]
たかだか有限時間で終わる処理について実行効率など考える必要はない

449 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:17:04 ]
神様キター!

450 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:31:07 ]
>>448
人間が不快に感じるかどうかなんて些細な問題だよな

451 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:19:48 ]
だったら数学やっててくれ。



452 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:05:36 ]
>>448
512ビットの素因数分解だって有限時間でできますよ。

453 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 03:21:02 ]
>>448
お前の人生も有限時間で終わるぜ

454 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:02:31 ]
この宇宙は有限時間で終わりますか?

455 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 18:40:07 ]
どなたか
State モナドの使い方を
教えて貰えませんか?

456 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 18:58:23 ]
使いどころが知りたいのか書きかたが知りたいのか

457 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:20:13 ]
>>455
例が腐るほどWEB上にあるだろ
検索してみろよ

458 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:22:47 ]
使いどころです。

459 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:34:18 ]
>>458
入門書に載ってた例だけど、

・文字列を要素とする二分木が与えられたとき、その要素を整数に置換した木を得たい。
ただし同じ文字列は同じ整数に対応させること。例えば、


460 名前:459 mailto:sage [2008/01/19(土) 19:40:19 ]
途中送信御免

例えば、
(("hoge") "hage" (("fuga") "hage" ("fuga")))
という木なら
((0) 1 ((2) 1 (2)))
にする。

手続き型言語なら、実行した置換を記録しながら木を左から走査していけば良いわけだが、
Stateモナドを使えばHaskellでも同様に書ける。逆にStateモナドを使わずに写像を引き回すのは面倒。

461 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:49:50 ]
広範囲で変数を持ちまわるのに
普通の言語ではグローバル変数とかインスタンス変数に書き込んだりするけど、
そんなどこで変更されるかわからないようなアブナイことしなくても
(a,s) -> (b,s)の形で持ちまわればいいよね、ってのがStateモナドなんだから、
普通は変数を使う処理を考えればおのずから例はでてくるんじゃないか?



462 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 08:17:57 ]
>>461
「普通は変数を使う処理」の大部分はHaskellでStateモナドを使わずに綺麗に書ける。
だから混乱するんだと思うが。

463 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:37:59 ]
>>460
禿言うなヽ(`Д´)ノ

464 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:55:16 ]
>>460
hageにも人権をヽ(`Д´)ノ

465 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 10:36:58 ]
(("nukege") "usuge" (("fuga") "usuge" ("fuga")))

466 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 15:17:31 ]
オセロとか将棋とかの盤面のデータ構造についていつも迷うんだが、
いったいどういうデータ構造にするのが一番効率がいいのかね
2次元リストとか、Mapとか、いろいろあると思うが・・・

467 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 15:44:00 ]
>>466
よく使われるのは1次元配列とbit board

468 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 12:50:26 ]
ByteStringでのParsec実装が欲しいっす。

469 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 19:11:50 ]
そういえばParsecがどうやって実装されてるか知らない
ソース見てみたけど何か難しそうだ

470 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:03:19 ]
普通にモナドじゃないの?

471 名前:デフォルトの名無しさん [2008/01/29(火) 13:51:05 ]
log4*的なロガーライブラリってないでしょうか?



472 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:58:35 ]
>>471
実際に使ったことはないけど
つttp://hackage.haskell.org/packages/archive/pkg-list.html#cat:Interfaces

473 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:11:30 ]
>>472
おお!ありがとうございます。
試してみます

474 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:37:30 ]
質問です。

C言語で
int hoge(void) {
int x,i;
for(x=0, i=0; i<100000; i++) {
x=x+i;
}
return x;
}
をHaskellで書く場合は再帰で書くほうが良いのか、foldlで書くほうが良いのか分かりません。
他にも書き方があるかもしれませんが、一番メジャーなループの書き方を教えてください。

475 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:03:59 ]
まるで最低一種類は自力で書けるかのような言い方だな

476 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:09:44 ]
どんな場合にも一番いい方法が存在するかのような言い方だな

477 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:16:33 ]
>>474
俺は、再帰でない書き方をすぐに思い付かなかったときだけ再帰を使ってる
その例なら迷わずsum [0..100000]だな

478 名前:474 mailto:sage [2008/01/30(水) 16:19:09 ]
>>477
ありがとうございます。
その場合、リストはどのように処理されるのでしょう?
つまり、1000番目の要素を足しているときに、999番以下の要素はもはや必要ないわけですけれど、
sum関数が終了するまでメモリに記憶されているのでしょうか?

479 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:29:10 ]
>>478
どこからも参照されていないから、いつでもGCされうる状態
実際にメモリ上に残っているかどうかはGCのタイミング次第

480 名前:474 mailto:sage [2008/01/30(水) 16:34:17 ]
>>479
ありがとうございます。
では逆に1000番目の要素を足しているときに、1001番目の要素はすでに生成されているのでしょうか?
足す直前に生成されるのでしょうか?

481 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:50:17 ]
>>480
> 1001番目の要素
とはどういうものを意識してる?具体的にkwsk



482 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:52:05 ]
>>480
処理系と最適化オプションに依る

素朴な遅延評価だと前者
sum [0..100000]
==> foldl (+) 0 [0..100000]
==> foldl (+) 0 (0:[0+1..100000])
==> foldl (+) (0+0) [0+1..100000]
==> foldl (+) (0+0) (1:[1+1..100000])
==> foldl (+) (0+0+1) [1+1..100000]

==> foldl (+) (0+0+1+2+...+100000) []
==> 0+0+1+2+...+100000


だけど、例えばghc-6.8.2で-O2だと、Integer用に特殊化されたsumの実装が使われて、
foldlの蓄積引数が積極評価されるので後者になる

483 名前:482 mailto:sage [2008/01/30(水) 17:08:24 ]
分りにくい気がしたので補足

どっちの評価順でも、リスト生成は遅延される
ただし、素朴に遅延評価をやると足し算まで遅延するので、結果としてリストを走査し終わるまで足し算を開始できない
GHCの最適化は足し算を遅延させないようにするもの

484 名前:474 mailto:sage [2008/01/30(水) 17:08:53 ]
>>482
ありがとうございます。
とても参考になりました。

485 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:56:59 ]
イータ簡約って奴でしょ。
www.lambda-bound.com/book/lambdacalc/node21.html

486 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 18:22:54 ]
質問です。

sourceforge.net/project/showfiles.php?group_id=168626
で6.8.1用のwxHaskellをダウンロードしてインストールし、
Windows XPでwxHaskellのサンプル(Minimal.hs)を
ghc --make Minimal.hs
としてコンパイルしてみたのですが、
出来上がったMinimal.exeをエクスプローラからダブルクリックで実行すると
目的のウインドウとコマンドプロンプトのウインドウの両方が表示されてしまいます。
コマンドプロンプトのウインドウはとても邪魔なのですが、
これが表示しないようにするにはどうすればよいのでしょうか?
さらに、実行ファイルを配布する際にDLLを付属するのは格好が悪いので、
DLLを使わないコンパイル方法はないものでしょうか?

487 名前:486 mailto:sage [2008/01/30(水) 18:29:59 ]
前者の問題は過去スレを検索して解決できました。
コンパイルオプションに-optl-mwindowsをつければよいのですね。
早とちりしてすみません。

後者の方はまだ解決していません。

488 名前:486 mailto:sage [2008/01/30(水) 19:01:48 ]
ファイルがめちゃくちゃでかくなると思っていろいろ調べたのですが、

e.tir.jp/wiliki?hdn
> よく読んだら、「余分なデータの削除なるオプションで500KB弱になった」と書いてある。それらしいオプションは……
>
> --overlay=strip strip any extra data attached to the file [DANGEROUS]
>
> なんか、「DANGEROUS」って書いてあるんだが。

とありますが、ghc6.8.1ではそのオプションは削除されています。

e.tir.jp/wiliki?hdn
> stripと言えば、binutils付属のstripコマンドもあった。
> ...
> strip -s hsddd01.exe
> 2.3Mが1.1Mになった。バイナリの半分以上がシンボルでできていたのか……。

この方法はマニュアルの
www.haskell.org/ghc/docs/latest/html/users_guide/smaller.html
に言及されていました。

-funfolding-use-threshold0
というオプションをMinimal.hsのコンパイル時につけると逆に若干ファイルサイズが増えました。

489 名前:デフォルトの名無しさん [2008/01/31(木) 12:20:45 ]
GHC6.8.2(Win)でbytestring-0.9.0.4をつかって
-profフラグ付でコンパイルしようとすると

Perhaps you haven't installed the profiling libraries for package bytestring-0.9.0.4?

と出て失敗してしまいます。(profフラグをつけなければ成功します)
対処方ご存知の方いらっしゃいますか?

つか、ByteStringに変更してさらに遅くなった俺涙目

490 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 17:57:26 ]
>>488
その--overlay=stripはupxのオプションだろ

>>489
そのbytestringパッケージはどうやってインストールした?
cabalなら、configureのときに-pオプションを付けないとプロファイル版ライブラリがインストールされない

491 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:37:31 ]
質問です。

windows上でファイルのアンロックを明示的に行うにはどうすればよいのでしょうか?
ロックがかかったままのファイルに書き込みする必要があるのです。



492 名前:489 mailto:sage [2008/02/01(金) 12:44:40 ]
>>490
なるほど、ありがとうございます。
-p付でインストールしなおしてみます。

493 名前:デフォルトの名無しさん [2008/02/03(日) 17:41:55 ]
% cat hello.hs
main = putStrLn "こんにちは、世界!"

% ghc hello.hs -o hello
% ./hello
...... ←[ここは文字化け]

UTF-8でソースを書いて、コンパイル&実行したのですが、
文字化けします。

ver6.6.1(Ubuntu7.10のバイナリパッケージを使用)なのですが、
UTF-8は使えないのでしょうか?
コンパイルオプションが必要ですか?

494 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:05:27 ]
>>493
>>5-6参照

495 名前:492 mailto:sage [2008/02/03(日) 18:44:28 ]
>>493
どうもありがとうございます。
調べてみます。

496 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:46:49 ]
>>469
ふつケルの終わりのほうに超簡易Parsec実装の解説がある。

497 名前:デフォルトの名無しさん [2008/02/05(火) 12:00:00 ]
do記法がどのように(>>=)変換されているのかがよくわからないです。
たとえば
do { a <- return 1; Just 2 }

return 1 >>= (\a -> Just2)
なのはぎりぎりわかったような感じですが
3つ以上
do { a <- return 1; Just 2; return a }
だとどうなるのでしょうか?

498 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:13:23 ]
仕様を読めれば仕様を読むのが一番早い

499 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:29:01 ]
>>497
最初の一つだけ変換する
return 1 >>= (\a -> do Just 2; return a)
残ったdoも同じ規則で変換すれば良い。最終的には、
return 1 >>= \a -> Just 2 >> return a

500 名前:497 mailto:sage [2008/02/05(火) 12:31:43 ]
>>499
なるほど!ありがとうございます!

501 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:33:19 ]
>>500
do { a <- return 1
  ; Just 2
  }
って書くとemacsで見た目きれいにレイアウトできる。
>>=を使った場合、
return 1 >>= \a ->
Just 2
って書くときれいにレイアウトできる。
単に見た目の話だけど^^;;



502 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:28:19 ]
Haskell でも型のキャスト出来るんかね
リファレンス見てたらそれっぽいのが・・・。


503 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:31:47 ]
>>502
(1::Int32)






[ 続きを読む ] / [ 携帯版 ]

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

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