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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(2): 2006/02/24(金)03:02 AAS
haskell.org
外部リンク:www.haskell.org

日本語サイト
外部リンク[cgi]:www.sampou.org
外部リンク:www.geocities.jp

過去ログ
関数型プログラミング言語Haskell
省5
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 AAS
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バインディングみたいだけど、これって使いものになる?
関数型のプログラミングスタイルとずれるところはあるの?
943: 2006/05/28(日)22:47 AAS
ん? とりあえず出来なさそうなことを色々挙げてみる煽りかな?
944
(1): 2006/05/28(日)23:00 AAS
んーん。このスレ見てたらなんだか面白そうな言語だから勉強したく
なったけど、単なる計算じゃなくて、もっと実践的な仕事まで視野に入れると
どれくらい使いものになる言語なんだろうって知りたい。
実践っていっても、今仕事で書いてるようなプログラムをHaskellでも
書けるかって観点で最低限を書き出したら>>941-942みたいになったよ。
945
(1): 2006/05/28(日)23:13 AAS
XMLで通信するMMOゲームでも作ってんのか>>944氏は。
946
(1): 2006/05/28(日)23:35 AAS
デイトレ用のプログラムと見た。
947
(1): 2006/05/28(日)23:42 AAS
誰も答えないので分かる範囲で。あまり信用しないでくれ。

>Haskell面白そうなんだけど、サーバプログラム書けるのかな?
書けると思われ。

>そういう処理って書けて効率良く実行できるのかな?
ちょっと探してみたけどselectはなさそうだった。
必要ならシステムコールを呼べばいい。効率はしらね。
どっちかというとfdの数だけ(ユーザレベルの)スレッドを用意するのが推奨されてるような気もする。
省8
948: 2006/05/28(日)23:49 AAS
>>945>>946
どっちもちがうよ。詳しくは言えない。

>>947
おぉおぉ!ありがとうっす。そこそこ実践的にも使えるんだね。
ユーザレベルのスレッドってコルーチンみたいなやつかな?
wxHaskellなんてもんもあるんだ。そりゃいい!
wxWidgetsはwxPython通して使ったことあるけど、
省1
949: 2006/05/29(月)00:57 AAS
なんかどっかでConcurrent Haskellの並行機構を使えばselectとか要らんよ,
というのを英語で読んだ気がする 本家MLかなあ
950: 2006/05/29(月)11:30 AAS
まだHaskellはできることが少ないっていう認識&広告でいいと思う。
あとスピードも保障できないってことで。その代わりにたくさんメリットがあるわけだし。
951
(1): 2006/05/31(水)15:17 AAS
ふつうのHaskell買った人いる?
952: 2006/05/31(水)15:19 AAS
すっかり忘れてた
953: 2006/05/31(水)17:12 AAS
ほほほ本ののちちょちょ調子ははどどどうだっ!??
954
(1): 2006/05/31(水)17:14 AAS
まさに本調子でした
955: 2006/05/31(水)18:09 AAS
早速立ち読みしてくるか
956
(2): 2006/05/31(水)18:39 AAS
おい明日発売じゃないかよ!
騙したな!
957: 2006/05/31(水)20:00 AAS
>>954
誰が上手い事を言えと
958
(1): 2006/06/01(木)00:04 AAS
>>956
同志!!

俺は、近所の本屋、2、3軒のぞきに行っちゃったぜ。
959: 956 2006/06/01(木)03:41 AAS
>>958
ごめん…実はアマゾンで調べたら明日って事になってたから
実は本屋に行かなかったんだ…
960: 2006/06/01(木)10:42 AAS
こがいだんでも、haskellができるのに。
961: 2006/06/01(木)18:20 AAS
ほほほ本の調子はどどどどう!!?
962: 2006/06/01(木)18:25 AAS
著者はこのスレ覗くの?
963: 2006/06/01(木)18:31 AAS
当たり前。
964: 2006/06/01(木)20:44 AAS
配本とかさ、混乱させるようなこと書かないで欲しい
わざと一般的な書き方しなかったのかな
965: 2006/06/02(金)03:04 AAS
亀レスですまんが、

>>684
Haskellのリストで二分検索ってできるの?
二分検索というからにはO(logN)じゃないと意味がないと思うんだが、
lengthだの!!だの使っている時点でO(N)を越えている気がしてならない。
966: 2006/06/02(金)03:14 AAS
二分探索は配列用のアルゴリズムだからなぁ。
Haskell なら最初から二分木作った方がいいと思われ。
967
(1): 2006/06/02(金)17:47 AAS
ビックカメラに置いてあったので買いました。
かなり分かりやすそうです。
968: 2006/06/02(金)17:48 AAS
>>967
>>951
969: 2006/06/02(金)17:56 AAS
山積みの「ふつうのHaskell」と3冊「入門Haskell」があったけど、、、、

「入門Haskell」売れまくりだな!!
970: 2006/06/02(金)18:25 AAS
入門Haskellは名前からして初心者が買いそうだけど、名前に釣られたやつら乙って感じだな。
ふつうのHaskellプログラミングの方がまだまし。
971: 2006/06/02(金)19:24 AAS
著者さん乙
972: 2006/06/02(金)19:29 AAS
ふつうのHaskell amazonから発送乙
973: 2006/06/02(金)21:14 AAS
読んでみた。この本すげーよ。特に第一部は神。
例に沿っていくうちに、極めて自然に構文や標準関数を導入している。
ただ、どっちかというと言語とライブラリの解説が主で、自分でコードを書くための
訓練には余り重点が置かれていないようだ。

しかし、IOモナドの説明がうんこ(世界を持ち出す)なのと、評価と実行を混同してるのは
わざとなんだろうか。特に後者は方便の域を越えると思う。最後まで訂正されないし。
974: 2006/06/02(金)21:26 AAS
本当に、マジ分かりやすいね。
ふつうのLinuxまで読みたくなった。
(これだと某有機氏の本は不要かもって思った。)
975
(1): 2006/06/02(金)22:02 AAS
「神」とか「うんこ」とか、アホみたいな文体やめろ。
976: 2006/06/02(金)22:04 AAS
2ch特有の言い回しだろ、と
977: 2006/06/02(金)22:14 AAS
>>975
適切だと思ったから使ったんだよ。悪いかよ。
勝手に脳内変換して読んでろハゲ。
978
(1): 2006/06/02(金)22:21 AAS
入門書はいいから、もっと実のある本を書いてくれ。
979: 2006/06/02(金)22:23 AAS
少なくとも、Haskellバリバリに使い込んでる人が書いてくれよ。
980
(1): 2006/06/02(金)22:25 AAS
そんな奴日本にいない
981: 2006/06/02(金)22:30 AAS
女子高生は仲間同士のメールでHaskellしてるらしーぞ
982: 2006/06/02(金)23:32 AAS
975はうんこ
983: 2006/06/02(金)23:38 AAS
>>978
入門者以外なら論文読むと良いよ。
984
(1): 2006/06/02(金)23:39 AAS
>>980
日本どころか世界中でもほとんどいない。
985: 2006/06/02(金)23:39 AAS
「論文など実用的でない」とレスするに一票
986: 2006/06/02(金)23:42 AAS
>>984
ダブルSimonは例外
987
(1): 2006/06/02(金)23:44 AAS
どうせみんな見栄で買ってるんだろ。w
本当は理解できてないと正直に言いなさい。
988: 2006/06/02(金)23:50 AAS
ミエで買うなら入門書の類は選ばないと思うが・・・
989: 2006/06/03(土)00:15 AAS
あほみたいな文体は、隔離しておかないと、うつるからな。
知らないうちに、うんこ、うんこが口癖になるからな。
990: 2006/06/03(土)00:20 AAS
うんこー
991: 2006/06/03(土)00:36 AAS
>>987
そんな難しいか?
992: 2006/06/03(土)00:45 AAS
うんこのまま1000まで突入
993: 2006/06/03(土)00:49 AAS
うんこ
994: 2006/06/03(土)00:55 AAS
うん、このまま1000まで突入
995
(1): 2006/06/03(土)00:58 AAS
関数型プログラミング言語Haskell Part5
2chスレ:tech
996: 2006/06/03(土)01:00 AAS
>>995
乙うんこ
997: 2006/06/03(土)01:11 AAS
日本でHaskellの本が一気に2冊出たことを本家haskell.orgに知らせたら喜ぶのではなかろうか
998: 2006/06/03(土)01:13 AAS
Haskell Weekly Newsぐらいには出て然るべき
999: 2006/06/03(土)01:13 AAS
999
1000: 2006/06/03(土)01:15 AAS
1000 なら Haskell が天下を取る
1001: 1001 Over 1000 Thread AAS
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.405s*