[過去ログ] 関数型プログラミング言語Haskell Part4 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
862: 2006/05/19(金)20:13 AAS
はじめてのC
ふつうのH
863: 2006/05/19(金)21:23 AAS
自分のセックスに自信がない奴が買いそうなタイトルだな。ふつうのH
864: 2006/05/19(金)21:39 AAS
ふつうじゃないHが溢れる世の中にふつうって何だよって気になったりするのかね
865: 2006/05/20(土)09:25 AAS
WinHugs May 2006、アンインストールできない。エラーで落ちる。
新手の嫌がらせか?
866: 2006/05/20(土)12:18 AAS
Haskell教に感染したので状態の変更はできなくなりました。
867: 2006/05/20(土)12:57 AAS
hugsはもうつかわねー
868: 2006/05/20(土)13:21 AAS
ももももう待てない><
869
(1): 2006/05/20(土)22:53 AAS
なんでHaskell微妙にブームなの?
870: 2006/05/20(土)23:16 AAS
裏で手を引いてる奴がいるんだよ
871
(4): sage 2006/05/20(土)23:24 AAS
>>869
私見レスだけど,
「純粋関数型」という小難しさがギークを自認する人々を惹き付けるのだと思う。
昔はC++がその役割を果たしていたのだけど(自分を含め踊らされた人の何と多い事か)。
# .NETやJavaがある今,わざわざMFCの為にC++を覚えようと言う人間も少ないし,
# C++の「正しい」コーディング法だとかも固まって来た感がある。

逆にOCaml本が出ないのは,call by valueなのである程度動きの予測がつくからかな?
省1
872
(1): 871 2006/05/20(土)23:25 AAS
sage失敗…逝ってきます
873: 2006/05/20(土)23:29 AAS
>>872
これからはsageさんと呼ばせてもらうよ
874: 2006/05/20(土)23:30 AAS
賢者なんだね。
875: 2006/05/21(日)00:14 AAS
OCaml本もいいが、ページの半分近くがObjectの説明に費やされたら俺は切れる。
876
(1): 2006/05/21(日)07:08 AAS
MFCてw
877: 2006/05/21(日)08:06 AAS
GHC 6.4.2のWindows版が消えてるけど何か問題あったの?
878
(2): 2006/05/21(日)15:27 AAS
>>871
># C++の「正しい」コーディング法だとかも固まって来た感がある。
個人的にはかなり異議あり.
879: 2006/05/21(日)15:30 AAS
>>878>>295によると、
正しさというのも、私にとって正しい、あなたにとって正しくない、その程度の差なのではないでしょうか?
880: さげ 2006/05/21(日)20:37 AAS
>>878
正しい,というのは違ったかもしれない。
今更ながらC++のコーディング規約に関わる本が沢山出ているなあ,という実感から書きました。

あと>>876のレスに困惑。MFCはオブジェクト指向じゃないとかそういう話がしたいのだろか?
C++Builderの方がイイヨーとかWindows系以外にも目を向けろとかそういう話?まあいいか。
881: 2006/05/21(日)20:52 AAS
モナドの合成をマスターすれば、Haskell をマスターできる。
882: 2006/05/21(日)20:54 AAS
渋谷の女子高生の間でモナドを合成するのが流行ってるらしい
883
(1): 2006/05/21(日)21:28 AAS
call by valueなλ計算のモデルがco-productとstrong monadで作れることが
わかれば、Haskellをマスターできる。
884: 2006/05/21(日)21:44 AAS
λ.......
            λ......

    λ.........
885: 2006/05/21(日)21:45 AAS
λと入の違いが分かればHaskellをマスターできる
886
(3): 2006/05/21(日)22:58 AAS
>>871
.NETとJavaてw
887
(2): 2006/05/21(日)23:14 AAS
>>886 何を持って笑ってるのかわからんな
888
(1): 2006/05/22(月)01:53 AAS
>>887
え?笑っているように見えた?
889
(1): 2006/05/22(月)05:00 AAS
>>886-888
ここで喧嘩するなよw
890: 2006/05/22(月)06:37 AAS
OSの書けない言語なんて存在すらしてない
891: 2006/05/22(月)07:21 AAS
>>889
安易に喧嘩認定し杉
892: ? 2006/05/22(月)09:08 AAS
いや,喧嘩でしょー.しつこい>>886とか.煽りで怒りを買っているというか.別にいいけど
893: 2006/05/22(月)09:12 AAS
誤解招く書き方する奴もよくないけど
炊きつける奴もよくない
894: 2006/05/22(月)09:21 AAS
このスレで煽ろうが喧嘩しようが構わないと思うが、すれ違いな話題は止めてくれ。
895
(1): 2006/05/22(月)09:49 AAS
遅レスながら>>675-676にワロタ
896: 2006/05/22(月)12:04 AAS
Haskellやってる人の平均的プロフィールってどんな感じ?
897: 2006/05/22(月)12:54 AAS
大学院生が多いと思ってた(というか東大か京大ばかりだと思ってた.私は違うけど
でも>>871みたいに他言語使いの例があるなら分からないな
898
(1): 2006/05/22(月)13:10 AAS
東大京大て…一体どんな根拠があってそんな考えに至ったんだよw
無駄にトップクラスの大学挙げてくる辺りが学歴厨くさいな。
899: 2006/05/22(月)13:17 AAS
自分は、Haskellやろうと思ったけど、HaskellをせずにLispをやり始めた。
ていうかチャイティンの本が面白いんでそうなった。
Haskellの勉強会に出てるのは、良く分からんけど、
学生とか変わった会社員とかと言う感じっぽいな。
900: 2006/05/22(月)13:57 AAS
>>898
>東大京大て…一体どんな根拠があって
う〜ん,根拠かあ.webページとかICFPとか見てて浮かんだ憶測だけど,全くの当て推量ではないです.
あと学歴厨って言葉は久しぶりに聞いた.よくそんな言葉を恥ずかしげもなく吐けると思うよ.
そんなに気分が悪いの?怒ってるの?
901: 2006/05/22(月)14:20 AAS
学歴コンプレックスって言ってやった方が良かったですか?(笑)
902: 2006/05/22(月)14:41 AAS
はぁー,自分が低脳・低学歴だからって他人を僻むのはみっともないよ.
もっと大人になった方がいいんじゃないかな.
903: 2006/05/22(月)15:11 AAS
そこらへんでやめておけ
904
(1): 2006/05/22(月)15:17 AAS
すまんな。俺がどうでも良い質問をしたばっかりに。
905: 2006/05/22(月)15:23 AAS
いや,むしろおれが悪かった.
みんな,ごめん.
906: 2006/05/22(月)16:25 AAS
>>904
お前いい奴だな。
907: 2006/05/22(月)17:34 AAS
なんて、うそよねん
908: 2006/05/22(月)18:12 AAS
>>895
どこが面白いのかわからない…
909: 2006/05/22(月)18:48 AAS
涼宮ハルヒって何か知らんが、最近興味が出てきたよ。
何とか見ないように我慢してるけど。
910: 2006/05/23(火)03:05 AAS
いや、ハルヒたらはどうでもいいんだけどね
911: 2006/05/23(火)04:19 AAS
もう片方のハルヒはいいぞ。
912: 2006/05/23(火)07:42 AAS
Haskell使いは高学歴アニヲタの傾向あり、と
913: 2006/05/23(火)08:14 AAS
Haskellの話題で盛り上がれよ。
914
(3): 2006/05/23(火)16:12 AAS
最近、代入を多用した他の言語で書かれたプログラムと同じ動作をするものをHaskellで書きました。それでStateモナドの使い方が分からないので無限ストリームを使ってみたのですが、無限ストリームは分かりづらいからStateモナド使えと言われました。

無限ストリームを使うよりもStateモナドを使った方がHaskellらしいのでしょうか?
教えて下さい。
915: 2006/05/23(火)16:35 AAS
ストリームとStateモナドのどっちを使うか迷うという状況を想像できんのだが。
例えばどんなコード?
916: 2006/05/23(火)16:39 AAS
Haskellで他の言語のVM作っていて、命令が実行される毎にそのVMのレジスタの値を変更するようなコードです。

全てのVMの状態がならんだストリームを作って、ある状態のVMを返すってなコードを作ってました。
917
(1): 2006/05/23(火)17:10 AAS
そのVMがレジスタの値以外に内部状態を持たないなら、
Stateモナドやストリームを使っても特に嬉しくないんじゃないか?
そういう場合は、
nextState :: Code -> RegisterState -> RegisterState
みたいな状態更新関数を作るのが自然なような気がする。

役に立たない回答ですまん。
918: 2006/05/23(火)17:13 AAS
> Stateモナド使えと言われました。
そう言ってくれる人がいることが羨ましい。
919: 2006/05/23(火)19:11 AAS
>>914
その辺は好みじゃないかなぁ。
具体的なものを見てみないとわからないけど。

あえて言うなら、将来他のモナドと組み合せて使うならモナドで書いておいた方が良いかもしれない。
920
(1): 2006/05/23(火)19:12 AAS
> そのVMがレジスタの値以外に内部状態を持たないなら〜特に嬉しくない
なんで?「レジスタの値以外に内部状態を持たないなら」という前提がよくわからない。

どちらにせよStateモナドはかなり嬉しいと思う。
nextState :: Code -> RegisterState -> RegisterState
... let new = nextState code old in ...
と書くより,
nextState :: Code -> State RegisterState ()
省9
921: 2006/05/23(火)19:18 AAS
> 将来他のモナドと組み合せて使うならモナドで書いておいた方が良い
これ読んで思ったのだけど,例えばStateなら,
nextState :: (MonadState RegisterState m) => Code -> m ()
みたいに,より一般的に定義するって手があるよね
これなら
nextState :: Code -> State RegisterState ()
nextState :: (Monad m) => Code -> StateT RegisterState m ()
省3
922: 2006/05/23(火)19:21 AAS
あ,MonadStateは
外部リンク[html]:www.haskell.org
こっちみてください。でも既にfundepsとか使ってあって,ちょっとわかりにくいか…
923
(1): 2006/05/23(火)20:03 AAS
>>920
>「レジスタの値以外に内部状態を持たないなら」という前提がよくわからない。
ごめん。余り意味のない前提だったから忘れてくれ。

>どちらにせよStateモナドはかなり嬉しいと思う。
>(...)
>とやったほうが明示的に状態を持って回らなくて楽じゃん。
それが嬉しいのはRegisterStateを変化させるコードがnextStateの他にあって、そこから
省9
924: 2006/05/23(火)20:59 AAS
要するに,nextStateにどんな型を持たせるか,というのは,
nextStateを使う側がどんな風に呼び出しているか,って事でそ?
Code -> State RegisterState () も Code -> RegisterState -> RegisterStateも同型な訳で,
どっちでも使いやすいほうでいい.>>923でも良いし,それはここでは別問題な気がする.

ここでは「VMを作るけど実装のうえで状態の扱いをどうするか?」という質問なので
「それならStateモナドがいいんじゃね?」という答えはストレートで合ってると思う.

処理の全体を表す関数がどんな型を持っているかは,わりとどうでもいいと思う.なんでもいいけど
925: 2006/05/23(火)21:05 AAS
s->(a,s)もState s aも同型だろうよ
926: 2006/05/23(火)21:27 AAS
>処理の全体を表す関数がどんな型を持っているかは,わりとどうでもいいと思う.
これには同意するけど、nextStateはいま問題になっている「処理の全体を表す関数」じゃない。
>>914は「処理の全体を表す関数」をストリームで書くかStateモナドで書くかという問題を提起していて、
それに対して>>917で、nextStateを用意して、それを使って「処理の全体を表す関数」を書いたらいいんじゃないか、と提案した。
この方針が採用されたとして、nextStateの実装にStateモナドを使うかどうかは、また別の話だろ。
927: 2006/05/23(火)21:58 AAS
もういいよ
928: 2006/05/23(火)23:02 AAS
>nextStateの実装にStateモナドを使うかどうかは、また別の話だろ。
その「別の話」が聞きたかったんじゃないのか.
だからStateモナドを使えば状態の管理が楽なんだよ,と答えたんじゃないの

というか処理の全体って何だよ
nextStateだか何だか知らないけど,おまいらどういう文脈を仮定しているのかと
929: 2006/05/23(火)23:06 AAS
自分(>>914)から話題をふっておきながら,返事が遅れてしまい申し訳ありません。

私が疑問に思ったのは以下のようなことです.

  スタックやレジスタを持つVMがいくつかの関数から参照されているとき,
  そのVMの中のレジスタだけを変化させて他の関数にその変化を反映させた
  い時,Haskellではそれをどのように解決するのかが疑問に思いました。

これはStateモナドを使えば可能ということでしょうか?
Haskellで代入のような状態変化を表現するのに私は無限ストリームを使う方法しか知らなく,他にもっと良い方法があるのか疑問に思ったので質問しました.
省1
930
(3): 2006/05/23(火)23:07 AAS
それと私が書いたコードは以下のような感じです(若干略していますが)。

data VM = VM Stack RegisterTable

runVM :: VM -> Codes -> VM
runVM vm codes = selectUnChangedVM $ generateAllVM vm codes
    where
      selectUnChangedVM :: [VM] -> VM
      selectUnChangedVM (vm1:vm2:vms)
省12
931: 2006/05/23(火)23:09 AAS
そんなことより>>883の解説きぼん
932
(1): 2006/05/23(火)23:13 AAS
>>930
止まる,というのを,「VMの状態が変化しないこと」としているのは,どうなんだろう。
普通はhalt命令とか入れるんでわ
933
(1): 2006/05/23(火)23:15 AAS
というか後々副作用を導入する為にStateT IOで書くってのはどうよ
934
(1): 2006/05/23(火)23:35 AAS
data RegisterTable = RegisterTable {r1::Int, r2::Int, pc::Int, sp::Int}

updateR1 :: Int -> State RegisterTable ()
updateR1 v = do
old <- get
put (old {r1=v})

jump addr = do
old <- get
省4
935: 2006/05/24(水)00:20 AAS
>>930
俺はそのままで問題ないと思う。execCodeの処理が複雑なら
そこだけ>>934みたいにStateモナドを使って実装してもいいかも知れないが。

それはごく普通のストリームの使いかただから、
これが分かり辛いと言う奴はHaskellに慣れてないだけなんじゃないだろうか。
936: 2006/05/24(水)00:36 AAS
まあでもVMを状態の無限ストリームで実装すると聞いたらびっくりするんじゃないだろうか。
実際>>930のコード読むまで私は質問者がどう実装したのか分からなかった。

あと,モナドなら>>933が言っているように(?)、
将来VMから環境に副作用を及ぼす(ファイル入出力やコンソール出力など)ように拡張したい場合、
StateTとIOと合成すれば一発、とかちょっとエレガントじゃなかろうか。やってないので分からんけど
937: 2006/05/24(水)00:53 AAS
>>932
アセンブラの演習とかで,終了を
halt:
 jmp halt
みたいに書くのはよくある。

Stateモナドは状態の履歴を持たないから、この場合に無限ストリームを使うのは結構賢いかも
938: 2006/05/24(水)01:29 AAS
ネタだけど、あとあと入出力を扱うためにもなでぃっくなストリームをつかう、とか
newtype MonadStream m a = MS (m (a, MonadStream m a))
type Stream = MonadSteram Identity
type IOStream = MonadStream IO
939: 2006/05/24(水)07:33 AAS
MLとかMirandaの話になってしまうが、
モナドがない頃は、無限ストリーム専門だったよ…
940: 2006/05/25(木)00:37 AA×

941
(1): 2006/05/28(日)21:47 AAS
Haskell面白そうなんだけど、サーバプログラム書けるのかな?
50本から100本くらいのソケットを効率良く処理したいから、
UNIXのselectシステムコールみたいな操作使って、
多重化したI/Oを準備OKなやつを片っ端からてきぱきさばきたいんだけど、
そういう処理って書けて効率良く実行できるのかな?

あと、XMLも扱いたいけどライブラリはどれくらいあるの?

さらに、通信部分とは別のところで、ユーザといろいろインタラクション
省2
942
(1): 2006/05/28(日)21:52 AAS
そうそう、Haskel用のGUIは何がお勧めかな?Linuxで動けばいいよ。
Fedora Core 5のextrasリポジトリに
ghc-gtk2hs-0.9.10-1.fc5.i386.rpmってのがあって、
GTK+のHaskellバインディングみたいだけど、これって使いものになる?
関数型のプログラミングスタイルとずれるところはあるの?
1-
あと 59 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.019s