07/12/15 15:47:28
>>350
> Haskellでは基本的にどんな順番で簡約しても結果は同じだから、分かりやすい順序でやっただけ。
(flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc"
自分がどうも腑に落ちないのは、どうして
zipWith ( ((,) .) $ flip (,) 0 "abc") [0..]
こうじゃないんだろう?ってとこなんですね。もちろん、こういう解釈だとダメなんですけど、
引数一つだけ取って、ある関数を返してから、次に行くってのがルールだったりするのかな、
と思ったのですが。
> 俺はできない。読むのも二分くらい掛かった。
そうですかw。いや、直感的に書ける人って凄いなぁって思ったんですが、なかなか
そういう人はいないんでしょうかね。
354:デフォルトの名無しさん
07/12/15 16:02:39
>>352
デザインパターン中毒はどうか知らんが、この書きかたには
記述が簡潔になるという利点があるんだから、別にいいんじゃないかと思う。
>>353
Haskellの関数は常に一引数関数で、多引数関数は
カリー化でエミュレートされているだけだということを思い出すべし。
(.)も両辺を一引数関数として合成するから、
(f . g) a b
と
f (g a b)
は等しくない。
355:デフォルトの名無しさん
07/12/15 16:05:04
些細なことだけど
> (f . g) a b
この括弧なんとかならないかな
356:デフォルトの名無しさん
07/12/15 16:13:51
>>354
> Haskellの関数は常に一引数関数で、多引数関数は
> カリー化でエミュレートされているだけだということを思い出すべし。
そうでしたw。
いやぁ、ありがとうございます。スッキリしました。
357:デフォルトの名無しさん
07/12/15 16:36:06
>>355
>219に戻れ
358:デフォルトの名無しさん
07/12/15 16:43:36
>>357
>>219とは趣旨が違う
> (f . g) a b
この括弧はうっとうしいなぁと言ってるだけなんだよ。
$みたいに括弧省略したい
359:デフォルトの名無しさん
07/12/15 17:10:55
俺はその格好が好きだ
360:デフォルトの名無しさん
07/12/15 17:31:40
ML でも (foo o bar o baz o foobar) quux みたいに書くね
361:デフォルトの名無しさん
07/12/15 20:25:33
>>358
お前は何を言っているんだ
362:デフォルトの名無しさん
07/12/15 21:14:46
>>361
心で感じろ
363:デフォルトの名無しさん
07/12/16 01:37:28
>>361
風を感じろ
364:デフォルトの名無しさん
07/12/16 01:45:32
GHC 6.8.2 Windows版で、コンソールのコードページが英語のになるバグがようやく直ったな。
365:デフォルトの名無しさん
07/12/16 20:36:29
Parallel Haskellの拡張されてる点ってどんなとこ?
366:デフォルトの名無しさん
07/12/17 08:39:00
>>364
太字になるのは?
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++
583:デフォルトの名無しさん
08/03/01 02:00:01
>>577
そうですね。
関数型言語での再利用とオブジェクト指向言語での再利用では
毛色が全く違うので戸惑うでしょうね。
584:デフォルトの名無しさん
08/03/01 02:03:51
関数型言語といっても、遅延評価が入るだけでかなり質が変わってきますよ。
LispやMLの方がCプログラマには分かりやすいでしょう。
585:デフォルトの名無しさん
08/03/01 02:20:11
>>577
Haskellはそういう知識を得ることが楽しい人向けの言語。
先に知っていても、必要だと思ってそこで勉強しても、どっちでもいいと思う。
まあとにかく世界の広がる言語だと思う、Haskellは。
Schemeも面白い。
586:デフォルトの名無しさん
08/03/01 02:25:30
モナドを学ぶのにオススメの書籍やwebサイトはありますか
一応一通り検索して解説を読んでみたんですがいまいち概念を把握できてないです
使う分には困らないんですが
587:デフォルトの名無しさん
08/03/01 11:56:49
>>586
圏論の基礎
588:デフォルトの名無しさん
08/03/01 12:12:57
>>586
つ >>421
589:デフォルトの名無しさん
08/03/01 15:05:15
母:順へ げんきですか。いまめーるしてます
順:うるさい死ね メールすんな殺すぞ
母:ごめんね。おかあさんはじめてめーるしたから、ごめんね
順:うるさいくたばれ、メールすんな
母:ちゃんとご飯食べてる? お金送りましょうか?
順:うんありがとう。かあさんこそ体とか大丈夫?
590:577
08/03/01 19:22:00
なるほど、やはりLispからの方が多いんでしょうかね。
自分はLisp系知らずにHaskellやろうとして、map、fold、zipWithなどのリスト操作が
最も基本的なものとして扱われているのがピンときませんでした。
色々文書読んだりした後で、SICPを読んでみたら凄い分かってきましたよw。どうも
そういう文脈にある人々向けにドキュメントなどが作成されているなぁと。JavaやC#
とかが、C、C++の文脈を知っている人向けのドキュメントが多いのと同じでしょうかね。
591:デフォルトの名無しさん
08/03/02 01:21:53
map, reduceは他の言語でも、
コレクション周辺でサポートされてるよね?
ただgeneric function系じゃないと、
ちょっと趣きが違うから戸惑うのかも知れないが。
592:デフォルトの名無しさん
08/03/02 04:50:00
>>590
まず、今までループで処理してたところを全部再帰で考え直してみようよ。
再帰処理の部分を一般化して関数にできないかどうか考えてみようよ。
593:デフォルトの名無しさん
08/03/02 04:50:39
SICPってMITの1年生用の教科書でしょ?
594:577
08/03/02 08:02:16
>>591
ありますけど、理科系研究の実習用プログラムとかではない限り、あまり
使われないんじゃないかと思います。実際、言語の入門書類でも大きくは
扱われませんよね。
>>592
再起はそんなに戸惑いはありませんでした。どちらかと言えばループが
手続きの部分として扱われるのに対して、関数型ではそういう書き方は
あまりしない(醜いコードとなる)ってことですね。
>>593
そうです。すごい良書だと思います。
595:デフォルトの名無しさん
08/03/02 10:43:26
>>594
> 実際、言語の入門書類でも大きくは扱われませんよね。
入門書は年々数が増えていっていると共に、
糞本の割合が増えていっているから、
入門書一般の常識はいまや非常識といっていい状態。
本格的に取り組む入門書は嫌われるから。
関数型言語、特に本場の本は良書が多くてそういう心配はないんだけど。
596:デフォルトの名無しさん
08/03/02 10:51:29
古くても良書とされている入門書を店頭にわかりやすく並べている
本屋の数は、日本に人間の指の数ぐらいしか無いんではなかろうか。
他は次々と出る駄本の新刊を並べてるだけ。
597:デフォルトの名無しさん
08/03/02 10:53:22
Rubyなんかだとmapやinjectを使うのが当たり前かと思ったけど、そうでもないのか
598:577
08/03/02 11:26:03
>>595
自分はSICP読んで、何でもっと早くに手に取らなかったのか、と後悔してます。
>>597
Rubyのそういった機能は関数型由来のものですよね。C言語系列の手続き型
にはあまり登場しないんじゃないかと思います。
599:デフォルトの名無しさん
08/03/02 12:03:41
使えないand/or使いたがらないand/or嫌悪する奴もまたいますな
600:デフォルトの名無しさん
08/03/03 23:34:31
and と or って左結合?
601:デフォルトの名無しさん
08/03/06 13:53:14
THE HITCHHIKER'S GUIDE TO THE HASKELL 「HASKELL の歩き方」
URLリンク(ha6.seikyou.ne.jp)
web上の日本語の入門文書で、言語全体をカバーしてるのは初めてじゃないだろうか
602:デフォルトの名無しさん
08/03/06 18:12:31
>>601
なぜに自転車屋のホームページ?w
ラジオ部 って何?w
モナドに関して、あえて説明しないってのは、入門としてはありかもね。
603:デフォルトの名無しさん
08/03/06 23:38:42
Parsecを理解できる書籍って
普通のHaskellが妥当かな?
604:デフォルトの名無しさん
08/03/07 08:55:56
ひらがなで書かないと書籍名に見えないw
605:デフォルトの名無しさん
08/03/07 09:07:55
>>603
つ URLリンク(www.cs.nott.ac.uk)
606:602
08/03/07 13:57:47
よく見ると>>601って、
手続き言語的にHaskellを解説してるように思えるな…。
こういう入門書でHaskellを学ぶ人が多くなると、
オブジェクト指向の時みたいに混乱しそう…。
初心者のオレでも?なコードがある…。
607:606
08/03/07 15:35:46
あぁ!「?なコード」は
>>601 でなくて、>>601 で参照してる↓だった
関数型プログラミング言語 Haskell 早巡り
URLリンク(ha6.seikyou.ne.jp)
608:デフォルトの名無しさん
08/03/11 17:08:28
最近のライブラリはほとんどarrowベースになってるんだなぁ・・・
609:デフォルトの名無しさん
08/03/11 21:39:33
>>608
自分、Craft読み終えたばかりでモナドも入り口しか知らない…
道は遠いなぁ
610:デフォルトの名無しさん
08/03/15 18:58:13
ghcに-prof -auto-allを付けると最適化が弱まるのはいやがらせか?
フルに最適化の掛かったコードのプロファイルを取るにはどうすればいいんだ
611:デフォルトの名無しさん
08/03/15 19:14:50
>>610
最適化ありとなしなら違うだろうけどそれぐらいなら大差つきそうな感じもしないし
だいたいでいいんじゃない?
612:デフォルトの名無しさん
08/03/15 19:55:01
>>611
いや、一番内側のループにGHC.IOBase.>>の呼び出しやらunboxing/reboxingやらが残るんだ
もともと最適化で余計なものが全部消えることに期待しているソースなので、影響が大きい
実際、プロファイル版だと通常版の7倍くらい時間が掛かる
もちろんプロファイルのオーバーヘッドもあるだろうけど、別のソースだと3倍くらいで済むので、
最適化がうまく効かないことの要因が大きいと思う
613:デフォルトの名無しさん
08/03/17 13:44:15
wxHaskell 0.10.3 rc1が出てた。
614:デフォルトの名無しさん
08/03/17 16:47:24
wxHaskellをスタティックリンクする方法ありませんか?
615:デフォルトの名無しさん
08/03/18 09:56:50
Gtk2Hsと比べてどうなの?
616:デフォルトの名無しさん
08/03/18 21:37:58
ghc test.hs -o test
とやった時に生成される
test.hi
test.o
test.manifest
この3つのファイルを生成させなくする方法ってないですか?
617:デフォルトの名無しさん
08/03/18 21:52:22
>>616
manifestファイルの生成は-fno-gen-manifestで抑止できる
ただし多少の副作用がある。詳しくはマニュアル参照
oとhiの生成を止めるのは多分無理。これなしじゃ分割コンパイルできないし
ファイルが残るのが嫌なら、ghcを実行した後にoとhiを削除するスクリプトでも組めばいい
618:デフォルトの名無しさん
08/03/18 22:10:49
>>617
ありがとうございます
スクリプト書いて我慢することにします。
619:デフォルトの名無しさん
08/03/19 20:13:49
Introduction to Functional Programming Using Haskell
¥ 11,554 (税込)
ペーパーバックでこれって…。何でこんな高いの?
620:デフォルトの名無しさん
08/03/19 21:11:09
Bird大先生の書いた素晴らしい本なのでその価値はあります。
文章はもちろんコードが素晴らしいです。
621:デフォルトの名無しさん
08/03/19 21:19:32
>>619
需要と供給の関係じゃない?
622:デフォルトの名無しさん
08/03/19 21:33:24
>>621
Craftとかと比べるとあんまり売れ筋じゃないってこと?
623:デフォルトの名無しさん
08/03/19 21:47:52
>>619-620
「関数プログラミング(using Miranda)」はもっと安いYO!i
624:デフォルトの名無しさん
08/03/19 22:32:20
正直コードのぱっと見はSASL系のMirandaの方が好きだった。比Haskell
625:デフォルトの名無しさん
08/03/19 22:54:32
>>619
円高なんだから.comの書店から輸入すれば安いYO!
626:デフォルトの名無しさん
08/03/20 13:46:58
>>624
どの辺が違うの?
627:デフォルトの名無しさん
08/03/20 13:48:34
>>624
Mirandaスレ逝けYO!
628:619
08/03/20 13:57:36
っていうか、もう買っちゃったんだけどw
ついさっき届いたんだが・・・チョっw、Craftとかよりも紙が安っぽいwww
これ、11,554円か・・・。頑張って自分のモノにしないとなw
629:デフォルトの名無しさん
08/03/22 14:32:26
1966年にP.J.LandinがISWIMという言語を作ったのがその起源で、SASL, Mirandaという後継言語を経て、HaskellとCleanが生まれました。
これらは、全て「遅延評価」を評価戦略におくプログラミング言語であり、「純粋関数型言語」と呼ばれるグループです。
SASL系のMiranda???イミフ。
630:デフォルトの名無しさん
08/03/22 19:31:56
1954年にJ.BackusがFORTRANという言語を作ったのがその起源で, Algol, Cという後継言語を経て、C++とJavaが生まれました。
これらは、全て「副作用による状態の更新」を実行の基礎とするプログラミング言語であり、「手続き型言語」と呼ばれるグループです。
Algol系のC???イミフ。
631:デフォルトの名無しさん
08/03/22 19:39:51
wxHaskell 0.10.3 が出たみたい。
URLリンク(sourceforge.net)
632:デフォルトの名無しさん
08/03/22 23:22:00
遅延評価よりもしっくりくる言葉はないものだろうか
直訳で不精評価とか?
633:デフォルトの名無しさん
08/03/22 23:37:01
>>632
634:デフォルトの名無しさん
08/03/22 23:45:23
SASL系のMirandaって何?Haskellは何系なの?クワシク。
635:デフォルトの名無しさん
08/03/23 00:00:20
HaskellはMiranda系です
636:デフォルトの名無しさん
08/03/23 00:20:12
>>630 なにが意味不なのかわかんね
637:デフォルトの名無しさん
08/03/23 00:53:22
英語が難しくてよく理解できないのでつがw
638:デフォルトの名無しさん
08/03/23 10:58:06
>>629 なにが意味不なのかわかんね
639:デフォルトの名無しさん
08/03/23 11:43:24
Point-free styleで
\a b -> a*b + a/b
を書くにはどうすればいいですか?
一般に,同一の引数を複数回使うような関数はどう定義すればいいですか?
さらに例えば2引数a, bを取って,それらを複数回使い,
その場所が構文木の深さで並べたとき交互に入り混じるような関数はどう定義すればいいですか?
\a b -> a + exp(b + exp a)
みたいな.
* idとかを使って形式的に同じ深さにする(例えば snd(id b, id a) + exp(id b + exp a) とする)
* 2変数関数に同じ引数を与えるようなapplyをあらかじめ定義しておく
(そう言えばSコンビネータは S f g x => f x (g x) でxが2回出てくるなぁ...)
が鍵かなーと思ってますが,一般にはどうすればいいのか.
640:デフォルトの名無しさん
08/03/23 13:18:34
Control.MonadとControl.Monad.Instancesをインポートするとこの二つが使える
ap :: (a -> b -> c) -> (a -> b) -> a -> c
liftM2 (.) :: (a -> b -> c) -> (a -> d -> b) -> a -> d -> c
どっちも便利
641:デフォルトの名無しさん
08/03/23 13:51:22
s = \ x y z -> x z (y z)
k = \ x y -> x
i = \ x -> x
-- f = \ a b -> a * b + a / b
f = ((s ((s (k s)) ((s ((s (k s)) ((s (k k)) (k (+))))) ((s ((s (k s)) ((s ((s (k s)) ((s (k k)) (k (*))))) ((s (k k)) i)))) (k i))))) ((s ((s (k s)) ((s ((s (k s)) ((s (k k)) (k (/))))) ((s (k k)) i)))) (k i)))
642:デフォルトの名無しさん
08/03/23 14:37:06
返り値がユニットって他の言語で言うvoidの事ですか?
643:デフォルトの名無しさん
08/03/23 14:43:08
他の言語ってどの言語だよw
644:デフォルトの名無しさん
08/03/23 14:46:42
例えばcやJavaです
645:デフォルトの名無しさん
08/03/23 14:59:03
>>634
> SASL系のMirandaって何?
Turner大先生の作った言語がSASL→KRC→Miranda
URLリンク(en.wikipedia.org)
Mirandaは売り物じゃなければもっと普及したと思う。
646:デフォルトの名無しさん
08/03/23 19:45:21
>>642
全く違います。
Unitは値ですがvoidは値ではありません。
647:デフォルトの名無しさん
08/03/23 21:22:47
全く違いますか・・・
勉強しなおしますい
648:デフォルトの名無しさん
08/03/23 21:26:41
void 式は存在するし、C++ だと return 文にも渡せるが、
void 式を入れる変数が存在しない点が Unit とは大きく違う点か。
649:デフォルトの名無しさん
08/03/23 21:46:56
TAPLにはunitとCやJavaのvoidの使われ方は近いと書いてあるね。
650:デフォルトの名無しさん
08/03/23 21:57:00
使われ方は近いっていうのと概念が近いってのを混同せぬよう。
651:デフォルトの名無しさん
08/03/23 22:36:57
voidは引数として渡せないしな。
652:デフォルトの名無しさん
08/03/23 22:51:43
データ構造にも入れられない
653:639
08/03/24 00:09:11
>>640
Control.Monad.Instances って関係あるんですか?
つーか Control.Monad の ap や liftMn は (Monad m) => ... m a -> ... な感じでモナド専用なのでは?
>>641
トランスレータ乙w
Wikipediaに載ってる変換アルゴリズムには
> In general, the T[ ] construction may expand a lambda term of length n to a combinatorial term of length Θ(3n).
とありますが.
まぁSKIがあれば不可能な訳ではない,と...
R. Bird先生とかの論文で習うしかないのかなー
654:デフォルトの名無しさん
08/03/24 00:11:01
日本語でおk
655:デフォルトの名無しさん
08/03/24 00:19:18
instance Monad ((->) r) -- Defined in Control.Monad.Instances
656:デフォルトの名無しさん
08/03/24 01:13:02
lambdabotのplというプラグインが自動でポイントフリー変換をしてくれる
\a b -> a*b + a/b
を入れたら
ap (ap . ((+) .) . (*)) (/)
が返ってきた
\a b -> a + f (b + g a)
だと、
ap ((.) . (+)) ((f .) . (+) . g)
657:初心者修業中
08/03/24 04:17:08
あの、結局、ポイントフリーは
「クイズとしては面白いけど無理に使う必要はない」
という事ですよね?
658:デフォルトの名無しさん
08/03/24 07:52:47
当然だ
使うに値すると思ったときだけ使えばいい
659:デフォルトの名無しさん
08/03/25 04:01:38
Birdの一派は「ポイントフリーの方がプログラムの本質が一層明らかになる」とか主張するんだよね
660:デフォルトの名無しさん
08/03/25 04:21:26
彼らの変形萌えぶりをみれば、
それほど無茶を言ってないと思えるよ。
プログラム変換(人力)で成果挙げてるからね。
661:デフォルトの名無しさん
08/03/26 00:32:30
Haskell のテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
URLリンク(codepad.org)
コードを書いて実行した時のURLを記録しておけば、
実行結果も一緒にさらす事が出来て幸せです。
662:デフォルトの名無しさん
08/03/26 04:41:11
なんであんたあちこちで宣伝してんの?
663:デフォルトの名無しさん
08/04/01 12:06:11
GHCのドキュメントをMakeするときに必要な
stringparamっていうプログラムって何でしょうか?これが無いせいでhtmlドキュメントが生成できません
xmlproc関係のものだと言う気はするんですが、検索しても見付かりません
入手方法など情報お願いします
664:デフォルトの名無しさん
08/04/01 12:20:15
stringparamはプログラムじゃなくてxsltprocのコマンドラインオプションじゃないか?
665:デフォルトの名無しさん
08/04/01 21:14:03
なるほど、どもです
どうやら原因はMakeの中で上手くxsltproc関連の変数が設定されてないのが原因でした
666:デフォルトの名無しさん
08/04/05 01:33:37
以下のコードでtimeout関数の動作確認をしたのですが、
うまく動作しません。何がいけないのでしょうか?
import System.Timeout
main = do a <- timeout (3*10^6) getLine
print a
667:デフォルトの名無しさん
08/04/05 02:07:19
>>666
俺の環境(Linux x86 ghc-6.8.2 base-3.0.1.0)だと動いたよ
windowsだとHandleからの入力でブロックするときにselectを使ってないから、そのせいかも
668:デフォルトの名無しさん
08/04/05 19:56:39
モナドとかって解りやすく
書いた論文とかありますか?
PARSEC使いたいのですが
どうにも曖昧で
669:デフォルトの名無しさん
08/04/05 20:15:35
>>668
I Love Ruby本
670:デフォルトの名無しさん
08/04/05 20:50:09
>>668
つ "The marriage of effects and monads"
つ "Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell"
ググればPDF手に入る
671:デフォルトの名無しさん
08/04/05 20:56:19
parsec使うのにモナドの知識は必要ないけどな
>>670
Tackling...はIOモナドについての論文じゃないか?
672:デフォルトの名無しさん
08/04/05 21:02:17
だったら何?
673:デフォルトの名無しさん
08/04/05 21:06:05
モナドについて知りたがってる奴にIOモナドの事を教えてもしょうがないだろ
群について知りたがってる奴に整数を教えるようなものだ
674:デフォルトの名無しさん
08/04/05 21:08:14
>>673
あとkindとかって数学の眠い本永遠と
読まないと理解できないかな?
圏とかまじで数学本気でやってねーから解らん
675:デフォルトの名無しさん
08/04/05 21:18:11
kindは全然難しいものじゃない
「Maybe Int」型の式は存在するけど単なる「Maybe」型の式は存在しないとか、
「Maybe Maybe」っていう型は不正だとか、そういう次元の話
676:デフォルトの名無しさん
08/04/05 21:21:18
パージングするとIOモナとの連携は付き物だから、
>>668は知りたくなるんじゃないかな?
知らなくてもPARSEC使えるけどね。
677:デフォルトの名無しさん
08/04/05 21:28:50
知らなくても使えるんだけど
背景とか基礎的な内容知りたく
ならない?
ならない、そうですかそうですか.....
678:デフォルトの名無しさん
08/04/05 21:41:01
Trends in functional
Programmingって毎年出てるの?
679:デフォルトの名無しさん
08/04/06 01:49:14
>>668
"Monadic parser combinators"ってテクニカルレポートが
仕組みやモナドの解説が分かりやすく書いてあってよかった。
680:デフォルトの名無しさん
08/04/06 09:06:14
自分は手続き型のメジャー言語を普段使っている人間ですが、最近関数型が話題になって
勉強しているところです。
この板の書き込みもそうですし、実際に出版されている本の数や内容など見ると、まだ
Haskellのような言語は研究者レベルの言語なんでしょうか。
個人的には今後アプリがマルチプロセスに対応せざるを得ないとか、複雑性が上がる
中で処理の信頼度を一層高める必要がある中で、Haskellのような言語がある時期から
一気にパラダイムシフトを引き起こすのじゃないか、とか妄想していますが、単なる
妄想ですかねw
681:デフォルトの名無しさん
08/04/06 09:25:48
Haskellは、ある時期と言わず今、実用プログラムを(分野にも依るけど)書く上で有力な言語だと思うよ
その意味で、Haskellは既に研究レベルの言語ではない
一方で、今のHaskell利用者に占める研究者や学生の割合はそれなりに高いだろうし、
Haskellが研究の道具として使われてるのも事実だから、その意味で研究者の言語だ
682:デフォルトの名無しさん
08/04/06 09:59:31
>>680
遅延評価のHaskellから、
> ある時期から一気にパラダイムシフトを引き起こすのじゃないか
ってのはちょっと難しいだろうね。
> 研究者レベルの言語
こういう考え方はよくわからない。
自分の腕を上げるために必要なことは学べばいいだけなんで。
683:デフォルトの名無しさん
08/04/06 10:01:57
immutableにするとスレッドセーフになるのは分かる
代入ができなくても別に困らない、というのも分かる
分からないのは遅延評価
原則的にはeagerにして必要なときだけ明示的に遅延するのでは駄目な例ってないすか
684:デフォルトの名無しさん
08/04/06 10:10:05
>>682
> 遅延評価のHaskellから、
> > ある時期から一気にパラダイムシフトを引き起こすのじゃないか
> ってのはちょっと難しいだろうね。
これはどういう意味でしょうか?
685:デフォルトの名無しさん
08/04/06 10:12:07
>>683
駄目ってことはないんじゃないか?
Haskellは、原則的には遅延で必要なときだけ明示的にeagerという立場だから、
Haskellコードを、デフォルトがeagerな言語に翻訳するのは機械的な書き換えで済む
どっちをデフォルトにするのが便利かは議論の分かれるところじゃないだろうか
686:デフォルトの名無しさん
08/04/06 10:16:32
>>683
「つまらない」そこが駄目
687:680
08/04/06 10:24:01
>>683
SICPなんかだと、参照透過性と遅延評価をStreamの項で関連付けて
いたりしますが、その辺へのこだわりではないんでしょうか?
688:デフォルトの名無しさん
08/04/06 10:33:23
1988年?ぐらいの関数言語を実装するための
本があるはずだけど
あれみれば遅延評価背景わかるはず
本の名前が解らん
689:デフォルトの名無しさん
08/04/06 11:17:06
>>688
URLリンク(research.microsoft.com)
これ?
lazy evaluationの正当化は194ページにちょっとあるだけかな
690:デフォルトの名無しさん
08/04/06 11:23:03
>>689
おーそれそれ
あとどれだったかなぁ
691:デフォルトの名無しさん
08/04/06 19:27:55
日本だとどっちを先に読めって言われてるの?
・Introduction to Functional Programming Using Haskell
URLリンク(www.amazon.co.jp)
・Haskell: The Craft of Functional Programming
URLリンク(www.amazon.co.jp)
692:デフォルトの名無しさん
08/04/06 20:25:11
>>691
自分はCraftを先に読みました。Craftは所謂Haskell言語の入門書だと思います。
Introduction~はHaskellの入門というよりも、関数型言語の原理原則を中心に
展開する書物ですね。自分は今読んでる途中です。
どちらもよい本だと思います。
693:デフォルトの名無しさん
08/04/06 20:25:18
>>691
欧米だとどっちを先に読めって言われてるの?
694:デフォルトの名無しさん
08/04/06 20:28:17
片方が初級で片方が中級、とかではないですね。
695:デフォルトの名無しさん
08/04/06 20:46:40
>>693
俺の恩師のイギリス人のじいちゃん先生
だと、今の若い人間には退屈すると
長続きがしないだろう。好奇心だけでは
どうしても無理だろう。といって、Craftを
読んで言語を理解しなさいと言われたなぁ
696:デフォルトの名無しさん
08/04/08 00:14:53
このすれの住人って
俺以外に、5人しかいないだろ?
697:デフォルトの名無しさん
08/04/08 03:08:19
日本でHaskellやってる人間なんて100人未満だろうな
698:デフォルトの名無しさん
08/04/08 03:13:05
だってモナドって何ですかって聞くと
「圏論について勉強するといいよ」って返されるんだもん
そしてwikipediaで圏論の説明見てわからず涙目になる俺
699:デフォルトの名無しさん
08/04/08 04:11:20
>>697
3000人じゃなかった?
700:デフォルトの名無しさん
08/04/08 06:33:59
Haskellでモナドを使ったり作ったりする分には圏論の知識なんて要らないけどな
701:デフォルトの名無しさん
08/04/08 10:04:01
>>699
そのうち何人が実際にソフトウェアを記述するかといったら100人未満だと思うよ
702:デフォルトの名無しさん
08/04/09 00:19:34
Webの自動テスト
Haskellで書くと面白いんだけど
Arrowが良くわからん
あれが必要ななんでどうまくつかいこなせない
703:デフォルトの名無しさん
08/04/09 06:49:34
?
704:デフォルトの名無しさん
08/04/09 08:26:47
和訳すると、
「よくわからないArrowが必要なせいで、うまく使いこなせない。」
705:デフォルトの名無しさん
08/04/09 18:22:44
arrowより日本語を使いこなした方がよいのでは…
706:デフォルトの名無しさん
08/04/09 18:38:51
まぁ、arrowよりも日本語の方が長く使うだろうからなぁ。
707:デフォルトの名無しさん
08/04/09 18:42:17
分からないぞ、突如GHCが日本を占拠して日本語の代わりにHaskellを使うように命じられるかもしれない。
708:デフォルトの名無しさん
08/04/09 18:48:55
それは中国が世界を支配する確率とどちらが高いかね?
709:デフォルトの名無しさん
08/04/09 20:42:39
GHC とは General Headquarters Compiler の略だったのか・・・
ギブ・ミー・モナド
710:デフォルトの名無しさん
08/04/10 11:30:08
>>702
Arrowが必要なのは、Arrowベースのテストツールかなにかを
使ってるからなんだろうけど、なに使ってるの?
711:デフォルトの名無しさん
08/04/10 21:50:55
>>710
作ってるのw
712:デフォルトの名無しさん
08/04/11 11:39:16
しかし雑談ばっかりだなこのスレ
713:デフォルトの名無しさん
08/04/11 11:56:43
うまく使いこなせないのに必要だと分かって作ってるんですか
714:デフォルトの名無しさん
08/04/11 23:23:30
モナドってHaskellに限った考え方ではなくて、もっと一般的な考え方なんだよね?
ほかの言語にモナドの考え方を応用したようなライブラリが、もっとあってもいいと
思うんだけどな。副作用嫌いな人は喜ぶと思うんだけど。そうでもないのかね。
715:デフォルトの名無しさん
08/04/11 23:36:10
すでに他の言語でもあることない?
すんごいマイナーだけど
716:デフォルトの名無しさん
08/04/12 01:17:35
Python でモナドを実装してみたよ、ってのはネットで見た気がする。
717:デフォルトの名無しさん
08/04/12 01:19:07
これだ。
URLリンク(www.valuedlessons.com)
718:デフォルトの名無しさん
08/04/12 02:47:54
つ URLリンク(okmij.org)
つ URLリンク(okmij.org)
719:デフォルトの名無しさん
08/04/12 21:48:14
引く手あまたのプログラミング言語は?
URLリンク(slashdot.jp)
---
Java(16479件)、C++(8080件)、C#(7780件)、JavaScript(6749件)、
Perl(5710件)、PHP(2641件)、Python(1408件)、COBOL(1207件)、
Ruby(769件)、Lisp(33件)といった感じらしい。
とりあえずJavaとC/C++/C#、あとJavaScriptを覚えれば、
当分仕事には困らないようである。COBOLのしぶとさも目立つ。
ちなみにHaskellやOCamlの求人は10以下だったそうだ。
---
720:デフォルトの名無しさん
08/04/12 23:28:51
JavaはともかくC#はどうかな…?
10年後には残ってない気もするが。
721:デフォルトの名無しさん
08/04/13 00:54:40
そんなことよりもHaskellの求人が存在するのか!!
どんな仕事だ?
722:デフォルトの名無しさん
08/04/13 02:47:10
リンク先まともに読んでないが
単に列記されてるのカウントしてるだけじゃねーの?
723:デフォルトの名無しさん
08/04/13 03:03:37
HaskellとかOcamlの仕事とかどんなんか見てみたい
研究用じゃないよな
724:デフォルトの名無しさん
08/04/13 03:05:42
Haskellでグラディウスを作る仕事です。
誰でも簡単にできる楽しい作業です。
初心者歓迎。
725:デフォルトの名無しさん
08/04/13 08:25:34
0 <= 10 → True
726:デフォルトの名無しさん
08/04/13 08:30:48
0は10以下でないとか、全部は一部でないとか、空列は列でないとか、自然言語には奇怪な慣習があるのです
727:デフォルトの名無しさん
08/04/13 09:21:12
Hugs> -10 <= 10
True
728:デフォルトの名無しさん
08/04/13 10:27:42
Haskellerお断り 10件w
729:デフォルトの名無しさん
08/04/13 11:00:54
アメリカの大学では、(企業もだけど)
フルタイムやパートタイムの非常勤プログラマーを雇うことがあるから、
Haskellはその類いかも知れない。
730:デフォルトの名無しさん
08/04/13 11:10:29
>>723
www.janestcapital.com
731:デフォルトの名無しさん
08/04/13 13:02:12
だけど、関数型言語の勉強は仕事で使わなくてもやったほうが
いいと思うけどな。手続き型で出やすい不具合をどう防ぐか、
無駄の無い記述をどう実現するか、とか勉強になること多いと思うよ。
732:デフォルトの名無しさん
08/04/13 13:08:30
個人的には手続き型ベースのOOPLのコーディングに影響があったかというと微妙な気が。
具体的にどういうこと?
733:デフォルトの名無しさん
08/04/13 13:11:08
一々メソッドや変数の名前を考えるのが面倒で
コーディングする気力が萎えて来るとか…
734:デフォルトの名無しさん
08/04/13 13:18:35
海軍でhaskell使ってると思う
どこの国かは言えんが
topでGHCかりかり動いているみたことある
735:デフォルトの名無しさん
08/04/13 13:25:20
lambdaの導入とかそういう文法レベルでの影響は0ではないか。
736:デフォルトの名無しさん
08/04/13 13:30:55
C++は次でラムダ実装する
Intelのスレッドライブラリもラムダ標準実装
C#も次期バージョンのサポート予定
Javaはかすだけどサポートするらしい(いらねw
737:デフォルトの名無しさん
08/04/13 13:56:04
あるとか無いとか、仕様のマトリックスを埋めるだけなら意味無いよ
C++ 自体がイラネ
738:デフォルトの名無しさん
08/04/13 14:04:04
>>732
いや、単純に(再)代入が許されない世界で、再起を使うとか、リストデータを
編集してそこから必要な情報抜くとか。そういうの訓練すると影響あるんじゃない
かなぁ。
手続き型だと「要するにこれはどういう処理か」って考えずにずらずらと手続きを
書き連ねていって、目的のデータを何とか作ってしまう、とかなりがちだけど、
その辺が意識変わると思うんだけどね。
739:デフォルトの名無しさん
08/04/13 14:12:31
副作用を0にするって考えは
通常の手続き型に慣れると
そうぞうすらしない奴も多いから
F言語はシンプルな世界観を持つ
ためにはある程度知る必要があると
おもふ
別に変態的に知る必要はまったくないけど
それよりCraf本読むのに6時間かけてまだ
6章しか読めん俺はおわっとる
740:デフォルトの名無しさん
08/04/13 17:52:54
>>736
VBで既に導入されてなかった? >λ式
741:デフォルトの名無しさん
08/04/13 17:53:27
C#にも既に入ってる
742:デフォルトの名無しさん
08/04/13 20:29:34
C#とかにλ式が導入されるとか、ちょっと意味不明というか、統一感が無さ過ぎる感じが
するがどうなんだろうか。だったらF#とかでいいじゃないか?って気がするけどな。
実はF#への移行の布石だったりして。
743:デフォルトの名無しさん
08/04/13 20:58:22
元々あった無名delegateの構文を整理しただけだから、そんなに大袈裟な話でもない
どっちにしろ、まともな高水準言語なら無名関数の類はあって当然で、統一感とか気にしてる場合じゃない
次は代数的データ型とパターンマッチに相当するものが入るといいな
744:デフォルトの名無しさん
08/04/13 23:12:29
>>743 >まともな高水準言語なら無名関数の類はあって当然で、
私が言葉尻に拘ってるのかも知れないが、なぜ?
745:デフォルトの名無しさん
08/04/13 23:22:47
>>744
上であがってる古い関数言語の実装の
論文読んでみなよ何が要素として定義
されていて必要なのかわかるから
746:デフォルトの名無しさん
08/04/13 23:27:35
>>745
でもC++とかには(少なくとも現在の規格では)無いわけだし、
実際無名関数みたいな仕組みは無くてもプログラムを組むことはできるし、
それらの事実を踏まえた上で>>744は>>743が「あって当然で」と言っているその考えを聞きたいんだと思うんだが。
あった方がプログラミングが綺麗になる部分もあるのは当然の話だが。
747:デフォルトの名無しさん
08/04/13 23:29:40
それこそ言葉尻じゃねw
モダンな言語は取り入れる傾向にあるとでも読み換えたら。
748:デフォルトの名無しさん
08/04/13 23:47:26
>>746
OOが無くても手続きはできるし
アジャイルがなくてもそれ相当のことはいくらでもできる。
Cで、どんな手段でもOKならfor_each構文を作ることもできる
結局、ラテン語やその他の自然言語がどんどん変革していったように
プログラミング言語も変わっていくだけだと思うよ
ただそこには、今まで苦労した結果を簡単に置き換えることで
本当の問題にどれだけ注視して取り組めるようすることを
追求しているだけだと思うよ。リスクの低減と開発効率の上昇
自然言語に対する機械言語の仕様変更とイディオムの変更は
とてつもなく早いのでそれに対する拒否反応や疑問は常時出てしまうけど
それは仕方のないことだろうし。まぁ慣れてくれ
749:デフォルトの名無しさん
08/04/14 00:34:46
>>746
> でもC++とかには(少なくとも現在の規格では)無いわけだし、
今もあるぞ、制限が多いだけで。
C++0xで言語自身に組み込みになってより強力になる。
750:デフォルトの名無しさん
08/04/14 01:01:34
C++ にクロージャ入れても意味が無い
751:デフォルトの名無しさん
08/04/14 02:45:24
わざわざ関数オブジェクトクラスを定義しなくて良いという
くだらないが重要な利点があります
752:デフォルトの名無しさん
08/04/14 08:38:21
そして文法が果てしなく汚れて行く…
753:デフォルトの名無しさん
08/04/14 08:52:25
Haskell には今話題にあがってるような、構文、言語機能の拡張ってないの?
754:デフォルトの名無しさん
08/04/14 17:18:28
提案されてきた拡張は数えきれないくらいある
いくつかはGHCにも実装されてるし
755:デフォルトの名無しさん
08/04/14 20:34:05
C#にクロージャとかって、どうも奇妙な感じがするのは、関数型言語って
自然数なんかもλ式で表現する、つまり「全ては関数なり」という一貫
した思想に基づいて設計されてるわけでしょ?
C#やJavaなどのオブジェクト思考言語って、値が全てなんだよね。
値を操作するために関数がある。そこにクロージャとかって、何か
意味があるのかね。
756:デフォルトの名無しさん
08/04/14 20:41:20
オブジェクト指向言語を知らないからそう思うんじゃないの。
オブジェクト指向言語で関数オブジェクトを扱えるのは別に
おかしな事じゃない。関数型言語でオブジェクト指向する事も
出来るし。
757:デフォルトの名無しさん
08/04/14 20:47:01
>関数型言語って
>自然数なんかもλ式で表現する、つまり「全ては関数なり」という一貫
>した思想に基づいて設計されてるわけでしょ?
これがそもそも勘違い
例えばHaskellのIntは関数じゃない
C#やらJavaScriptやらにクロージャがあって役に立つのは事実
例を知りたければ適当に検索すればいくらでも見つかると思う
758:デフォルトの名無しさん
08/04/14 21:04:05
副作用がある言語のクロージャってのも、
それはそれで使いでがある。
SICPをやってみればわかるけども。
759:デフォルトの名無しさん
08/04/14 21:24:38
>>756
それってUtility的なものでしょ?
どうも変な感じするけどなぁ。
760:デフォルトの名無しさん
08/04/14 21:36:49
そりゃ、あんたがどう感じるかで言語設計している訳じゃないからな。
オブジェクト指向が値が全てと言うのは勘違いだし、クロージャも
みんな昔から便利に使っている。それだけ。
761:デフォルトの名無しさん
08/04/14 21:50:02
なんだこのNOOBどもは
小学生の議論してんなよ
762:デフォルトの名無しさん
08/04/14 21:51:03
あ、そうw
いや、俺が感じるというか、計算モデルがそもそも違うと思うんだけどね。
まぁ、いいかw
763:デフォルトの名無しさん
08/04/14 21:53:29
なんかさ、大学でちょっとかじったぐらいのやつらの話ってうざくね?
いかにも知ったかぶった感じで話すやつら。
764:デフォルトの名無しさん
08/04/14 21:54:57
ネトゲ厨降臨中
765:デフォルトの名無しさん
08/04/14 21:55:00
>>762
アクター理論とかはどうなの?
766:デフォルトの名無しさん
08/04/14 21:57:48
OO 特有の計算モデルとかあるの?
767:デフォルトの名無しさん
08/04/14 22:15:57
昨日教科書読みました、みたいな発言やめてください。
背中がむずがゆくなります。
768:デフォルトの名無しさん
08/04/14 22:19:30
偶然ですね。私も昨日SICP読みました。さっぱりわかりませんでしたがw
769:デフォルトの名無しさん
08/04/14 22:21:28
学のない奴が語っちゃいけませんかそうですか
770:デフォルトの名無しさん
08/04/14 22:22:47
学の無い人間は尋ねる側ので、語る側ではないな。
771:デフォルトの名無しさん
08/04/14 22:23:40
じゃあ頭の出来が違う人達に語ってもらおうぜ
772:デフォルトの名無しさん
08/04/14 22:28:21
命令すんなよw
773:デフォルトの名無しさん
08/04/14 22:30:06
それなら気が向いたらでいいから宜しく頼むわ
774:デフォルトの名無しさん
08/04/14 22:30:13
>>762は学のあるなし以前に、自分の意見をまじめに伝えようとしてないから、相手にしないほうがいい
775:デフォルトの名無しさん
08/04/14 22:37:10
Haskellの拡張については 昨日教科書読みました 程度では語れるレベルじゃないから、
Haskellでの実装の話しろよ。
776:デフォルトの名無しさん
08/04/14 23:05:51
BrainfuckでHaskell作ろうぜ
777:デフォルトの名無しさん
08/04/17 07:30:06
Haskell初心者ですが、勉強した印象として構文が若干
多いかな?という感じがします。型に関係する部分とか
特に。
これってHaskellerの間で議論があったりするんでしょうか。
比べてはいけないんでしょうけど、Schemeのようなシンプルさ
で同じような型チェックができたら最高なんですが。
778:デフォルトの名無しさん
08/04/17 08:25:11
それはCとC++比べてるようなもんです。どうしても嫌なら、
ML系のオブジェクト指向が入ってないのをやってみてはどうでしょうか。
779:デフォルトの名無しさん
08/04/17 10:31:09
OCaml?
780:デフォルトの名無しさん
08/04/17 18:26:40
>>779
たぶんCaml liteの方。でなきゃSML。
781:デフォルトの名無しさん
08/04/17 21:15:56
>>777
ぐちぐちうぜーこと言ってるなら
使うな辞めろうぜーんだよ
お前のチラ裏報告なんて誰も
求めてねぇよ
さっさと消えろよ
782:デフォルトの名無しさん
08/04/17 21:39:09
>>777
厳格な型付けをする言語では避けて通れないんじゃないの。むしろ、それを望む人には
必要不可欠かと。
783:デフォルトの名無しさん
08/04/17 22:47:46
空気読まずに失礼しますが、
runhaskellの引数にプログラムを書いて実行する方法はありますか?
たとえばrubyだと
$ ruby -e "print 'abc'"
のように書くことが出来ますよね。
同じような使い方をHaskellでしたいんです。
784:デフォルトの名無しさん
08/04/18 05:22:47
ghc -e 'putStrLn "abc"'
Hugsだと多分無理
785:デフォルトの名無しさん
08/04/19 20:56:38
>>781
かわいいw
786:デフォルトの名無しさん
08/04/19 23:48:13
Types and Programming Languages
と
Introduction to Functional Programming Using Haskell
カバーしてる内容全然違う?
787:デフォルトの名無しさん
08/04/20 00:32:17
はい、上は型理論の入門書です。
数学分からない人は絶対に読むべきじゃないです。
788:デフォルトの名無しさん
08/04/20 00:36:37
>>787
ここ数年の少年ジャンプの面白さを
発見するよりは簡単なはずだが?
789:デフォルトの名無しさん
08/04/20 00:44:07
>>788
「型推論のHindley-Milner type inference」とかでピンと来るならいいんじゃね。
790:デフォルトの名無しさん
08/04/20 00:46:08
数学界ってネタ切れなんかね
791:デフォルトの名無しさん
08/04/20 05:25:06
TAPLに数学なんか関係あったか? どのへん?
792:デフォルトの名無しさん
08/04/20 07:19:16
数学は万物と関係があります
793:デフォルトの名無しさん
08/04/20 08:26:36
確かにそうだが随分とアバウトな答え方だね
794:デフォルトの名無しさん
08/04/22 09:45:15
本の最初のLessonで
main = do cs <- getContents
putStr cs
というサンプルがあったのだが,このまま打ち込んでも
The last statement in a 'do' construct must be an expression
と出る.どうすれば...?
795:デフォルトの名無しさん
08/04/22 12:09:38
>>794
二行目の先頭にちょうど10個のスペースを入れてる?
796:デフォルトの名無しさん
08/04/22 15:58:12
>>794
URLリンク(www.ice.nuie.nagoya-u.ac.jp)
797:デフォルトの名無しさん
08/04/22 20:41:46
>>795-796
Emacsを使ってるのですが,するとEmacsの自動インデント
機能に難ありということなのでしょうか...
798:デフォルトの名無しさん
08/04/22 22:51:23
>>797
Emacsはよく知らんが、Tabをスペースにかえればいいんでないの?
799:デフォルトの名無しさん
08/04/22 22:55:19
関数型プログラミング言語Haskell Part7
スレリンク(tech板)
213 :デフォルトの名無しさん:2007/04/07(土) 18:00:15
すいません。emacsのhaskell-modeでプログラムしているんですが、
インデントの方法に関して質問があります。
例えば、次の様なソースがあった時、
import System
import System.IO
main = do
putStrLn $ "Woud you like some coffee?(y/n)."
hFlush stdout
c <- getChar
if c == 'y'
then putStrLn "Yes,please."
else putStrLn "No,thank you."
thenやelseの前でTabキーを押すと、if式と同じインデントになってしまうのですが、
それだとコンパイルエラーになってしまいます。なので、今はスペースでインデントを
付けています。Tabキーで正しくインデントさせる方法がありますでしょうか?
800:デフォルトの名無しさん
08/04/22 22:56:16
関数型プログラミング言語Haskell Part7
スレリンク(tech板)
215 :デフォルトの名無しさん:2007/04/07(土) 19:31:19
>213
明示的に {} を使うという方法はあるにはあるが。
do { putStrLn $ "Woud you like some coffee?(y/n)."
; hFlush stdout
; c <- getChar
; if c == 'y'
then putStrLn "Yes,please."
else putStrLn "No,thank you."
}
のようにすると綺麗にインデントできる。
まぁ私は手で空白を入れたり一行にしちゃったりする方が多いけれど。
216 :デフォルトの名無しさん:2007/04/08(日) 17:57:02
>>215
レスありがとうございます。
{}を使う方法か、手動でインデントをあわせる方法の2通りという事ですね。
他の方はどうやってインデントさせているのか疑問に思っていたのですが、
その疑問が解消されました。
801:デフォルトの名無しさん
08/04/24 02:56:48
Tabをもう一回押すんだよ。
802:デフォルトの名無しさん
08/04/24 03:05:24
URLリンク(www.fobj.com)