[過去ログ] 関数型プログラミング言語Haskell Part7 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
1(5): デフォルトの名無しさん [sage] 2007/03/18(日)18:56
haskell.org
http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 2chスレ:tech
Part2 2chスレ:tech
Part3 2chスレ:tech
Part4 2chスレ:tech
Part5 2chスレ:tech
Part6 2chスレ:tech
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
51(9): デフォルトの名無しさん [sage] 2007/04/01(日)05:40
【注意と警告】
関数型言語コミュニティの一員として、大切なお知らせがあります。
>>46-47 は、現実世界で多数のトラブルを巻き起こしている人物(東京在住44歳)
ですので、きっぱりとスルーするのがよろしいでしょう。
公衆の場でいきなり赤の他人相手に、第三者の失敗例を持ち出して
ベラベラと中傷しだす人物の人間性などというものは、容易に想像がつく事ですし、
また万が一そのような人物と関わったら、多大なトラブルと時間的消耗を蒙る
事は、火を見るより明らかです。
実際これまで現実のビジネスで、多くの人々が彼の言動に迷惑してきました。
その中には、彼と一緒に仕事をしていた一流大学出身の経営者や、エンジニア、
サイエンティスト、大学病院関係者等も含まれています。
彼の人間性を確認するには、ネット上での彼自身がこれまで行ってきたスレ荒し
の例を見れば十分でしょう。
・デザインパターンスレ 2chスレ:tech
特別な利害関係がきっかけで、繰り返し議論妨害を行っているのが彼です。
彼の議論妨害には、精神性疾患の俗称の連呼という特徴があるので一目瞭然です。
私が察するに、彼の症状は「自己愛性人格障害」と呼ばれるものと存じます。
ここでは詳しく述べませんが、ピンときた方は症例を調べてみるとよろしいでしょう。
最終的な判断は聡明なみなさんにお任せ致します。それでは。
55(9): デフォルトの名無しさん [sage] 2007/04/01(日)06:34
HaskellでRSSを引っ張って最新の数件表示するだけのサンプルに挑戦してるけど
かれこれ1ヶ月以上掛かってる。w
XML操作 → HXTでArrowの基礎から挑戦
日付のパース → MissingHを利用
表示 → 今はCGIライブラリで妥協してるけど本当はHAppS使いたい
難しすぎるわ。('A`)
95(3): デフォルトの名無しさん [] 2007/04/01(日)16:33
>>92
あんたみたいな厨が、言語の価値を殺す。 Lispの轍を踏ませたいの?
103(4): 46=65 [sage] 2007/04/01(日)18:11
>>67
実用性を気にして勝手な拡張をしからLispが廃れたというのは違うと思います。
今Lisp上で研究を進めたいなら、不可欠でない複雑さを切り捨てた
Schemeをテストヘッドにすれば良いはずです。
関数型言語研究の進展に伴いLispが研究の出発点としてふさわしくなくなったから
そこまでの研究成果を取り入れたHaskellが作られたと理解しています。
Haskellが実用言語になろうとなるまいと、その後の新しい研究成果を取り入れて
さらに新しい純関数型言語の標準を決める事はいずれまた必要になると考えます。
実用化に興味がない人がいてもいいとは思いますが、
良い言語であれば実用化を目指す人が現われるのもまた当然の事です。
研究成果が世間に広まるを嫌がるのでは一体何のための研究なのでしょうか。
>>100
>>67=>>95なのではないでしょうか。
それなら具体的な事はすでに書かれています。
183(3): 55 [sage] 2007/04/02(月)12:48 AAS
AA省
287(3): デフォルトの名無しさん [sage] 2007/05/02(水)06:39
>>282は確かに冗長な文章だが、
「長すぎて読む気しない」と書き込んでその反映を確認する時間より>>282を読む時間のほうが長いとか、
この程度のもの読むのに「労力」の存在を意識してしまうとか、そういう低学歴のたぐいは問題外。
367(4): デフォルトの名無しさん [] 2007/05/30(水)21:40
Haskellには再代入がないっつーけど、
いまだに理解できないオレ、へたれ♂
Javaでいうと常にfinalってことか?
ある関数に引数を渡すと、必ず同じ値が返ってくるとか言うけど、
引数に3を与えても、5を与えても同じ値が返ってくるのか?
我ながら根本的に理解してないようなんだが、
だれか助けて。
ちなみに「ふつける」は半分以上読みました
388(4): デフォルトの名無しさん [] 2007/06/02(土)02:09
fix f = let x = f x in x
これってどういうこと? x = f x って。
fがたとえば id ならまだいいけど、(+ 1)だったら?
っていうか言語的に、letの機能ってどうなってんの?
395(3): デフォルトの名無しさん [sage] 2007/06/02(土)15:09
ありがとう。
つまり、
fix f = let x = f x in x
は、
fix f = f $ f $ f $ f $ f $ f $ f $ ....(略。無限に続く)
のこと。
fix f の値を得ようとすると無限ループ。
ただし、
残りの部分の評価が遅延されることによって、
fix f の値の一部だけは取り出せる(リストの前の方とか)。
fが(+1)とかだと部分も糞もないから即無限ループ。
って事でおk?
>>388で、「idなら」って書いたけど、idでも無限ループだよね?
410(3): デフォルトの名無しさん [sage] 2007/06/03(日)20:34
仕事の補助ツールを書いてみれば良いんじゃないか?
480(3): デフォルトの名無しさん [sage] 2007/06/11(月)23:26
・言語の正式名称は「clean」であって「concurrent clean」じゃない
・開発環境は無料
・登録しろって言ってくるけど、しなくてもダウンロードできる
・開発も公開も、企業じゃなくて大学がやっている
おまえらもうちょっと調べてから投稿しろよ。
485(3): デフォルトの名無しさん [] 2007/06/13(水)02:42
コンビネータで数の計算をやろうとして、以下のような関数を用意した。
ネタ元は http://users.bigpond.net.au/d.keenan/Lambda/index.htm
k x y = x
i x = x
t x y = y x
v x y z = z x y
inc = v (k i)
dec = t (k i)
isZero = t k
zero = i
one = inc zero
two = inc one
で、検算用に10進数に変換する関数numを作ろうとした。
しかし、型推論が邪魔して(?)以下の関数が定義できない。
num n = isZero n 0 (num (dec n) + 1)
こういうときってどうやって対処すればいいの?
577(3): デフォルトの名無しさん [sage] 2007/06/28(木)19:35
なんだかhaskellのコードは俺言語オナニーの一種に思えてしかたがない
とても見やすいとは思えないな
613(3): デフォルトの名無しさん [sage] 2007/06/30(土)12:57
よくわからんけど、newStreamとoutputToとやらは、hGetContentsとhPutStrの事か?
せめてSystem.IOモジュールの一覧くらい眺めてみたらどうだ
614(6): デフォルトの名無しさん [sage] 2007/06/30(土)14:40
型によって処理を分岐させたいんだがうまくいかん。
import Data.HashTable
import Data.Typeable
hoge a = if typeOf a == typeOf "A"
then do hash <- new (==) hashString
hoge2 hash a
else do hash <- new (==) hashInt
hoge2 hash a
hoge2 hash' b = update hash' b "HOGE"
これだと、次のようなエラーが出る。
test.hs:8:28:
Couldn't match expected type `Int' against inferred type `String'
Expected type: Int
Inferred type: String
In the second argument of `hoge2', namely `a'
In the expression: hoge2 hash a
関数の中では、型変数の型は一つしかとれないということなのかな・・・?
こういう場合はどうしたらいいんだろう。
630(5): デフォルトの名無しさん [sage] 2007/07/01(日)08:10
>>536
>>627
ちょっと前にだけど書いてみた。
http://www.aya.or.jp/~takuo/arrow_for_2ch/arrow_for_2ch.pdf
Monadを少しは知ってる人向けのArrowの紹介。
今見てみると、もう少し具体例とか使い方とか書いたほうが良かったと思うけどせっかく書いたので。
819(5): デフォルトの名無しさん [sage] 2007/08/17(金)23:20
すいません。教えてください。
今、haskellで囲碁のプログラムを組んでいるのですが、
石の塊(連という)の座標の集合を求める関数を書こうとして躓いてしまいました。
C++で書くと以下のようになります。
void getRen(const IgoBoard &board,Point point,Stone stone ,set<Point> & ren)
{
if(stone == board.getStone(point) && ! ren.include(point))
{
ren.insert(point);
getRen( board , Point(point.x+1,point.y ) , stone , ren );
getRen( board , Point(point.x-1,point.y ) , stone , ren );
getRen( board , Point(point.x ,point.y+1) , stone , ren );
getRen( board , Point(point.x ,point.y-1) , stone , ren );
}
}
問題 ren の部分をどう書くかです。
haskellはポインタや参照が無いし、一度代入した値を変更することもできないらしいので
探索の先々で同じrenを使う方法がわから無いのです。
haskellではどう書いたらよいですか。
838(3): デフォルトの名無しさん [sage] 2007/09/04(火)00:49
Lisp で Prolog 書いたり、Haskell で Perl 6 書いたり、SML で ECMAScript 書いたりするのは
楽しいんだろうけど、動いたらおしまいなんだよね? 常用出来る様な処理系を書こうとしたら C や
C++ で書き直す事になるでしょ。何かむなしいのう…
885(3): デフォルトの名無しさん [sage] 2007/09/21(金)12:10
>>884
確かにそうだ。最悪O(n^2)になるな。
でも、中間リストを作ることが直接の原因ではない。
実際、正確評価ならelts_lt_xとelts_greq_xを作り終えた時点で引数のxsはGCできる。
遅延評価だとこれが上手くいかなくて、逆順にソートされたリストが渡される最悪のケースでO(n^2)になる。
時間的には同じ最悪のケースでも、入力が正順にソートされていた場合はO(n)なんだが。
汚い方法だけど、seqを使って評価順を入れ替えることでO(n)になる。
qsort [] = []
qsort (x:xs) = length elts_lt_x `seq` length elts_greq_x `seq`
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
where
elts_lt_x = [y | y <- xs, y < x]
elts_greq_x = [y | y <- xs, y >= x]
886(5): デフォルトの名無しさん [sage] 2007/09/21(金)12:47
プロファイル取って調べてみた。数字はtotal allocにqsortの%allocをかけたもの。左の数字は要素数。
>>881とランダム要素のリスト
800 : 380003.544
1600: 873076.32
2400: 1296538.048
3200: 1816425.728
4000: 2399276.16
>>885とランダム要素のリスト
800 : 400965.324
1600: 1040519.448
2400: 1389810.24
3200: 1846377.12
4000: 2776879.088
>>881と整列リスト([1..n])
800 : 8985561.144
1600: 35887143.13
2400: 80695069.14
3200: 143405095.9
4000: 224106868.3
>>885と整列リスト([1..n])
800 : 8995036.344
1600: 35906208.73
2400: 80723725.14
3200: 143443342.3
4000: 224154724.3
最悪ケースだとO(n^2)になるっぽい
888(3): デフォルトの名無しさん [sage] 2007/09/21(金)13:12
>>886
total allocは確保したメモリの総量だから、空間効率を計るのには使えない。
+RTS -sstderrをつけてmaximum residencyを見ればO(n)になってるのが分かると思う。
955(3): デフォルトの名無しさん [sage] 2007/10/28(日)12:22
関数型初体験してみたが、
ふたつの引数 m n をとって
m * (m+1) * .... * (n-1) * n を返す関数を
再帰的定義を用いて書け
なんて問題を解くのに30分もかかった…
普段とぜんぜん違う思考法を要求されて面白いねこれ
957(3): デフォルトの名無しさん [sage] 2007/10/28(日)13:41
とりあえず、ふつうのHaskellは読んで文法とか何となく理解したのですが、
次のステップってどんなのがいいんでしょうか。
自分はWebアプリを実装してみようとか思ったんですけど、基本部品(Http
リクエスト解析とか、DB処理など)使ったものやるよりも、「Write Yourself a
Scheme in 48 Hours」みたいなのを勉強する方がよいのかな?と思ってます。
おすすめのHaskell学習資料なんかがあったら教えてください。
975(3): デフォルトの名無しさん [sage] 2007/10/28(日)23:34
そのfoldlはhaskellでどう定義するのかね。
ああ、foldlはCで書かれてるなんて言わないでね。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.052s