関数型プログラミング言語Haskell Part6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/07(火) 21:24:26http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://shidot.dyndns.org/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/
関連スレは>>2
関連書籍は>>3
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0302289
2006/12/12(火) 17:25:36おお!向井さんの所でまとまっていたとは!
>>300
いや、私には難しいので、読むのにすごく時間がかかります。
だけど、入門Haskellのモナドまでを読めば、何とか理解できる範囲だと思います。
圏論の全く分からない私にはありがたい連載です。
何より、とても面白いと思います。
>>301
やはり過去互換性ですか。単相性制限?が分かりませんが、だからfmapという
新しい名前を作る必要があったのですね。
0303デフォルトの名無しさん
2006/12/14(木) 11:38:37Visual Haskellをインストールしようとしたところ、
WindowsHostScriptで「Failed to setup vs_haskell.dll」というエラーが出たのですが、
これを解決する方法はありませんか?
よろしくお願いします。
0304デフォルトの名無しさん
2006/12/15(金) 02:29:080305デフォルトの名無しさん
2006/12/15(金) 07:20:19解決しました。
0306デフォルトの名無しさん
2006/12/15(金) 10:53:23自作自演乙
0307デフォルトの名無しさん
2006/12/15(金) 22:38:25map関数がわからん
使うだけなら簡単なんだけど、型の宣言がつじつま合わないというか
とにかく納得できない
ふつうのHaskellプログラミングみながら勉強してんだけど
ここで3〜4日停滞してる
square n = n * n
map :: (a -> b) -> [a] -> [b]
map square [1, 2, 3]
この場合の「map関数」の宣言、最初の「a」が「square関数」を指しているのか?
@(a -> b)の部分で「square 1」「square 2」「square 3」と計算して
A???
0308デフォルトの名無しさん
2006/12/15(金) 22:51:17a->bはaを受け取ってbを返す関数の型。
mapは「aを受け取ってbを返す関数」とaのリストを受け取って、bのリストを返す関数。
a->bにあたるのはsquareだけだよ。
0309デフォルトの名無しさん
2006/12/15(金) 23:00:55map :: (a -> b) -> ( [a] -> [b] )
(map square) [1, 2, 3]
ってこと(文法も知らんが)?
0310307
2006/12/15(金) 23:53:33ソウイウコトカ!!!
スッキリー、スッキリ-
0311デフォルトの名無しさん
2006/12/15(金) 23:56:33そうそう。haskellの多変数関数は関数を値とする一変数関数。
文法もそれでもあってるはず。
0312デフォルトの名無しさん
2006/12/16(土) 13:01:080313デフォルトの名無しさん
2006/12/16(土) 16:38:02-O2無しでcompileされるようにMakefileinが書かれているけど
C compilerの最適化の副作用を避けるため等のなにか理由がある?
0314デフォルトの名無しさん
2006/12/16(土) 23:10:46変数がレジスタに乗ってしまってメモリ上から消えると、
GCを前提とした言語処理系では問題になることがあるみたいだが。
0315デフォルトの名無しさん
2006/12/17(日) 09:47:59それはない。
しかし、レジスタ上だろうがメモリ上だろうが、変数が元の値ではなく
加工された値でしか存在しないという状況はあり得て問題になる。
0316デフォルトの名無しさん
2006/12/17(日) 16:10:40ある特定の処理系の組み合わせで問題が起きることはあるかもしれないが、
常に問題が起きるってことはない。ソースコードが間違えていないなら、ね。
ソースコードは間違えているけど「ある処理系では問題が起きない」てのは
よくある話。
-O2の付け忘れでなければ、まずいコードになっているのかも?
0317デフォルトの名無しさん
2006/12/17(日) 21:48:390318デフォルトの名無しさん
2006/12/17(日) 22:17:14役に立つ。というか必要なところにvolatileがないのはダメだろ。
スレ違いなんでこのへんで
0319デフォルトの名無しさん
2006/12/18(月) 23:32:54だれかHaskellの再帰について教えて
くわしく、わかりやすく、ていねいに
0320デフォルトの名無しさん
2006/12/18(月) 23:53:40aaa a = aaa (a+1)
0321デフォルトの名無しさん
2006/12/19(火) 00:01:57空 = 色
色 = 空
in Data.Set.singleton 空
0322デフォルトの名無しさん
2006/12/19(火) 00:07:22わからん
おまえの説明はまったくわからん大滝 秀治)
0323デフォルトの名無しさん
2006/12/19(火) 01:01:500324デフォルトの名無しさん
2006/12/19(火) 01:16:38スマンがねる
良レスに期待
0325デフォルトの名無しさん
2006/12/19(火) 09:06:05というか、再帰のプログラムが書けるのなら、なおさら何が疑問なのかがわからん。
http://www.shiro.dreamhost.com/scheme/docs/tailcall-j.html
とかでどうだ。Haskellじゃないけど。
0326デフォルトの名無しさん
2006/12/19(火) 16:44:17とりあえず、再帰を身体にしみこませる必要があると思うんだ。
Little Schemer
http://www.amazon.co.jp/exec/obidos/ASIN/0262560992
Scheme手習い(上記の本の邦訳。入手困難)
http://www.fukkan.com/fk/VoteDetail?no=6462
Haskellはそのあとでも十分。
0327デフォルトの名無しさん
2006/12/19(火) 17:07:270328デフォルトの名無しさん
2006/12/19(火) 17:16:330329デフォルトの名無しさん
2006/12/19(火) 17:42:59hoge n 0 = n
hoge n c = hoge (n + 1) (c - 1)
hoge2 0 = 0
hoge2 c = 1 + hoge2 (c - 1)
hogeは末尾再帰だと思うのだが、hoge2も最後にhoge2があるから末尾再帰なのだろうか。
それとも、1 + hoge2が最後の処理だから末尾再帰じゃない、っていう解釈をするのかな?
0330デフォルトの名無しさん
2006/12/19(火) 17:49:280331329
2006/12/19(火) 19:13:04ありがとう。
それにしてもレスが速いな(・∀・;)
ついでだから実行速度を測ってみた。
最適化しないとhogeの方が若干速いが、-Oをつけると同じ速さになる。
なんか切ないな
0332デフォルトの名無しさん
2006/12/19(火) 19:32:06Haskell では末尾再帰について特に大きなメリットはない。
普通は末尾再帰は逐次計算していけるのから嬉しいのだが、
Haskell は最外簡約を取るので、逐次計算は行われない。
0333デフォルトの名無しさん
2006/12/19(火) 19:48:33>Haskell では末尾再帰について特に大きなメリットはない。
そんなことはないと思うが。
Haskellは常に最外簡約というわけではないし
(GHCは正格性解析の結果に基づいて簡約順序を決める)、
最外簡約の場合でも、クロージャを作って別の関数に渡す代わりに
直接呼んでしまえるのでコストが小さい。
0334デフォルトの名無しさん
2006/12/20(水) 01:39:23推論規則の演習とかやった記憶もかすかにあるんだが。
圏論とかサパーリ。
もとが哲学寄りの文学屋なので、そっち方面の記号論は、まぁわかるんだが。
そんな俺様にお勧めのHaskell文献があったら教えてください。
0335デフォルトの名無しさん
2006/12/20(水) 01:54:260336デフォルトの名無しさん
2006/12/20(水) 01:55:040337334
2006/12/20(水) 02:01:53ごめん。言語解説書ではなくて、背景の理論のほう。
とりあえず俺の勉強したなけなしの記号論理学が
どこをどう通ったらHaskellになるのか見てみたい。
0338デフォルトの名無しさん
2006/12/20(水) 02:06:18まず、歴史的にはMLの方が先だから、MLから入ってみたら?
0339デフォルトの名無しさん
2006/12/20(水) 05:01:09PierceのTAPLでも嫁
それが理解できなければどうせその先も理解できない
0340デフォルトの名無しさん
2006/12/20(水) 06:22:58いつかみんながHASKELLを使う世の中がきたらいいな。
0341デフォルトの名無しさん
2006/12/20(水) 07:31:12Haskellerで元Lisperの方ってどれくらいいるんでしょうか?
元Lisperの方でHaskellに移ってきた方は、Haskellのどのあたりに惹かれました?
0342デフォルトの名無しさん
2006/12/20(水) 08:04:58Haskellはまだ大半が素人みたいなので鞍替えした。
0343デフォルトの名無しさん
2006/12/20(水) 11:15:15Haskellを知っている人ならほぼ確実にLispも知ってるよ。
0344デフォルトの名無しさん
2006/12/20(水) 11:25:490345デフォルトの名無しさん
2006/12/20(水) 11:30:540346デフォルトの名無しさん
2006/12/20(水) 11:54:300347デフォルトの名無しさん
2006/12/20(水) 14:37:22Haskel は全く知らんけど、その記号論理学とはあまり関係無いんじゃないか?
Lisper 以外の大半人たちは高階の理論を記述する際に階によって用語を使い分ける。
ので集合とか射とか群とか圏とかいろんな言葉が出てくるわけだけど、
やってることはλと(暗黙の)括弧が多いか少ないか程度の違いのような気がするので、
そう大上段に構えるほどの物じゃないような・・・
0348デフォルトの名無しさん
2006/12/20(水) 14:40:390349デフォルトの名無しさん
2006/12/21(木) 00:41:189割が両刀
1割は悪い人にだまされて最初の言語がHaskellというケース
0350デフォルトの名無しさん
2006/12/21(木) 01:14:50Haskellだけでも十分おもしろいけど。
0351デフォルトの名無しさん
2006/12/21(木) 01:17:52C++からLispを経由せずにHaskellをやりだした者ですが、
私をだました悪い人はどこですか?
0352デフォルトの名無しさん
2006/12/21(木) 01:41:26Haskellも勉強してるよ
オブジェクト指向しか知らない世代なわけだけど
そこに固まらないうちに関数型も慣れときたいなぁと思って
0353デフォルトの名無しさん
2006/12/21(木) 01:58:04勉強するように言われました。
0354デフォルトの名無しさん
2006/12/21(木) 01:59:43関数型言語習い始めだと、副作用なしというプログラミングスタイルは辛いと思う。
まずは副作用ありの関数型言語で慣れておくと良いと思う。
0355デフォルトの名無しさん
2006/12/21(木) 02:50:42議論することじゃないが、俺はそうは思わない、という意見だけ表明しておく。
0356ド素人
2006/12/21(木) 02:53:37盛り上がってるとこ悪いんだけどくだらない質問
精製されたexeファイルをGHC入れてない人に実行させるにはどうすりゃいいの?
main = print $ map square [2, 5, 3, 1, 10]
square n = n * n
たとえば↑みたいなプログラムをexeにしたって実行できないよね?
どういうのならできるんだ???
0357デフォルトの名無しさん
2006/12/21(木) 02:54:35逆にLispのほうが優れてると思うところは?
0358デフォルトの名無しさん
2006/12/21(木) 06:27:28問題なく実行できる。
exeファイルをダブルクリックしたけど一瞬だけコマンドプロンプトが開いてすぐに閉じたから実行できなかったと思ったんじゃないの?
それだったらgetCharでも付けて入力待ちさせりゃいい。
main = do { print $ map square [2, 5, 3, 1, 10]; getChar }
square n = n * n
0359デフォルトの名無しさん
2006/12/22(金) 00:46:51main = do cs getContents
putStr cs
exeファイルにしてコマンドプロンプトで下のように実行しようとしてもできない
ghc out.hs -o out
out 引数(文字列)
なんで?
ふつうのHaskellプログラミングには
実行するには Ctrl - Z + Enter って書いてるけど、これどういう意味?
0360デフォルトの名無しさん
2006/12/22(金) 01:04:25そのぷろぐらむだと引数は関係ない。
outを実行すると入力待ちになるから、適当な文字列を何行かタイプする。
入力を終了したくなったら、まず、カーソルが行頭にある状態で
Ctrlとzを同時押しして(^Zという表示が現れるはず)、
つぎにEnterキーを押せば良い。
0361デフォルトの名無しさん
2006/12/22(金) 08:44:55Haskell の優れてるところ: 型システムによる安心感、純粋関数型なところ
Lisp の優れてるところ: マルチパラダイムなところ、あんま理屈とか考えずに言語を気軽にカスタマイズできるところ
0362デフォルトの名無しさん
2006/12/25(月) 11:44:14使い方次第
0363デフォルトの名無しさん
2006/12/25(月) 18:05:58日本語でおk
0364デフォルトの名無しさん
2006/12/25(月) 20:14:12Haskellの優れているところ:遅延評価、モナド
0365デフォルトの名無しさん
2006/12/25(月) 22:18:130366デフォルトの名無しさん
2006/12/25(月) 23:05:140367デフォルトの名無しさん
2006/12/25(月) 23:19:58優れているかは別として、Haskellでいちばん好きな機能かも。
0368デフォルトの名無しさん
2006/12/25(月) 23:59:33ここはもうビチョビチョじゃねーか
0369デフォルトの名無しさん
2006/12/26(火) 00:21:36doは>>=を使うよりも見栄え良く書けるが、
代入型言語の特徴を残す記法なので、
不満に思う人も多いと思う。
0370デフォルトの名無しさん
2006/12/26(火) 00:54:35似たような意見をwebで時々見掛けるが、よく理解できない。
命令的プログラミングをしたいとき、それに適した構文を
使えるのだから、単純に良いことのように思える。
それとも、命令的プログラミングをサポートしない言語の方が
良いという考えなんだろうか。
0371デフォルトの名無しさん
2006/12/26(火) 01:29:44「関数」で統一された世界を作れば、何か良いことがあるに違いない
(古風な言い方である自動プログラミング、とか、構造の視覚化がしやすくなる、とか、etc..)
と思う人が多いからじゃないかな?
0372デフォルトの名無しさん
2006/12/26(火) 01:31:33http://hp.vector.co.jp/authors/VA000092/jokes/strup.html
0373デフォルトの名無しさん
2006/12/26(火) 02:48:410374デフォルトの名無しさん
2006/12/26(火) 14:22:410375デフォルトの名無しさん
2006/12/26(火) 22:44:220376デフォルトの名無しさん
2006/12/27(水) 00:03:09a <- hoge;
hoge2 a;
hoge3 a
}
と
hoge >>=
\a ->
hoge2 a >>
hoge3 a
どっちがみやすいですか?
0377352
2006/12/27(水) 01:44:38この記事おもしろいねw
真実だとしても、結局のところ今はPCの性能の上昇とか
言語自体の進化によってオブジェクト指向は機能的で合理的な言語になってるよね?
たしかに、
「あるプロジェクトのコードを再利用した話なんて聞いたことない」とか、
「正しく継承させるためには設計だけでCの3倍もの時間かかる」とか、
超笑えるねw
当たり前に思ってきた(教えられてきた)コトって、
そのまま信じちゃうからこういう記事読むとオラ、ワクワクしてきたぞ
0378デフォルトの名無しさん
2006/12/27(水) 02:04:040379デフォルトの名無しさん
2006/12/27(水) 02:05:25あの内容はあながち冗談に思えなくて泣けてきた。
彼がinterviewであんなこと言うはずは無いだろうけどさ
0380デフォルトの名無しさん
2006/12/27(水) 02:32:15チャッチャと書けるようになったらダイブ頭よくなってるかな?
0381デフォルトの名無しさん
2006/12/27(水) 03:01:210382デフォルトの名無しさん
2006/12/27(水) 03:12:31もっとHaskeりたいんだけど、やさしく教えてくれるかわいいコいないかな
0383デフォルトの名無しさん
2006/12/27(水) 03:14:55禁句だ。
0384デフォルトの名無しさん
2006/12/27(水) 22:11:40Haskellを教えてくれるギャルを探すんだよ
0385デフォルトの名無しさん
2006/12/27(水) 22:47:06| |
| |
∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < ⊥が返ると思います!
/ / \
/ /| /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
__| | .| |
\  ̄ ̄ ̄ ̄ ̄ ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
0386デフォルトの名無しさん
2006/12/30(土) 22:17:23少なくともVBやJavaやってるよりは確実にイケテルよね?
モナドとかラムダとか遅延評価について語るだけでモテモテな世の中になればいいのに。
0387デフォルトの名無しさん
2006/12/30(土) 22:50:41俺もそう思う。
思いたい。
0388デフォルトの名無しさん
2006/12/30(土) 23:04:43普段は泥臭いPerl使ってる俺は死んだらいい。
0389デフォルトの名無しさん
2006/12/30(土) 23:06:560390デフォルトの名無しさん
2006/12/30(土) 23:47:59■オサレ言語
Haskell、Clear、その他の純粋関数型言語
■普通の言語
C、C++、C#、アセンブラ、PHP、Perl、awk
■キモい・胡散臭い
Ruby(特にRails界隈)、Ajax、XML、Paython、その他Web2.0に絡む言語すべて
■オッサン専用
COBOL、FORTRAN、PASCAL
■厨言語
Java、VB、BASIC、HSP
0391デフォルトの名無しさん
2006/12/31(日) 00:07:220392デフォルトの名無しさん
2006/12/31(日) 01:02:19■オサレ言語
Haskell、Concurrent Clean、その他の純粋関数型言語
■普通の言語
C++、C#、Java、VB.NET
■泥臭い
Perl
■ハッカー専用
C、アセンブラ、awk、Python
■キモい・胡散臭い
PHP、Ruby
■オッサン専用・過去の遺物
COBOL、FORTRAN、PASCAL
■厨言語
VB、BASIC、HSP、Delphi
■宗教
Lisp、その他Lisp系統
0393デフォルトの名無しさん
2006/12/31(日) 01:06:400394デフォルトの名無しさん
2006/12/31(日) 01:49:490395デフォルトの名無しさん
2006/12/31(日) 09:30:38C で言う != みたいな記号ってないん?
環境は WinHugs 使ってる。
0396デフォルトの名無しさん
2006/12/31(日) 10:37:39HSPは胡散臭い言語だと思います。
0397デフォルトの名無しさん
2006/12/31(日) 10:43:32(!=) :: Eq a => a -> a -> Bool
(!=) = (/=)
0398デフォルトの名無しさん
2006/12/31(日) 13:12:31あと perl はなにげにハッカー言語だと思う
0399デフォルトの名無しさん
2006/12/31(日) 13:25:47ハッカーが「つくっている」≠ ハッカー言語
0400デフォルトの名無しさん
2006/12/31(日) 13:35:02そう言う意味で C やアセンブラは納得できるけど Python はどうかなぁ
0401デフォルトの名無しさん
2006/12/31(日) 16:51:27http://www.sauria.com/~twl/conferences/pycon2005/20050325/Python%20at%20Google.html
■ このスレッドは過去ログ倉庫に格納されています