トップページinformatics
41コメント17KB

関数型言語Haskell

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2006/08/20(日) 10:20:00ID:ij8ZPQFq0
和書が二冊出版されたね。
本を読んでもわからないところを聞くのもよし。
本に関して文句を書くのは、ちょっとだけならいい。
GHCとHugsを比較するのも良し。
モナドに関して三重対の話まで落とされると、話がちゃんと進むかどうかわかんない。

それではどうぞ。
0002名無しさん@お腹いっぱい。2006/08/20(日) 17:43:03ID:XLkXkbqB0
どっちもごみでしょ。
0003名無しさん@お腹いっぱい。2006/08/20(日) 23:22:52ID:XUpqTkNK0
関連スレ
関数型プログラミング言語Haskell Part5
http://pc8.2ch.net/test/read.cgi/tech/1149263630
0004名無しさん@お腹いっぱい。2006/08/21(月) 01:56:56ID:MWx8RcAF0
>>2
どっちもゴミと主張するなら理由もセットでね。

このスレの趣旨としては、Haskellの理論的側面を話題にするのがいいかもね。
例えば、
(1) 言語の副作用についての是非
(2) カテゴリー理論から見たモナド
(3) 遅延評価の長所と短所
(4) 参照透明性ってどうなのよ
(5) Haskellにオブジェクト指向を導入するのはいいのか
とか。一例に過ぎないけれど。
個人的には(2)に興味があったりする。
0005名無しさん@お腹いっぱい。2006/08/21(月) 06:48:15ID:+M3y+F/90
The Haskell Programmer's Guide to the IO Monad ― Don't Panic (PDF)
http://db.ewi.utwente.nl/Publications/PaperStore/db-utwente-0000003696.pdf

モナドの定義と、それを理解するのに必要な最低限の圏論の解説。
新しい概念を導入するたびに型システムとの対応を示してくれるので、
Haskellプログラマにはわかりやすいと思う。
題名に反して、HaskellのIOの理解には大して役に立たないような気がする。
0006名無しさん@お腹いっぱい。2006/08/21(月) 12:04:10ID:IurHxea80
暇つぶしにHaskellやってたが凄ぇカヲスだな…
レベル上げがマゾいとかドロップ悪いとかって次元じゃねぇ、プレイヤーがヤバい
殺伐の一言で表せない、どちらかというと戦場だね
某ハックゲー並にカヲス、PKとかPKKとかどうでもいいぐらい、ボルドーが徘徊
0007名無しさん@お腹いっぱい。2006/08/22(火) 10:41:46ID:UFcuVYt7O
遅延評価の弊害について語って
0008名無しさん@お腹いっぱい。2006/08/22(火) 11:03:06ID:i+RRtceh0
>>7
ttp://www5b.biglobe.ne.jp/~madison/worst/hitokoto/p066/p066.jpg
ttp://chinchin.seesaa.net/image/BigTit.jpg
0009名無しさん@お腹いっぱい。2006/08/25(金) 20:53:32ID:JYygCJQg0
ゴッツの冒険@実装中
0010名無しさん@お腹いっぱい。2006/08/25(金) 21:39:32ID:EeuJ56A70
>>7
パフォーマンスチューニングが難しい、というのに尽きると思う。
素朴に書くと空間計算量のオーダーが違う程非効率なことも少なくないし、
高速なコードを書くにはかなりの慣れ(言語への慣れでなくチューニングへの慣れ)が必要になる。

例えばGHCで高速なコードを書こうと思うと、
遅延評価の理解に加えて、内部で使われる中間言語(core言語、STG言語)の
読み方と機械語(あるいはC言語)への対応、さらに
GHCで使われている主要な最適化手法など関する知識が必要になる。
0011名無しさん@お腹いっぱい。2006/08/27(日) 04:26:21ID:ixZFLEzq0
Cleanは遅延評価であってもあんなに速いのに、何でHaskellは遅いんだか
0012名無しさん@お腹いっぱい。2006/08/27(日) 14:44:07ID:Z8ciPQ9OO
>>11
処理系の問題じゃない?
jhc とか速そうだけど。
0013名無しさん@お腹いっぱい。2006/08/27(日) 16:23:02ID:LLB+6ncW0
>>11
言語やライブラリの仕様でいろいろパフォーマンスに配慮してるし、
プログラマもHaskellに比べてグラフ簡約を意識しながら書くからじゃなかろうか。
0014名無しさん@お腹いっぱい。2006/08/27(日) 19:56:27ID:LLB+6ncW0
ところでCleanってほんとに速いの?
どれくらい?
0015名無しさん@お腹いっぱい。2006/08/27(日) 23:20:02ID:nB/ux1hZ0
無限ループが2秒で終わるぐらい。
0016名無しさん@お腹いっぱい。2006/08/27(日) 23:37:43ID:LLB+6ncW0
それならHaskellの方が速いよ…
0017名無しさん@お腹いっぱい。2006/09/09(土) 13:43:04ID:KKnLBPum0
でもたらいまわし関数はとてつもなく高速で計算できるんだよな。
たらいまわし関数を必要とする市場では生き残るかも。
0018名無しさん@お腹いっぱい。2006/09/22(金) 23:22:24ID:KXn2vpPV0
| すごいや、ドラえもん!WinMXがあればアプリ買う必要ないね。

  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       / ____ヽ           /  ̄   ̄ \
       |  | /, −、, -、l           /、          ヽ
       | _| -|  ・|< ||           |ヘ |―-、       |
   , ―-、 (6  _ー っ-´、}         q -´ 二 ヽ      |
   | -⊂) \ ヽ_  ̄ ̄ノノ          ノ_/ー  |     |
    | ̄ ̄|/ (_ ∧ ̄ / 、 \        \     |      /
    ヽ  ` ,.|     ̄  |  |         O===== |
      `− ´ |       | _|        /          |
         |       (t  )       /    /      |




      / ̄ ̄ ̄ ̄ ̄ ̄\
     /            )
    |    ノノ_ノノ_ノノノ
    |  / /  ヽ/ ヽ |
    |i⌒ ─|   ・ | ・  | |
    | ∂   \__人___/ |
    ||      っ  |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    /  \         ノ  < ゆういちちゃん、お客さんよ。何でも福岡県警だとか・・・
   /WWW \   ⌒  /    \__________
0019名無しさん@お腹いっぱい。2006/11/27(月) 14:49:45ID:MLbXiGPu0
関連wiki
http://wiki.ninki.org/wiki.cgi?p=%b4%d8%bf%f4%b7%bf%b8%c0%b8%ecHaskell
0020名無しさん@お腹いっぱい。2007/05/05(土) 18:43:32ID:XOSPBSBs0
Unifying events and threads
http://www.seas.upenn.edu/~lipeng/homepage/unify.html
via
matz日記
http://www.rubyist.net/~matz/20070428.html#p01
>Haskellでイベントモデルとスレッドモデルを融合した新しい並列実行モデルを実装したという話。 Linux上のI/OベンチマークでNTPLよりも高速だったそうだ。

これから読む。
0021名無しさん@お腹いっぱい。2007/05/10(木) 03:04:31ID:zxOztb7y0
>>20
で、どうよ?(英語わからん

NPTLと比較してるみたいだけど、そもそもNPTLってSolarisとかWindowsのより性能良いの?
(スレッドモデルわからん
0022名無しさん@お腹いっぱい。2007/05/10(木) 05:33:46ID:0kIzwegW0
こんな感じ? 熟読した訳ではないので間違っていても謝らない。

動機:
ネットワークアプリだと大量のスレッドを作る必要がある。軽量なスレッドが必要。
アプリケーションレベルスレッドなら強い型を持つ軽量なスレッドが作れる。
スレッドを使ったプログラミングスタイルはイベントドリブンなプログラミングスタイルよりもロジックが書きやすい(イベントドリブンで処理がぶつ切りの状態機械を書くのに比べて)。
イベントドリブンなスタイルは、イベント待ちループのカスタマイズがしやすくて、古典的なselectによるIOの他にepollやAIOなどをサポートするのが楽だ。
両者の良いところを取ったシステムがあると良い。
作ってみよう。

概要:
基本的には継続モナドによる、アプリケーションレベルのプリエンプティブでないスレッド。
スレッドの切り替えは、明示的な切り替え、IOモナドを使うとき、forkしたとき、等に起きる。
同期はSTMを使うことを想定しているが、Mutexなども実装できることを示している。
理論的には新しくないけど、実際に質的(拡張性とか書きやすさとか型安全性とか)にも量的(パフォーマンス)にも使いものになることを示したのがcontribution。

仕組み:
ネイティブなスレッドを幾つか用意して、(アプリケーションレベルスレッドの)スケジューラーや、イベント待ちループをその上で動かす。7ページにある図がわかりやすい。
スケジューラーはスレッドの待ち行列から(アプリケーションレベル)スレッドを取り出して、イベントハンドラに登録する(つまり、epoll_ctlなど)。
イベント待ちループはイベントを待って(つまりepoll_waitなど)、イベントが来たら対応する(アプリケーションレベル)スレッドを待ち行列に入れる。
Concurrent Haskellにより複数のCPUを使える。その場合はスケジューラーを複数のスレッドで動かす。
pureな式の評価に関する同期はHaskellが面倒見てくれるのでそれに任せる。
その他の同期だけをこっちで面倒見る。

メリットや性能:
1(アプリケーションレベル)スレッドあたり、48バイト程度しか消費せず、1千万スレッドを動作可能らしい。
入出力に、同期IO、AIO、epoll、selectなど複数の機構をサポートするのが簡単(同期IO用のイベント待ちループ、AIO用のループ、などは別々のネイティブスレッド上で動く独立したコードとして書ける)。
継続モナドなので例外などのサポートも簡単。
TCPスタックをHaskellで書いたらしい。シンプルなweb serverも書いてパフォーマンスを調べた。
(ベンチの結果については詳しく読んでないのでわからん)
0023名無しさん@お腹いっぱい。2007/05/13(日) 16:58:32ID:7TzwSeED0
理論的に新しくないっていうかこれってGUIの実装に使われるパターンと同じじゃない?
Haskellがこういう実装に有利な言語だっていうのを示してるってわけか?
0024名無しさん@お腹いっぱい。2007/05/17(木) 20:32:43ID:ImkUNHJw0
理論
0025The materialism-plan 2007/10/18(木) 19:36:11ID:MGpl3Ota0


http://eatcosmo.exblog.jp/

http://eatcosmo.exblog.jp/

http://eatcosmo.exblog.jp/



0026詐欺師 城戸英行2008/05/20(火) 14:53:00ID:K+f+pP3X0
愛知県犬山市長者町のもと住んでいて
借金で一家離散の城戸英行を探せ!
0027名無しさん@お腹いっぱい。2008/11/02(日) 07:35:21ID:mHoXyYAw0
保守
0028名無しさん@お腹いっぱい。2008/11/03(月) 12:53:13ID:xbiktaKM0
ぬお。こんなところにHaskellスレがあったとは
0029名無しさん@お腹いっぱい。2009/01/22(木) 06:00:59ID:K4Ka49ke0
保守
0030名無しさん@お腹いっぱい。2009/02/14(土) 05:29:07ID:mdNJ9QUL0
保守
0031松山 赤○○ 病 員 清掃 商 事2009/02/16(月) 01:05:34ID:HWjVI1a3O

   しにたい
0032名無しさん@お腹いっぱい。2009/02/22(日) 04:46:49ID:aU2B7EEA0
>31
生きろ。いつか「あの時死ななくて良かった」って思うから
0033名無しさん@お腹いっぱい。2009/03/23(月) 11:00:12ID:+dVaOdyx0
保守
0034名無しさん@お腹いっぱい。2009/04/27(月) 01:49:01ID:Z7cVY9V20
保守
0035名無しさん@お腹いっぱい。2009/10/11(日) 02:28:23ID:oGT92n/o0
数の数え方を覚え始めてしばらくすると大きな数に関心を持つようになる。
私は五歳の頃、世界で一番大きな数は百くらいだろうと思っていたが、
父は百の十倍の数も存在し、さらにその十倍の数も存在するという事実を
教えてくれた。私は圧倒された。そのように大きな数が存在し、なおかつ
それが 1, 2, 3, .... と一つずつ、そして途方もない階梯の向こうにまだ私が
想像したこともない巨大な数が存在し、しかも階梯を登ってその数にたどり
ついたとしたらその上に途方もない巨大な数が見渡せるという事実は私を不安にさせた。
数晩の眠れない夜のあと、私はこのようなことについて考えるのをやめてしまった。

今日、私は大人と呼ばれる年齢になり、Haskell という言語をたったいま学んだところだ。
私は、幼い頃に考えるのをやめてしまった謎、つまり自然数の「最後の数」は何かを
突き止める機会がようやく訪れたのを知った。

main= print $ take 1 $ reverse [1 ..]

このわずか一行のプログラムが私に、幼かった私には想像することすら恐ろしいと思わせた
究極の答えを教えてくれるはずである。現在このプログラムを実行中だが、さすがに
究極の答えを求めた代価として恐ろしいほどのページファイルを消費している。
私は今から眠るが、数時間後、少し遅めに起きた私は爽やかな目覚めともに究極の答えを
手にしているはずである。
0036名無しさん@お腹いっぱい。2009/10/11(日) 15:00:09ID:KWFsf3AJ0
ショートショートにしてもストーリーが安直かつ単純すぎるな
もう少しは知恵を絞って捻った面白いストーリーにしてくれ
0037名無しさん@お腹いっぱい。2009/10/11(日) 18:58:58ID:oGT92n/o0
てか本気だったんだが orz
0038名無しさん@お腹いっぱい。2009/10/17(土) 01:31:08ID:wMYpaZ4d0
コンパイルは通っちゃうし、out of memoryになるまで動くのか。
処理系が「はいはい、バカな人間めしょうがねぇなぁ」とあしらってくれたら良いのに。まともに動いてどうするんだよと。
「0で割るんじゃねーよバカ人間」みたいに。
0039名無しさん@お腹いっぱい。2009/10/19(月) 12:12:34ID:EKWl7b1I0
>>38
おまえは「停止問題」をなんだと思ってるのだ
0040名無しさん@お腹いっぱい。2009/11/25(水) 12:46:03ID:XCOv/7zT0
江戸川乱歩の「鏡地獄」みたいだな >>35
0041名無しさん@お腹いっぱい。2009/11/28(土) 21:08:26ID:GuLmcIPl0
第一級多相を使って,
make_pair f x y = (f x, f y)
を定義するにはどうしたらよいですか?
make_pair id 3 "foo"
とかのように使いたい.
■ このスレッドは過去ログ倉庫に格納されています