関数型プログラミング ..
367:デフォルトの名無しさん
07/12/17 09:27:14
WindowsでGHCなんか使うやつはバカです
368:デフォルトの名無しさん
07/12/17 11:39:39
同感
369:デフォルトの名無しさん
07/12/17 11:47:31
windowsではGHC以外に何が一番いいの?
370:デフォルトの名無しさん
07/12/17 16:08:40
>>365
(疎結合の)クラスタ範囲にまで並列化する
(普通のマルチコア・マルチCPU(どっちも共有メモリ)範囲の(半)自動並列化ならGHC本体だけでもできる)
そんなハード持ってなければどっちみち関係ない
371:デフォルトの名無しさん
07/12/17 22:55:51
____
/ \
/ ─ ─\ 今年もあと一ヶ月だお・・・
/ (●) (●) \
| (__人__) | ________
\  ̄ ./ .| | |
ノ \ | | |
/´ | | |
| l | | |
ヽ -一ー_~、⌒)^),-、 | |_________|
ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | |
/ ̄ ̄ ̄\
/ ─ ─ \
/ (●) (●) \. 俺はこの一年間何をしていたんだろう
| (__人__) | 2chで浪費した莫大な時間を何か有意義なことに使っていたら・・・
\ ` ⌒´ /
/ \
372:デフォルトの名無しさん
07/12/17 23:18:53
このスレは相当に有意義だと思うんだけどな。
つうか基本的に専門スレしか見ない人も多いと思うんだが。
今年も大変勉強になりました。
373:デフォルトの名無しさん
07/12/22 18:46:23
いまさらだが、
>>96
JavaScriptでもできるな
374:デフォルトの名無しさん
07/12/22 20:49:40
(>>=´∀`)
375:デフォルトの名無しさん
07/12/22 23:20:06
そこで具体的な事じゃなく漠然と「有意義な事」って言葉しか出ないなら
2ちゃんやらなくても結果は一緒だったと思うんだよ
376:デフォルトの名無しさん
07/12/23 00:04:51
日頃から頑迷そうな意見乙
377:デフォルトの名無しさん
07/12/24 12:55:59
哲板から転載
読んだ人いる?
圏論による論理学 高階論理とトポス
清水 義夫
ISBN978-4-13-012057-9,
発売日:2007年12月中旬,
判型:A5, 232頁
内容紹介
20世紀後半,数学,計算機科学,論理学などの分野で採用されてきている圏論.
関数概念を基本として現象をとらえようというこの方法を,
関数型高階論理とトポスを題材にして丁寧に解説する.
論理学の観点を中心に,圏論の考え方を紹介するテキスト.
主要目次
序
第1章 関数型高階論理
第2章 トポス
第3章 トポスの基本定理
第4章 プルバック関手f *の右-随伴関与Πf
第5章 リミット、空間性トポス、限定記号
結び
付録1 A∧( ) ┤A⊃( )のイメージ的理解
付録2 各章の課題
主な記号一覧/索引
378:デフォルトの名無しさん
07/12/24 12:57:43
>>377
立ち読みしたが、俺らには全く関係ないよ
379:デフォルトの名無しさん
07/12/24 12:59:29
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●不合格●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
これを見た人は確実に【不合格】です。これをコピペでどこかに1回貼れば回避できます。
これは本当です。やらないと一年無駄になります.
私も最初は嘘だと思ったんですが、一応コピペしました。それで第一志望に合格出来ました。
けどコピペしなかった友達がA判定とっていたのに、おちたんです。(慶応合格h.sさん)
俺はもうE判定で記念受験だったんだけど、コピペを10回くらいした途端に過去問が
スラスラ解けるようになって、なんと念願の開成に受かりました。(開成合格r.kくん)
これを今年の試験前に見てシカトしたら、入試でミスって最悪です。(n.aさん)
380:デフォルトの名無しさん
07/12/24 16:34:29
tasukete
381:デフォルトの名無しさん
07/12/24 16:37:43
>>380
通報しますた
382:デフォルトの名無しさん
07/12/25 08:38:38
>>378
関係ないことないだろ。
Haskellの型システムを理論的に理解する時など。
383:デフォルトの名無しさん
07/12/25 08:51:28
しみろん、懐かしいな…
384:デフォルトの名無しさん
07/12/25 11:43:56
すげー久しぶりに しみろん 見た…
385:デフォルトの名無しさん
07/12/26 19:57:10
liftM と fmap が一致しない場合ってあるの?
386:デフォルトの名無しさん
07/12/26 21:11:49
>383-384
東大OB乙
387:デフォルトの名無しさん
07/12/28 18:50:21
二ヶ月ほど前に撮った写真です
場所はバトルロワイヤルの撮影地にもなった
軍艦島での一枚です。
URLリンク(www.uploda.net)
撮影し現像した物を
心霊写真がないかな〜っと面白半分で探していると
偶然にも一枚だけ物凄い写真が在りました
最初に見えたのは右下の子供の様な顔です
左にはボーっと立ち尽くし
こっちを見ている子供がうっすらと写っています
上部には青白い叫び顔があります
それだけではありません
探せば探すほど気持ち悪い顔があるのです
私は現在で約30ほどの顔を見つけました、全てこっちを見ています
探せば探すほどあまりにも出てくるので
気持ち悪くなり頭が痛くなりました
この写真ですが、ある友人に貸した所
夜に1時間程笑い声の様なものが聞こえてかなり
怖かったらしいです・・・
霊感がある方はぜひ鑑定をお願い致します。
因みに、スキャナーで高画質でスキャンした上で
見易いように画質調整をしています
ですのでファイルサイズが9MBにもなります・・・
388:デフォルトの名無しさん
07/12/28 21:23:54
>>387
スレ違い
画像処理 その10
スレリンク(tech板)
389:デフォルトの名無しさん
07/12/29 00:40:56
ワロタ
390:デフォルトの名無しさん
07/12/31 18:01:51
初心者レスです。
既出や意味不明な質問でしたらすみません。
ポイントフリースタイルって言葉がありますよね。
仮引数を無くして、関数を関数だけで定義するという意味で。
firstNLines n cs = (unlines . take n . lines) cs
上のような関数が定義されていたとして、
仮引数を減らす仮定で
firstNLines n = unlines . take n . lines
上のように書けますよね。
更に仮引数 n を無くす場合
firstNLines = (. lines) . (unlines .) . take
と書けると思うんですが
ポイントフリースタイルとなった最後の定義式を見て
理解しやすくなったとは思えないのです。
積極的に使うべきなのでしょうか。
391:デフォルトの名無しさん
07/12/31 18:07:32
わかりやすいほうでいいんじゃない?
ごちゃごちゃしてるのがいやならポイントフリーで。
392:デフォルトの名無しさん
07/12/31 19:15:14
なんでもポイントフリーにするのは難読化への道を歩んでしまいかねん。
とりあえず二つ目のfirstNLines nみたいに普通に使ううちは
型を明示してれば分かりにくくなることも無いけど、
度を過ぎた奴はコードの修正とかも考えると扱いにくいわ読みにくいわでいろいろと面倒だし、
ポイントフリースタイルが時にはポイントレス(要領の悪い)スタイルといわれることもある
ってHaskellWikiに書いてた
俺もflipとかドットとか使いまくったコードを読むのは嫌い。
でも書いてる奴からするとパズルみたいで楽しいんだろうなあ、とか。
393:389
07/12/31 19:29:48
ポイントレススタイル・・・。
書くときは頭の体操になるかもしれませんが
読む方からすると大変ですよね。
394:デフォルトの名無しさん
07/12/31 21:34:10
ポイントフリースタイルにすると点 . がどんどん増えてぜんぜんポイントフリーじゃないよ(笑
395:デフォルトの名無しさん
07/12/31 22:03:28
map ($ 3) [(+1),((-)2),(/3),(*4)] とか書くと単純なことなのになんか愉快だよね、たしかに
396:デフォルトの名無しさん
07/12/31 23:38:55
なんだその記号だらけの読みにくい奇怪なコードは
397:デフォルトの名無しさん
08/01/01 00:16:55
あけましておめでとうございます。
今年は Haskeller になれるように頑張りまふ(`・ω・´)!!
398:デフォルトの名無しさん
08/01/01 10:27:49
俺もだ!
今年こそはHaskellマスターになる
399:デフォルトの名無しさん
08/01/01 11:08:26
>>395
少し愉快になれた(゚∀゚)
400:デフォルトの名無しさん
08/01/01 17:35:39
今更だけど
>>52
の説明に感動した。
401:デフォルトの名無しさん
08/01/01 18:08:19
>>394
ポイントって確か関数合成演算子じゃなくて「値」のことだったかと
まあそれを踏まえて言ってるのかもしれないけど
402:デフォルトの名無しさん
08/01/09 00:26:20
モナド難しいよ。
みんなエディタは何使ってる?
Emacs が多いのかな。
403:デフォルトの名無しさん
08/01/09 00:50:16
現状まともにプログラミングできる環境がemacsしかない
eclipseは使いづらいし、xyzzyのhaskell-modeはバグだらけだしwindowsでしか動かないし。
404:デフォルトの名無しさん
08/01/09 00:52:19
>>402
モナドなんてHaskellではただのデータ型なんだから、別に難しいことなんかないよ。
405:デフォルトの名無しさん
08/01/09 09:01:44
>>403
vim にもあるでしょ?俺は vim 使ってるよ
406:デフォルトの名無しさん
08/01/09 11:04:47
俺は、viはほとんど使えないんだ。
設定ファイルをちょこっと編集するぐらいなら使うが、深い使い方は覚えてない。
407:デフォルトの名無しさん
08/01/09 15:34:50
>>401
ここに由来が書いてあります。
URLリンク(www.haskell.org)
408:デフォルトの名無しさん
08/01/09 17:39:13
darcs2って今までのdarcsとどう違うの
haskellの組み込み言語atomを詳しくおしえて
409:デフォルトの名無しさん
08/01/11 18:22:16
関数型初心者です。
今、SICPを少しずつ読んでるのですが、set!のようなものをHaskellがモナド化するのは
単に純粋であることに拘るからでしょうか。IORefみたいなものがset!に当たるかと思います
が、副作用アリだぞ、ということを意識させる以上のメリットとかがよく分かりません。
410:デフォルトの名無しさん
08/01/11 20:10:23
>>409
プログラマに直接メリットはない。
メリットは最適化コンパイラを作るのが楽になること。
411:デフォルトの名無しさん
08/01/12 04:05:03
関数型言語をやる人の多くは、学生も含め研究者です。
研究テーマはプログラミング言語の中でも、
意味論やプログラム解析などが多く、
そういう研究では参照の透明性が非常に有益な性質です。
たとえば、Javaで盛んに研究されているエスケープ解析も、
初期の成果では、関数型言語で行われたものが多いです。
また参照の透明性を保つことは、実務プログラマにとっても大変有益で、
プログラムの簡明さを保つことにつながります。
良く理解すれば、他の言語でも使える一つの方法論を得たことになります。
412:デフォルトの名無しさん
08/01/12 04:32:28
C99のコンパイラ作ってくれ。
413:デフォルトの名無しさん
08/01/12 04:33:24
インタープリタで頼む。CなのにGCがオプションであったりとか。
414:デフォルトの名無しさん
08/01/12 08:18:04
CINTがあるじゃないか
現状どうなってるか全く知らないけど
415:デフォルトの名無しさん
08/01/12 09:06:52
>>410-411
そんな小難しい話しなくても、評価順の決まっていない言語で副作用を使うのが
どれだけ厄介か考えれば済むことじゃないか?
416:デフォルトの名無しさん
08/01/12 09:42:37
>>409
確かに純粋であることに拘っているからという点は大きい。
しかし、それだけではなく、例えば、
Haskellではリストを使ったプログラムを書いている途中でそれを非決定性計算と
みなしてプログラムの一部を書くとか、IOに限らずモナドを気軽に使う人もいる。
そのためモナド一般を扱う便利関数(mapMとかモナド変換子とか)が多く用意されている。
IOがモナドになっているとそういった便利関数が使えるので便利。
また、モナドになっていると読みやすさのためにコードをまとめたり
移動させたりといった操作が気軽にできる。
例えば副作用のある言語で
f x = x + y + (副作用のある式)
where
y = (副作用のある式)
とかやるとどの順番で副作用が現れるかとか、yはどのタイミングで
何回評価されるのかわからない。
Haskellであればそのような問題はないので気軽にwhereにコードを
まとめたりできる。
417:409
08/01/12 11:02:27
皆さん、ご回答ありがとうございます。
>>415
そうなんですが、モナドはdo記法が可能で、これは実質手続き型の
記述ですよね。手続き型の記述が関数型言語内で可能だから、IOが
モナドになっていると思うのです。
>>416
モナド自体は演算のリレーということで分かるんですが、副作用の発生
する式をそうする理由は、上に書いたように、単に順番が保証されるのが
モナドである、という以上の理由は無い気がします。
どちらかというと、>>410さんの書いていることがメインなのでしょうかね。
418:デフォルトの名無しさん
08/01/12 12:10:33
モナドのおかげで、
CやSchemeよりコンパイラの最適化がより進むって事はないんで、
そこのところは誤解しないように。
参照の透明性から、プログラム変換しやすくなるので、
コンパイラの研究がやりやすいってだけ。
419:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/12 14:57:58
前に読んだことがある論文で、
HaskellのIOの実装に関する論文なんだが、
タイトルを忘れてしまった。
それらしい論文のタイトルを挙げてくれませんか?
421:デフォルトの名無しさん
08/01/12 15:08:02
俺はsimonpjのこれが面白かった。
Tackling the awkward squad:
monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell
URLリンク(research.microsoft.com)
422:デフォルトの名無しさん
08/01/12 17:23:16
>>421
これだこれだ
ありがとう
423:421
08/01/12 18:09:21
うぉー、一発的中!
ご褒美に最近読んで面白かったHaskell論文のタイトルくれ
424:デフォルトの名無しさん
08/01/14 02:35:49
URLリンク(web.yl.is.s.u-tokyo.ac.jp)
これに書かれてる、
> Ericssonによる 電話のソフトウェアを用いた一連の実験によれば、9から25倍の向上が 見られました
の部分の根拠となる論文って何?
425:デフォルトの名無しさん
08/01/14 12:27:39
2組のタプルの値を交換する関数って
標準でありますか?
exTuple (x,y) = (y,x)
みたいな感じの。無いならいいんですが・・・。
426:デフォルトの名無しさん
08/01/14 13:26:01
無いと思う。強いて言えばuncurry (flip (,))だけど。
427:デフォルトの名無しさん
08/01/14 13:39:28
なるほど uncurry ですか。
flip (,) までは考えてたんですが
ありがとうございます。
428:デフォルトの名無しさん
08/01/14 15:15:28
十進数 (e.g. [1,2]) を二進数 (e.g. [1,1,0,0]) に変換するプログラムを,
foldl を用いて書け,という問題を連休中ずっと考えてるんですが,
脳味噌が手続き型で凝り固まっていてさっぱりわかりません.
どうやって書くのか教えて頂けませんか.
429:デフォルトの名無しさん
08/01/14 15:19:02
手続き的になら書けるの?
430:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/14 15:30:33
>>430
教科書的なら一発でできる方法があるはずだ
432:デフォルトの名無しさん
08/01/14 20:10:49
>>431
mjd?
433:デフォルトの名無しさん
08/01/14 20:36:34
ghc6.6のころはSystem.Console.Readlineってデフォルトではいってましたよね?
当方Windowsなんですが、
久しぶりにHaskellやろうと思って6.8.2をインストールしたんだけどSystem.Console.Readlineがない・・
一年くらい前につくったインタプリタがビルドできないっす;;
にわかなのでライブラリインストールもままならないのですが、cabal-installってWindowsでも使えますでしょうか?
434:デフォルトの名無しさん
08/01/14 21:05:11
n進数→十進数をfoldlでやるならわかるけど
その逆は思いつかんなあ
435:デフォルトの名無しさん
08/01/14 22:12:17
なつめって初めて知ったけど、こんな所にも Haskell を使ってる人が居るとは面白い
URLリンク(natume.sourceforge.jp)
436:デフォルトの名無しさん
08/01/15 00:17:04
重すぎて使い物にならないけどな
437:デフォルトの名無しさん
08/01/15 00:29:35
>>433
Haskellプログラム書くならHaskell98に準拠しないと互換性なくなるぜ?
438:デフォルトの名無しさん
08/01/15 00:30:28
どなたか>>424の質問の返答をおねがいします
439:デフォルトの名無しさん
08/01/15 03:18:49
>>430
428 では無いんだが
Just (mod x n, div x n)
ここって modDiv 使った方が速いのか?
そうすると >>425 みたいなのを使うべき?
440:デフォルトの名無しさん
08/01/15 03:19:50
modDiv -> divMod
だった。ごめん。
441:デフォルトの名無しさん
08/01/16 00:40:44
>>439
divMod 使う方が速いんじゃないかな。
かといって>>425は読みにくいから
Just (r,q) where (q,r) = divMod x n
でいいんじゃない。
442:デフォルトの名無しさん
08/01/16 06:56:19
なるほど、サンクス。
443:デフォルトの名無しさん
08/01/16 11:52:42
数が小さいと分かっている時: (なおかつ実行効率が必要なら)
modとdivの計算コストは小さいから、
タプルを消費しないように書いた方がいい。
444:430
08/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:デフォルトの名無しさん
08/01/16 17:30:40
無知でスマソ
末尾再帰ってことは $! を使ってるってこと?
良ければソースを見せて貰えませんか。
446:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/16 19:22:34
今気付いたけど、toBaseN_loopのdivは片方modじゃないといかんな
そういうわけで>>444の結果は間違ってる
448:デフォルトの名無しさん
08/01/17 19:16:16
たかだか有限時間で終わる処理について実行効率など考える必要はない
449:デフォルトの名無しさん
08/01/17 19:17:04
神様キター!
450:デフォルトの名無しさん
08/01/17 21:31:07
>>448
人間が不快に感じるかどうかなんて些細な問題だよな
451:デフォルトの名無しさん
08/01/17 22:19:48
だったら数学やっててくれ。
452:デフォルトの名無しさん
08/01/18 00:05:36
>>448
512ビットの素因数分解だって有限時間でできますよ。
453:デフォルトの名無しさん
08/01/19 03:21:02
>>448
お前の人生も有限時間で終わるぜ
454:デフォルトの名無しさん
08/01/19 10:02:31
この宇宙は有限時間で終わりますか?
455:デフォルトの名無しさん
08/01/19 18:40:07
どなたか
State モナドの使い方を
教えて貰えませんか?
456:デフォルトの名無しさん
08/01/19 18:58:23
使いどころが知りたいのか書きかたが知りたいのか
457:デフォルトの名無しさん
08/01/19 19:20:13
>>455
例が腐るほどWEB上にあるだろ
検索してみろよ
458:デフォルトの名無しさん
08/01/19 19:22:47
使いどころです。
459:デフォルトの名無しさん
08/01/19 19:34:18
>>458
入門書に載ってた例だけど、
・文字列を要素とする二分木が与えられたとき、その要素を整数に置換した木を得たい。
ただし同じ文字列は同じ整数に対応させること。例えば、
460:459
08/01/19 19:40:19
途中送信御免
例えば、
(("hoge") "hage" (("fuga") "hage" ("fuga")))
という木なら
((0) 1 ((2) 1 (2)))
にする。
手続き型言語なら、実行した置換を記録しながら木を左から走査していけば良いわけだが、
Stateモナドを使えばHaskellでも同様に書ける。逆にStateモナドを使わずに写像を引き回すのは面倒。
461:デフォルトの名無しさん
08/01/19 21:49:50
広範囲で変数を持ちまわるのに
普通の言語ではグローバル変数とかインスタンス変数に書き込んだりするけど、
そんなどこで変更されるかわからないようなアブナイことしなくても
(a,s) -> (b,s)の形で持ちまわればいいよね、ってのがStateモナドなんだから、
普通は変数を使う処理を考えればおのずから例はでてくるんじゃないか?
462:デフォルトの名無しさん
08/01/20 08:17:57
>>461
「普通は変数を使う処理」の大部分はHaskellでStateモナドを使わずに綺麗に書ける。
だから混乱するんだと思うが。
463:デフォルトの名無しさん
08/01/20 19:37:59
>>460
禿言うなヽ(`Д´)ノ
464:デフォルトの名無しさん
08/01/20 20:55:16
>>460
hageにも人権をヽ(`Д´)ノ
465:デフォルトの名無しさん
08/01/22 10:36:58
(("nukege") "usuge" (("fuga") "usuge" ("fuga")))
466:デフォルトの名無しさん
08/01/23 15:17:31
オセロとか将棋とかの盤面のデータ構造についていつも迷うんだが、
いったいどういうデータ構造にするのが一番効率がいいのかね
2次元リストとか、Mapとか、いろいろあると思うが・・・
467:デフォルトの名無しさん
08/01/23 15:44:00
>>466
よく使われるのは1次元配列とbit board
468:デフォルトの名無しさん
08/01/24 12:50:26
ByteStringでのParsec実装が欲しいっす。
469:デフォルトの名無しさん
08/01/24 19:11:50
そういえばParsecがどうやって実装されてるか知らない
ソース見てみたけど何か難しそうだ
470:デフォルトの名無しさん
08/01/24 23:03:19
普通にモナドじゃないの?
471:デフォルトの名無しさん
08/01/29 13:51:05
log4*的なロガーライブラリってないでしょうか?
472:デフォルトの名無しさん
08/01/29 13:58:35
>>471
実際に使ったことはないけど
つURLリンク(hackage.haskell.org)
473:デフォルトの名無しさん
08/01/29 14:11:30
>>472
おお!ありがとうございます。
試してみます
474:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/30 16:03:59
まるで最低一種類は自力で書けるかのような言い方だな
476:デフォルトの名無しさん
08/01/30 16:09:44
どんな場合にも一番いい方法が存在するかのような言い方だな
477:デフォルトの名無しさん
08/01/30 16:16:33
>>474
俺は、再帰でない書き方をすぐに思い付かなかったときだけ再帰を使ってる
その例なら迷わずsum [0..100000]だな
478:474
08/01/30 16:19:09
>>477
ありがとうございます。
その場合、リストはどのように処理されるのでしょう?
つまり、1000番目の要素を足しているときに、999番以下の要素はもはや必要ないわけですけれど、
sum関数が終了するまでメモリに記憶されているのでしょうか?
479:デフォルトの名無しさん
08/01/30 16:29:10
>>478
どこからも参照されていないから、いつでもGCされうる状態
実際にメモリ上に残っているかどうかはGCのタイミング次第
480:474
08/01/30 16:34:17
>>479
ありがとうございます。
では逆に1000番目の要素を足しているときに、1001番目の要素はすでに生成されているのでしょうか?
足す直前に生成されるのでしょうか?
481:デフォルトの名無しさん
08/01/30 16:50:17
>>480
> 1001番目の要素
とはどういうものを意識してる?具体的にkwsk
482:デフォルトの名無しさん
08/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
08/01/30 17:08:24
分りにくい気がしたので補足
どっちの評価順でも、リスト生成は遅延される
ただし、素朴に遅延評価をやると足し算まで遅延するので、結果としてリストを走査し終わるまで足し算を開始できない
GHCの最適化は足し算を遅延させないようにするもの
484:474
08/01/30 17:08:53
>>482
ありがとうございます。
とても参考になりました。
485:デフォルトの名無しさん
08/01/30 17:56:59
イータ簡約って奴でしょ。
URLリンク(www.lambda-bound.com)
486:デフォルトの名無しさん
08/01/30 18:22:54
質問です。
URLリンク(sourceforge.net)
で6.8.1用のwxHaskellをダウンロードしてインストールし、
Windows XPでwxHaskellのサンプル(Minimal.hs)を
ghc --make Minimal.hs
としてコンパイルしてみたのですが、
出来上がったMinimal.exeをエクスプローラからダブルクリックで実行すると
目的のウインドウとコマンドプロンプトのウインドウの両方が表示されてしまいます。
コマンドプロンプトのウインドウはとても邪魔なのですが、
これが表示しないようにするにはどうすればよいのでしょうか?
さらに、実行ファイルを配布する際にDLLを付属するのは格好が悪いので、
DLLを使わないコンパイル方法はないものでしょうか?
487:486
08/01/30 18:29:59
前者の問題は過去スレを検索して解決できました。
コンパイルオプションに-optl-mwindowsをつければよいのですね。
早とちりしてすみません。
後者の方はまだ解決していません。
488:486
08/01/30 19:01:48
ファイルがめちゃくちゃでかくなると思っていろいろ調べたのですが、
URLリンク(e.tir.jp)
> よく読んだら、「余分なデータの削除なるオプションで500KB弱になった」と書いてある。それらしいオプションは……
>
> --overlay=strip strip any extra data attached to the file [DANGEROUS]
>
> なんか、「DANGEROUS」って書いてあるんだが。
とありますが、ghc6.8.1ではそのオプションは削除されています。
URLリンク(e.tir.jp)
> stripと言えば、binutils付属のstripコマンドもあった。
> ...
> strip -s hsddd01.exe
> 2.3Mが1.1Mになった。バイナリの半分以上がシンボルでできていたのか……。
この方法はマニュアルの
URLリンク(www.haskell.org)
に言及されていました。
-funfolding-use-threshold0
というオプションをMinimal.hsのコンパイル時につけると逆に若干ファイルサイズが増えました。
489:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/31 17:57:26
>>488
その--overlay=stripはupxのオプションだろ
>>489
そのbytestringパッケージはどうやってインストールした?
cabalなら、configureのときに-pオプションを付けないとプロファイル版ライブラリがインストールされない
491:デフォルトの名無しさん
08/02/01 02:37:31
質問です。
windows上でファイルのアンロックを明示的に行うにはどうすればよいのでしょうか?
ロックがかかったままのファイルに書き込みする必要があるのです。
492:489
08/02/01 12:44:40
>>490
なるほど、ありがとうございます。
-p付でインストールしなおしてみます。
493:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/03 18:05:27
>>493
>>5-6参照
495:492
08/02/03 18:44:28
>>493
どうもありがとうございます。
調べてみます。
496:デフォルトの名無しさん
08/02/03 21:46:49
>>469
ふつケルの終わりのほうに超簡易Parsec実装の解説がある。
497:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/05 12:13:23
仕様を読めれば仕様を読むのが一番早い
499:デフォルトの名無しさん
08/02/05 12:29:01
>>497
最初の一つだけ変換する
return 1 >>= (\a -> do Just 2; return a)
残ったdoも同じ規則で変換すれば良い。最終的には、
return 1 >>= \a -> Just 2 >> return a
500:497
08/02/05 12:31:43
>>499
なるほど!ありがとうございます!
501:デフォルトの名無しさん
08/02/06 15:33:19
>>500
do { a <- return 1
; Just 2
}
って書くとemacsで見た目きれいにレイアウトできる。
>>=を使った場合、
return 1 >>= \a ->
Just 2
って書くときれいにレイアウトできる。
単に見た目の話だけど^^;;
502:デフォルトの名無しさん
08/02/08 00:28:19
Haskell でも型のキャスト出来るんかね
リファレンス見てたらそれっぽいのが・・・。
503:デフォルトの名無しさん
08/02/08 00:31:47
>>502
(1::Int32)
504:デフォルトの名無しさん
08/02/08 11:53:24
>>503
キャスト自体は無いから、いちいち関数を使う
数値型の変換ならfromIntegralとかfloorとか
ポインタの変換ならcastPtr
ダウンキャストみたいに、実行時のデータから型情報を復元するのはData.Typeable.cast
>>503の構文は、型推論の補助として型を指定してるだけで、変換してるわけじゃない
505:デフォルトの名無しさん
08/02/08 16:20:26
ダウンキャストに相当するのがあるのか。
506:デフォルトの名無しさん
08/02/08 20:12:04
unsafeCoerceはどうよ?
507:デフォルトの名無しさん
08/02/08 20:26:50
>>506
忘れてた
変換前と変換後の型の内部表現が同じであることを前提として、問答無用で型を変換するのが
unsafeCoerce :: a -> b
Data.Typeableのキャストはこれをラップして安全にしたもの
508:デフォルトの名無しさん
08/02/09 14:13:19
ふつうのHaskell読み終えて、WikiBookとか眺めてるんですけど、ある程度まとまった
Haskellプログラムの実例が載ってる本というと、Craftになりますか?
ちょっと高価な本なので、買おうか迷ってます。
509:デフォルトの名無しさん
08/02/11 15:35:27
>>94-96
URLリンク(research.microsoft.com)
4.4 Declaration style vs expression style
510:デフォルトの名無しさん
08/02/15 19:30:20
Kleisliってなんて読むの?
511:デフォルトの名無しさん
08/02/15 19:31:04
クライスリーじゃないの?
512:デフォルトの名無しさん
08/02/15 19:33:20
>>510
クレイスリ
513:デフォルトの名無しさん
08/02/15 20:04:55
クレイスリ に一致するページは見つかりませんでした。
514:デフォルトの名無しさん
08/02/15 20:32:57
クライスリーだって該当する記述が2chしかないじゃないかよ。
515:デフォルトの名無しさん
08/02/15 20:35:58
とりあえずドイツ語っぽい綴りを
ドイツ語の規則に従って読んでる点で
クライスリーの方が信憑性はある
516:デフォルトの名無しさん
08/02/15 20:39:36
TeXをテックと読むのはおかしいですか
Linuxをライナックスと読むのはおかしいですか
517:デフォルトの名無しさん
08/02/15 20:43:06
おかしい
518:デフォルトの名無しさん
08/02/15 20:44:15
↑でもそういう風に読んでる人結構いるよ
519:デフォルトの名無しさん
08/02/15 20:45:10
大団円を大円団と勘違いしている人は
それはそれで正しいと申すか
520:デフォルトの名無しさん
08/02/15 20:46:27
俺、小さいころミートボールとゲートボールの違いが分からなかった
521:デフォルトの名無しさん
08/02/15 20:47:54
>>516
これは米語読みだから、
金日正を「きんにっせい」と読むようなもの。
特に問題ない。
522:デフォルトの名無しさん
08/02/15 20:48:09
英語っぽっくウィヌックスで
523:デフォルトの名無しさん
08/02/15 21:34:53
クライスリーでおk?
524:デフォルトの名無しさん
08/02/15 21:43:55
別に何でもOK
525:デフォルトの名無しさん
08/02/15 21:44:19
数学板で聞いてみたら?
526:デフォルトの名無しさん
08/02/15 22:15:00
エルアイエヌユーエックスって読んでた・・・
527:デフォルトの名無しさん
08/02/15 22:28:35
URLリンク(dev.ariel-networks.com)
頭の悪いHaskell厨増殖しすぎwwwwwwww
528:デフォルトの名無しさん
08/02/16 08:55:10
>>527
Haskellコミュニティを大事にする積もりがあるなら、間違ってると思うところを指摘してやれよw
529:デフォルトの名無しさん
08/02/17 21:01:38
ゆりしー(´;ω;`)かわいそうです みなとらじお 君が主で執事が俺で 02
URLリンク(www.nicovideo.jp)
伊藤静「じゃあ、次もwww」
後藤邑子「斬ったほうがいい?www」
伊藤「次は斬る?www」
後藤「どうするww」
伊藤「ペンネーム『心が綺麗な天使』から頂きましったww(フンッwww) 私はこの日本に住むのにはピュアすぎます。どのようにしたら天使のような私がこの今の日本に馴染めるのでしょうか?」
後藤「.........ウザい」
二人「キャッハハハハハwwwww」
伊藤「ちょほんとさあ、大丈夫?www」
後藤「おい天使、おいおい自称天使ww」
伊藤「自分が天使だと思ってること自体がちょっと間違ってんじゃないの?っていうねwww」
後藤「うん。ね。ちょっと軽く(精神病院に)通院してみたほうがいいんじゃないの?www もしくは、今の日本に馴染めるようにちょっと汚れちゃえよwwww」
伊藤「それかもう日本出て行ったらいいんじゃないの?www」
後藤「天使が住める国にwwwwwww なんかエルフの国とかに行ったらいいんじゃないの?wwww」
伊藤「妄想の中とかに(プフッww)行っちゃえばいいんじゃないのwww」
後藤「コワイヨーwwwコワイヨーwwwww」
二人「クックックックwwww」
530:デフォルトの名無しさん
08/02/18 09:51:50
Haskellのようなピュアな言語じゃ薄汚れた現実世界のアプリは書けないと言いたいのか?
531:デフォルトの名無しさん
08/02/18 12:06:05
>>530
ffiが実装された時点でピュアじゃねーよ。
これからはHaskellを純粋関数型言語なんて呼ぶのはやめようぜ。
532:デフォルトの名無しさん
08/02/18 12:16:09
別にffiも変なことしなけりゃ純粋さを壊さないだろ
533:デフォルトの名無しさん
08/02/18 12:28:40
>>532
おっと、そんなこと言っちゃうのか?
純粋でない例が一つでもあれば、それは純粋じゃないんだよ。
534:デフォルトの名無しさん
08/02/18 12:39:56
まあそうだ
でも一々「ほぼ純粋な関数型言語」とか言うのか?
535:デフォルトの名無しさん
08/02/18 12:48:31
いや、ただの関数型言語だよ。
純粋なんて言葉をつけるのはおこがましい。
536:デフォルトの名無しさん
08/02/18 12:52:23
いや、でも滅多に副作用を使わないのは事実だし、重要な特徴じゃん
537:デフォルトの名無しさん
08/02/18 12:57:12
「モナディックI/Oを採用した関数型言語」でいいんじゃね
538:デフォルトの名無しさん
08/02/19 08:11:48
HaskellによるHaskellのための開発環境Leksah 0.1
URLリンク(builder.japan.zdnet.com)
539:デフォルトの名無しさん
08/02/19 11:08:19
副作用無しでなんでもできれば純粋ってことでいいんじゃね。
SchemeやMLは副作用無しじゃI/Oができないし。
540:デフォルトの名無しさん
08/02/20 12:44:17
また公式落ちてるぞ
よく落ちる糞公式だな
541:デフォルトの名無しさん
08/02/21 21:11:23
LuaってHaskell系だったのか
スレリンク(dtm板:216番)
542:デフォルトの名無しさん
08/02/21 21:29:53
そのスレで既に十分突っ込まれてるじゃないか
543:デフォルトの名無しさん
08/02/21 22:42:17
haskellのプログラムは巨大化する傾向があるようですが、
Cで作ったファイル並みに小さくするコンパイルオプションとかってないですかね?
544:543
08/02/21 22:43:03
すみません、言葉足らずでした。
haskellで作った実行ファイルが巨大化する傾向がある、といいたかったのです。
545:543
08/02/22 20:08:04
とりあえず1/10ぐらいのサイズにしたいのです。
546:デフォルトの名無しさん
08/02/22 21:22:26
Cだって大きなプログラム作れば大きいだろ。
547:デフォルトの名無しさん
08/02/22 21:29:57
とりあえず
・GHCの最新版を使う
・最適化オプションを有効にする
・strip
くらいじゃないか?
あとUPXとかで圧縮するのが有効というのを読んだ
548:543
08/02/22 22:16:46
>>546
論外
549:デフォルトの名無しさん
08/02/23 00:47:37
昔のGHCならCのソース出力するオプションがあったらしいんだが,今はないのか?
そもそもなんで実効ファイルが巨大化するのか調べた上での質問なら答えは直ぐに見つかるんだけどな
550:デフォルトの名無しさん
08/02/23 00:49:21
現状ghcではruntimeだけで200KBくらいになってしまうので無理かと。
jhcとかyhcならば判らないですけども。
551:デフォルトの名無しさん
08/02/23 08:40:01
libcや基本DLLよりずっと小さいよ。
Windowsの場合は、サードパーティが使える標準配布方式がないから、
静的リンクするか、インストーラー配布形式が必要になって、
それでこういう質問が増えるんだろうね。
お決まりの開発環境を使わないと、配布しづらい。
552:デフォルトの名無しさん
08/02/23 13:39:30
ghc だって libc に依存してるんでしょ
553:デフォルトの名無しさん
08/02/23 17:07:48
C++だってhello worldでもバカ正直にスタティックリンクすれば何百KBとかなったりするじゃん
ダイナミックリンクでごまかしてたりするけど
機能持たせた言語の実行ファイルサイズが膨らむのはトレードオフ
554:デフォルトの名無しさん
08/02/24 07:49:13
Craft買って読んでますが、練習問題の解答ってどっかにありますでしょうか。
555:デフォルトの名無しさん
08/02/24 12:24:26
以前、IOモナド関連部分の回答を適当なワードでググった時はヒットしたよ
10分くらい探したけど
556:554
08/02/24 19:38:46
つまり、ちゃんとした解答集のようなものは無いっちゅう
ことですかorz
そんな難しいものも少なそうなのでいいのかな
557:デフォルトの名無しさん
08/02/24 19:51:21
>>556
現状では、ある程度関数型言語でのプログラミングの経験をつんだ人が
Haskellを触るという感じなので、
言語仕様を見たらわりとすぐに使えるという人向きの文書しか出回っていない。
そういう意味では初心者はとっつきにくいかもしれないね。
558:デフォルトの名無しさん
08/02/24 20:19:53
また公式が落ちてやがる!!!!!!!!
なめやがって!!
マジ切れそうだ
559:デフォルトの名無しさん
08/02/24 20:47:32
すみません、こちらのファイアウォールのせいで公式につながらなかっただけでした・・・
お騒がせしました
560:デフォルトの名無しさん
08/02/24 22:59:49
>>558-559
wwwwwwwww
561:デフォルトの名無しさん
08/02/25 01:50:16
wwwwwwwwwww
562:デフォルトの名無しさん
08/02/25 01:58:36
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
563:デフォルトの名無しさん
08/02/25 02:08:33
つURLリンク(www.blue.sky.or.jp)
564:デフォルトの名無しさん
08/02/25 20:06:50
大卒で正社員じゃない奴ってこのスレに多そうだなw
知ってるか?高卒の生涯賃金って高卒の半分なんだぜwww_?
中卒なんてもってのほか
可哀想にお前ら
そんな俺はもう内定貰ってこのスレいますけどねw
565:デフォルトの名無しさん
08/02/25 20:18:49
あいぉ(^ω^
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_?
> 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_?
566:デフォルトの名無しさん
08/02/25 20:20:52
>高卒の生涯賃金って高卒の半分なんだぜwww_?
再帰的ですねwwwwww
chingin x = chingin x / 2
こんな所でしょうか。
ちなみにスタックオーバーフローしましたが何か。
567:デフォルトの名無しさん
08/02/25 20:22:51
ちなみにこれね
スレリンク(gline板)
568:デフォルトの名無しさん
08/02/25 20:26:57
どうやら釣られてしまったようだ。。。
569:デフォルトの名無しさん
08/02/25 20:43:02
>>566
せっかくHaskellなんだから
chingin = chingin / 2
でいいよ
解は0とNaNと±Infと⊥だな
570:デフォルトの名無しさん
08/02/25 21:39:37
Nan = NanはFalseなんじゃないの?
571:デフォルトの名無しさん
08/02/26 10:33:53
何を言っているのかね
572:デフォルトの名無しさん
08/02/26 15:30:47
やってみた。
> 0/0
NaN
> 0/0 == 0/0
False
> 1/0
Infinity
> 1/0 == 1/0
True
> 1/0 == 1/0/2
True
573:デフォルトの名無しさん
08/02/26 15:32:37
⊥なんて解で出てくるの?
574:デフォルトの名無しさん
08/02/26 17:18:37
>>573
undefined
と
undefined / 2
は、どっちも同じ結果になる
575:デフォルトの名無しさん
08/02/28 14:35:34
関数型言語関連で購読おすすめのブログをいくつか教えてください
576:デフォルトの名無しさん
08/02/28 15:44:34
>>575
このスレ的にはここ
URLリンク(planet.haskell.org)
577:デフォルトの名無しさん
08/02/29 21:06:53
haskellerの皆さんって、元々はSchemeとか使っていたんでしょうか?
自分、関数型はハジメテでちょっと戸惑いがあったんですが、SICPを読んでみたら
何か分かってきました。
Haskellは今のところそういう文脈というか、経緯を知っている人たち向けってこと
なんでしょうかね。
578:デフォルトの名無しさん
08/02/29 21:12:23
俺はC++から入った
他の関数型は、SML入門をちょっとwebで読みあさった経験しかなかった
579:デフォルトの名無しさん
08/02/29 23:45:49
Common Lisp -> OCaml -> Haskell
580:デフォルトの名無しさん
08/02/29 23:54:20
WebProg -> Haskell
581:デフォルトの名無しさん
08/03/01 00:03:12
C++ -> Haskell (あまりのパラダイムの違いに混乱中)
582:デフォルトの名無しさん
08/03/01 01:50:01
>>581
C++のconcept(次の標準で入る)とHaskellのtype classは同じ。
自分は
雑多なLisp→Common Lisp→Miranda, CLOS, ML, C++→Haskell, Scheme, C++
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5205日前に更新/201 KB
担当:undef