関数型プログラミング言語Haskell
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGHaskellを通じて、みんなで勉強しましょう。
0655649
NGNGどうもです。
……ちゃんと読んでなかった。
>The scores in the Scores table can reflect CPU, Memory and/or Lines of Code (LOC).
Cはこの項目がDAMEだった訳か。
0656デフォルトの名無しさん
NGNGインタプリタのHugsならまだしも、コンパイラのghcで
Rubyよりも遅いのかよ。
でも、個別の試験で見ると、テキスト処理はダメでも
数値計算では勝てるみたいだね。
0657デフォルトの名無しさん
NGNGJavaさん、意外に速いのねぇ。
プリミティブ型のおかげかしらん。
0658デフォルトの名無しさん
NGNGlazyなおかげで,えらく簡単に書ける場合もある半面,
どこがいつ評価されるかわからないことも多くて苦労する.
まあそれが嫌ならMLにすれば良い訳だけど...
0659デフォルトの名無しさん
NGNGHugsのライブラリ関数全てが、GHCでも使える訳じゃないんでしょ?
その辺の可搬性はどうなってるの?
0660デフォルトの名無しさん
NGNG0661659
NGNGhttp://haskell.org/definition/
もう日本語訳もあったんだね。
http://www.sampou.org/haskell/library-j/index.html
スマソ
0662デフォルトの名無しさん
NGNG細かく遅延評価をコントロールしてやればある程度最適化は可能だろうけど
プログラムは汚くなるなあ.やっぱりMLjみたいなのが正解?
0663デフォルトの名無しさん
NGNGどこがいつ評価されるかなんて知ってどうするんだ?
それを知らないと困るような状況ってあるのか?
俺はそのような事で苦労したことはないのだが。
0664デフォルトの名無しさん
NGNGI/Oエラーが起きたとき等は評価の順序を知ることが重要だと思うが。
0665デフォルトの名無しさん
NGNGでも好きなのでage
0666デフォルトの名無しさん
NGNG関数型言語は「何を」解くか、であると書かれていました。
数値計算などには強いのでしょうが、やっぱり実用プログラムは…
その割に、HOpenGLなんてのもあるんですよね。変なの。
0667デフォルトの名無しさん
NGNG何処かに紹介されてたような気が。
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNGIO なら評価の順序はわかるものだと思うが…
0670デフォルトの名無しさん
NGNGHaskellが使えたら、相当な高い給料で来てくださいって言われそうだな。(w
0671デフォルトの名無しさん
NGNG逆に言うと、ショッピングサイトが数式で構築できるのか…
0672デフォルトの名無しさん
NGNG0674672
NGNGああ、それそれ。君速いねぇ( ゚Д゚)
0675デフォルトの名無しさん
NGNG俺はLispを少ししか触ってないから厨房的発言かも知れないけど、
Lispほど何処にでも現れて、成果を出している言語なんて
そうそうないんじゃないかなぁ
0676デフォルトの名無しさん
NGNG「数式で」って君面白いねえ。
Cのprintf("%d\n", ...)もi = i + 1も「式」だって分かってる?
0677デフォルトの名無しさん
NGNG(前は、Rubyのirbを計算機代わりにしてました。)
でも、インタラクティブに関数定義出来ないのがイタすぎると思われます。
0678デフォルトの名無しさん
NGNGよくわからんが、fileをloadするのは駄目なのか?
0679デフォルトの名無しさん
NGNG↓
実行
でなく
エディタ起動
↓
書く
↓
ファイルに保存
↓
ロード
↓
実行
↓
めんどくせぇ!
ってこと?
0680デフォルトの名無しさん
NGNGそゆことです。
0681デフォルトの名無しさん
NGNGインタプリタで試す。
↓
エディタのソース画面に貼り付け。
↓
ロード
↓
また試す。
これでいいんじゃないかな?
0682デフォルトの名無しさん
NGNGHaskellは再帰とかでいくら関数ネストしてもスタックあふれない、の?
0683デフォルトの名無しさん
NGNGそんなことはない(スタックじゃなくてヒープを使うかも知れんが)。
でも、末尾再帰(要するにループ)ならメモリは全く食わない。
末尾再帰ってのは、再帰呼び出しの値がそのまま関数の値になる、Cなら
int f(int x) { ..... return f(...); ....}
みたいな再帰呼び出しのこと。
(Cコンパイラでもジャンプに直す処理系があるよね。)
0684682
NGNGサンクスコ
Cとは全然勝手が違うので混乱気味な漏れなんだが、
SOEって言うのかな? 『The Haskell School of Expression』って本を
読み始めたよ。
全くの初心者を対象にしてるらしく、読みやすくてとっつきには
いい本だと思う。値段も高くないし、他のHaskell初学者にもお薦め。
あとは、これで日本語だったら完璧だったのになぁ。
0685デフォルトの名無しさん
NGNGただ、Cと違って
int f(int x) { return g(x); }
int g(int x) { return f(x); }
も関数型言語だとジャンプになるけどな。(無限ループになる。)
0687デフォルトの名無しさん
NGNGCでもなるよ。
0688デフォルトの名無しさん
NGNGならねーよばか
0689仕様書無しさん
NGNGなら、まだわかる。
無限に呼び出しが続いたりはしないが。
0690デフォルトの名無しさん
NGNGCの場合は、末尾再帰を最適化してくれるコンパイラなら、
ベースポインタを呼び出し前の状態に戻してジャンプだな。
スタックを積み上げる必要はないから、無限に呼び出し(ジャンプ)が続く。
ところでHaskelだと一応環境をヒープからアロケートしなおさないといけなくないか?
(現環境を廃棄できるから、無限に呼び出しを続けられるが)
0691hGetContents
NGNG必要な時に必要な分だけ読んでくれるんだね。
ちょっと萌えた。
でも効率は知らん。
0692デフォルトの名無しさん
NGNGファイルIOとか、そういう処理にlazyかよ。
信じられん言語だな。
デバッグ大変そう。(w
0693デフォルトの名無しさん
NGNGI/Oはlazyにした方が効率よいことも多いよ。
仮想記憶ベースのmemory mapped I/Oもcacheのflushもcopy on writeも…
0694デフォルトの名無しさん
NGNG0695デフォルトの名無しさん
NGNG次なる修行はどんなのが良いでしょうか?
0696デフォルトの名無しさん
NGNG筑波大のどっかの研究室に、MLでコンパイラ作成ってのがありましたよね。
確かこのスレのどこかにもリンクがあったはず。
趣味じゃなかったらいいんですけどね。
0697デフォルトの名無しさん
NGNG東工大のhaskellの授業です。講義のページにも下の方に演習がありますよ
http://www.brl.ntt.co.jp/people/mizuhito/CS/
0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNG0700695
NGNG0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNGmaximum segment sum 問題(mss)は実は線形時間アルゴリズムが存在する。その
アルゴリズムを実装し、なぜ線形時間であるか理由をしるせ。
mss :: [Int] -> Int
mss = maximum . mss' 0
where
mss' n [] = [n]
mss' n (x:xs)
| n + x < 0 = n : mss' 0 xs
| x < 0 = n : mss' (n+x) xs
| otherwise = mss' (n+x) xs
線形時間であるのは自明ってことで許して。
0703702
NGNG間違ってるやん…
出直してきます…
0704702
NGNG0705デフォルトの名無しさん
NGNG0706ad-hoc
NGNGmss [] = error "mss []"
mss xs = case maximum $ mss' 0 xs of
0 -> maximum xs
n -> n
where
mss' n [] = [n]
mss' n (x:xs)
| n + x < 0 = n : mss' 0 xs
| x < 0 = n : mss' (n+x) xs
| otherwise = mss' (n+x) xs
0707デフォルトの名無しさん
NGNGたしかに線形性ってのは述べにくいよね
maximum segment sum 問題(mss)は、整数列(正とは限らない)を入力とし、その
連続する部分列で和が最大となるものをみつけて、その和を出力とする。
たとえば [2,-3,2,-1,2,3,-5,8,-9,1] の場合 [2,-1,2,3,-5,8] の和 9 が出力で
ある。このプログラムを作成せよ。
[上級問題1]
maximum segment sum 問題(mss)は実は線形時間アルゴリズムが存在する。その
アルゴリズムを実装し、なぜ線形時間であるか理由をしるせ。
[上級問題2]
2-maximum segment sum 問題(2-mss)は、整数列(正とは限らない)を入力とし、その
重なりのない高々二つの連続する部分列で、それぞれの和の和が最大となるものを
みつけて、その和を出力とする。
たとえば [2,-3,2,-1,2,3,-5,8,-9,1] の場合 [2,-1,2,3] と [8] の和 14 が出力で
ある。このプログラムを作成せよ。
[上級問題3]
2-maximum segment sum 問題(2-mss)は実は線形時間アルゴリズムが存在する。その
アルゴリズムを実装し、なぜ線形時間であるか理由をしるせ
0708関数プログラマ
NGNG/* nはx[]の長さ.n > 0を仮定 */
int mss (int x[], int n) {
int p, q, i;
p = x[0];
for (i = 1; i < n; i++)
if (x[i] > p) p = x[i];
/* x[]の最大値が負の数なら,それがmss */
if (p < 0) return p;
/* x[]中には少なくとも1個正の数がある */
p = q = 0;
for (i = 0; i < n; i++) {
if ((p += x[i]) < 0) p = 0;
if (q < p) q = p;
}
return q;
}
0709関数プログラマ
NGNG(define (mss xs)
(define (pmss xs p q)
(if (null? xs) q
(let ((pp (+ p (car xs))))
(pmss (cdr xs) (max pp 0) (max pp q)))))
(let ((m (apply max xs)))
(if (< m 0) m
(pmss xs 0 0))))
たぶんHaskellだともっとスマートにかけると思います.
それにしても全角スペースをいれてインデントするのは面倒ですね.
0710関数プログラマ
NGNG示すほうが面倒といえば面倒ですね.
0711デフォルトの名無しさん
NGNGSchemeよりスマートに書ける言語なんてありません。
0712デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNG に置換してもらうほうが
こぴぺする側としてはありがたい。
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG連続した半角スペースは消えるんじゃないの?
0716デフォルトの名無しさん
NGNGnbsp;は何個書いても消えないよ。
0717厨房丸出し
NGNG0718デフォルトの名無しさん
NGNG0719石敢當
NGNGhttp://cvs.haskell.org/Hugs/pages/latest.htm
再びグラフィックライブラリが使えるようになったので
嬉しいです。
0720ハグハグ
NGNGハグズ?
0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNGお久しぶりです。
0723デフォルトの名無しさん
NGNG"ハグズ"だよ.
0724720
NGNGあ、ハグズでいいんだ。
それにしてもライブラリがたくさん増えたなぁ。
もしやと思ってgrepかけてみたけど、Win32 OLEなライブラリは無かった。
これが有ると、世間的にもウケがいい気がするんだけど。
0725石敢當
NGNGご無沙汰してました。(見てはいたんですけどね)
Birdさんの本(>>277)を最初からゆっくり読むことにしていました。
exerciseは適当にやったりとばしたりして、やっと100ページくらい
読んだところです。約1/4くらいまで来ましたが、だんだん中身が
濃くなってきたので読むペースも落ちてきました。Haskellで何か
すぐに作らなきゃいけないわけじゃないので、まあのんびりいきます。
>>723
身近にHaskellをいじっている人がいないので、HaskellもHugsも
実際に発音したことないです。頭の中では「ハスケル」「ハグス」と
読んでいました。「ハグズ」と濁るのが正しいのですね。
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728名無しさん@Emacs
NGNGPreludeモジュールに、digitToIntがあるのにstringToIntはないんですね。ちょと不思議。
そこで自分で作ってみました。
strToInt :: String -> Int
strToInt "" = 0
strToInt str = digitToInt (last str) + 10* strToInt (init str)
intToStr :: Int -> String
intToStr x
| x `div` 10 == 0 = [intToDigit x]
| otherwise = intToStr ( x `div` 10 ) ++ [intToDigit ( x `mod` 10 )]
こんな風になりました。もっとうまく書けるとか、美しく書けるという人はおしえてくださいな。
0729デフォルトの名無しさん
NGNGread関数があるよ。型に制約かけないとうまく動かんけど。
Prelude>(read :: String -> Int) "1234"
1234
# Hugsはハグスって読んでた
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNGHaskellコードを美しく表示/印刷するための
プリティプリンタが欲しい感じ。
0732デフォルトの名無しさん
NGNGstrToInt "" の時に 0 を返すのはなんかなぁというのと、
効率を気にしてこう書く。
strToInt :: String -> Int
strToInt "" = error "strToInt"
strToInt ('-':cs) = negate $ strToInt cs
strToInt cs = foldl (\x c -> x*10 + digitToInt c) 0 cs
0733デフォルトの名無しさん
NGNGInt は Read クラスのインスタンスとしてPreludeで宣言されているので、read がつかえるよ。
Prelude> (read "1234")::Int
1234
Int は Show クラスのインスタンスとしてPreludeで宣言されているので、show がつかえるよ。
Prelude> show 1234
"1234"
0734デフォルトの名無しさん
NGNGa2psの-Eオプションと--highlight-levelオプション使ってみては?
->はちゃんと→になるし、::はなぜか集合の"is an element of"の記号になるけど。
それなりに綺麗にはなるかと。
というか、GHCのサイトのリンクにプリティプリンタがあった気がする。
0735名無しさん@Vim%Chalice
NGNG0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGstrToInt "----3" が3になるのは嫌だ。
0738732
NGNGそうだね。俺も嫌(w
0739デフォルトの名無しさん
NGNGA→Bてのは、→をバイナリオペレータとした、
AからBへの関数全体の集合のことだから、
f∈A→Bは変ではないと思う。
0740デフォルトの名無しさん
NGNG動かなくなってしまった。これバグ? Win98使用。
0741デフォルトの名無しさん
NGNGそれはわかってるんだけど、他の言語でNameSpaceを指定したりするのに
::を使ったときも∈になったら鬱とか思った。というか、MLのcons operatorとか。
0742デフォルトの名無しさん
NGNGConsが∈はイヤすぎだな(藁
0743あげあらし
NGNGのHaskell Emacsについてどう思いますか?
0744デフォルトの名無しさん
NGNG0745石敢當
NGNG---
年末年始は少し時間を取れたのでIFP本(>>277)を読み進めました。
難しくて良く分からないところなどはとりあえず飛ばして、
Monadの手前の9章まで読みました。大変勉強になります。
>>420 に「O(1) で挿入、削除を出来る queue を作れますか?」
という投稿がありましたが、O(1)で操作できるキューの実装も
出ていました。Chris Okasaki氏の考案によるものだそうです。
短いコードで、O(1)で操作できる理由も書かれているのですが、
まだ私には理解できていません。
今度はexerciseをやりながら読み返してみようと思います。
0746石敢當
NGNG0747デフォルトの名無しさん
NGNGhttp://www.sampou.org/haskell/article/whyfp.html
0748デフォルトの名無しさん
NGNGStateモナドは尚一層難しいね。
0749デフォルトの名無しさん
NGNGhttp://www.cs.chalmers.se/Cs/Grundutb/Kurser/d1pt/d1pta/lecture8a.pdf
↑に出て来るcountOccurrencesって関数、カコイイけど
自分じゃ絶対思いつけないなぁ。
0750デフォルトの名無しさん
NGNGHaskell と ML の差(言語、勢力などあらゆる側面において)に
ついて比較していただけませんか?
歴史という意味では ML の方が長い訳だし、パフォーマンスという
意味でもコンパイラまで装備された ML のほうに分がありそうに
見えます。
しかしここのところの人気は Haskell のほうがあるように見えます。
いったいこれはどうした訳なんでしょうか?
0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNGHaskellが人気有るのは2chだけのような気が……。
0753デフォルトの名無しさん
NGNG我々に ML を貶せと仰る?
つか、そんなこと気にしてないで
さっさとどっちでもいいから取り組み始めたほうがよろしいかと。
最終的には両方やればいいし。
あと Scheme も忘れずに。
0754747
NGNGhttp://www.puchiwara.com/hacking/
■ このスレッドは過去ログ倉庫に格納されています