関数型プログラミング言語Haskell Part15
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/07/09(土) 17:16:54.84ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
0002デフォルトの名無しさん
2011/07/09(土) 17:18:53.89・Introduction to Functional Programming Using Haskell (2nd ed.)
ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/
・Haskell: The Craft of Functional Programming
ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/
・The Fun of Programming
ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
・入門Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/
・ふつうのHaskellプログラミング
ttp://item.rakuten.co.jp/book/4052963/
・Programming in Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/
・Real World Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980
・関数プログラミングの楽しみ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056
0003デフォルトの名無しさん
2011/07/09(土) 17:19:45.18・GHC Wiki
ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex
・A History of Haskell
ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/
・関数型関連の用語集
ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/
・本物のプログラマはHaskellを使う
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
0004デフォルトの名無しさん
2011/07/09(土) 17:21:15.57ttp://www.haskell.org/hoogle/
【簡単な使い方】
1.検索バーに関数名を入れて検索
例 map
2.検索バーに型名を入れて検索
例 (a -> b) -> [a] -> [b]
0005デフォルトの名無しさん
2011/07/09(土) 20:10:41.280006デフォルトの名無しさん
2011/07/09(土) 22:15:29.240007デフォルトの名無しさん
2011/07/10(日) 06:36:49.99Learn you a haskell for great good!
http://www.amazon.co.jp/dp/1593272839
http://learnyouahaskell.com/
0008デフォルトの名無しさん
2011/07/10(日) 06:37:49.14Learn you a haskell for great good!
http://www.amazon.co.jp/dp/1593272839
http://learnyouahaskell.com/
craft3e
http://www.amazon.co.jp/dp/0201882957
0009デフォルトの名無しさん
2011/07/10(日) 13:55:51.130010デフォルトの名無しさん
2011/07/11(月) 12:03:06.910011デフォルトの名無しさん
2011/07/11(月) 12:07:37.830012デフォルトの名無しさん
2011/07/11(月) 12:34:45.520013デフォルトの名無しさん
2011/07/11(月) 12:44:09.690014デフォルトの名無しさん
2011/07/12(火) 04:33:58.900015デフォルトの名無しさん
2011/07/12(火) 04:35:45.36参照透過性は新しい言語でも取り込まれています。
しかし非正格評価は処理量予測が難しいという問題があり、
今後も限られた範囲でしか使われないでしょう。
Haskellは非正格評価を標準としている以上、
広く普及する事はありえないのではないでしょうか?
●参考資料
各関数型言語の求人率
http://www.indeed.com/jobtrends?q=Lisp,SML,Haskell,Scala,Clojure&l=
俺は Haskell の sieve についてとんでもない思い違いをしていたようだ...
http://d.hatena.ne.jp/camlspotter/20100128/1264678903
経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた
http://d.hatena.ne.jp/camlspotter/20101212/1292165692
(前略)OCaml 暦十何年だったか忘れたけど仕事で Haskell を一年使ってみた
http://d.hatena.ne.jp/camlspotter/20110509/1304933919
0016デフォルトの名無しさん
2011/07/12(火) 07:06:42.36ていうかMLスレはなかったんだっけ?
0017デフォルトの名無しさん
2011/07/12(火) 07:18:25.090018デフォルトの名無しさん
2011/07/12(火) 07:35:52.440019デフォルトの名無しさん
2011/07/12(火) 08:16:32.790020デフォルトの名無しさん
2011/07/12(火) 08:24:21.420021デフォルトの名無しさん
2011/07/12(火) 08:56:49.490022デフォルトの名無しさん
2011/07/12(火) 13:25:55.09参考資料の人の結論は、
- Haskell は OCaml 並に普通に業務で使える言語
- Haskell マニアが嬉しそうに紹介している機能は実はほとんど使う必要が無い。
せいぜい Monad transformer位で仕事は出来る
- Haskell には良いところもあるし、悪いところもある。手放しで神格化するのが一番問題
なので、そういう文脈で引用するのは作為的なのでは?
速度重視のコードを遅延評価で書くのは大変でも、どの言語でもそういうノウハウはあるわけで。
遅延の利点ばかりに目をやらないで、そういうノウハウも蓄積しましょうよ、って話だったよね、それ。
>>16
MLスレはあるけど、>>15のはそういうOCaml賛美とかじゃない。普通に読む価値がある文章だと思う。
0023デフォルトの名無しさん
2011/07/12(火) 19:51:25.34求人率に Prolog を加えると面白いんじゃなかったっけ。
0024デフォルトの名無しさん
2011/07/12(火) 21:45:28.38売り物のコードにHaskellのソースコード入れてから業務に使えると言ってほしい
0025デフォルトの名無しさん
2011/07/12(火) 22:07:18.40○ OCaml 並に業務で使える
0026デフォルトの名無しさん
2011/07/12(火) 22:23:08.86OCaml を業務に使ってる人がいなければ、「OCaml 並に業務で使える」という命題も「OCaml 並に業務で使えない」という命題も真になる
0027デフォルトの名無しさん
2011/07/12(火) 22:47:42.18そもそもコードを出荷しない会社なんじゃね?
チームのメイン言語がHaskellなら、業務に使える使えないを語って当然だろ
0028デフォルトの名無しさん
2011/07/12(火) 23:07:55.670029デフォルトの名無しさん
2011/07/12(火) 23:09:39.56そもそもチームすらないかも知れん
普通はExcelでデータ入力してて、暇になったときに上司にばれないようにHaskellのスクリプトで定期的に2chのログを収集してる程度でも、業務に使えるということに変わりはない
0030デフォルトの名無しさん
2011/07/12(火) 23:12:57.90業務=直接金になること という認識だから売買の対象にならなければ業務じゃない
売買の対象という意味じゃなければ、PCで遊んでるのも業務だからいちいち「業務で」と断る必要はない
0031デフォルトの名無しさん
2011/07/12(火) 23:22:44.890032デフォルトの名無しさん
2011/07/13(水) 01:37:06.53主に金融系でHaskellとかOCaml、F#とかの関数型言語は割と人気があって、
採用事例が多いそうな。Tsuru Capitalとか、かつてのリーマン・ブラザーズとか。
OCamlならJane Streetとか。もちろんチームで。
使っているのは、金融商品を取り扱うための言語フレームワークを作ったり、
統計的分析を元にした取引銘柄自動売買とかだってさ。
てか、リンク先読まずに想像でどうこう言うってのもどうなのよ。
0033デフォルトの名無しさん
2011/07/13(水) 02:16:09.560034デフォルトの名無しさん
2011/07/13(水) 02:48:32.29ttp://d.hatena.ne.jp/camlspotter/20100330/1269927047
ttp://www.nri.co.jp/opinion/it_solution/2005/pdf/IT20050307.pdf
上のは元々の引用されてた人の話。下のは野村総研の人が書いた文章で、
LexiFi社のMLFiっていうDSLの紹介をしてる。こういう手法の先駆けなんだと。
コンビネータでお手軽金融商品定義! とか、受け良さそうじゃん。
0035デフォルトの名無しさん
2011/07/13(水) 06:13:04.720036デフォルトの名無しさん
2011/07/13(水) 06:28:08.720037デフォルトの名無しさん
2011/07/13(水) 07:00:02.300038デフォルトの名無しさん
2011/07/13(水) 16:14:19.76俺の嫌いな物は食べ物じゃない
0039デフォルトの名無しさん
2011/07/13(水) 21:15:43.17国債買ってて遊んでても給料がもらえて暇だから
0040デフォルトの名無しさん
2011/07/15(金) 21:43:17.40みたいなこと誰か言ってくれたら俺もhaskellもうちょっと頑張れる気がする
0041デフォルトの名無しさん
2011/07/15(金) 21:53:58.85他人と同じことやってたら食っていけないからじゃないか?
金融系ちゅうかそれ証券系だよな
銀行生損保あたりは>>39だろ
0042デフォルトの名無しさん
2011/07/15(金) 23:28:33.06という話を鵜呑みにして、会社でHaskellを導入したら、haskell使ってWEBのバックエンドシステム作るプログラマをメンテ・教育するコストで会社が潰れると思う
0043デフォルトの名無しさん
2011/07/16(土) 03:55:45.49と言ってみたい
0044デフォルトの名無しさん
2011/07/16(土) 08:03:58.180045デフォルトの名無しさん
2011/07/16(土) 08:47:35.10根拠は無い
0046デフォルトの名無しさん
2011/07/16(土) 10:03:43.83@tanakh さんのツイートとか見てるとそんな印象だな。要するにあるレベル以上になると
使える人が急激に減るみたい。んなことはC++でもなんでも一般的には言えることだけど
Haskellの場合には減り方が激しいんだろうということ。
ただ、@tanakhさんは最近の、ICFCだっけか、ラムダ計算のカードゲームの話ではチーム
組んで良い成績をあげてるので、Haskell実力者どうしのチームが機能しないという話しでは
ないだろう。参戦記を読んだ限りでは、モナドを単位にしたモジュール化でうまく作業分担
していたようだ。
0047デフォルトの名無しさん
2011/07/16(土) 10:13:52.60非現実的な事この上無し
0048デフォルトの名無しさん
2011/07/16(土) 10:48:04.52上級者÷一般レベル の値が一番小さいのがアセンブラ
004946
2011/07/16(土) 11:53:05.28モナドを単位とした振り分けでチーム開発は可能であることの例証だし、世の中でもそこそこ
行われているんじゃないか、という話がしたかった。競技プログラミングを例にしたのは成果や
過程があるていどオープンになっていて引き合いに出しやすかったからだけど、実際に金融
やらなんやら我々の目に触れにくい(または触れることがない)分野でこういったモナドを単位とした
分担開発は行われているんじゃないか。
0050デフォルトの名無しさん
2011/07/16(土) 12:02:36.120051デフォルトの名無しさん
2011/07/16(土) 12:27:19.53我々の目に触れない理由を考えよう
0052デフォルトの名無しさん
2011/07/16(土) 14:11:16.18どうすれば速くなるか解説しているページがあったのでリンクします。
性能を追求する時は、文字列がリストだから文字列操作が簡潔という話は
Haskellの優雅さを示すための神話として切り捨てる必要があるのですね。
Haskellの神話
http://d.hatena.ne.jp/kazu-yamamoto/20100624/1277348961
>この記事では、神話になっている例を3つ取り上げ、
>効率のよい実装と合わせて紹介する。
Haskellライブラリ入門 (2011年版)
http://d.hatena.ne.jp/kazu-yamamoto/20110525/1306298046
>リストはとても柔軟ですが、リストで表現されている文字列は、
>メモリーをたくさん消費しますし、なにより遅いのです。
>実用的なプログラムを書くためには、
>必要に応じて適切なデータ構造を使う必要があります。
0053デフォルトの名無しさん
2011/07/16(土) 14:51:33.13スケーラブルHaskell開発
だな
0054デフォルトの名無しさん
2011/07/16(土) 14:53:42.080055デフォルトの名無しさん
2011/07/16(土) 17:27:04.120056デフォルトの名無しさん
2011/07/16(土) 18:18:41.53http://www.kotha.net/hperf/
このテーマを掘り下げた本なら喜んで買います。
0057デフォルトの名無しさん
2011/07/16(土) 18:29:56.210058デフォルトの名無しさん
2011/07/16(土) 19:04:32.78先生できました
0059デフォルトの名無しさん
2011/07/16(土) 19:19:41.17Common Lispでも高速化させようと思ったら、ある程度
泥臭い記述が増えてくるよ。一部がマクロでかぶせられるとは言ってもね。
高速化って結構泥臭いもんだから同じだなと思った。
ととあるりすぱぁ(あたまもぱぁ)からの感想です。
0060デフォルトの名無しさん
2011/07/16(土) 19:29:12.67リストで文字列を扱うときのメモリ消費はガチ。特に64ビット環境。
そりゃあ、バイト列使おうとかいう話にもなるよね。
0061デフォルトの名無しさん
2011/07/16(土) 23:22:45.90リスト操作に慣れる、という意味での教育効果もあると思うし。
最近のPerlインタプリタとかjavascriptインタプリタとかの、文字列の内部的にどういう構造になっているんだろう?
文字配列のリスト?
0062デフォルトの名無しさん
2011/07/17(日) 04:55:38.66Educationモジュールに追いやっちゃえよ
0063デフォルトの名無しさん
2011/07/17(日) 15:58:17.74文字列以外の場所でもリストってやばいのか
0064デフォルトの名無しさん
2011/07/17(日) 17:14:03.02えー?
むしろ64bitが普及したらメモリ食うとか気にしなくなるだろうから、全部リストで済ませたいけどなぁ
最適化よりも楽にプログラミング出来る方が有難い
最適化したけりゃcの関数呼び出せば良いんだし
元々プログラマが最適化するのには関数型言語は向かないんだしさ
適材適所で手続き型言語を呼び出せば良い
そんなのより並列リストと普通のリストを統合したりして、基本的な文法で並列化出来るようにして欲しいぜよ
0065デフォルトの名無しさん
2011/07/17(日) 17:24:42.83参照透過性に関係する問題だという漠然としたイメージはあるのですが、
どういったものか全く分かりません
0066デフォルトの名無しさん
2011/07/17(日) 17:37:32.82単純に量じゃなくてGCにCPU時間使うのが問題だと思ってる
0067デフォルトの名無しさん
2011/07/17(日) 18:29:06.62同意。その通りだと思う。GCに引っかかると途端に遅くなる。
数十バイトとか数キロバイトなら倍メモリ消費しても全然問題にならないけど、
数百メガバイトとかになってくると、倍とか普通にきつい。
リスト廃止しろとかは笑えないけど。楽で良いじゃんリスト。
0068デフォルトの名無しさん
2011/07/17(日) 19:41:40.96まだまだ使っている人はもちろんいるんだろうけど。
0069デフォルトの名無しさん
2011/07/17(日) 20:02:02.36Text.Printf.printf 関数は今でも普通に使ってる
これ使わないと、数値から文字列を作るのがえらく面倒になる
特に桁を揃えたりゼロで埋めたい時
とてもシンプルに書けるから重宝してる
ただ、コンパイル時に型エラーを検出できないのが不満だ
他に総合的にもっと使いやすいライブラリがあるのなら教えてほしい
0070デフォルトの名無しさん
2011/07/17(日) 20:05:22.85Text.Printfを置き換えられる程のものはなかったような
0071デフォルトの名無しさん
2011/07/17(日) 21:31:15.49あ、オレが言っていたのは、C言語のprintf関数のこと。
Doubleとかの浮動小数点数の桁をそろえて出力するHaskellの便利なライブラリは知らない。
オレは、表示してみて科学記法がならんで「ウザっ」て思うときは、表示するときだけmap (floor.(*10^3))とかしてしのいだり。
そういうことしてしのげないときは、科学記法で我慢している。
0.000000123と0.0000000234みたいな表記をされても、どうせどちらが大きいのかさえ一瞬では分からないので、科学記法のほうがいくぶんマシ。
0072デフォルトの名無しさん
2011/07/17(日) 21:37:59.870073デフォルトの名無しさん
2011/07/19(火) 15:42:11.91Javaのそれと比べたら冗談みたいなレベルらしいじゃないか
0074デフォルトの名無しさん
2011/07/19(火) 15:51:55.370075デフォルトの名無しさん
2011/07/19(火) 16:39:11.18アンドロイドに搭載された辺りで訴えちゃうよ?
0076デフォルトの名無しさん
2011/07/19(火) 19:00:59.66「らしい」なんて不確かなことで要求するな
0077デフォルトの名無しさん
2011/07/20(水) 01:34:16.17改良されてきたJVMが優れているという話にしかならん
0078デフォルトの名無しさん
2011/07/20(水) 09:59:10.36http://hackage.haskell.org/trac/ghc/wiki/Commentary/Contracts
0079デフォルトの名無しさん
2011/07/22(金) 04:52:21.32大体上手く行っています。問題は、”☆”みたいな文字をいくつかのテキストに
付加するための定数として
star = "☆"
などとしておいて cs ++ star みたいな事をやると star の部分が文字化けしてしまうことです。
GHC.IO.Encoding.UTF8 を使ったら良さそうなのですがghci で import して :t utf8 しても
意味が理解できなくてどうやって utf8 という関数を使うのかが理解できません。
最初は
star = utf8 "☆"
と書いてみたんですがダメみたいです。(なにか根本的に誤解してるみたいです)。
プログラム内で utf8 文字列定数を定義するにはどうすれば良いのでしょうか?
(もちろんプログラム自体も UTF8 bom 付きで保存して ghc に食わせています。)
0080デフォルトの名無しさん
2011/07/22(金) 05:05:50.80あ... System.IO.UTF8 ってのを入れたらなんとかなるかも知れないですね。
cabal ってのが意味わかりませんがやってみます。
0081デフォルトの名無しさん
2011/07/22(金) 05:17:31.10cabal ってのが良く分からなかったけど、HackageDBに
接続してくれるパッケージ管理システムなんですかね?
とにかく ttp://hackage.haskell.org/package/utf8-string-0.3.3
で取ってきたものを解凍して cabal install utf8-string.cabal したら
...
import System.IO.UTF8 as U8
main = do args <- getArgs
cs <- U8.getContents
let option = head args
U8.putStr $ f option cs
みたいにして上手くいったみたいです。お騒がせしました。
#入力テキストをUTF8にしないといけないのだけが面倒ですね...
0082デフォルトの名無しさん
2011/07/22(金) 07:06:56.89↓ ↓
Microsoft Research
MSR Asia Fellowishipの受賞者
東京大学の韓帥さん(佐藤洋一研究室、博士課程3年生)
http://bit.ly/k2ICwU
東京大学のAdiyan Mujibiyaさん
http://bit.ly/h2PtfR
筑波大学の金石煥さん
http://bit.ly/f2jg4e
大阪大学の 白川真澄さん
http://bit.ly/iEydzU
東京大学工学部の 折居直樹さん。
私の知る限り学部生で日本からインターンに来た
ケースは折居さんが初めてです。
http://bit.ly/mgHTTT
シリコンバレー
http://research.microsoft.com/en-us/labs/siliconvalley/default.aspx
北京
http://research.microsoft.com/en-us/labs/asia/default.aspx
0083デフォルトの名無しさん
2011/07/22(金) 20:25:14.090084デフォルトの名無しさん
2011/07/22(金) 21:27:37.45ま、誰誰を指すかは大体検討はついてるけどね
0085デフォルトの名無しさん
2011/07/22(金) 21:40:19.82Monoid クラスの mempty 関数と mappend 関数
これらって、意味的に何か違いはあるんですか?
たとえば、ある型が既に Monad クラスのインスタンスであって、
なおかつ identity と associativity の両性質を持っていた場合、
その型は Monoid クラスのインスタンスにも、
MonadPlus クラスのインスタンスにも成れますよね
どちらのクラスのインスタンスにするか、
あるいは両方のインスタンスにするか、
判断する基準みたいなものは一般的に何かあるのですか?
単に好きな関数名が有る方を選んどけ、という程度でしょうか
0086デフォルトの名無しさん
2011/07/22(金) 22:06:15.940087デフォルトの名無しさん
2011/07/22(金) 22:56:17.80どちらかのインスタンスにする必要があるの?
そういう疑問がわくということは、べつにどちらのインスタンスにする差し迫った必要もなさそうだけど。
もしそうなら、どちらのインスタンスにする必要もないでしょ。
あと、mzeroは>>=に対して定義されているんだから、Monadに対してしか意味をなさないけど、
mzeroとmplusしか使わないなら、memptyとmappendと交換しても何もおかしくないとは思う。
0088デフォルトの名無しさん
2011/07/22(金) 23:19:10.32> どちらかのインスタンスにする必要があるの?
Monoid クラスのインスタンスにする必要がある時
MonadPlus クラスのインスタンスにする必要がある時
というのは、例えばどんな場合なのでしょうか
0089デフォルトの名無しさん
2011/07/23(土) 02:17:43.58> Monoid クラスのインスタンスにする必要がある時
mconcatとか、Data.Foldable.foldとか、引数(の一部)がMonoidクラスのインスタンスである必要がある関数を使いたいとき。
> MonadPlus クラスのインスタンスにする必要がある時
同様に、引数がMonadPlusクラスのインスタンスである必要がある関数を使いたいとき。
突き詰めれば、これだけの話だと思う。
0090デフォルトの名無しさん
2011/07/23(土) 08:04:58.17とりあえず、インスタンスにする型がMonadでもある時にguardを使うかどうか考えてみて
言い換えれば計算の途中に特定の条件で計算を打ち切るようなことを期待する場合ね
そんなのあきらかにねーよってんならMonoidでいいと思うよ
0091デフォルトの名無しさん
2011/07/23(土) 14:37:42.92みるとclojureの母親だな。haskellって
0092デフォルトの名無しさん
2011/07/23(土) 15:31:55.30>>90
なるほど、ということは、機能としての違いでしかないというわけですね
そういった機能以外には、特に区別する意味は無い?
例えば Monad クラスしかなく Monoid クラスがまだ存在していなくて、
Data.Foldable.fold 関数らも Monoid クラスではなく
MonadPlus クラスのインスタンスを要求しているような世界において、
機能的にはそれで十分だと思うのですが、
Monoid クラスをライブラリに加えてくれという要求は出てこないのでしょうか
0093デフォルトの名無しさん
2011/07/23(土) 16:25:14.83> Data.Foldable.fold 関数らも Monoid クラスではなく
> MonadPlus クラスのインスタンスを要求しているような世界において、
> 機能的にはそれで十分だと思うのですが、
> Monoid クラスをライブラリに加えてくれという要求は出てこないのでしょうか
なんでそうなる。
すべてのデータ型が既にMonadならそういうことにもなるかもしてないけど、
現実にそうではないこの世界のHaskellにおいては、
MonadのインスタンスにできないがMonoidにできるデータ型はいくらでも考えられるでしょ。
そのとき、Monoidクラスは意味がある。
-- いや、正直、実際のプログラミングでMonoidクラスが有用だと感じたことはないが…
-- そういう意味では理論的関心が先行した感の強いクラスだとは思う
0094デフォルトの名無しさん
2011/07/23(土) 16:42:02.66> なんでそうなる。
だって、そういう(たとえ話の)世界では
identity と associativity の両性質があることで果たせる機能が
MonadPlus クラスのおかげで既に実現されているわけだから、
「機能という点において」は Monoid クラスが作られる必要性がないわけでしょ
でもそんな世界にあっても、もし Monoid クラスが必要だという要求が出てきたら、
それはそういう機能以外にも、Monoid という性質に意味があるということじゃないかな
あるいは、>>89 や >>90 以外にも Monoid ならではの機能があるとか
と、思考実験してみました
Monoid クラスにどんな意味(隠れた機能)があるのかまでは、まだ考えられてないけど
> いや、正直、実際のプログラミングでMonoidクラスが有用だと感じたことはないが…
同感です
0095デフォルトの名無しさん
2011/07/23(土) 16:47:14.80アンカーミスりました
本当は >>93 です
お詫びに面白そうな本を紹介します
A Framework for Programming Interactive Graphics in a Functional Programming Language
0096デフォルトの名無しさん
2011/07/23(土) 16:54:06.90いや、型クラスに関しては「機能が弱い」からこそ役に立つ場合がある
たとえばFunctorでできることは全てMonadでもできるけど、だからといってFunctorが不要な訳ではない
なぜならFunctorのインスタンスにはなれてもMonadのインスタンスになれない型が存在するから
MonoidとMonadPlusについても同様で、たとえばByteStringはMonoidインスタンスになれるけど、
MonadPlusインスタンスにはなれない
実際のプログラミングでも便利だと思うけどな、Monoidクラス
特に、mappend相当の関数名をいちいち考えたり覚えたりしなくて済むという点において
0097デフォルトの名無しさん
2011/07/23(土) 16:55:59.830098デフォルトの名無しさん
2011/07/23(土) 17:04:35.240099デフォルトの名無しさん
2011/07/23(土) 17:06:59.01を標準ライブラリに入れるって提案があったはずだけどどうなったんだろう
0100デフォルトの名無しさん
2011/07/23(土) 17:26:18.86> いや、型クラスに関しては「機能が弱い」からこそ役に立つ場合がある
「機能が弱い」のではなくて、「機能が重複している」のは何で?
と言いたかった
私には Momoid クラスの機能と MonadPlus の機能が
(今のところ)重複しているように見えます
何というか、Monad の性質 + Monoid の性質 = MonadPlus の性質
という感じがするのです
だから本質的に MonadPlus クラスは必要なく (MonadPlus m) => ... は
(Monad m, Momoid m) => ... とライブラリの設計を変えても、
機能的には何も問題なく働くのではないかと思うのですが、どうでしょう?
(まだ何となくそう考えているだけで、詳しく検証はしていません)
(ただ、機能は重複しても意味が違うのであれば、
2つのクラスはそれぞれ区別すべきだとも思います)
0101デフォルトの名無しさん
2011/07/23(土) 17:40:07.15計算機に載せた場合、機能として同じなのかもしれんが、
モノイドは集合の構造だけれど、モナドは圏の構造だから
もととなる土台がぜんぜん違う。
0102デフォルトの名無しさん
2011/07/23(土) 17:41:10.760103デフォルトの名無しさん
2011/07/23(土) 17:44:02.060104デフォルトの名無しさん
2011/07/23(土) 18:30:59.260105デフォルトの名無しさん
2011/07/23(土) 18:40:45.73互換性とか言ってそのままなのはそのへんにある世俗のプログラミング言語と同じ
求めてるのは、おれたちにできない事を平然とやってのけるHaskellなんだ
0106デフォルトの名無しさん
2011/07/23(土) 23:23:54.13なんでFunctorとモノイドを別々にすると数学的整合性が問題になるんだよ。
Functorとモノイドは基本関係ないじゃん。
0107デフォルトの名無しさん
2011/07/23(土) 23:32:09.890108デフォルトの名無しさん
2011/07/24(日) 01:25:32.00(a `mplus` b) >>= k == (a >>= k) `mplus` (b >>= k)とかもMonadPlusの性質としてあるんだけど
これもMonoidとMonadの性質だけから導き出せると思う?
0109デフォルトの名無しさん
2011/07/24(日) 11:47:00.54とりあえず実験として Maybe クラスにそっくりな型を作り、下記のテストにかけたところ、
a b k の全ての組み合わせ(8通り)で True となりました
f :: (Monoid (m a), Monoid (m b), Monad m, Eq (m b)) => m a -> m a -> (a -> m b) -> Bool
f a b k = ((a `mappend` b) >>= k) == ((a >>= k) `mappend` (b >>= k))
>>108 の性質は Monad クラスと MonadPlus クラスのもつ関数の型と、
Monad 則および MonadPlus 則から導かれると思いますが、
Monoid クラスの持つ関数の型は MonadPlus クラスのそれらと形がそっくりですし、
MonadPlus 則と同じ法則を満たすように Monoid クラスのインスタンスを生成すれば、
同じ性質を持つ型が作れると、今のところ私は思っています(まだ証明してはいない)
本来の >>108 の式の恒等性はどうやって証明するんでしたっけ?
忘れてしまいましたが、mplus 関数を mappend 関数に書き換えても、
同じ証明方法が使えるのではないでしょうか
0110デフォルトの名無しさん
2011/07/24(日) 12:04:02.55ごめんなさい、テスト方法に不備がありまして、False になる場合もありますね
導けないかも知れません
興味があるので改めてお尋ねしますが、
>>108 の式の恒等性はどうやって証明するのでしょうか?
0111デフォルトの名無しさん
2011/07/24(日) 12:16:57.02Monoid クラスの mempty 関数と MonadPlus クラスの mzero 関数は
ともに同じ意味を持つと思うのですが、
Monoid クラスの mappend 関数と MonadPlus クラスの mplus 関数は
意味が違うような気がします
意味の違いが機能の違いに繋がってきて、どうも代用はできなさそうですね
私の勘違いで、機能の重複は無さそうです
どう違うのかはまだ分からないのですが、圏論が関係してくるのでしょうか
0112デフォルトの名無しさん
2011/07/24(日) 12:19:21.72自分も両辺のMonadPlusのインスタンスに対してmzeroと/=mzeroの場合で場合わけすればいけるのかなーとか考えてたんだけどやっぱ無理なのか
http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/tactics.pdf
の論文ではMonadPlusのインスタンスが満たすべき性質として>>108の分配法則が提示されてるから、
多分MonadとMonoidってだけでは証明できないと思うんだよな
そういう疑問が沸いたので>>108の質問を投げかけたわけで
0113デフォルトの名無しさん
2011/07/24(日) 12:19:28.290114デフォルトの名無しさん
2011/07/24(日) 12:25:36.96意味が違うというかMonoid則と>>=に対する分配律を含んだ代数構造に属するmplusと
Monoid則のみの代数構造に属するmappendじゃ全く別物じゃんとしか思わないんだけど
何か引っかかる所ある?
0115デフォルトの名無しさん
2011/07/24(日) 12:37:07.95いや、引っかかる以前に、自分の頭の悪さ、知識のNASAに凹んでます
それらの代数構造をもっとしっかり勉強して出直してきます
とりあえず >>112 の論文と、>>113 の言うとおり仕様書をじっくり読んでみます
0116デフォルトの名無しさん
2011/07/24(日) 12:44:05.830117デフォルトの名無しさん
2011/07/24(日) 12:46:09.72いや、仕様書は関係ないよw
論文と抽象代数の初歩だけで十分
余裕があればCoqとかAgdaとかHOLみたいな定理証明系で代数的な構造作って弄ってみるのもいいかも
ある代数構造とそれに一つだけ別の規則を足しただけの代数構造が全くの別物って感覚がはっきりわかるようになるよ
あとはMonadPlusに関しては
http://www.haskell.org/haskellwiki/MonadPlus
http://www.haskell.org/haskellwiki/MonadPlus_reform_proposal
あたりに目を通すといいかも
0118デフォルトの名無しさん
2011/07/24(日) 12:55:59.170119デフォルトの名無しさん
2011/07/24(日) 13:23:04.150120デフォルトの名無しさん
2011/07/24(日) 13:32:42.99抽象代数の初歩ですか、ありがとうございます
地元の図書館には、タイトルに「抽象代数」がある本はこのくらいしかない
・抽象代数学 1973年 秋月康夫/著
・抽象代数幾何学 1991年 永田雅宜/著
あとは代数学、あるいは代数学の歴史やら、数の体系と超準モデルなど
なにかお勧めの本ってあります?
一冊買ってみようと思います
0121デフォルトの名無しさん
2011/07/24(日) 13:36:26.37そのあと永田の可環体論を読むと良い。
0122デフォルトの名無しさん
2011/07/24(日) 13:37:52.71それに関する議論は>>117のhaskell wikiのリンク先に書いてあるよ
zeroを持つMonadZeroと分配律を備えるMonadPlus、return aが左零元になるMonadOrに分けようっていう内容だったか
でもそんなことするよかErrorみたいな類はMonadPlusよかControl.Applicative.Alternativeとして使ったほうが意味がはっきりするんじゃねーのとも思う
0123デフォルトの名無しさん
2011/07/24(日) 13:40:45.60自然科学の中では数学が王様だからね
計算機科学も数学様に寄り添っていかないと、科学でなくなっちゃう
0124デフォルトの名無しさん
2011/07/24(日) 14:14:21.08きっと帰ってこない
0125デフォルトの名無しさん
2011/07/24(日) 14:24:34.380126デフォルトの名無しさん
2011/07/24(日) 14:41:39.71ありがとうございます
今図書館に着いたので読んでみます
>>125
私は数学を楽しいと感じる類の人間なので問題ありませんが、
気持ちは分かります
0127デフォルトの名無しさん
2011/07/24(日) 14:54:53.60計算量という概念がある時点でHaskellは数学から大きく乖離している
0128デフォルトの名無しさん
2011/07/24(日) 15:18:19.790129デフォルトの名無しさん
2011/07/24(日) 15:24:01.34数学を使った問題ではあるが
0130デフォルトの名無しさん
2011/07/24(日) 15:33:36.18ミレニアム懸賞問題に数学じゃない問題が入ってるって
0131デフォルトの名無しさん
2011/07/24(日) 15:35:28.25それにしても、大きくかけ離れてるってのは言い過ぎだと思う
0132デフォルトの名無しさん
2011/07/24(日) 16:18:41.63えっ
0133デフォルトの名無しさん
2011/07/26(火) 11:16:32.660134デフォルトの名無しさん
2011/07/26(火) 15:12:05.23Winだったらコンパイル済みのハスケルプログラムを spawn すればいいじゃん
0135デフォルトの名無しさん
2011/07/26(火) 17:10:17.070136デフォルトの名無しさん
2011/07/26(火) 21:14:51.77本当に安全なら、どうしてGHCにバグが残ってんだってww
0137デフォルトの名無しさん
2011/07/26(火) 21:18:44.110138デフォルトの名無しさん
2011/07/26(火) 21:30:21.78君が問題視している「安全」がどの部分の安全性の事を言ってるのかわからん
0139Perl忍者
2011/07/26(火) 22:57:17.38バカじゃん
ほら
すぐ影響うけるんだな。
さっさと死ねよ影響うけるゴミは
まつもとひろゆきの影響か!?
死ね!!
0140デフォルトの名無しさん
2011/07/26(火) 23:14:25.870141デフォルトの名無しさん
2011/07/27(水) 00:16:47.680142デフォルトの名無しさん
2011/07/27(水) 00:25:49.330143デフォルトの名無しさん
2011/07/27(水) 08:46:39.55そんなことをやっていると、「オレ、よくjavascriptとか型の緩い言語でプログラミングできてたよな」とか思うだけど、
なんかの事情で、またjavascriptとか、pythonとかでプログラミングすると、それはそれでプログラミングできて動くんだよね。
なんか不思議な感じではある。
0144デフォルトの名無しさん
2011/07/27(水) 18:54:45.740145デフォルトの名無しさん
2011/07/27(水) 19:02:09.85替りというのは、具体的にはどんなこと?
0146デフォルトの名無しさん
2011/07/27(水) 19:12:08.300147デフォルトの名無しさん
2011/07/27(水) 19:45:06.650148デフォルトの名無しさん
2011/07/27(水) 19:58:26.880149デフォルトの名無しさん
2011/07/27(水) 20:11:10.494年近く開発されてて未だにバージョン 0.11.1.0 だ
人気のあるライブラリだそうだから使えることは使えるのだと思うが、
Haskell のライブラリってこんなのばっかだよね
いつになったらバージョン1になることやら
0150デフォルトの名無しさん
2011/07/27(水) 21:00:14.170151デフォルトの名無しさん
2011/07/27(水) 21:39:57.570152デフォルトの名無しさん
2011/07/28(木) 23:15:34.190153デフォルトの名無しさん
2011/07/28(木) 23:34:35.45初心者からして関数合成とオフサイドルールの説明が
今まで読んだ中で一番よかった
foo x y =
x
*
y
まさかこんなのが動くとは思ってなかったさ
0154デフォルトの名無しさん
2011/07/29(金) 06:45:13.33自分はlisperでemacs + slimeというような環境で開発スタイルを作ってる
のですが、
Haskellでの一般的な開発スタイルってどのようなものなんでしょう?
eclipseFP,vim haskell-mode,emacs+haskell-mode ...
いろいろあるようですが、
0155デフォルトの名無しさん
2011/07/29(金) 07:31:24.17「一般的」と言えるような開発環境はまだありません
好きなエディタでプログラミングしてください
個人的には、今のところ Haskell にインテリセンスは必要ないと思ってます
色分けとオートインデントがあれば十分ではないでしょうか
私は emacs + haskell-mode で上記2機能のみ使ってます
0156デフォルトの名無しさん
2011/07/29(金) 08:51:54.60私も、emacs + haskell-modeです。
あと、開発環境というか、ある型がどのクラスのインスタンスか、クラス・メソッドは何かといったことを、インタプリタ(ghci)のコマンドを叩いてよく調べています。
0157デフォルトの名無しさん
2011/07/29(金) 09:22:09.74函数プログラミングの集いに前提知識が追加されてるwwww
おれ関数型まったくしらないJava屋の友達連れていこうかと思ってたけどそういうのは
止めた方がいいのかな。
0158デフォルトの名無しさん
2011/07/29(金) 09:27:36.83とはいえ今回のは最初の3セクションぐらいは特定の関数型言語の前提知識無しでもそれなりについていけそうな話題だと思う
最初の2つはチュートリアルだしね☆
0159Perl忍者
2011/07/29(金) 15:50:32.72かっこつけてる
まつもとひろゆき信者は気持ち悪い
数学が苦手ならHaskellやらなければいいじゃん
なに?すぐ真似事だよほら
ほら
どうせMacbookだろ
言語はRuby+Haskell
ほらテンプレ
テンプレだよ
気持ち悪い死ね
死ねよ?早く死ねよ
真似事
数学苦手ならHaskellやる必要ない
無理に好き気取らなくていいよ
素養がないやつは不幸になるっていってただろ松本ひろゆきが
お前らのことだよゴミ
ごみだな
0160Perl忍者
2011/07/29(金) 15:53:08.31自分「Haskellでなにかつくったことあんですか?」
Haskellユーザー「いえいえ^^; えーと 勉強してるだけかなw」
とかほざいてたよ
こういうゴミがわんさかいるんだろうね
知的好奇心(情弱笑)
とかほざいちゃって
自分は勉強好きアピールしちゃって
ごみみたいだな
0161デフォルトの名無しさん
2011/07/29(金) 16:22:46.76こめんとありがとさん
色分けオートインデントがあればよさそうですね。
じゃあ、vim でも emacs でも良さそうだ。
vimもemacsもとりあえず環境だけは作ってみたけど
emacs+haskell-mode, screen+ghci/vim+haskell-mode
でもそんなに使い勝手は同じようなもんみたいですね。
0162デフォルトの名無しさん
2011/07/29(金) 17:42:48.18俺もtwitter民嫌いだよ
0163デフォルトの名無しさん
2011/07/29(金) 19:42:48.070164デフォルトの名無しさん
2011/07/29(金) 21:07:58.55そういう言語(笑)
0165Perl忍者
2011/07/29(金) 21:10:29.86流行のことおいかけて逆に効率悪いだろあれ
頭悪いんじゃないの
新しい知識無理やり突っ込んでドキュメントあさるざま
まさにごみみたいだね
効率悪いだろ
頭悪い
それ1ヶ月ペースで繰り返してるね
言語とかデータベースとか
http://www.atmarkit.co.jp/news/200902/13/matz.html
Matzの影響
気持ち悪い
ここの会場の写真にうつってるやつ全員死ね
次はcofferScriptか!?
まだこんなミーハーごっこやってるんだな!落ち着きがない連中だぜ
さっさと死ぬなりしてくれ!!!
死ね!!!
emacsとかviとかHaskellとか情弱じゃん
効率悪いじゃん
カスタマイズに時間かけてんだろ バカみたいに
死んだほうがいいんじゃないんですかね?楽になりますよ?
0166Perl忍者
2011/07/29(金) 21:11:24.93「これから来る言語 Ruby Haskell Erlang APL」
信者気持ち悪い
0167デフォルトの名無しさん
2011/07/29(金) 21:14:55.13なんや 俺にいってるんか、^^; emacs やvimの環境はできてるし
1時間もかからんのに。最近Haskellが流行ってるかどうか知らんよ。
twitterもやってへんし。
お前おもろいから、Scalaスレに出向いて色々言ってこいよ。
興味がある。
0168Perl忍者
2011/07/29(金) 21:25:23.32http://twitter.com/#!/iasija
tsuwabuki
tsuwabuki
@iasija
pi-calculus, CSP, lambda-calculus, haskell, erlang, HTML5, P2P, 料理作り(プリン・パンなど), 筍, 紅茶, サーバ運用, 自作サーバ, 電子書籍, iPhone, Android, Arduino, gumonji
早く死ねよ情弱
0169デフォルトの名無しさん
2011/07/29(金) 21:53:59.810170デフォルトの名無しさん
2011/07/29(金) 22:35:57.06誰が悪いわけでもない、根本的に対話の相手としての選択を間違えているのが
問題なんだ。
徒労に終わったのかもしれないけれど、ゼロになることを恐れていちゃ
なんにもならないよ。
0171デフォルトの名無しさん
2011/07/29(金) 23:27:12.14カオスがよりいっそう渦巻くだろうな
ssig33やHolyGrailを見てごらん
墜落だよ 墜落したLL 堕ちたLL
ssig33は努力したが選ばれなかった 選ばれなかったLL
HolyGrailは見栄を張ったあげく嘘で固めてunholyになりさがった
0172デフォルトの名無しさん
2011/07/30(土) 07:26:30.340173デフォルトの名無しさん
2011/07/30(土) 09:06:38.550174デフォルトの名無しさん
2011/07/30(土) 09:08:36.910175デフォルトの名無しさん
2011/07/30(土) 09:21:38.23表現を除いて言いたいことのみ考えれば、至ってごく正常なものだ。
0176デフォルトの名無しさん
2011/07/30(土) 09:29:18.950178デフォルトの名無しさん
2011/07/30(土) 10:21:15.670179デフォルトの名無しさん
2011/07/30(土) 12:44:23.723eと2eでかなり変更があるように思うが、良かった点と悪かった点を
聞ければいいなぁ。
0180デフォルトの名無しさん
2011/07/30(土) 15:40:35.60↓
0181デフォルトの名無しさん
2011/07/30(土) 18:44:55.910182デフォルトの名無しさん
2011/07/30(土) 18:55:31.850183デフォルトの名無しさん
2011/07/30(土) 19:00:15.090184デフォルトの名無しさん
2011/07/30(土) 19:46:36.45Learn You a Haskell for Great Good!
って 山本さんのPDFを見てると翻訳されるみたいなことが書かれてたね。
0185デフォルトの名無しさん
2011/07/30(土) 19:53:16.88haskellの入門書が増えるのは大歓迎だな
初心者にアピールするには入門書の数と質だと思う
0186デフォルトの名無しさん
2011/07/30(土) 20:06:12.07田中さんが訳してるはず
0187デフォルトの名無しさん
2011/07/30(土) 20:14:22.61せめて自分の愛用してる奴くらいは
0188デフォルトの名無しさん
2011/07/30(土) 20:15:14.390189デフォルトの名無しさん
2011/07/30(土) 20:18:51.030190デフォルトの名無しさん
2011/07/30(土) 20:21:46.39暇にならないために訳の仕事受けたんじゃね?
0191デフォルトの名無しさん
2011/07/30(土) 20:23:52.370192デフォルトの名無しさん
2011/07/30(土) 20:28:16.66cabal install の途中で設定ファイルを手でエディットして
インストール続行するのって
具体的にどうやるの?
つまり下記みたいにしたいときのcabalのオプションはどうすればいい?
$ cabal insatll (pkg) tar.gzダウン+展開したところでとめる
(手でファイルを直す)
$ 上のcabal insatllを続行
要は前スレPart14 の94をやりたいんだけどcabalとかHaskellが
まだよくわってないもんで。
0193デフォルトの名無しさん
2011/07/30(土) 20:31:18.52でいいんじゃね?
0194デフォルトの名無しさん
2011/07/30(土) 20:45:12.65楽しければそれで幸せじゃない
0195デフォルトの名無しさん
2011/07/30(土) 20:56:02.552eは読んでないし3eも100ページほどしか読んで無いんだけど
2eから3eの変更点は公式サイトに書いてあるよ
http://www.haskellcraft.com/craft3e/Changes.html
良い点として挙げられそうなのは、丁寧な説明、
図表を適度に含んでいる、練習問題が豊富、
プログラム自体の初級者向けの配慮が行き届いてることなど
(4章は『いかにして問題を解くか』 in Haskell)
逆にいえばHaskell中級者以上が読むにはコスパ悪そう
Learn You ... は練習問題がついてないのでCraftと対称的だと思う
0196デフォルトの名無しさん
2011/07/30(土) 21:00:39.06ネガる人が混じればこうなるけど、スルーして他で盛り上げましょ。:-)
0197デフォルトの名無しさん
2011/07/30(土) 22:21:39.32Perl忍者をもとにして作られたんだよねこれが
Perl忍者の登場時期から、少し立ってから出てたからな
0198デフォルトの名無しさん
2011/07/30(土) 22:22:06.40負けたんだな
ネタや発想的に
0199デフォルトの名無しさん
2011/07/30(土) 22:32:55.77ありがとう、おかげでパッケージを展開できたよ。
ついでに、展開して編集したパッケージフォルダを指定して
cabal installするにはどうすればいい?
cabal install (xx.cabalのあるPATH\)
でいいと思うんだけど
思うように事態が改善しないんで、ちゃんとPATH指定でinstallできているのか不安に
なってきたので、一応確認させてください
0200デフォルトの名無しさん
2011/07/30(土) 23:28:54.45展開して編集したパッケージの Setup.lhs や *.cabal があるフォルダに入って
"cabal install" とするだけでいいよ
0201デフォルトの名無しさん
2011/07/31(日) 01:56:06.70とりあえずコマンドはあってるっぽいです
ところで
>cabal install
Resolving dependencies...
Configuring glib-0.12.0...
setup.exe: The program pkg-config version >=0.9.0 is required but it could not
be found.
cabal: Error: some packages failed to install:
glib-0.12.0 failed during the configure step. The exception was:
ExitFailure 1
ってなるインストールエラーの対処どなたかわかりますか
環境はWindowsXPなんですが、、
cabal install pkg-config ってやっても
そんなパッケージないって言われるし、、
0202デフォルトの名無しさん
2011/07/31(日) 02:27:05.78pkg-config は Haskell のライブラリじゃなくて、
gcc なんかと一緒に使う exe ファイルのひとつだよ
たとえば gtk のライブラリ内にも入ってて、
gtk2hs をインストールしようとする場合にこれが必要になる
だから、インストールした gtk の bin フォルダへのパスを
環境変数 PATH に追加しておく
0203デフォルトの名無しさん
2011/07/31(日) 10:13:45.690204デフォルトの名無しさん
2011/07/31(日) 23:53:51.830205デフォルトの名無しさん
2011/08/01(月) 22:27:27.280206デフォルトの名無しさん
2011/08/01(月) 23:45:48.94ありがとう
別途GTKを先にインストールして
パスを通しとかなきゃいけないという基本的なことをわかっていなかった。
おかげでとりあえず進展あったよ。
gtk2hsのインストールをやってたんだけど
glib,gio,pango,cairoはおかげでインストールできた。
ただ、最後の肝心要のgtkが
※1 http://logsoku.com/thread/hibari.2ch.net/tech/1299385928/35
のエラーが再現しえしまう。
>>35の解決編の書き込み↓のとおりに
http://logsoku.com/thread/hibari.2ch.net/tech/1299385928/94
Gtk2hsSetup.hsを全部 glib,gio,pango,cairo,gtk の5パッケージ書き換えて
1つづつcabal installしたんだけど
最後のgtk-0.12.0のコンパイルで※1 のエラーが再現してしまう。
>setup.exe: internal error: unexpected package db stack: [UserPackageDB]
だれかWindowsXPでcabal install gtk に成功した人
どういう風にやったか教えて
0207Perl忍者
2011/08/02(火) 16:28:48.49ごみみたいな
お前が作れるアプリはゴミ
そう運命が語ってる
0208デフォルトの名無しさん
2011/08/02(火) 16:39:17.000209デフォルトの名無しさん
2011/08/02(火) 21:11:39.700210デフォルトの名無しさん
2011/08/02(火) 21:19:56.38オレは、高度に洗練された型システムが好き。
GHC拡張のGADTとか、多引数の型クラスとかも。
オレの中では、副作用がないとか、遅延評価だとかいうのは、じつはあんまり重要じゃない。
0211デフォルトの名無しさん
2011/08/02(火) 21:46:04.66上手く言えないけど、プログラミング言語っぽさが薄い所
ifとかswitch,forを見かけないのが良い
(ifなんて、言語でサポートしてるのに使われない)
0212デフォルトの名無しさん
2011/08/02(火) 22:01:57.200213デフォルトの名無しさん
2011/08/03(水) 08:36:56.350214デフォルトの名無しさん
2011/08/03(水) 20:15:42.48http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
更新は毎月第1水曜日(1月のみ第2水曜日)
これってもう消してもいいような気がするんだが・・・
0215デフォルトの名無しさん
2011/08/03(水) 20:50:45.470216デフォルトの名無しさん
2011/08/03(水) 21:01:25.73自動並列化は人類の夢
0217デフォルトの名無しさん
2011/08/04(木) 06:06:47.450218Perl忍者
2011/08/04(木) 08:58:59.56情弱
学習というなの情弱
TomitaやHaskell著者の良い餌
「本物のプログラマはHaskellを使う」
っていうフレーズに洗脳
Matzのこれからくる言語の
「Haskell]に洗脳
ばかみたいだな
上位LL使いのHaskell勉強会
「俺もやってないと時代おくれかな 上の人もやってるしHaskellやっとこ」みたいなノリ
今すぐ死んだほうがいいよ
お前らみたいな流行に便乗してるキョロハーは
0219Perl忍者
2011/08/04(木) 09:04:49.32時間x金x学習価値
に見合わない代物ができあがるんだろう
Haskellだとなんだ?演算とか数式?
くだらないな
ゲームも作れる?
インベイダーとかブロック崩しとかでしょ笑わせんなって
くだらねええ
いい加減くだらなさに築けよ
まじで終わってんぞ
まあMatzとか上のやつらがHaskellっていってると
お前らの脳みそではHaskellが必要ってループされんだけど
Haskellのどこが好きとかほざいてる情弱もいるけど
言語仕様+学習についてしか学んでおらず
”知的好奇心(苦笑)”というなのお勉強
最終言い訳はパズルとかほざくのかな いや作るっていうよりかも 学びたいだけみたいな
ごみだな
0220Perl忍者
2011/08/04(木) 09:09:35.14目的を果たすというより
言語をお勉強してる感じだな
新しい言語が出るたびにそれらを繰り返すんだろ?
Matzがなんか会議とかで
新言語の紹介したら
それに食いつくんだろ
Haskellやめちゃうかな
絶対やめそうだね
その新しい言語
全部Matzや上のLL使いの真似事
お前ら本当にうざい
書き込みみてるとぶっ○したくなるよ
0221デフォルトの名無しさん
2011/08/04(木) 09:12:06.82フォロー解除くらうよ。
たしかに、洗脳されてる人多いな。
0222デフォルトの名無しさん
2011/08/04(木) 09:13:57.37話のネタに困らないように、Haskellやってるわけで
>>目的を果たすというより
いや話のネタw なんか港で流行ってるみたいなので
0223デフォルトの名無しさん
2011/08/04(木) 09:25:15.11うざいと言いながらスレを見に来る神経が理解できないな。
なんなの?この人
0224デフォルトの名無しさん
2011/08/04(木) 09:32:46.13話のネタ、共感っていうのも一理あるね。
0225デフォルトの名無しさん
2011/08/04(木) 11:06:49.010226デフォルトの名無しさん
2011/08/04(木) 11:15:12.950227デフォルトの名無しさん
2011/08/04(木) 12:06:00.21金融系とかでいくらでも使われてるという話が出てきているのに
「アーアー聞こえないー」とかw
川渡り問題みたいなのはPrologのほうが向いてるし、
TSPは計算量で解くならC言語とアセンブラ併用、理論的なアプローチなら
まずは紙と鉛筆だろ。
0228デフォルトの名無しさん
2011/08/04(木) 12:09:58.51なんなの?この人と思わせる術を使う
0229デフォルトの名無しさん
2011/08/04(木) 12:11:44.70あれどうなったんだろう
0230デフォルトの名無しさん
2011/08/04(木) 12:59:36.4612,3歳児にhaskellを教えるんだって。イントロだけやけど。
0231デフォルトの名無しさん
2011/08/04(木) 13:14:09.71> think Haskell is the best environment to learn and practice abstract patterns of thinking
これだけなら、schemeもいいんだけど
> that will be useful in mathematics, logic, and a clear understanding of the world.
が意識にあるんだろうな。
0232デフォルトの名無しさん
2011/08/04(木) 13:28:44.93やってる人は相当頭がいいっていうことか、そうかそうか
って言っても周りを見ると、WEB土方しかいない訳でw
0233デフォルトの名無しさん
2011/08/04(木) 13:30:59.09よく、ほかの言語でもあるが、○○○で使われている「だから凄い」程度でしかない。
本質的に使うとなると実用性がない言語、2ch書いてるような輩が使うまでもない。
0234デフォルトの名無しさん
2011/08/04(木) 13:34:41.80何を表すものかの型がないと怖いとか、そういう理由なのかな?
0235デフォルトの名無しさん
2011/08/04(木) 13:37:00.40バカとハサミは使いようなわけで、haskellを手にしても使い道のない人間の方が多いんだろ
○○で使われてるなら、pugsとか、xmonadじゃねーの?
0236デフォルトの名無しさん
2011/08/04(木) 13:38:46.010237デフォルトの名無しさん
2011/08/04(木) 13:41:52.61だいたい、pugasみたいに2chで低レベルな部分を実装するやつがいるとは思えない。
まして、騒いでるITプロやTwitter民なども、使い道が見合ってない連中ばっかりだろ。
なんというか煙い。
0238デフォルトの名無しさん
2011/08/04(木) 13:42:04.99lisp系同様にHaskellが凄いんじゃなくてつかってる奴が凄いだけ
0239デフォルトの名無しさん
2011/08/04(木) 13:51:57.57なんていうのかな。。。 抽象化を上手にできる人ならlisp系やhaskell
にハマるんだと思うよ。アルゴリズムをそのままガシガシ書いている
感じになってくるからね。
でも、抽象化が不得意な人にとって見れば、ただの複雑怪奇な難解な
言語ということなんでしょう。
C++でも抽象化できるけど、あちらは抽象化すればするほど、すっきり
するんじゃなくて、泥沼に入ってしまう。
0240デフォルトの名無しさん
2011/08/04(木) 13:54:55.60という印象だな。
また、極論を振りかざすだけの人は残念だけどHaskellには向いていないと思う。
そういった人が今数人あらわれているけど、さっさと自分に見合った言語を
みつけてそこで、腕を磨いてください。
0241デフォルトの名無しさん
2011/08/04(木) 13:56:54.26tanakh 2011-07-17 16:19:51
今年勉強する言語をまだ決めてない人、Haskelはどうですか? #start_haskell
eielh 2011-07-13 02:11:27
Haskellは勉強しとくだけで使わなくても利益がありまくりな気がしてきました。
otf
otf 2011-07-05 10:13:52
Haskellか、Coqか、Agdaか、F#か、WordPressか、Flashのどれかを勉強会でやりたいです!
twittarsan
twittarsan 2011-07-10 23:16:54
haskell使うメリットってなんだろうね
0242デフォルトの名無しさん
2011/08/04(木) 13:57:53.13ブラウザでもあるけど
ガキってブラウザの名前沢山しってるよな、使ったり
あーいう感じかな。言語を沢山使ってます的な。
0243Perl忍者
2011/08/04(木) 13:59:54.94激しく同意
どう見ても 頭悪そうなツイートや身なり自己紹介をしてくせに
Haskellやるとか 本当におかしいと思うな
どうしたの!?ってかんじだよ
明らか研究職じゃないのに
ニートやアニオタのクソが使ってるとかわからない
242のいうとおりだ
0244Perl忍者
2011/08/04(木) 14:01:36.95Haskellはバカアホ+研究職気取りしかやらない
日本人で使ってるやつの99%がにわか
にわか
バカを隠すための言語=Haskell
よってPerlの勝ち
0245242
2011/08/04(木) 14:02:59.800246デフォルトの名無しさん
2011/08/04(木) 14:08:14.52これでもよんどれ、Perl忍者一味
http://blog.tatsuru.com/2011/08/01_1108.php
0247デフォルトの名無しさん
2011/08/04(木) 14:10:00.35コーディング作法やメモリの解法なんかでも無駄に行数のびるし
新規にプログラミングを始めるなら、手続き型は情弱言語だっていってみよう
ふつうに考えて高階関数ある言語の方が問題解くのに便利だよね
0248Perl忍者
2011/08/04(木) 14:16:07.87そういうのHaskellでやるの?
バカだな情弱だな
死ね?早く死ね
ゲームもHaskellか? まあ作れたとしてもインベイダーぐらい
調べたらその程度のゴミゲーム グライディウスとかそんなもんだよよな
さささとしね
0249Perl忍者
2011/08/04(木) 14:17:17.45ここのカスどもとか
ツイッターでHaskellやってるごみと
すかいぷしたんだけど
話したんだよクソだったよ
Haskellやってるだけみたいな連中
何も作ってない何もできない
全員それだったゴミ20人そうだったな
ゴミしかいねーんだよごみしか
消えろ
0250Perl忍者
2011/08/04(木) 14:18:40.480251デフォルトの名無しさん
2011/08/04(木) 14:21:21.25そこまでHaskellを嫌うのにここに来て毒をまくのはなぜ?知りたい。
もしよかったら、忍者がHaskellと出会った時から、病的に嫌うようになった
原因を探ろうじゃないか?と思うので、過去から今までのHaskellとの
関係を書いておくれ、Matzもかなり嫌ってるようだけど、こちらはperlの
敵とみなしてるから?danさんが草葉の陰で泣いてるぞ
0252デフォルトの名無しさん
2011/08/04(木) 14:22:19.440253デフォルトの名無しさん
2011/08/04(木) 14:23:22.62お前みたいなのがかまってくれるからだろ
いいからほっとけよ
0254デフォルトの名無しさん
2011/08/04(木) 14:28:45.86この人みてると、周りがいようといまいと関係ない人に見えるよ。かまって
ちゃんと言うより、ストレスのはけ口として使ってるだけだろうから。
概して狂人になったヒトというのは同じなんだけど、周りから良い影響は
まず与えられない。最終的に病院にいくしかなくなる。リアルの付き合いが
ある人たちくらいしか制御できないと思うかな。
幸い、この人専ブラならアボーンできるというのはいいことかも。でも
自演の匂いも少しあるが。
PS
忍者専用のスレがあるようだから、そっちに移動してもらうほうがいいな。
0255デフォルトの名無しさん
2011/08/04(木) 14:48:05.35移行できなくって、イライラしている人がいるのかしら。
0256デフォルトの名無しさん
2011/08/04(木) 15:12:46.79ってか、RSS読んだり、webアプリを作るのがプログラミングだとでも思ってんのかな?w
0257デフォルトの名無しさん
2011/08/04(木) 19:41:40.12Haskell以外のとこでも、同じ様な文書いてるからスクリプトだろ。
0258Perl忍者
2011/08/04(木) 19:53:39.240259Perl忍者
2011/08/04(木) 20:00:34.46ああ?
新しい言語がうざい
テリトリーを害される気分
Rubyが有名じゃなくてPerlより使われなかったらむかついてない
後からできたくせしてしゃしゃりやがってよ
うぜえんだよマジで そのせいでMatzやその信者たちも憎く見えるこ、ろしたいと思う
「Rubyを全面的に採用した東京ガスの地震防災システムの紹介」
こういうのなウザいんだよ
Rubyが存在するだけでPerlの立場がなくなる 勉強してきたって勢力で押されて
「え?Perl?なんでRubyじゃないの?」 「いまどきRuby Perlはオワコン」とかな いわれるんだよ
腹立たしく感じる 憎い ろこしたい
Rubyが新しく使われる 知名度があがるPerlはもうだめになる気がして名
しかもHaskellも最近すごいなんか言われてるだろ?
悔しいんだよ Perl使いが消える気がして
だから新しい言語がでるたびにPerlが追いやられる感じがして憎い
0260Perl忍者
2011/08/04(木) 20:04:22.64Haskellやめて欲しい
死ね
0261デフォルトの名無しさん
2011/08/04(木) 20:05:52.05よくよく考えると正常なことをやっている。
0262デフォルトの名無しさん
2011/08/04(木) 20:05:57.180263デフォルトの名無しさん
2011/08/04(木) 20:45:40.340264デフォルトの名無しさん
2011/08/04(木) 20:56:43.16テキスト関係の処理はまだ速いしPerlに自信を持ってればいいよ。
たぶんPerlを食ってる言語は世界的には隣のPだとは思う。Haskell
とは得意分野も違うから、そんなに危機感を持たなくていいよ。
10年くらい前の勢いは難しいかもしれないけど、ある一定数は
消えずに残る言語だと思うよ。
0265デフォルトの名無しさん
2011/08/04(木) 21:00:39.48そんなに少ないの? 意外。(俺が世間知らずなだけかも)
抽象化の腕を磨くには大変良い言語だし、他の言語の腕を上げる
のにもフィードバックできると考えとる。
0266Perl忍者
2011/08/04(木) 21:04:35.230267Perl忍者
2011/08/04(木) 21:05:14.910268デフォルトの名無しさん
2011/08/04(木) 21:09:15.550269デフォルトの名無しさん
2011/08/04(木) 21:20:24.530270デフォルトの名無しさん
2011/08/04(木) 21:23:47.130271デフォルトの名無しさん
2011/08/04(木) 21:26:15.490272デフォルトの名無しさん
2011/08/04(木) 21:27:53.36Perl忍者はHaskellやってないんだけど
0273デフォルトの名無しさん
2011/08/04(木) 21:29:44.390274デフォルトの名無しさん
2011/08/04(木) 21:35:15.68スレ伸びるから、
0275デフォルトの名無しさん
2011/08/04(木) 22:58:20.580276デフォルトの名無しさん
2011/08/05(金) 22:41:45.100277デフォルトの名無しさん
2011/08/05(金) 22:44:11.610278デフォルトの名無しさん
2011/08/05(金) 22:49:13.79記憶領域を上書きするような言語を使ってはいけません。
0279デフォルトの名無しさん
2011/08/05(金) 23:31:45.81例えば次のコードを走らせたとき、関数 writeIORef の引数 r の中身が変わってる。
引数の値を変えるなんて Haskell でできるの?
import Data.IORef
main = do
r <- newIORef 0
x <- readIORef r
print x
writeIORef r 1
x <- readIORef r
print x
そもそも、こういうのって関数の副作用とは言わないの?
俺は、純粋関数とは数学的な関数の挙動と同じにしようって
思想だと理解していたんだが、もっとゆるいんかな。
0280デフォルトの名無しさん
2011/08/05(金) 23:36:05.44r自体の値は変わっていない
rの値であるIORef型の値が指す先が変わっているだけ
0281デフォルトの名無しさん
2011/08/05(金) 23:45:49.730282デフォルトの名無しさん
2011/08/06(土) 00:31:09.90関数型でデータ並列とかめちゃくちゃ書きにくくね?
つかライフゲーム自体書きにくい。
0283279
2011/08/06(土) 01:46:32.29コンパイル後の機械語での動作はそうなんだろうけど,
haskell の文法上ではポインターなんて概念はないでしょ
IORef 型の値を,Haskell の意味論の中で理解しようとしたとき
どう考えればいいのかわからない.
0284Perl忍者
2011/08/06(土) 07:36:39.23お前うざいんだが
車輪の再発明
ライフゲームなんてすでに出てんだが
こういうとほとんどのやつがこう返すんだが
「仕組みを理解するためであって、車輪の再発明は関係ない。」
ばっかみてーだが
あほだな
どうせ人生ずっと車輪の再発明+勉強だろ
死ね情弱
0285デフォルトの名無しさん
2011/08/06(土) 08:00:36.55IOの中の純粋性なんてゆるゆる。
むしろ副作用あるかもよっていうマーク。
IORefに関してはファイル操作に置き換えて考えてみたら?
0286Perl忍者
2011/08/06(土) 08:06:15.42ごみみたい
自分は難しいことやってるって思ってるゴミが多い
作れるものはそんなpugsみたいなすごいものじゃなくてごみばっかり
すごいやつに任せればいいじゃん
まして2chに書いてるゴミなんてそんなサンプル程度だろ
0287デフォルトの名無しさん
2011/08/06(土) 08:08:57.85こっちにおいでよ。http://hibari.2ch.net/test/read.cgi/tech/1312201995/
0288Perl忍者
2011/08/06(土) 08:12:23.92車輪の再発明
Haskellで将棋のAIとか
くだらねえ
何も生み出せないよおもしろいもの
依存のゲームを、俺つええカッケー言語(Haskellなど)で書き換えたものばっかり
LLのやってることって浅はかなんだよね
コーディングとかすげーめんどくさくやってるけど
得られるものがごみくずだし
UE3とかUnityでゲーム作ってるやつのほうが完成したもの含めすべてにおいてすばらしいと思うわ
いくらHaskellで小難しい論理とかモナドとかほざいても
所詮ゲーム業界のやつらが作ったゲームと比べたら作品においてすべてがごみなんだよね
作品を求めるっていうよりかは、プログラミング!!プログラミング!!
プログラミングしてる自分すげー!!によってるごみばっかりだしな
何事もコーティング
完成した最寄かもコーディング ごみみたいだな
0289Perl忍者
2011/08/06(土) 08:14:59.00っていうとほとんど学習 作ったものはただのゴミみたいな計算機とかよくてゲームのシューティングや
ライフゲーム+オセロとかだろわらわせんなって
知的好奇心(笑い) 世の中に無駄なことはひとつもない(笑い)
とかいっちゃってお茶濁しちゃうからなあ
やっぱりゴミだな
0290Perl忍者
2011/08/06(土) 08:17:48.15代用することを考えない
自己流(笑) オリジナル(笑)自己満足(笑)
まさにクズだな
0291デフォルトの名無しさん
2011/08/06(土) 09:33:46.620292Perl忍者
2011/08/06(土) 10:06:48.63その大人版
気持ち悪いね
ガキがたくさん言語ほざくのと同じ
自己紹介にたくさん言語かいちゃうのとおなじ
ごみみたいだな くそアピール
0293デフォルトの名無しさん
2011/08/06(土) 10:15:42.43でどう並列化するの?
0294デフォルトの名無しさん
2011/08/06(土) 11:12:47.99まじイイネ
0295デフォルトの名無しさん
2011/08/06(土) 11:22:30.87いや機械語の話はしてない。あくまでHaskell上で、rの値は不変
>IORef 型の値を,Haskell の意味論の中で理解しようとしたとき
>どう考えればいいのかわからない.
IORefは例えばStringだと思って問題ない
命令「newIORef 0」は、ユニークな文字列を生成し、グローバルなテーブルに0とともに登録して、それを返す
「readIORef r」は、文字列rをテーブルから検索し、それに関連付けられている値を取得する
「writeIORef r 1」は、テーブル上で文字列rと結び付けられている値を1で置き換える
もちろん、これらの操作を通じてStringの値は変わらない
もちろん実際の実装はテーブル検索なんてまわりくどいことはしてない。rの実体は一個のポインタ
0296デフォルトの名無しさん
2011/08/06(土) 11:39:46.30IORef自体が変わるんじゃなくて、IORefが指す先のメモリがまるごと置き換わる感じ。
import Data.Array
myNewIORef val (mem,used) = (used,(mem // [(used,val)],used+1))
myReadIORef r (mem,used) = (mem ! r,(mem,used))
myWriteIORef r val (mem,used) = ((),(mem // [(r,val)],used))
main = do
let state0 = (listArray (0,9) $ replicate 10 0,0)
let (r,state1) = myNewIORef 0 state0
let (x,state2) = myReadIORef r state1
print x
let (_,state3) = myWriteIORef r 1 state2
let (x,state4) = myReadIORef r state3
print x
先ほどのプログラムがこのように自動的に書き換えられていると考えれば副作用は必要ない。
0297296
2011/08/06(土) 11:41:19.48リロードしてから書き込むべきだった。
0298デフォルトの名無しさん
2011/08/06(土) 12:11:50.99> こういうのって関数の副作用とは言わないの?
少なくとも、それは関数の副作用ではない。
main = do
r <- newIORef 0
x <- readIORef r
print x
writeIORef r 1
x <- readIORef r
print x
関数の副作用っていうのは、関数適用、式の評価のときに副作用が生じるということ。
rの型は IORef Integer、xの型はIntegerなのに、
newIORef 0の型はIO (IORef Integer)、readIORef rの型はIO Integer、print xとwriteIORef r 1の型はIO ()で、
そのmainに出ているどの関数適用においても、rやxの型は現われないよね。
だから、rやxは少なくとも関数適用、式の評価によって生み出された値ではないわけ。
-- rやxはHaskellの意味論上、そもそも値にバインドされていない記号、と言いたいけど、それが正しいという自信はない…
0299デフォルトの名無しさん
2011/08/06(土) 12:18:56.220300Perl忍者
2011/08/06(土) 13:32:00.860301279
2011/08/06(土) 13:51:52.86writeIORef による状態変化は戻り値の IO () に伝搬してるんだ.
IORef には参照先の状態も含まれてると思い込んでた.
実際は FilePath と同じように,ただのラベルなのか
0302Perl忍者
2011/08/06(土) 13:57:55.32目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
0303デフォルトの名無しさん
2011/08/06(土) 14:23:52.220304Perl忍者
2011/08/06(土) 16:17:47.67そんなやつの乗せるな
早く死ね!!!!!!
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
0305デフォルトの名無しさん
2011/08/06(土) 16:25:21.15量産体制に入ったウェブアプリに目新しいものなんてないだろ
いい加減、perlが時代遅れでjavaに負けたって認めればいいのに
0306デフォルトの名無しさん
2011/08/06(土) 16:25:44.060307デフォルトの名無しさん
2011/08/06(土) 16:48:31.53ブルーカラーのための言語
0308デフォルトの名無しさん
2011/08/06(土) 19:24:14.51Perl忍者はTreeBoaです
ソース
http://blog.plaync.jp/giko/302948.slog
@TreeBoaIsPerl
0309デフォルトの名無しさん
2011/08/06(土) 21:12:10.79ソースっていっても、なりすましの疑いもあるしな
0310Perl忍者
2011/08/06(土) 21:18:13.36ああ、無視してくれない?
いいよ、反応しなくて
さっさと死ねよ鼻でか不細工
いちいち反応するお前らはクズだな
無視してくれ
お前らをグズ発言して 目をさまようとさせてるだけだから
0311デフォルトの名無しさん
2011/08/07(日) 02:35:56.620312デフォルトの名無しさん
2011/08/07(日) 06:24:16.700313デフォルトの名無しさん
2011/08/07(日) 07:12:55.22と大差無いぐらいわかりにくい例えだな
山本さんだかが言っていたprogramable semicoronというのが喩えの中では一番分かりやすいと思う
0314デフォルトの名無しさん
2011/08/07(日) 11:04:20.650315デフォルトの名無しさん
2011/08/07(日) 11:11:23.44みたいな、モナドと言えばIOモナドしか知らない人と
それ以外の人では話がかみ合うはずも無い
0316デフォルトの名無しさん
2011/08/07(日) 11:18:41.94どのモナドも副作用って言われればそうだなあと思う
0317デフォルトの名無しさん
2011/08/07(日) 11:22:48.150318デフォルトの名無しさん
2011/08/07(日) 11:23:36.430319デフォルトの名無しさん
2011/08/07(日) 13:03:54.600320デフォルトの名無しさん
2011/08/07(日) 13:54:03.76手続き型言語の事だよ。それ
関数型言語はむしろ教育コスト低いよ
0321デフォルトの名無しさん
2011/08/07(日) 13:54:37.930322デフォルトの名無しさん
2011/08/07(日) 14:46:14.770323デフォルトの名無しさん
2011/08/07(日) 14:51:12.98日本語のテキストの量だけでも1対1000くらいで関数型のテキストの方が少ないと思うんだけど、これってテキスト書くレベルの人を教育するコストすら物凄く高いということだと思うけど
0324デフォルトの名無しさん
2011/08/07(日) 14:54:25.99マジレスすると、手続き型言語では分かった気になる事すら難しい
0325デフォルトの名無しさん
2011/08/07(日) 14:55:09.87モノ書けるレベルの人に、「書いて」ってお願いするまで
テキストが出力されない
0326デフォルトの名無しさん
2011/08/07(日) 14:56:06.75それは単にお金にならないだけ
学ぶ機会が少ないだけ
0327デフォルトの名無しさん
2011/08/07(日) 15:00:56.77手続き型なら分かる必要すらないということか…
たしかに、会社じゃ何のプロシージャか分からないのにプログラミングしてるのが普通だし
0328デフォルトの名無しさん
2011/08/07(日) 15:26:00.990329デフォルトの名無しさん
2011/08/07(日) 15:49:49.62本来は、IOモナドのdo記法は副作用を使うための特別なシンタックス、という認識でも支障ないと思うし、
その使い方はなんとなくdo記法を使っていればなんとなく理解できるとは思うんだけど、
現時点ではどうしても「モナドって何?」「圏論ってなに?」ってことを勉強したくなって、
よほど才能あるか、数学が得意でないかぎりかなりの苦闘になる。
でも、べつにいいじゃん。
そこで苦しんだだけの見返りはちゃんとあるよ。
0330デフォルトの名無しさん
2011/08/07(日) 15:53:15.35アプリケーションプログラマには何のメリットもない見返りな。
0331デフォルトの名無しさん
2011/08/07(日) 16:04:41.480332デフォルトの名無しさん
2011/08/07(日) 16:22:09.65過酷な山登りに喩えられるようなコスト構造よりは、せいぜい大学受験ぐらい
に喩えられるコスト構造にしないと理論的内容も含めた普及はない。
一般的に好まれるのはローコストでハイリターンなものだからね。
0333デフォルトの名無しさん
2011/08/07(日) 16:34:36.90Haskellに(たとえば)MLのレコード型みたいに副作用が使えるものとか、
そういったものが入ることはありえません。
ローコストでハイリターンが好きなら一生PHPでもなんでも使ってるのが
あなたにとって一番の幸せだと思います。多分。
0334デフォルトの名無しさん
2011/08/07(日) 16:37:29.430335デフォルトの名無しさん
2011/08/07(日) 16:52:10.82なので、コストを下げる努力はしない、ということか?
0336デフォルトの名無しさん
2011/08/07(日) 16:55:03.34なんでだろう
0337デフォルトの名無しさん
2011/08/07(日) 17:01:44.98そして誰も使わなくなったとさ
0338デフォルトの名無しさん
2011/08/07(日) 17:09:07.610339LLピザ
2011/08/07(日) 17:13:47.51なのにすごい
お前らの脳みそ=Haskellやってる=すごい
らしいな
だけどバカだな
お前らクズじゃねーかよ
みたらTsuwabukiみたいな、へなちょこばっかりwwwwwwwwww
ゴミクズしかいねえのな
0340デフォルトの名無しさん
2011/08/07(日) 17:14:25.67大学以外で実務で使ってそれで金もらってる人は日本で10人もいないよ
0341デフォルトの名無しさん
2011/08/07(日) 17:20:32.880342デフォルトの名無しさん
2011/08/07(日) 17:48:55.180343デフォルトの名無しさん
2011/08/07(日) 17:50:57.82なんで? Parsecをdo記法で書けるのはすげー便利だが。
もともとWebアプリケーション用としてではなく、不完全なHTMLで書かれていて、かつ仕様も予告なくころころ変わるWebページを定点観測していたときには、すげー便利だったParsec。
Haskellがなければ、あんなこと二度としようとは思わん(それをやるだけで給料もらえるならやるけど)。
0345LLピザ
2011/08/07(日) 17:52:19.13ゴミだったな
まぁ使っていいのはMacだと木下、荻原、Matzあたりだろ
あとはゴミだしなMac使いは
そもそも2chに書き込んでるゴミが使ってもただの個人学習にしかすぎない
0346デフォルトの名無しさん
2011/08/08(月) 14:57:16.67待ちくたびれたー
0347デフォルトの名無しさん
2011/08/09(火) 00:40:23.370348デフォルトの名無しさん
2011/08/09(火) 18:16:00.53普通にコンビネータ使える言語ならどうにでもならねえか、それ?
0349デフォルトの名無しさん
2011/08/09(火) 20:28:00.00実際に手続き型言語でパーサコンビネータを組んでみたけど、Parsecほど使いやすくはならなかったよ。
とくに順次処理をして自分の使いたい型のデータを返すのが、面倒な問題を引き起こす。
例えば、"000 - 000"という文字列を解析して、整数のペアを返したい。
厳密にコンビネータだけ使うなら、例えば seq(seq(number, string(" - ")), number)みたいなやり方をするわけだけど、
これは読みにくいし、せいぜい配列かリストを返すことになって自由な型のデータを返せない
他方、
x = number();
string(" - ")();
y = number();
return (x, y)
みたいにパーサーを実際に副作用させる構文で、自由な型のデータを返すことはできるけど、
最後の()を良く忘れるが必ずしも型検査に引っかからず、バグが見つけにくかった。
まぁ、実際に試してみれば分かると思うけど。
0350デフォルトの名無しさん
2011/08/09(火) 20:29:20.560351デフォルトの名無しさん
2011/08/09(火) 23:31:09.81scalaのコンビネータライブラリなら
number~"-"~number ^^{case (x,_,y) => (x,y)}
だな
0352デフォルトの名無しさん
2011/08/10(水) 00:09:13.74do
x <- number
string " - "
y <- number
return (x, y)
のほうが読みやすくない?
これくらいなら大した差はないかもしれないけど、5〜6要素以上を抽出することになったら、そういう書き方だと面倒くさすぎるだろう。
0353デフォルトの名無しさん
2011/08/10(水) 00:39:36.45> 言語仕様で直接副作用を扱わなくてもよくなる
> アプリケーションプログラマには何のメリットもない見返りな
というのと、
>>343 の
> なんで? Parsecをdo記法で書けるのはすげー便利だが
が、どう繋がっているのか分からない
だれか解説してくれたら助かる
>>343 のは言語仕様で直接副作用を扱うのかどうかというレベルじゃなくて、
プログラムのレイアウトのレベルの問題だと思うのだが
0354デフォルトの名無しさん
2011/08/10(水) 01:45:57.75俺も良く分からない。do記法って構文糖でしょ? 副作用を持つ言語でも同じことできるよね?
>>349もあんまピント合ってない気がする。seqとかは可変長引数とかで見やすくなるし、
演算子を定義しても良い。>>351みたいに。Haskell以外の言語でも問題なくできる部分。
自分で実装した時は、むしろ参照透明性とか遅延評価とかが大きいと思ったけどな。
正格評価だと迂闊にオブジェクトを作ると性能に響くし、かといって副作用で更新すると、
tryとかでオブジェクトをコピーしないといけない場面が出てきて、これまた性能に響く。
効率良く動作するものをHaskellやClean以外で作るのは地味にキツいんじゃないかと感じた。
0355デフォルトの名無しさん
2011/08/10(水) 21:18:56.300356デフォルトの名無しさん
2011/08/10(水) 23:26:58.91do記法のことなら(lispのようなマクロが無い言語では)組み込みじゃないと無理
あとlazyは関係が無い気がする。OCamlでもモナド使うし
0357デフォルトの名無しさん
2011/08/11(木) 10:17:31.990358329=343=349=352
2011/08/11(木) 14:46:03.01>>343の「なんで?」は、>>329でいう「見返り」がなぜ、
>>330の「言語仕様で直接副作用を扱わなくてもよくなるアプリケーションプログラマには何のメリットもない見返り」と断定できるのか、断定できないでしょ、という修辞的疑問。
で、「Parsecをdo記法で書けるのはすげー便利だが」と次の段落で、アプリケーションプログラマにとってメリットのある見返りを例示する、というのが意図した文章構成。
> プログラムのレイアウトのレベルの問題だと思うのだが
そうだね。でも、do記法は実際にアプリケーションプログラマにとって便利だよね。
その便利な記法を、さまざまな型・用途に柔軟に使えるようにしているのが、HaskellのMonadクラス。
>>354
> 演算子を定義しても良い。>>351みたいに。
scala知らないからテキトーだが、>>351の例から推して量るに、例えば 「2001-01-03 10:10」っていうようなフォーマットを解析するのに
number ~ "-" ~ number ~ "-" ~ number ~ " " ~ number ~ ":" ~ number ^^ { case (y,_,m,_d,_h,_,m) => (y,m,d,h,m) }
って書くのかな。
そういう一回リストや配列で返すことが強制されるよりも
do
y <- number
string "-"
m <- number
string "-"
d <- number
string " "
h <- number
string ":"
m <- number
return (y,m,d,h,m)
って書くほうが、読みやすく、仕様変更に応じて手を加えるのにミスしにくい、とオレは思う。
しかし、そうは思わないという人が多いのであれば、これ以上はなんとも。
0359デフォルトの名無しさん
2011/08/11(木) 15:04:53.22perform記法ってdo記法と似てると思うよ
http://www.cas.mcmaster.ca/~carette/pa_monad/
0360デフォルトの名無しさん
2011/08/11(木) 16:34:30.62何か直交する色んなことを一緒くたに混ぜてる気がするなー。
とりあえず、モナドの利点としてパーサコンビネータを出したのは分かった。(だよね?)
でも、do記法の便利さとモナドの便利さってレイヤーが違うよね?
切り分けないから「?」ってなるんだよ。
>>356が触れているように、Lispのようなメタプログラミングができたり、
>>359が紹介しているような構文拡張ができるプリプロセッサがあれば、
do記法はHaskell以外でも実現できる。
あと余談だけど、do記法については、
ttp://d.hatena.ne.jp/kazu-yamamoto/20101211/1292021817
って意見もある。逆の立場の意見も勿論あるから、これは人によると思う。
自分はdo記法の方が読みやすいと感じる。
0361デフォルトの名無しさん
2011/08/11(木) 17:56:17.490362デフォルトの名無しさん
2011/08/11(木) 18:01:51.220363デフォルトの名無しさん
2011/08/11(木) 18:21:43.01>>329 は「そこで苦しんだだけの見返り」といってる
現時点ではどうしても圏論などとの繋がりが気になって勉強したくなるが、
でも数学が得意でないかぎりかなりの苦闘するよね、というのが「苦しみ」
(もっと深く知りたくて)圏論を勉強しようとして苦闘しても、べつにいいでしょ
苦闘しただけの見返りはあるよ、と言っている
>>329 の言う見返りは、圏論などを学んで「深く関わって」苦闘した上での見返りなんだよ
使い方自体は、do記法を使っていればなんとなく理解できるとも言ってるし
それを受けた >>330 も >>329 の言いたい事をちゃんと分かった上で、
「圏論などを学んでそこまで深く関わって」得られた見返りは、
アプリケーションプログラマにとっては特にメリットもないよね、と言ってる
使い方を理解すればアプリケーションプログラマには十分だということだろう
で、問題の >>343 だ
それはべつに圏論などを学んで深く関わったからこそ得られた知識
という訳ではないだろう
どちらかと言うと、それは「使い方を理解すれば」の方ではないか?
何による見返りについて話しているのか、が前レスと異なっているように思える
このズレが違和感を覚える
0364デフォルトの名無しさん
2011/08/11(木) 18:52:17.75WriterとかMaybeとか色々あるでしょう
0365デフォルトの名無しさん
2011/08/11(木) 19:33:29.84for {
y <- number
_ <- string("-")
m <- number
_ <- string("-")
d <- number
_ <- string(" ")
h <- number
_ <- string(":")
m <- number
} yield (y,m,d,h,m)
0366デフォルトの名無しさん
2011/08/11(木) 21:07:46.630367デフォルトの名無しさん
2011/08/11(木) 21:15:45.910368デフォルトの名無しさん
2011/08/12(金) 02:47:52.52q=%E3%83%A2%E3%83%8A%E3%83%89%E3%81%AF%E8%B1%A1%E3%81%A0
PART2の最後にhaskellのdoとscalaのforの対比があるよ
0369デフォルトの名無しさん
2011/08/12(金) 02:50:25.650370デフォルトの名無しさん
2011/08/16(火) 20:37:25.69http://ja.wikipedia.org/wiki/GHC
0371デフォルトの名無しさん
2011/08/16(火) 21:15:59.99きとったか
0372デフォルトの名無しさん
2011/08/16(火) 22:21:34.71http://hackage.haskell.org/trac/ghc/ticket/2357
0373デフォルトの名無しさん
2011/08/17(水) 09:29:16.820374デフォルトの名無しさん
2011/08/17(水) 16:08:28.02使い勝手が少し良くなりそう。
0375デフォルトの名無しさん
2011/08/18(木) 11:47:29.02add x y = x + y
と
add = \x -> (\y -> x+y)
は同等と書かれているのですが、
前者は add :: Num a => a -> a -> a
後者は add :: Integer -> Integer -> Integer
になり、後者は小数の加算ができません。
どこからIntegerだと型推論されるのでしょうか?
GHC7.0.3もHugsも同じようです。
0376デフォルトの名無しさん
2011/08/18(木) 13:05:53.110377デフォルトの名無しさん
2011/08/18(木) 13:08:39.12http://www.sampou.org/haskell/report-revised-j/decls.html#sect4.3.4
上のレポートにあるように、add :: Num a => a -> a -> aと型シグニチャを書くか
defaultingを止めるためにモジュールの先頭で
{-# LANGUAGE NoMonomorphismRestriction #-}
default ()
としてやると意図通りの型になります。
0378デフォルトの名無しさん
2011/08/18(木) 13:09:40.86ほんとだ、、、
型かけばちゃんとNumになるのに、、、
0379デフォルトの名無しさん
2011/08/18(木) 14:52:23.51ありがとうございます。
4.5.5にそのままの例が載っていますね。
今の自分にはかなり難しいので、
もうちょっと理解が進んでからよく読み直してみたいと思います。
ところで、
{-# LANGUAGE NoMonomorphismRestriction #-}
default ()
をすると、p.18の練習問題にある
n = a `div` length xs
where
a = 10
xs = [1,2,3,4,5]
がエラーになってしまいます。
型推論に頼るのはなかなか難しいものですね。
0380デフォルトの名無しさん
2011/08/18(木) 15:08:33.58最小の再現コードは
n = length [1,2,3,4,5]
で、これもさっきのレポートのlet x = read "..." in show xの例と同じです。
defaultingをoffにしているので、[1,2,3,4,5] :: Num a => [a]となり、
length :: [a] -> Intなので、length [1,2,3,4,5] :: Num a => Intと推論されるので
これは曖昧な型であると型検査で弾かれます。
解決策は型エラーのメッセージにも出ているように、型シグニチャを書いてやれば
OKです。
n = length ([1,2,3,4,5] :: [Integer])
0381デフォルトの名無しさん
2011/08/18(木) 15:12:32.55書くようにするのが嵌らないし、良いお作法だと思いますよ。
0382デフォルトの名無しさん
2011/08/18(木) 16:09:06.94型シグネチャをつける有用性がよくわかります。
型が曖昧というのは、length が使われる環境から 1 とか 2 の型が確定できな
いということでしょうか。
で、数値に限っては、こういう場合にデフォルトがとれるようにしてあると。
ためしに、
s = show 1
をやってみるとエラーになるのも、たぶん同じ理由ですね。
ありがとうございました。
0383デフォルトの名無しさん
2011/08/18(木) 22:22:49.57(大きさはIntで十分。効率も問わない場合)
どちらが基本(多くのライブラリ関数が想定してる)のだろう?
0384デフォルトの名無しさん
2011/08/18(木) 22:55:41.28いくら Integer の処理速度が上がってきているとはいえ、
メモリ量も処理速度も Int の方がまだまだ圧倒的に効率いいよね
Hoogle でざっと見てみたところ、日付や時間を扱う関数では Integer をよく使うね
それほど真面目に調べてはいないけど、それくらいしか見当たらないような気がする
0385デフォルトの名無しさん
2011/08/19(金) 11:07:25.10実行効率を犠牲にしてでも遅延評価による計算可能性に拘った言語で、
わざわざ有限桁の整数型つかうのかよw
0386デフォルトの名無しさん
2011/08/19(金) 12:38:39.50そのようなしっかりした根拠とポリシーを持っているのなら、
あなたは無限桁の整数型を使えばいいだけの話だよ
人の意見に無理に従う必要は無い
0387デフォルトの名無しさん
2011/08/19(金) 14:30:19.720388Perl忍者
2011/08/19(金) 15:49:10.04かわいそう
哀れ
0389デフォルトの名無しさん
2011/08/19(金) 15:52:45.11発展途上ったって、bignumぐらい有限桁とシームレスに使わせろよ。
LISP以下だぞwww
0390デフォルトの名無しさん
2011/08/19(金) 17:03:02.570391デフォルトの名無しさん
2011/08/19(金) 19:11:23.21Integerを多用してるtimeライブラリがボトルネックになることがあるくらい
0392デフォルトの名無しさん
2011/08/19(金) 19:47:12.79他の言語だと同じような遅さはあるの?
それともHaskellの実装が腐ってるの?
0393デフォルトの名無しさん
2011/08/19(金) 19:47:23.400394デフォルトの名無しさん
2011/08/19(金) 20:50:19.60他の言語でもBigNumなら似たようなもん
0395デフォルトの名無しさん
2011/08/19(金) 21:29:37.20まともに整数を実装できてないデータ型なんだからUnsafeIntにすべき
危険なのにもかかわらずunsafeが付いていないのはおかしい
headやlastと同じくらい消えるべき存在
0396デフォルトの名無しさん
2011/08/19(金) 21:48:21.28んなこたねえよ。
今時の処理系なら小さい数字のパフォーマンスはほとんど落ちない。
遅延評価のコストに比べりゃ誤差の範囲内だ。
0397デフォルトの名無しさん
2011/08/19(金) 22:08:29.770398デフォルトの名無しさん
2011/08/19(金) 22:14:39.36そんな簡単なことも面倒がってやらない >>397 のような奴は消えろ
0399デフォルトの名無しさん
2011/08/19(金) 22:34:54.53遅延評価のコストは小手先の最適化でかなり回避できるけど、
Integerを使ってしまったら局所的にいじってもどうにもならない
0400デフォルトの名無しさん
2011/08/19(金) 22:41:33.26それをひとつの型で隠蔽するっていう、最近ではごく普通に使われる手法の話じゃないの?
0401デフォルトの名無しさん
2011/08/19(金) 22:46:53.72それをやってるのがInteger
0402デフォルトの名無しさん
2011/08/19(金) 22:57:46.47プリミティブなインストラクションを生成しないとかで、GHCの最適化性能が良くないってこと?
まさか多倍長整数の計算をしてて遅いとか言ってることはないと思うけど、どうなんだろう。
0403デフォルトの名無しさん
2011/08/19(金) 23:01:12.180404デフォルトの名無しさん
2011/08/19(金) 23:07:13.43個人的には>>395の言うようにUnsafeIntとかの方が良いと思うけど、互換性の問題があるだろうし。
教えてくれてありがとう。
0405デフォルトの名無しさん
2011/08/19(金) 23:15:32.47> まともに整数を実装できてないデータ型なんだから「Unsafe」Intにすべき
Haskell における Unsafe というのは、そういう意味なの?
0406デフォルトの名無しさん
2011/08/19(金) 23:16:44.90まだきついか。
0407デフォルトの名無しさん
2011/08/19(金) 23:21:25.14冗談だろ
0408デフォルトの名無しさん
2011/08/19(金) 23:24:38.85Data.List.genericLength
Data.List.genericIndex
理想主義者のためだけに用意された関数だ、受け取れ
0409デフォルトの名無しさん
2011/08/19(金) 23:25:32.77むしろIntegerどころか0とSuccが定義されてるなんらかのクラスのインスタンスならなんでもおkみたいなぐらい一般化してくrくr
どうせ最終的にAgdaとHaskellはシンクロする運命なんだし
0410デフォルトの名無しさん
2011/08/19(金) 23:28:47.26> Integerにしてもコンパイルすると32bitまたは64bit値として扱われるとかそういうのならおk
その Integer 型の値が32bitまたは64bit値に収まる範囲しか使っていないのかどうか、
コンパイル時にどうやって調べるの?
0411デフォルトの名無しさん
2011/08/19(金) 23:30:20.000412デフォルトの名無しさん
2011/08/19(金) 23:34:21.470413デフォルトの名無しさん
2011/08/20(土) 00:50:24.230414デフォルトの名無しさん
2011/08/20(土) 08:46:38.540415デフォルトの名無しさん
2011/08/20(土) 08:54:19.63let unmo = length xs in
(hoge :: Int) + unmo
こんな感じで一般化されたものを使用される部分で明示的に効率重視の型に制限してやるとコンパイル時に最適化可能だから
その辺のアプローチでいくのが現実的かな?common lispのtheみたいなものか
でも行き着く先は依存型を使って、コンパイラが自動n∈[minBound (a:=Int), maxBound(a:=Int)]的な命題の証明を試みて
それが通ればIntに具体化するみたいな機構になると思う
0416デフォルトの名無しさん
2011/08/20(土) 11:11:14.23前者の最適化は既に実装されてる
http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.4.0.0/src/Data-List.html#genericLength
0417デフォルトの名無しさん
2011/08/20(土) 16:32:32.45それを証明出来るケースなんて、そう多くないぞ。
0418デフォルトの名無しさん
2011/08/20(土) 16:50:59.40linux x86-64版だと時間かかる処理でも一回実行すれば、メモリ簡約が効いて速くなるのに、winだと速くならん
同じ処理時間が掛かってる
0419デフォルトの名無しさん
2011/08/20(土) 17:25:34.61Linuxでメモリ簡約が効いていると判断した手段を用いて、Windowsでメモリ簡約が効いているかどうかを確かめてみる
0420デフォルトの名無しさん
2011/08/20(土) 17:27:45.63いや、だから使って見て明らかに効いてないんよ
0421デフォルトの名無しさん
2011/08/20(土) 18:46:44.53メモリ簡約ってのは初めて聞いた言葉だけど、メモ化のこと?
問題をもう少し絞り込みたいんだけど、
とりあえずコア言語レベルではどちらのOSでコンパイルしても同じなの?
それを再現できる可能な限り小さいプログラムのソースは提示できる?
0422デフォルトの名無しさん
2011/08/20(土) 18:51:43.25あと、+RTS -p オプションで出力した *.prof ファイルで、
問題の関数の entries や %time はどちらのOSでも同じなの?
他に *.prof ファイルで、Linux と Windows で違いは出てる?
0423デフォルトの名無しさん
2011/08/20(土) 18:52:33.82メモ化の事です
sum関数に時間が掛かってると感じる程度の、でかいリスト入れればおk
もう一度、同じ引数渡したら、普通はメモリ内を検索して結果を返すだけの時間しか掛からない
0424デフォルトの名無しさん
2011/08/20(土) 19:17:41.45申し訳ないが、具体的にあなたが試したコードを見せてくれないだろうか
原因が他に隠れている事は一切無いとは言い切れないし、
一字一句同一のコードで試したい
あと大事なことを忘れていた
各OSのバージョン、およびGHCのバージョンも教えてほしい
0425デフォルトの名無しさん
2011/08/20(土) 19:22:31.80問題の切り分けにすら不慣れなレベルで
8割くらい他の原因orただの勘違いと予想しておくよ
0426デフォルトの名無しさん
2011/08/20(土) 19:28:32.37最新のは知らんが、少し前までは自動ではメモ化しない方針だったはずだが
0427デフォルトの名無しさん
2011/08/20(土) 19:33:03.81ghci上だし、単純極まりないですよ?
sum [1..10000000]
以上ですw
実行ファイルで試すなら、上記コードを繰り返す実行ファイルを作るとかでしょうか。。。
環境は
win7 ghc 7.2.1
ubuntu 11.04 ghc 6.12.3
cpu Core i5 memory 2GB(デュアルブートなので、ハードスペックは同一です)
0428デフォルトの名無しさん
2011/08/20(土) 19:34:35.34多分コンパイラも64bitかと
0429デフォルトの名無しさん
2011/08/20(土) 19:45:27.10GHC のバージョンを揃えて実験しろ
+RTS -p オプションで出力したプロファイラを比べろ
何度も言わせるな
これからこちらで ubuntu のデュアルブートの環境を作りますから、
それまでに完全なソースコードと、プロファイラの実験をお願いします
0430デフォルトの名無しさん
2011/08/20(土) 20:23:01.740431デフォルトの名無しさん
2011/08/20(土) 21:13:03.950432デフォルトの名無しさん
2011/08/20(土) 21:31:25.40(-pを消すと一応エラーは出ない)
プロファイルとかとった事無いので、分かりません。。。
元が単純なので、一行コードです
main = putStr ((show. (( sum [1..100000]) + ( sum[1..100000]))) ++ "\n")
バージョンは最近までhaskellPratformで同じバージョンにしてたのですが、ghcの最新バージョンをwinの方に入れたので。。。
(linuxは初心者なのでcabからしか入れられないです)
0433デフォルトの名無しさん
2011/08/20(土) 21:32:33.92プロファイルとか分からないんで、体感出来るくらいの差が出るようにしたら、そんな事になりました
0434デフォルトの名無しさん
2011/08/21(日) 09:37:09.98議論したまえ
0435デフォルトの名無しさん
2011/08/21(日) 09:58:37.58>>432のプロファイルの取り方教えて下さい
0436デフォルトの名無しさん
2011/08/21(日) 10:15:45.02なんでググらないの?
バカなの? 死ぬの?
0437デフォルトの名無しさん
2011/08/21(日) 10:23:04.78realWorldHasell読みながらやってみたけど、上手くいかない。。。
0438デフォルトの名無しさん
2011/08/21(日) 10:38:52.07あと、上手くいかないって、どこが上手くいってないのか教えてくれないと、
エスパーじゃないと教えられんと思うよ。エラーメッセージくらい出そうぜ。
0439デフォルトの名無しさん
2011/08/21(日) 10:49:29.33ありがとう
もうちょい頑張ってみます
初めてプロファイルなるもの出そうとしてるから、ファイルが生成されるのか、何か表示されるのかすら分かってない
RTSとは何をするのかから、調べてみます
エラーは、RTSへのオプションが違うと言われてるんで、
プログラム名 +RTS -p -RTS
の-pに何か追加で書くのが有るんじゃ無いかと推測してるんですが。。。
0440デフォルトの名無しさん
2011/08/21(日) 12:12:34.44URL長いですが・・・
https://skydrive.live.com/?sc=documents&cid=c4a8aea1fe363811#cid=C4A8AEA1FE363811&id=C4A8AEA1FE363811%21767&sc=documents
0441デフォルトの名無しさん
2011/08/21(日) 12:59:23.35コンパイルする時に-prof -auto-all -rtsopts付けて
実行時に+RTS -p -RTSだけでいけましたお
0442デフォルトの名無しさん
2011/08/21(日) 13:06:09.77だからな、コードは書き写しじゃなくてコピペしてくれ
show の後にドットがあっては型エラーだろ?
次のコードで試してみてくれないか?
main = putStr (show ({-# SCC "sum1" #-}sum [1..100000] + {-# SCC "sum2" #-}sum [1..100000]) ++ "\n")
コンパイル時はオプション 「-O2 -rtsopts -prof」 を付けてくれ
実行時はオプション 「+RTS -p」 を付けてくれ
そうすると、*.prof ファイルができる
ただのテキストファイルだから適当なエディタで開いてくれ
>>443 へ続く
0443デフォルトの名無しさん
2011/08/21(日) 13:06:33.26下の方に列名が COST CENTRE や MODULE などになっている表がある
COST CENTRE の sum1 や sum2 の行の右の方を見てくれ
列名 entries の所が、この関数(sum1 や sum2 は式)に処理が移った回数だ
その右隣の individual %time が処理全体にかかった時間に対する
この関数(式)に費やしたトータルの時間の割合だ
100 と書かれていれば、ほぼ 100% この処理に費やしているという意味
その右側の individual %alloc が処理全体に費やしたメモリ量に対する
この関数(式)に費やしたトータルのメモリ量の割合だ
意味は予想付くと思うが、上記コードの sum1 と sum2 のコメント欄は、
すぐ右隣の式のコストを計測してくれというコンパイラ指示だ
うちの Windows7、GHC 7.0.3 でコンパイルしたところ、
sum1 は 100% の時間 50% のメモリ量、sum2 は 0% の時間 50% のメモリ量だった
つまり、sum2 の式は端折られている(sum1 の値が使い回されている)わけだ
(ちなみに、CPU : core2 duo P8600 2.40GHz で一瞬だった)
とりあえず結果のみだ、こうなる理由はこれから検証してみる
0444デフォルトの名無しさん
2011/08/21(日) 13:08:05.01コンパイル時に-rtsoptsしか付けてませんでした。。。
再度挑戦して来ます
本当にありがとうございます
0445デフォルトの名無しさん
2011/08/21(日) 13:12:50.71了解です
0446443
2011/08/21(日) 13:24:29.97ソースファイルを保存しないで、間違ってた古いファイルでコンパイルしてた
正しくは、sum1 も sum2 もほぼ 50% の処理時間で、50% のメモリ量だった
つまり、どちらの sum もしっかり同じ総和計算をしていた
GHC はメモ化は自動では行わないと私は思っていたから、
これは予想通りと言えば予想通り
さきほど ubuntu をやっとインストールできたから、
これからそちらでも試してみる
0447デフォルトの名無しさん
2011/08/21(日) 13:55:43.83>>432のコードで良いんですよね?
出かけないと行けないので、帰ってからうpしますが、こちらも似たような結果でした
どうも、GCがlinuxの方が速いのが勘違いの原因みたいな。。。
(>>440でうpしたファイルから推測)
0448443
2011/08/21(日) 14:07:32.68> >>432のコードで良いんですよね?
意味はそれいでいいけど、show の右のドットは消せよ
実は私の >>446 の結果は、[1..100000] じゃなくて [1.10000000] でやってみた
2.5秒ほどかかって、先ほども言ったように処理時間&メモリ量ともに半々だった
私も出かけるので、ubuntu での検証は後でしてみる
0449デフォルトの名無しさん
2011/08/21(日) 15:20:35.37追加でうpしておきました。
https://skydrive.live.com/?cid=C4A8AEA1FE363811&id=C4A8AEA1FE363811%21767&sc=documents#!/?cid=c4a8aea1fe363811&sc=documents&uc=1&id=C4A8AEA1FE363811%21767
sumprog(2)となってる方です。
0450443
2011/08/21(日) 21:40:15.68GHC 7.0.3
で、全く同じプログラムを全く同じように試してみたが、
Windows で試した時と全く同じ結果だったぞ
(こちらでも [1..100000] ではなく [1.10000000] で実験した)
こちらも、sum1 と sum2 でほぼ50%ずつの時間を消費し、
ほぼ50%のメモリ領域を使ってた
Windows で試した時よりも若干遅かったが
GHC のバージョンを揃えて試した結果だ
予想通り、GHC は自動でメモ化は行わないんだよ
そちらの ubuntu で試して明らかに Windows より速いのなら、
メモ化ではない何か別の要因だと思うぞ
0451デフォルトの名無しさん
2011/08/21(日) 22:09:54.44長々とお手数掛けました
ありがとうございますm(_ _)m
検証に使ったコードだとGCで2倍の速度差が出てるみたいでしたので、最初のやたらメモリ喰うコードだと差が大きくなったのかと予測してます
何なんでしょう。。。
コンパイルでもlinuxの方が速かったし。。。
コンパイラの32bitと64bitの差でしょうかね。。。
ともあれ、ありがとうございました!!
0452デフォルトの名無しさん
2011/08/21(日) 23:03:58.49仮想環境上のubuntuでやった方が明らかに速いとかあるからな・・・
0453SCHEME餃子 ◆8X2XSCHEME
2011/08/21(日) 23:39:54.68それで 50% ずつ消費されるってのは納得いかないな。
0454443
2011/08/21(日) 23:53:21.45x がグラフ簡約されて (3 + 1) は1回しか計算されない
でも、f x = g x + g x という関数の f (3 + 1) という適用だと、
たしかに x がグラフ簡約されて (3 + 1) は1回しか計算されないが、
g x つまり g 4 は記述通り2回計算される
g の引数 4 とその結果の値との対応関係がメモ化されないからだ
今回のは後者に相当する
0455デフォルトの名無しさん
2011/08/21(日) 23:53:23.430456デフォルトの名無しさん
2011/08/22(月) 02:58:29.150457デフォルトの名無しさん
2011/08/22(月) 04:13:05.91じゃじゃじゃあどうしたら良いの?
0458デフォルトの名無しさん
2011/08/22(月) 04:16:09.370459デフォルトの名無しさん
2011/08/22(月) 07:40:53.68let x = sum [1.1000000] in x + x
とやればいい
0460デフォルトの名無しさん
2011/08/22(月) 09:39:56.39あり^^
もちろんwhereでやっても良いんだよね?
0462デフォルトの名無しさん
2011/08/22(月) 21:13:26.94うん
>>461
グラフ簡約で共有されるのは同一の変数の値だけという意味なら、そう
0463デフォルトの名無しさん
2011/08/22(月) 23:40:24.88参照透明なら関数と引き数の纏まりも簡約しちゃって害無いでしょ?
0464デフォルトの名無しさん
2011/08/23(火) 07:32:07.06グラフ簡約は自動でやる、自動でやらないのはメモ化だ
そして、メモ化を「指示」する方法は無い、自分でメモ化の仕組みを作れ
自動でメモ化をしない理由は、正確なところは知らん
たぶん、普通の実用的なアプリにおいてメモ化を自動でやる意味がないからだろ
普通のアプリでは、関数に渡す値の依存関係の根っこは、
たいていユーザーから入力されたり、センサーから入力された外部のデータだ
だから、例えば引数も戻り値も32bit整数型だったとして、
どの範囲の値をメモ化すべきかコンパイル時には普通は自動で判断できない
かといって、全範囲を自動でメモ化するわけにはいかない
(必要なメモリ量が大変なことになる)
あるいは、実行時に自動で逐次メモ化するような仕組みが
勝手に埋め込まれるというのも、余計なお世話だ
その仕組みのオーバーヘッドのせいで処理速度が落ちるかもしれんし、
アプリのサイズが余計に大きくなるかもしれん
また、引数の型や数、戻り値の型、また必要な範囲や出現確率、
アプリユーザーの一般的なアプリ使用傾向などから、
最適なメモ化の仕組みは1種類とは限らないかもしれん
つまり、コンパイラが「自動で」判断するわけにはいかないんだよ
0465デフォルトの名無しさん
2011/08/23(火) 08:53:34.290466デフォルトの名無しさん
2011/08/23(火) 09:00:57.64広さ優先探索的にやる研究ってありますか?
そしたらメモ化を自動化できそうな気がします
0467デフォルトの名無しさん
2011/08/23(火) 09:14:47.540468デフォルトの名無しさん
2011/08/23(火) 11:25:33.11ただし >442 みたいにプロファイル取得指示を入れると共通化できなくなる。
>432 の人の言う現象が再現できなかったのはそれが原因かも知れない。
0469デフォルトの名無しさん
2011/08/23(火) 12:56:03.99遅延評価は、ラムダ式を評価する時、
正規順序簡約で弱頭部正規形にまで簡約してから
トップにある変数や関数などを評価し、
また正規順序簡約で弱頭部正規形にまで簡約
というのを繰り返すことで実現している
深さ優先というのとはちょっと感じが違う
言うなら、式をツリー状に表現した時、
まずルートのものを評価して、次にツリーを変換して、
またトップに来たものを評価して・・・という感じ
深いところ深いところへと目指している訳ではない
0470デフォルトの名無しさん
2011/08/23(火) 20:13:26.760471443
2011/08/23(火) 23:04:19.83試してみた
コード(SCC 無しバージョン & SCC 有りバージョン)
main = putStr (show (sum [1..10000000] + sum [1..10000000]) ++ "\n")
main = putStr (show ({-# SCC "sum1" #-}sum [1..10000000] + {-# SCC "sum2" #-}sum [1..10000000]) ++ "\n")
処理時間(単位:秒)
Linux
SCC 無し : 1.64s
SCC 有り : 3.28s
Windows
SCC 無し : 1.10s
SCC 有り : 2.28s
GHC に部分式共通化という仕組みがあるという話は私は知らないが(情報源を求む)、
もしあったとしても OS に依存するような実装方法とは考えにくい
この結果からも、Windows だろうが Linux だろうが同じように働くと予想する
部分式共通化は、Linux の方が目に見えて速いという説明には使えないと思う
0472デフォルトの名無しさん
2011/08/23(火) 23:47:25.17http://www.haskell.org/haskellwiki/GHC:FAQ#Does_GHC_do_common_subexpression_elimination.3F
0473デフォルトの名無しさん
2011/08/23(火) 23:53:15.24Haskellの世界では部分式共通化って言うの?
僕はいわゆる普通のコンパイラの業界ですが
0474デフォルトの名無しさん
2011/08/24(水) 00:01:25.99僕はいわゆる仕分けされかけたコンパイラの業界ですが
0475デフォルトの名無しさん
2011/08/24(水) 00:04:13.82なるほど。
メモ化? によって総和計算は自動で1回になるんですね。
0476472
2011/08/24(水) 00:04:43.71共通部分式除去だと思いますよ。流れを見れば通じるのでそのまま書きましたが。
0477デフォルトの名無しさん
2011/08/24(水) 02:23:36.45IOモナドだったら|みたいな、縦棒1本の計算が繋っていて、
Maybeモナドだったらトみないな、片方はNothingで止まっている分かれ木で、
Eitherモナドだったら∧みたいな、二つのどちらかに繋るもので、
Listモナドだったら可変個の分岐すべての計算が続く。
ただ、このイメージだと、IdentityモナドとIOモナドの区別がつかないのでまだ理解が足りないのかと思ってます。
0478デフォルトの名無しさん
2011/08/24(水) 04:14:14.43Eitherってモナドだっけ?
0479443
2011/08/24(水) 07:15:52.56> メモ化? によって総和計算は自動で1回になるんですね。
誰がそんなこといった?
一般的に GHC は自動でメモ化はしないと言われている
今回の件が自動でメモ化されている結果なのかは未検証で不明
バイナリを直接調べる以外に確かめる方法は
GHC のソースからコンパイルの様子を調べるしかないんだろうか
0480デフォルトの名無しさん
2011/08/24(水) 07:46:56.70深さ優先の意味が分かった
例えば (f 3 (1 + 5)) という式だと
*
├5
└*
├1
└*
├+
└*
├3
└f
こういうツリーを想定したんだね(左右の違いは無視)
正規順序簡約で簡約するから、一番外側
つまりツリーの一番深いノードの f 3 から簡約すると
これなら確かに深さ優先だ
で、広さ(幅)優先の簡約というのは、
このイメージだと正格評価そのものになると思うんだが
0481480
2011/08/24(水) 07:55:59.48やっぱイメージがおかしいな
(f 3 (1 + 5)) だったら、こうか
*
├*
│├5
│└*
│ ├1
│ └+
└*
├f
└3
これだと深さ優先もやっぱ違うな
0482480
2011/08/24(水) 08:06:53.27ごめん、お騒がせしました
寝てくるわ
0483デフォルトの名無しさん
2011/08/24(水) 09:06:56.22メモ化っていうのは実行時のテクニック。
実行時に、「あー この関数でこの引数の計算はもうやったわー はいはい、再計算しなくても、覚えてますよー」ってのがメモ化
共通部分式除去ってのはコンパイル時のテクニック。
コンパイル時に「あれ? この式のこの部分とあの部分って同じじゃね? それなら、一回の計算で済むんで、自動的にletだかwhereだか挟んどきますわー」ってのが共通部分式除去。
全然ちがう。
0484デフォルトの名無しさん
2011/08/24(水) 09:08:41.63バイナリ見なくてもCoreを見ればわかります。
ghc-core -- -ddump-simpl -dsuppress-coercions -dsuppress-module-prefixes -O Foo.hs
とかするとCoreが出力されます。手元のGHC 7.0.3@MacだとSCCありなしどちらでも
main7 :: Integer
-- 略
main7 = sum_sum'1 main8 genericLength1
main6 :: Integer
-- 略
main6 = plusInteger main7 main7
という感じでCSEが働いているようです。最適化をやめて-O0にすると2回計算します。
0485デフォルトの名無しさん
2011/08/24(水) 09:12:23.32ghc-coreは色がつくのでおすすめ。
http://hackage.haskell.org/package/ghc-core
0486デフォルトの名無しさん
2011/08/24(水) 09:44:40.95コンパイル時に
f x = g x + g xを自動で共通部分式除去してくれないの?
0487443
2011/08/24(水) 12:46:53.48Windows7、GHC 7.0.3 でも確認できた
確かに -O0 オプションで2回計算されて、
-O2 オプションで1回になってる
共通部分式除去が働いているということか
0488デフォルトの名無しさん
2011/08/25(木) 02:37:33.39オレはモナドを視覚的に考えるときには、矢印の先っぽが色つきなイメージで考えるときがある
普通の関数合成
|
▽
|
▽
|
▽
List
|
▼(赤)
|
▼(赤)
|
▼(赤)
IO
|
▼(青)
|
▼(青)
|
▼(青)
こういういろいろな色の矢印がHaskell圏(すべての型が対象である圏)のなかを行ったりきたりして、色とりどり、みたいな。
役に立たない話でごめん。
0489デフォルトの名無しさん
2011/08/25(木) 08:11:27.74「モナドは木である」という比喩を扱ったチュートリアルがあったはず
ちょっと今見つからないけど
0490デフォルトの名無しさん
2011/08/25(木) 17:30:30.95これを使ってるプログラムを機械的に書き換えるには
一般にはガードを使うしかないのでしょうか?
f (n+1) = g n
みたいなのは、単純に
f n = g n-1
としてしまうと、f 0 もマッチしてしまうので、
f n | n >= 1 = g n-1
としないと完全には等価じゃないですよね。
0491デフォルトの名無しさん
2011/08/25(木) 18:09:50.240492デフォルトの名無しさん
2011/08/25(木) 18:41:53.68fib 0 = 1
fib 1 = 1
fib n@((>=2) -> True) = fib (n - 1) + fib (n - 2)
ありがとうございます。
これは将来的に標準になるのでしょうか?
0493デフォルトの名無しさん
2011/08/25(木) 23:55:07.14「モナドは接ぎ木である -- Monads are Trees with Grafting」 かな
http://nwn.tumblr.com/post/327220822/monads-are-trees-with-grafting
0494デフォルトの名無しさん
2011/08/26(金) 13:27:41.880495Perl忍者
2011/08/26(金) 23:10:12.59相変わらずゴミなことやってんだな
お前らはほんとにゴミだな
0496デフォルトの名無しさん
2011/08/27(土) 11:55:17.42そっくりそのまま返すよ
0497デフォルトの名無しさん
2011/08/27(土) 12:51:58.69Conceptual Mathematics 第2版
http://www.amazon.co.jp/dp/052171916X/
とてつもなく丁寧に、とてつもなく優しく学べ、圏論と友達になれる
他の圏論関係の本を読んだりWebで学ぶなら、まずこれを読んでおくことを勧める
ただ良書なのに和訳されておらず、けっこう高価な本なのが玉に瑕
0498Perl忍者
2011/08/27(土) 17:43:12.72死ね情弱
0499デフォルトの名無しさん
2011/08/27(土) 23:17:34.32というか、圏論って、イントロダクションに400ページも必要なの?
0500デフォルトの名無しさん
2011/08/27(土) 23:30:37.73そんなのは人によるとしか言いようがない
群論と友達になるのに数百ページ必要な人もいれば、
たった数ページ(定義と数例)だけでいい人もいるのと同じ
400ページもあるのは少しずつ丁寧に端折らず説明されてるから
ページ数でマイナスイメージを持ってしまうのはちょっと勿体ない
これは、焦らずゆっくり読んでいけば
躓くということはほとんど無いというメリットであると考えてほしい
0501デフォルトの名無しさん
2011/08/28(日) 01:37:15.63hello.hs
main = putStrLn "Hello world"
としてコンパイルしてみましたが、
ld: warning: text reloc in _cBR_str to _stg_ap_v_info
のような警告が大量に出てしまいます。./helloしてみると問題なく実行できるようです。
何とも気になるのですが、直し方わかる方、教えていただけないでしょうか?
0502デフォルトの名無しさん
2011/08/28(日) 01:51:46.29関係ありそうなページがすぐに出てきたぞ
http://hackage.haskell.org/trac/ghc/ticket/5128
GHC のバグだそうだ
応急処置の方法も書かれてあるが、
別のワーニングが出るとか何とか・・・
0503デフォルトの名無しさん
2011/08/28(日) 02:11:34.80圏論の有用性についてなにも言えないのに、さも当たり前のように紹介するのは不誠実。
結局一体何の役に立つと言うんだ。
ただ単に延々とやっているという事実があるだけで、有用性についてはなにも示されていない。
0504デフォルトの名無しさん
2011/08/28(日) 02:20:26.98ありがとうございます。修正版がでるのをまつ感じですかねー。。
0505デフォルトの名無しさん
2011/08/28(日) 08:56:35.74それはゲームの世界でもそう
非効率でも誰もやってない行動をやっちゃう
それが難しい行動
いくら非効率でも難しいから お前にはできないのか?wっていう優越感を味わえる
それはHaskellもおなじ
死ね
こいつらただ学習してるだけ Haskellやってますってほざきただけ
死ね
0506デフォルトの名無しさん
2011/08/28(日) 08:57:01.35死んでくれないか
死ね
0507デフォルトの名無しさん
2011/08/28(日) 09:09:10.20あぼーんされてスルーされるのが余程嫌だったんだな
0508デフォルトの名無しさん
2011/08/28(日) 09:43:16.45readsprecとか変態で設計者の神経疑う
0509デフォルトの名無しさん
2011/08/28(日) 10:00:24.96モナド則の意味や理由、概念の元は理解できるか?
はっきり言えば、理解できなくても全く問題ない
ただ、理解できると Haskell がもっと楽しくなる
Haskell を深く理解しようとする過程も楽しくなる
紹介する前にこれを言えば良かったのか?
今後気をつけるよ
0510デフォルトの名無しさん
2011/08/28(日) 10:21:29.96数学の基礎を再構築する必要がでてきて、その基礎に圏論を使う一派が出てきた
彼らは、集合の定義とか、数の定義とか、論理の定義を圏論でやろうとした
集合の定義をするときに、ラッセルのパラドックスを技術的に表面上から隠すテクニックのひとつに、集合の上にクラスを置いて定義するという方法がある
この、クラスを使うような集合の定義も圏論でできた
で、このクラスと集合を同時に扱うような圏論の使い方を応用すれば、プログラミングの型と演算を同時に定義することができることが分かった
この、プログラミングの仕様書式(技術的用語)として圏論を使いまくって言語を構築したのが Haskell
モナドというトリッキーなテクニック/概念が先にあってそれを圏論の言葉で説明したのか、
圏論の定理から推論してモナドというテクニックを発見したのか(つまり、圏論がなければモナドは理解できないのか)、
歴史的にはどっちなのかはよく分からない
ちなみに、アローやモノイドやファンクタといった概念は圏論とは独立に存在する
例えば、「モノイドを(あえて)圏論で説明すると…」といった感じになる
0511デフォルトの名無しさん
2011/08/28(日) 10:24:08.52数学に矛盾が存在する は、正しくは 数学には矛盾か無矛盾かを判断できない定理が存在するという「不都合」が存在する ね
0512デフォルトの名無しさん
2011/08/28(日) 10:30:16.43モナドとラムダ計算に関するものはMoggiによる1980年後半から1990年代にかけての仕事だし
0513デフォルトの名無しさん
2011/08/28(日) 10:42:47.171950年代までのプログラミングじゃモナドに相当するテクニックは使ってなかったの?
0514デフォルトの名無しさん
2011/08/28(日) 10:43:56.94モナドを理解するために圏論の教科書を1ページ目から読んで
最後の方に書いてあるモナドのところまで読まないといけないということだな。
0515デフォルトの名無しさん
2011/08/28(日) 10:54:53.24Haskell も圏論も共に楽しみたい人で、かつ興味ある人だけ読めばいい
そういう軽いノリで惹かれる人に対して紹介したんだから
俺の中では「楽しめる=役に立つ」という等号も成り立ってる
Haskell を実用的に使うのなら、圏論など全く必要ない
たとえば圏論が分からなくても、俺FPRライブラリは十分に作れるし、
GUIライブラリも構築できるし、データベースにアクセスすることもできる
0516デフォルトの名無しさん
2011/08/28(日) 10:55:25.48いんや
リストと再起を徹底して覚えれば十分
あとは必要になってからで良い
使う分にはモナドは多分、覚える優先度としては一番低い
0517デフォルトの名無しさん
2011/08/28(日) 10:57:45.25もわかるモナドのホームページないの?
0518デフォルトの名無しさん
2011/08/28(日) 11:07:50.99ブール代数も圏論のテキストでは300ページ目くらいに出てくる
だけど、圏論なんかなくても理解できる
0519デフォルトの名無しさん
2011/08/28(日) 11:21:04.88Haskell 学びたくないのなら、OCaml スレとかで訊いてこい
0520SCHEME餃子 ◆8X2XSCHEME
2011/08/28(日) 11:42:51.65それは俺も思ったこと有るなぁ。
日本語話者が全員、その文法を理解しているわけもなければ、文学作品を書くために日本語を使っているわけでもないみたいな。
Haskell でもリスト操作程度で出来ることは案外多い。
ちょっとしたオペレーションを自動化するとか、バッチファイルのような用途で Haskell を使うっていう選択肢だってあっていいと思う。
日常会話としての言語。
要するに、言語を使う前に背景をきちんと全部理解するべきだ、という考え方はハードルを上げ過ぎだろうって話。
まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。
0521デフォルトの名無しさん
2011/08/28(日) 12:23:17.56Monadクラスを理解していることは必要だけど
>まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。
俺が個人的に知ってるHaskellプログラマは特に数学好きじゃない奴の方が多い
そもそもHaskellって別に数学的な言語じゃない。言語設計が間接的に圏論の成果を使ってるだけで
(計算機科学が数学の一分野だと言うなら、もちろん話は別)
0522デフォルトの名無しさん
2011/08/28(日) 12:42:30.54関手のfmapの分配とか見た目どおり過ぎるし・・・
自然変換で順番入れ替えると全部展開しなくても式が簡単にできるとかぐらいか
Haskellにおける圏論なんて式変形キチの道具箱のほんの一部ってぐらいの印象だわ
0523デフォルトの名無しさん
2011/08/28(日) 13:21:03.37数学うんたらと言うのは初学者への威嚇でしかない。
0524デフォルトの名無しさん
2011/08/28(日) 13:34:24.510525デフォルトの名無しさん
2011/08/28(日) 13:36:07.320526デフォルトの名無しさん
2011/08/28(日) 13:58:34.310527デフォルトの名無しさん
2011/08/28(日) 14:01:22.890528デフォルトの名無しさん
2011/08/28(日) 14:27:41.220529デフォルトの名無しさん
2011/08/28(日) 14:34:52.820530デフォルトの名無しさん
2011/08/28(日) 15:12:48.61ぶっちゃけると、整数を定義して 1+1=2 を証明することを考える人以外は圏論を知らなくても問題ない
0531デフォルトの名無しさん
2011/08/28(日) 16:54:20.27かっこつけて 無駄じゃねーとかいってみろよ雑魚
>>
まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。
かっこつけて奇人気取ってるゴミ
奇特=かっこいい 人と違う 違いを出せると思っててきもちわりーんだよ
ほかの言語やれよまじ迷惑きえてくれねーかな
死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0532デフォルトの名無しさん
2011/08/28(日) 16:55:23.44なくても平気なんだよ
お前らジャップは欧米より脳みそ知能指数低いだろ!?!!!!!!!!!!!!!!!!!!!!!!!!!!
きもちわりいー黄色人種の花で株細工ジャップ眼鏡が国論とかモナドとかわめいてんじゃねー!!!!
死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0533デフォルトの名無しさん
2011/08/28(日) 16:56:14.23Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0534SCHEME餃子 ◆8X2XSCHEME
2011/08/28(日) 18:33:19.10> かっこつけて奇人気取ってるゴミ
一応言っとくと俺は Haskell 使ってないけどな。
Scheme があれば幸せ。
0535デフォルトの名無しさん
2011/08/28(日) 18:48:39.97今まで頓珍漢な発言してたのはそのせいか
こんな所に来るなよ
0536デフォルトの名無しさん
2011/08/28(日) 19:02:56.13こういうコード書きたくなる時あるよな
((lambda (x) (x x)) (lambda (x) (x x)))
0537デフォルトの名無しさん
2011/08/28(日) 19:09:52.89schemeとかっこつけるをかけてるのか
ちょっと面白い
0538デフォルトの名無しさん
2011/08/28(日) 21:06:52.95なんで餃子?
0539デフォルトの名無しさん
2011/08/28(日) 22:13:18.83高2病かよ
0540Perl忍者 ◆M5ZWRnXOj6
2011/08/29(月) 00:02:04.80もっとこいつら攻撃してくれ。
忙しいからこんなスレに来てる暇はないけどな。
0541デフォルトの名無しさん
2011/08/29(月) 00:27:07.640542497
2011/08/29(月) 00:27:52.78GHC は自動でメモ化を行う事は無いという話が以前ありました
ではメモ化はどうやってやるのという話に発展するのかと思いきや、
話の本筋ではなかったようで、全く触れられなかったんですね
特定の関数をメモ化する方法は Haskell 関連の本にもよく載っています
(たとえば The Craft of Functional Programming や The Haskell School of Expression など)
なので、もう少し一般的に、かつ Haskell らしく
遅延性を活かして実装する方法を述べた記事を紹介します
Conal さんのブログより
Elegant memoization with functional memo tries
http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries
この記事の続編にあたるものも書かれているので、
ブログ内をぶらぶらと散策してみるのもいいと思います
(圏論みたいな周辺知識を得る本の紹介よりも、
こういった直接的な技術の紹介の方がいいですか)
0543デフォルトの名無しさん
2011/08/29(月) 05:29:29.84GHCi, version 7.0.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... <command line>: can't load .so/.DLL for: iconv (dlopen(libiconv.dylib, 9): image not found)
というエラーがでます。libiconvは入れてますし、/usr/lib/libiconv.dylib, /usr/local/lib/libiconv.dylibも存在します。
libiconv.dylibやそのシンボリックリンクがある場所でghciを呼ぶと問題なく起動できるのですが、
直し方がわかる方いますでしょうか?
0544uy
2011/08/29(月) 06:04:15.63全同意
こいつら時代遅れってことがわかってないんだよなぁ
もうとっくに研究終わっていて、使えないって証明されていることを
誰も指摘してくれないから、Haskell界隈は井の中の蛙ホイホイになって
宗教みたいになってる
0545デフォルトの名無しさん
2011/08/29(月) 07:23:14.747.2.1でも試してみてください
7.0.3ではghciにおいてshared libraryの解決関連のバグがあった記憶があります
0546デフォルトの名無しさん
2011/08/29(月) 07:34:06.44ありがとうございます。
GHCi, version 7.2.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... <command line>: can't load .so/.DLL for: libiconv.dylib (dlopen(libiconv.dylib, 9): image not found)
7.0.3と同じ感じでlibiconv.dylibがない場所ではエラーが出るようです。
0547デフォルトの名無しさん
2011/08/29(月) 07:46:49.680548デフォルトの名無しさん
2011/08/29(月) 08:11:28.36ありがとうございます
だめなようでた。。
0549Perl忍者 ◆M5ZWRnXOj6
2011/08/29(月) 11:03:31.46こいつら時代遅れってことがわかってないんだよなぁ
もうとっくに研究終わっていて、使えないって証明されていることを
誰も指摘してくれないから、Haskell界隈は井の中の蛙ホイホイになって
宗教みたいになってる
>>531-533 のいうとおり
こんな単純なことがわかってない
こいつら情弱
死んだほうがいい
0550デフォルトの名無しさん
2011/08/29(月) 12:19:13.10あとPerl忍者にレス返すやつは本文にPerl忍者って入れてくれ
0551デフォルトの名無しさん
2011/08/29(月) 12:30:07.710552デフォルトの名無しさん
2011/08/29(月) 12:39:26.38これでも駄目かー、パッケージ中のDYLIBの参照先がおかしいのかな
ちょっと自力でiconvパッケージをcabal installしなおして試してくれ
0553SCHEME餃子 ◆8X2XSCHEME
2011/08/29(月) 12:39:39.91それもそうか。
Scheme 使いでも表示的意味論だとか操作的意味論だとかを理解してるやつなんていねーもんな。
0554デフォルトの名無しさん
2011/08/29(月) 13:44:09.450556Perl忍者
2011/08/29(月) 18:30:27.02wwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwww
0557Perl忍者
2011/08/29(月) 18:30:47.02toby_netか?
0558デフォルトの名無しさん
2011/08/29(月) 23:33:15.80こっちにおいでよ。http://hibari.2ch.net/test/read.cgi/tech/1312201995/
0559デフォルトの名無しさん
2011/08/30(火) 10:09:21.15増殖してんじゃねーよ
次は何よ?C#孔雀か?
0560デフォルトの名無しさん
2011/08/30(火) 11:31:54.560561497
2011/08/30(火) 12:40:50.910562SCHEME餃子 ◆8X2XSCHEME
2011/08/30(火) 13:00:49.65Scheme餃子じゃねーよ。 SCHEME餃子だよ。
二度と間違えるな。
Haskell だって case sensitive だろ。 さてはお前、 Haskeller じゃないな?
0563デフォルトの名無しさん
2011/08/30(火) 13:12:15.890564デフォルトの名無しさん
2011/08/30(火) 13:19:58.81正直、そのライブラリをどういう風につかってメモ化を行うのかよく分かりません。
でも、ソース中のCプリプロセッサの使い方は面白かった。
0565デフォルトの名無しさん
2011/08/30(火) 19:19:37.23まずは簡単にインストールできて、
問題なく起動できなければ話にならないのだが・・・
どうしたものか
0566デフォルトの名無しさん
2011/08/30(火) 21:58:21.83(自分は初歩的な知識しかないけど)有望な新人に研修として押し付けるんだけどな
http://www.haskell.org/haskellwiki/Applications_and_libraries#Haskell_applications_and_libraries
0567デフォルトの名無しさん
2011/08/30(火) 22:03:17.280568デフォルトの名無しさん
2011/08/30(火) 22:13:43.07JAVAで作りなさい、おじさんはCOBOLしか知らないけど。
0569デフォルトの名無しさん
2011/08/30(火) 22:25:53.470570デフォルトの名無しさん
2011/08/30(火) 22:26:02.77phpみたいに、htmlに埋め込みでhaskell書けたら本気出す
0571デフォルトの名無しさん
2011/08/30(火) 22:29:26.49ソースの一番最後
0572497, 571
2011/08/31(水) 00:15:24.43反応がないですね・・・
ソースの一番最後に書かれてるように、
メモ化させたい関数を Data.MemoTrie.memo 関数に渡し、
返ってきた関数を元の関数と全く同じように使えばいいです
たとえば、>>432 や >>442 のプログラムだと、
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' = memo sumX
として、2度記述してある sum [1..100000] の代わりに
2度 sumX 100000 と記述すればOK
sumX の引数の値を大きくすれば効果がよくわかります
本当に実行時間が半分になります
0573デフォルトの名無しさん
2011/08/31(水) 00:17:52.03え、できるだろ
出来ないの?
できるだろ?
0574デフォルトの名無しさん
2011/08/31(水) 00:36:32.36Htmlテンプレート
http://www.yesodweb.com/book/templates/conceptId_________
0575デフォルトの名無しさん
2011/08/31(水) 01:22:47.59いろいろサンクス
{- Test1.hs -}
module Main where
import Data.MemoTrie
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' = memo sumX
main = print $ {-# SCC "sum1" #-}sumX x + {-# SCC "sum2" #-}sumX x
where x = 1000 * 1000
{- Test2.hs -}
module Main where
import Data.MemoTrie
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' x = memo sumX $ x
main = print $ {-# SCC "sum1" #-}sumX' x + {-# SCC "sum2" #-}sumX' x
where x = 1000 * 1000
{- Test3,hs -}
module Main where
import Data.MemoTrie
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' = memo sumX
main = print $ {-# SCC "sum1" #-}sumX' x + {-# SCC "sum2" #-}sumX' x
where x = 1000 * 1000
(つづく)
0576575
2011/08/31(水) 02:20:13.57たぶん、メモ化が働いているんだろうと思います。
しかし、ラムダ式としては同値なはずのTest2がTest1よりも遅いことと、
なぜかTest3.hsのコストセンタ"sum1""sum2"がプロファイルに反映されていないことが、
まだよく理解できませんが・・・
0577Perlにんじん2
2011/08/31(水) 12:41:27.09お前がやっても何も変わらない
何も
何 も
終わり
0578デフォルトの名無しさん
2011/08/31(水) 13:40:39.32たくさん使って恥かいてネイティブに教えてもらって覚えるもんさ
0579デフォルトの名無しさん
2011/08/31(水) 22:55:53.13もはやそんな大それたもんでもないな
Perlのようがよっぽど難しい
0580497
2011/09/01(木) 00:33:52.17ラムダ式としては同値なはずのTest2がTest1よりも遅いのは、
グラフ簡約がうまく働いておらず、同じ内容の環境が2度作られているためです
sumX' x = memo sumX $ x の右辺の x は trie のおかげでメモ化されますが、
左辺の x が「自動ではメモ化されません」
(ちなみに、 $ は不要です)
多少長くなりますが、もう少し詳しく説明した方がいいでしょうか
Test3.hsのコストセンタ"sum1""sum2"がプロファイルに反映されていないのは、
f :: Bool -> Integer
f b = if b then sum [1..8000000] else undefined
main = putStrLn $ show ({-# SCC "sum1" #-}f True)
これでコストセンタ sum1 の処理時間・メモリ使用量がゼロを示すのと同じ理由です
f 関数内の sum [1..8000000] の直前に SCC を置いてみてください
ちゃんと計測できます
私は SCC の仕組み自体をまだよく理解していないので、
なぜ f True の直前ではダメなのか、その理由自体は分かりません
(if 以外にも、関数のパターンマッチや case で分岐しても同様ですね)
0582デフォルトの名無しさん
2011/09/02(金) 19:57:29.63そんな低レベルな事訊くなと言うなら
Haskell初心者質問スレ作って下さい
0583デフォルトの名無しさん
2011/09/02(金) 22:21:38.450584デフォルトの名無しさん
2011/09/02(金) 22:24:41.49スレ立てるまでもない質問はここで 113匹目
http://hibari.2ch.net/test/read.cgi/tech/1312926165/
エスパーが質問に答えるスレ
http://hibari.2ch.net/test/read.cgi/tech/1187922645/
0585デフォルトの名無しさん
2011/09/02(金) 22:50:20.700586デフォルトの名無しさん
2011/09/02(金) 23:06:59.02書き方さえ分かればいいんですね
import Data.List
data Nasubi = Nasu
instance Read Nasubi where
readsPrec _ s = if isPrefixOf "nasubi" s
then [(Nasu, drop (length "nasubi") s)]
else []
こう書けば read "nasubi" :: Nasubi で Nasubi 型の値が得られます
最低限 readsPrec 関数を定義すればいいです
readsPrec 関数の第1引数は無視して問題ないです
read 関数が適用した文字列が readsPrec 関数の第2引数として得られるので、
この文字列の先頭にインスタンス型の値を表す文字列が含まれているか構文解析します
含まれていれば、要素として (構築したい値, 残りの文字列) というペアを一つ持つリストを返します
含まれていなければ空リストを返します
この簡単な例では、構文解析は単に文字列の同値性を調べてるだけですが、
もっと複雑な例えばツリーを表現した型の場合ですと、
再帰的に構文解析する必要がありますね
正規表現やParsecを使って構文解析した方が楽かもしれません
まぁ、Show を自動導出しているのであれば、
>>585 の言うように Read も自動導出した方が楽です
ちなみに、私は Read 型の使い所がさっぱり分かりません
何か役に立つんでしょうか
0587デフォルトの名無しさん
2011/09/03(土) 06:59:55.500588デフォルトの名無しさん
2011/09/03(土) 10:44:57.210589デフォルトの名無しさん
2011/09/03(土) 11:36:49.92Readを自動導入したのなら、read関数で読み取れる文字列が
Showを自動導入した場合にshow関数で得られる文字列に制限されます
後者の場合、読み取り可能な文字列の制限が少しきついです
融通が効かないと言いますか
Persecは比較的簡単で直感的なので、私はPersecでやってしまいます
0590デフォルトの名無しさん
2011/09/03(土) 11:48:55.280591デフォルトの名無しさん
2011/09/03(土) 12:02:26.06bidirectionalizationっていう分野になるのか?
0592デフォルトの名無しさん
2011/09/03(土) 13:56:31.21私はどちらかと言うと、A -> B かつ A <- B みたいなのを
bidirectional っていうのだと思ってました
たとえば、ちょっとした DSL を使って関数(数式)を定義しておけば、
A から B への関数と同時に、逆関数も自動的に作られるみたいな
(当然、必要になるまで遅延される)
0594デフォルトの名無しさん
2011/09/03(土) 16:35:39.50ttp://haskell.g.hatena.ne.jp/mr_konn/20110226/himaprime6
0595デフォルトの名無しさん
2011/09/07(水) 06:59:38.17第49回 GHCの測定機能やプロファイラで並列プログラムの振る舞いを調べる
http://itpro.nikkeibp.co.jp/article/COLUMN/20110906/368177/
0596デフォルトの名無しさん
2011/09/07(水) 12:24:22.400597デフォルトの名無しさん
2011/09/07(水) 12:27:39.75数回前から続いてる一連の流れだし
0598デフォルトの名無しさん
2011/09/08(木) 08:00:50.41その記事に関しては関係なさそうだ
0599デフォルトの名無しさん
2011/09/10(土) 18:26:54.82洋書でも和書でも全く構わないんですが、
Haskell でランクとか kind とか forall とかの意味や役割を
丁寧に解説している本って何か無いですか?
あるいは、forall なら forall(とその関連)だけでいいですから、
まとまって丁寧に説明されているサイトなどあれば嬉しいです
0600デフォルトの名無しさん
2011/09/10(土) 20:11:12.78本なら
http://www.cis.upenn.edu/~bcpierce/tapl/
webなら簡単ですが
http://en.wikibooks.org/wiki/Haskell/Polymorphism
http://en.wikibooks.org/wiki/Haskell/Existentially_quantified_types
あたりですかね。
0601デフォルトの名無しさん
2011/09/10(土) 20:35:25.76ありがとうございます
本の方は、Rank や kind なんかも関係してくるのでしょうか
0602デフォルトの名無しさん
2011/09/10(土) 21:36:06.51高階の型を扱うためのkindと高階関数の多相性の為のuniversal quantified types
もう一つのforallの使い方existentially quantified typesの事もその後ぐらいに載ってる
kindに関する議論があるのは結構最後の方だけども
TAPLでは特に前提としているわけでもないけどでもできれば術語論理や集合論の初歩もあった方がいいかも、
0603デフォルトの名無しさん
2011/09/10(土) 21:39:46.16ドンピシャっぽいですね
術語論理や集合論は最近復習したばかりなので、ちょうどいいかもしれません
その本を購読してみます
ありがとうございました
0604デフォルトの名無しさん
2011/09/11(日) 05:57:21.100605デフォルトの名無しさん
2011/09/11(日) 23:10:01.13教えてもらって良いでしょうか
以下、引用
5.7 練習問題
2.関数lengthと同じように、ある要素のみからなるリストを生成するライブラリ関数replicate :: Int -> a -> [a]をリスト内包表記を用いて定義せよ。以下に使用例を示す。
> replicate 3 True
[True, True, True]
0606デフォルトの名無しさん
2011/09/11(日) 23:31:21.37replicate n x = [y | n > 0, y <- x : replicate (n-1) x]
0607デフォルトの名無しさん
2011/09/11(日) 23:39:53.34それは私も書いて、エラーで弾かれたパターンですね^^;
0608デフォルトの名無しさん
2011/09/11(日) 23:50:17.85replicate n x = [x| _ <- [1..n]]
0609デフォルトの名無しさん
2011/09/11(日) 23:57:36.12俺はこう書いたが、そっちの方が正解っぽいな
replicate n a = [x | x <- take n (repeat a)]
0610デフォルトの名無しさん
2011/09/12(月) 00:17:40.77ありがとうございますm(_ _)m
目から鱗です
勉強になりました
0611デフォルトの名無しさん
2011/09/12(月) 04:45:59.74エラーにはならないよ。
ただ、出題者の意図と違うだろうという気がした。
0612デフォルトの名無しさん
2011/09/12(月) 13:17:56.429章練習問題4と5だけは放置中。
Haskellで使えるGUIって何がポピュラーなの?
0613デフォルトの名無しさん
2011/09/12(月) 18:14:27.080614デフォルトの名無しさん
2011/09/12(月) 18:17:40.000615デフォルトの名無しさん
2011/09/12(月) 18:33:26.88でもどっちも7.2.1にはまだ対応してないんだっけ・・・
0616デフォルトの名無しさん
2011/09/12(月) 21:59:05.630617デフォルトの名無しさん
2011/09/12(月) 22:01:32.460618デフォルトの名無しさん
2011/09/12(月) 22:30:57.680619デフォルトの名無しさん
2011/09/13(火) 20:44:44.190620デフォルトの名無しさん
2011/09/13(火) 21:02:30.89すまん、自己解決してしまった
言語仕様にちゃんと書かれてるのね
A string may include a “gap”―two backslants enclosing white
characters― which is ignored. This allows one to write long
strings on more than one line by writing a backslant at the
end of one line and at the start of the next.
0621デフォルトの名無しさん
2011/09/13(火) 21:03:17.130622デフォルトの名無しさん
2011/09/13(火) 23:53:33.43ありがと、申し訳ない、そっちの方も今度調べてみる
それはそうと、HXT を試しに使ってみたんだがよく分からない
import Text.XML.HXT.Core
getText :: ArrowXml a => a XmlTree XmlTree
getText = deep isText
procXml = processChildren (getText `when` isElem)
test = do
[r] <- runX (readString [] "適当なXML" >>> procXml >>> writeDocumentToString [])
putStrLn r
これで元のXML内のテキストノードだけを集めたXMLが得られると思ったんだが、
結果は "/" ノード以下に何もノードを持たない空のXMLが出力された
例えば isText を isCmt に変えると、ちゃんとコメントノードをだけ集めてくれる
(その場合、readString に withPreserveComment yes のオプションが必要だが)
isText ってテキストノードかどうかを判定するものなんじゃないの?
0623デフォルトの名無しさん
2011/09/14(水) 10:22:11.32procXml = multi isTextでいいんじゃねぇの?
0624デフォルトの名無しさん
2011/09/14(水) 12:47:47.17それでやっても相変わらず得られるのは空の XML だった
でも、いろいろ実験してるうちに偶然変なことを発見した
>>622 に提示した例には、問題には関係ないと思い込み省いてたんだが、
本当は writeDocumentToString のオプションで withIndent yes を指定してた
(http://www.haskell.org/haskellwiki/HXT ここの例を真似た)
で、このオプションを省いてみると、俺の方法でも >>622 の方法でも、
どちらでもちゃんとテキストノードだけを集められた
なんで? (バグか?)
0625デフォルトの名無しさん
2011/09/14(水) 12:49:31.88失敬
> 俺の方法でも >>622 の方法でも
俺の方法でも >>623 の方法でも(multi isText にしても)
0626デフォルトの名無しさん
2011/09/14(水) 16:13:29.43とりあえず最新版にしてもう一度試してみては?
0627デフォルトの名無しさん
2011/09/14(水) 18:43:13.19最新版なんだが(hxt 9.1.4)
0628デフォルトの名無しさん
2011/09/14(水) 18:45:26.660629デフォルトの名無しさん
2011/09/14(水) 21:18:52.20hxt の Arrow の <+> って意味的には OR だよね
deep (isText <+> (getName >>> mkText))
こうやると、"/" タグの直下にひとつ、
元xmlのトップのタグの名前を内容に持つテキストノードだけがあるxmlが得られた
予想では、<+> の左辺に isText があるんだから、元xmlの全テキストノードに、
getName >>> mkText で得られる何かが追加されたxmlが得られると思ってた
getName >>> mkText では何も得られないかも知れんが、
それでも isText で得られるテキストノードだけは得られると思ってた
が、予想に反して得られたのはトップのタグ名が書かれたテキストノードひとつだけ
試しに isText <+> hasName "存在しないタグ名" とやると、
ちゃんと isText の分の全テキストノードが得られる
つまり、hasName "存在しないタグ名" の結果が空でも isText の方は生きる
<+> の右辺って、左辺に(または逆に)影響を与えるもんなんだろうか
hxt ライブラリのソースの ListArrow.h や IOStateListArrow.h などを見てみたが、
<+> 演算は基本的に2つのリストを ++ 演算で結合してるだけに見えるんだが・・・
何か使い方がおかしい?
0630Perl忍者
2011/09/15(木) 12:15:26.73バカ隠し気持ち悪い
0631デフォルトの名無しさん
2011/09/15(木) 12:56:29.22バカ丸出しあたま悪い
0632デフォルトの名無しさん
2011/09/15(木) 13:06:46.910633Perl忍者
2011/09/15(木) 13:09:11.60treeboa=俺だと勘違いしてるゴミ
早く死ね
デートもしたことないかわいそうなやつら
かわいそうだな 彼女暦=年齢
気持ち悪いHaskellやってるんだな
一生だ
気持ち悪い
生産性のないゴミ つまらないゴミ言語
お前らがやっても無駄無駄
0634Perl忍者
2011/09/15(木) 13:10:17.82哀れのゴミ死ね
0635Perl忍者
2011/09/15(木) 13:16:12.94車輪の再発明
てめーはクズだ
わかったな死ね
俺以下ゴミ つまらない発想してんじゃねーぞ
俺の発想はおもしろい
ネタを創造する能力がある
0636Perl忍者
2011/09/15(木) 13:41:30.48教えてください
追加できますかこれ?servermanです
お願いします
0637デフォルトの名無しさん
2011/09/15(木) 17:31:56.68wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0638デフォルトの名無しさん
2011/09/15(木) 17:34:55.920639デフォルトの名無しさん
2011/09/15(木) 17:37:25.67実際、他の言語に比べておもちゃみたいに簡単なんだが。。。
もっと広まっても良さそうなモンなのにな
0640デフォルトの名無しさん
2011/09/15(木) 17:44:57.130641デフォルトの名無しさん
2011/09/15(木) 23:32:44.40http://ja.wikipedia.org/wiki/エラトステネスの篩
うまく行かないです>.<
何がいけないのでしょうか?
step2 (pL, sL) = step3 (pL ++ [head sL], tail sL)
step3 (pL, sL) = step4 (pL, filter (\x -> x `mod` (last pL) /= 0) sL)
step4 (pL, sL) = if (tail sL) < (tail pL)^2
then (pL ++ sL, [])
else step2 (pL, sL)
main = print $ step2 ([], [2..20])
0642デフォルトの名無しさん
2011/09/16(金) 00:03:20.62(tail pL)^2 って何ぞ?
0643デフォルトの名無しさん
2011/09/16(金) 00:13:22.530644デフォルトの名無しさん
2011/09/16(金) 00:28:29.40宗教や文化遺産でもなければ、誰かの芸術作品でもない
他の言語と何か競争しているわけでもない
使う人がいれば生き残り、誰にも使われなければ消えていく
それだけだ
生き残らせるという考え方自体が間違ってる
0645デフォルトの名無しさん
2011/09/16(金) 01:23:34.47概ね同意だけど、プログラミング言語はある種の芸術作品だと思うんだがなぁ。。。
言語だけじゃ無しに、プログラムって、道具であると同時に作品だと思うんだが
0646デフォルトの名無しさん
2011/09/16(金) 05:49:53.51で、あんたは売らんがための芸術作品を買いたいのか?
0647デフォルトの名無しさん
2011/09/16(金) 06:32:46.43欲しいと思って、金を持ってれば買うだろ。普通
0648デフォルトの名無しさん
2011/09/16(金) 07:52:07.17手続き的に描くならモナド使うのがわかりやすいyp
関数型っぽいやりかたなら http://en.literateprograms.org/Sieve_of_Eratosthenes_%28Haskell%29
あたりみるのがいいよ
import Data.List
import Control.Monad.RWS
import Control.Monad.Identity
type SearchList = [Int]
type PrimeList = [Int]
type Max = Int
type Sieve = RWST Max PrimeList SearchList Identity
pop = do { x <- gets head ; modify tail ; return x }
square x = x * x
last' [] = Nothing
last' a@(x:xs) = Just $ last a
step :: Sieve ()
step = do {
x <- pop ; tell $ [x] -- step 2
; modify $ filter $ (/= 0) . (`mod`x) -- step 3
; y <- gets $ maybe 0 id . last' ; if square y < x then return () else step -- step 4
}
trd3 = (\ (_,_,x) -> x)
sieve m = trd3 $ runIdentity $ runRWST step m sl
where sl = [2..m] -- step 1
ある言語を気に入って、使い続けたいと思うなら、
コミュニティが生き残らないと困るし、可能なら大規模になって欲しいだろ
Haskellがここ数年で急速に実用的になったのは、
コミュニティが十分大きくなってライブラリが整備された/GHCへのフィードバックが増えたのが大きいと思う
0650デフォルトの名無しさん
2011/09/16(金) 08:06:03.13プログラミングHaskellのp.160にあるprimes見たら感動するよ
0651デフォルトの名無しさん
2011/09/16(金) 08:29:20.60色々あるんだなぁあという意味でw
http://www.haskell.org/haskellwiki/Prime_numbers#Turner.27s_sieve_-_Trial_division
0652デフォルトの名無しさん
2011/09/16(金) 16:25:35.76hasName "from" <+> hasName "to"
とやると<from>と<to>の両方が集められたから大体orの意味になってるんじゃね?
とりあえずトップはテキストノードじゃないよね?
で、次にgetNameに行くわけだけど、getNameはタグ名のあるノードつまり全てのノードにマッチするわけだからトップにマッチするわな
んでgetNameでタグ名取得してmkTextで取得したタグ名を内容とするテキストノード生成・・・と
deepだからその時点で探索終了するから>>629の振る舞いで有ってるんじゃないの?
0653デフォルトの名無しさん
2011/09/16(金) 23:28:40.55これを UTF8 に変換したいです。
s2 = f s1
この関数 f を提供してくれるライブラリはないでしょうか。
ファイルや標準入力などからの読み込みではなく、
String や ByteString などの中にあるデータを直接変換するものです。
[環境]
・Windows7
・GHC 7.0.3
0654デフォルトの名無しさん
2011/09/17(土) 01:51:13.36スタディがてらマルバツゲームを作ってみたけど正直便利と思えない。
0655デフォルトの名無しさん
2011/09/17(土) 07:36:33.160656デフォルトの名無しさん
2011/09/17(土) 07:37:56.17iconvパッケージを使って
import qualified Codec.Text.IConv as IConv
toString . IConv.convert "Shift_JIS" "UTF-8" . fromString
でいけると思う
IConv.convertはByteStrinを対象としてるから、String用にする為にはStringからByteStringの変換、
ByteStringからStringへの変換をはさんでやるわけだ
0657デフォルトの名無しさん
2011/09/17(土) 09:04:51.64iconvはwinGWかcygwinでしか使えないんですよね。
0658デフォルトの名無しさん
2011/09/17(土) 09:19:07.060659デフォルトの名無しさん
2011/09/17(土) 12:21:07.94帰ったらレポ頼むわw
0660デフォルトの名無しさん
2011/09/17(土) 15:33:06.75http://site.icu-project.org/download/48
ここから icu4c-4_8_1-src.zip (18.9 MB ZIP file for Windows platforms)
を落として次のように nconv をインストールしようとしました。
cabal install --extra-include-dirs="icuソースのフォルダ\source\common" -v3
すると、unicode/platform.h が無いと言われます。
調べてみると、たしかに platform.h.in はありますが platform.h はありませんでした。
platform.h.in を見てみますと、configure 時に autoconf が platform.h を作る
と書かれています。
cabal の install フラグでインストールする時、configure はすると思うのですが、
この時点で platform.h が作られると思ったのですが、違うのですね。
cabal install に渡すフラグが何か足りないのでしょうか。
それとも、cabal install の前に autoconf を実行しておく必要があるのでしょうか。
0661デフォルトの名無しさん
2011/09/17(土) 15:54:54.29icu4c-4_8_1-Win32-msvc10.zip (8.8 MB Windows (x86 32-bit) Visual Studio 10)
こちらの方をダウンロードし、インクルードパスを通して cabal install してみましたが、
今度は ptypes.h が無いと言われました。
icu4c-4_8_1-src.zip の方に icu4c-4_8_1-Win32-msvc10.zip の
platform.h だけをコピーして cabal install してみましたが、
すると今度は expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
などの構文エラーらしきエラーメッセージが大量に発生しました。
windows で cygwin も VisualStudio も無い状態で uconv を使うのは難しいですね。
とりあえずまだ諦めずに、もう少し色々探ってみます。
0662デフォルトの名無しさん
2011/09/17(土) 22:35:11.600663デフォルトの名無しさん
2011/09/18(日) 07:51:50.970664デフォルトの名無しさん
2011/09/18(日) 13:55:41.610665デフォルトの名無しさん
2011/09/18(日) 15:55:19.660666デフォルトの名無しさん
2011/09/18(日) 16:00:27.79数学でどんな分野ですか?
0667デフォルトの名無しさん
2011/09/18(日) 17:07:05.59釣り好きでもフライは興味ないやつも居る
車好きでもカートには興味ない奴も居る
0668デフォルトの名無しさん
2011/09/18(日) 17:52:19.390669デフォルトの名無しさん
2011/09/18(日) 18:00:33.100670デフォルトの名無しさん
2011/09/18(日) 18:40:36.210671デフォルトの名無しさん
2011/09/18(日) 18:42:23.16数学が好きと、数学が得意は必ずしも一致しない
ええ、下手の横好きです
0672デフォルトの名無しさん
2011/09/18(日) 18:43:52.10というよりは、解析学は好きだけど集合論は好きじゃない、の方が近い
集合論は色んな数学の基礎のひとつになってるが、それにはあまり興味は無く、
その上に作られた解析学の方に興味がある、みたいな
ある言語(算法、計算)がチューリング完全であるかどうかは、
計算機科学の基礎の一つではあるが、ハスケラーの間でも興味がない人がほとんどだろ
0673デフォルトの名無しさん
2011/09/18(日) 18:50:00.650674デフォルトの名無しさん
2011/09/18(日) 18:53:23.63おんなの子はハスケルン
0675デフォルトの名無しさん
2011/09/18(日) 19:11:26.86むしろ逆で、いわゆる数学(解析学とか代数学とか)よりも、
計算機科学やその周辺(論理とか集合論)に興味のあるユーザが多い印象
0678デフォルトの名無しさん
2011/09/18(日) 19:56:48.89コードもかけなきゃ証明もできないのか
0679デフォルトの名無しさん
2011/09/18(日) 20:03:43.78たとえ話だ(数学は好きなんだが、分野に依ると >>669 に言いたかった)
すまん、喩えがまずかったな
>>678
できません
諦めてください
と、暗に言ってきたつもりだが、お前の脳では解釈できなかったか
0680デフォルトの名無しさん
2011/09/18(日) 20:42:20.51他の人は知らんけど、自分はlength関数をCでもjavaでもrubyでも自作出来なかったのに、haskellだとあっさり少ない知識で書けちゃったのに惚れたんで、分かりませんね
(Cとrubyで書いて貰ったこと有るけど、初心者がいきなり書けるようなコードじゃ無かった)
今も、「これ、rubyとかでどう書くんだろ?」とか思いながら書く事が多いです
0681デフォルトの名無しさん
2011/09/18(日) 21:15:03.170682デフォルトの名無しさん
2011/09/18(日) 21:32:00.55うい
だからこそ、haskellは簡単だと実感してるですよ
0683デフォルトの名無しさん
2011/09/18(日) 21:42:54.73コンパクト集合の積集合がコンパクトになることの証明が
さくっと出てこない程度にはニワカ
いや
好きなんだけどね
0684デフォルトの名無しさん
2011/09/18(日) 23:06:21.08何年前の感覚だ?
手続型に関する多くの難解な研究を把握してからじゃないと
VBを使っちゃだめなのかい
0685デフォルトの名無しさん
2011/09/19(月) 04:51:02.207月予定だった蓮麩羅が未だに揚がってこないね
0686デフォルトの名無しさん
2011/09/19(月) 06:22:49.85あれcoqとか使ってやりたい
0687デフォルトの名無しさん
2011/09/19(月) 06:31:56.96さらに全ての型がbottomっていう変な値を持ってるのが証明系でどうあつかうのかわかんね
あとは計算量と空間使用量の証明な式簡約系を自分で作って
そいつの振る舞いをに付いて証明することで間接的に証明するやり方はあるんだけど、気軽にできるものではないな
結局Haskell向けに新たに定理証明系を作るという修士・博士論文並みのプロジェクトをやることになる・・・
0688デフォルトの名無しさん
2011/09/19(月) 10:20:09.53確かにあれはツォルンのほだいを使うからふつうは出てこないよな。
0689デフォルトの名無しさん
2011/09/19(月) 12:18:06.990690デフォルトの名無しさん
2011/09/19(月) 13:07:30.730691hajimehoshi
2011/09/19(月) 13:36:39.290692Perl忍者
2011/09/19(月) 13:38:54.56本日の☆ : 1
ただいまの☆総数 : 32
■ 洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059
星一 (id:hajimehoshi) ☆
〜 ☆をくれた人に「カラースター」でお返ししよう! 〜
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
0693デフォルトの名無しさん
2011/09/19(月) 13:41:04.420694デフォルトの名無しさん
2011/09/19(月) 13:45:22.73毎年6月頃にプログラミングコンテストが開催され、どの言語が最強か、決定される。
0695デフォルトの名無しさん
2011/09/19(月) 13:56:19.540696デフォルトの名無しさん
2011/09/19(月) 14:29:23.58どのアーキテクチャが最強とか
そういうコンテストも欲しいね
0697デフォルトの名無しさん
2011/09/19(月) 14:30:12.71あいつが出るわけない、反感買ってるから殺される
0698デフォルトの名無しさん
2011/09/19(月) 14:34:09.48start-haskellとか潜入レポートやってたじゃん
0699デフォルトの名無しさん
2011/09/19(月) 14:41:00.86まあ平気だろうな
0700デフォルトの名無しさん
2011/09/19(月) 17:19:34.560701デフォルトの名無しさん
2011/09/19(月) 17:26:31.020702デフォルトの名無しさん
2011/09/19(月) 18:17:24.550703デフォルトの名無しさん
2011/09/19(月) 18:32:47.310704デフォルトの名無しさん
2011/09/19(月) 19:31:45.07小学生の頃、好きな子にやたらと突っかかる奴いただろ
0705デフォルトの名無しさん
2011/09/19(月) 19:40:19.30わかるよ
0706デフォルトの名無しさん
2011/09/19(月) 20:05:25.820707デフォルトの名無しさん
2011/09/19(月) 20:06:29.81普通にハスケルの良い所をアピールすればいいだけなのに、
他の言語を馬鹿にしなければならないほどアピールポイントが皆無なの?
0708デフォルトの名無しさん
2011/09/19(月) 20:09:12.130709デフォルトの名無しさん
2011/09/19(月) 20:11:36.39しかも難しくて何をやってるかよくわからないだろ?
ちょっと、普通のプログラマと違いをつける一工夫のためにHaskellやってんじゃないかな
気持ち悪いから死ね
0710デフォルトの名無しさん
2011/09/19(月) 20:16:21.62他の言語とかに対する言論がちょっとアレかな、と思う人というとMatzとかScalaのあの人とか、
あれぐらいのアレではじめてちょっとどうかな、とか思う。
>>707 はネット一切見なければいいよ。見たくないものは見なきゃいい。それだけ。
0711デフォルトの名無しさん
2011/09/19(月) 20:18:33.28むしろ他の言語ユーザーよりはバカにしてる姿見かけ無いんだが。。。
そう言う平和な所も割と気に入ってる
0712デフォルトの名無しさん
2011/09/19(月) 20:18:53.74Rubyは怖い
マジで
0713デフォルトの名無しさん
2011/09/19(月) 20:20:03.23Matzくらいの有名なやつがほざくだkですぐまね
クソガキとかもまね
なんでこいつ?Haskellとかわめいてんの?気持ち悪いっていうやつも多数
意味がわからない
ただやってるだけ
早く死ね
死ね
にくい
気持ち悪い
憎いしね
0714デフォルトの名無しさん
2011/09/19(月) 20:24:04.43ポカーン...
手続き型は難しすぎてわかりませーん、とか、完全に見下して煽ってるだろ...
0715デフォルトの名無しさん
2011/09/19(月) 20:24:09.110716デフォルトの名無しさん
2011/09/19(月) 20:26:31.16そんなやつわんさかいる
ばかじゃねーの
もう時代はかわった
お前ら情弱消えろ
死ね
そんなの誰でもできる
バカでも
0717デフォルトの名無しさん
2011/09/19(月) 20:27:11.490718デフォルトの名無しさん
2011/09/19(月) 20:29:08.58しかも隠そうともしない
0719デフォルトの名無しさん
2011/09/19(月) 20:32:34.370720デフォルトの名無しさん
2011/09/19(月) 20:35:12.96一種のコミュニケーションかな
Perlコミュニティでいうラリーウォールと小飼がアニメキャラ好きだし
影響うける話あわせのクズもおいな
sっさと死んでくれ
”影響”受けるやつが憎いんだが
0721デフォルトの名無しさん
2011/09/19(月) 20:36:49.03このへんの hackage は割と死ねと思ってる
0722デフォルトの名無しさん
2011/09/19(月) 20:36:50.10プログラマなんてもう古いということをいいたいんですね
さすが忍者だ 感動的だな
0723デフォルトの名無しさん
2011/09/19(月) 20:39:01.86まあな
見てみ みんないい子づらしてるだろ?
あんなプログラミング 脆弱性発見
どこが楽しいんだ?
破壊する 匿名で迷惑をかける 困らせる
陥れる つぶす こっちのほうが楽しいだろ
愉快犯
もうそんな時代は終わった いい子ばっかり
いい子ずら
何もしない 怖くてできないびびり
そういうやつばっかりだな
なに考えてるんだよ まったく理解できない
0724デフォルトの名無しさん
2011/09/19(月) 20:39:36.500725デフォルトの名無しさん
2011/09/19(月) 20:42:10.53不純を嫌ってピュアな身内同士でオナニーの見せっこ
0726デフォルトの名無しさん
2011/09/19(月) 20:43:07.340727デフォルトの名無しさん
2011/09/19(月) 20:44:08.36体格もいい
ハッキングもできる
集団リンチ可能
爆破テロ 放火 ショットガン ネットギャング
かっこいい
Rubykaigiに乱入して無差別に破壊したいとおもったことある
0728デフォルトの名無しさん
2011/09/19(月) 20:45:50.25かっこよすぎ
0729デフォルトの名無しさん
2011/09/19(月) 20:47:04.77手裏剣ですね
0730デフォルトの名無しさん
2011/09/19(月) 20:51:53.88ごめん
それ、煽りでも何でもなく、マジで挫折したんだ。。。
0731デフォルトの名無しさん
2011/09/19(月) 20:52:42.160732デフォルトの名無しさん
2011/09/19(月) 20:53:15.870733デフォルトの名無しさん
2011/09/19(月) 21:02:25.030734デフォルトの名無しさん
2011/09/19(月) 21:03:57.10見方につくとマクロされみたいに、アンチや憎いやつらを叩いてくれる
宣伝までしてくれる
よくできたAI
0735デフォルトの名無しさん
2011/09/19(月) 21:21:30.82という優越感が滲み出てるよな
0736デフォルトの名無しさん
2011/09/19(月) 21:41:10.44ありがと、おかげさまで deep と <+> の挙動は何とか理解できた
あと multi の挙動も理解できた
だた、processChildren がよく分からない
multi とは違う挙動なのは確認できたが、理屈が分からない
0737デフォルトの名無しさん
2011/09/19(月) 21:43:14.180738デフォルトの名無しさん
2011/09/19(月) 21:43:30.07被害妄想だよ。。。^^;
言う程副作用怖く無いから
0739デフォルトの名無しさん
2011/09/19(月) 23:32:26.76ioとかguiとか。
0740デフォルトの名無しさん
2011/09/20(火) 00:05:20.83規模が比較的大きなデータ構造がある(大きなツリーとかリストとか配列とか)
データ構造の全ての要素ひとつひとつに対して処理を施す仕組み(fold 系とか)がある
このデータ構造に対して、全要素の平均値を求めたり {A1}、
ある条件を満たす要素だけを集めたり {A2}、
平坦にならしてリスト化したり {A3} といった様々な処理を施したい
しかし、データ構造の規模が大きく、また fold 系の処理も軽くはないため、
データ構造の全要素を何度も何度もたどることは好ましくない
こういう場合、今までは fold 系に渡す関数の中で {A1} と {A2} と {A3} を並行的に行い、
結果を3要素タプルにして返してた
こうすると、データ構造をたどるのは1回で済むから効率は良いんだけど、
fold 系に渡す関数の中がちょっと醜くなる
{Am} と {An} の処理の一部を共通化して効率よくするともっと酷くなる
が、仕方がないと思って諦め、可能な限り綺麗になるようにしてる
{A1} を施す fold 系、{A2} を施す fold 系などと別々に用意し、
何らかの方法でそれらを合成すれば一度の巡回で上記のと同じ結果が得られる
なんて方法はないかと、暇があれば考えてるんだけど・・・何かないかな
こういう条件に絞れば可能、とかいう話でも良いんだが
もしできれば、エッセンスを抽出して関数化したいと思ってる
0741デフォルトの名無しさん
2011/09/20(火) 00:08:18.79追い出してるって言うか・・・
副作用のある関数からは、純粋な関数を呼べるけど、逆は駄目ってだけ
(結果的にトップレベル付近に副作用のある関数が集まる)
純粋な関数から作って、それに外部からデータ渡すためのインターフェースとして副作用のある関数作れば、それ程ほかの言語と違和感感じない
0742デフォルトの名無しさん
2011/09/20(火) 00:13:04.150743デフォルトの名無しさん
2011/09/20(火) 00:56:43.29うーん
普通の言語でも、入力->加工->出力が理想だと思うんだが。。。
自分が昔、綺麗だと思ったCのコードとかは、mainの中身は関数を2、3個呼んでるだけのシンプルな感じだったし
それが自然と出来るようになる感じ
すぐに慣れる
0744デフォルトの名無しさん
2011/09/20(火) 01:03:24.21ということは、
[[ OSプログラム ]] = ボトム = [[ f = f]]
やった! Haskellだと1行でOSが書けたよ
0745デフォルトの名無しさん
2011/09/20(火) 01:08:50.35副作用なしにゲームは作れない
局所的なプログラミング言語だと思う。
0746デフォルトの名無しさん
2011/09/20(火) 02:32:48.320747デフォルトの名無しさん
2011/09/20(火) 06:05:39.190748デフォルトの名無しさん
2011/09/20(火) 06:59:08.60純粋関数型言語って言葉に引きずられ過ぎ
副作用部分ではhaskellは、オブジェクト指向は無いけど、関数型な機能をふんだんに使える手続き型言語として機能する
純粋とか、関数型言語とかにこだわり過ぎ
0749デフォルトの名無しさん
2011/09/20(火) 07:06:25.140750デフォルトの名無しさん
2011/09/20(火) 08:00:20.76今度は関数型言語のパラダイムで同じことが繰り返される訳か。胸熱。
0751デフォルトの名無しさん
2011/09/20(火) 08:32:33.73関数型で揉めるのは「関数型とはなにか」が未だ明確に規定できてないから。
0752デフォルトの名無しさん
2011/09/20(火) 09:26:16.83だからそもそもありえないんだよ
0753デフォルトの名無しさん
2011/09/20(火) 09:31:13.51私は副作用なんて汚いことしませんよ?
とか言って騙せばいいんだよ
0754デフォルトの名無しさん
2011/09/20(火) 10:18:12.49RULES プラグマをうまく使えばやりたいことができそう。
でも、オレが未熟なだけかもしれんが:
RULES プラグマは、それがどう適用されるか結果を見てみないと確信できない
↓
コーディング中に自信が持てない & 試行錯誤
↓
開発効率低下
結論として、個人的には、いまやっている方向でよいんじゃない? と思う。
0755デフォルトの名無しさん
2011/09/20(火) 10:19:31.58side-effects T A := (A×S)^S
0756デフォルトの名無しさん
2011/09/20(火) 10:30:31.82それを自動化する事は考えられてる・・・がまだ研究段階でした残念!
現実的な解としては複雑化されてしまうfoldの中身をコンビネータで判りやすく組み立てる仕組みを作る事ぐらいだね
ちょっと前にでてたHXTのArrowとかまさにそれだと思う
0757デフォルトの名無しさん
2011/09/20(火) 12:41:30.27RULES プラグマ でどこまでやれるか検証してみる
>>756
> 手作業でタプルを返すfoldの中身を書くっていうのはtuplingという手法なんだけど
そういう名前なのか
ACM で "automated tupling" "automate tupling" なんかのキーワードで検索してみたが、
結構古くから研究されてるんだな、ちょっと論文漁ってみるよ
> 現実的な解としては複雑化されてしまうfoldの中身をコンビネータで判りやすく組み立てる仕組みを作る事ぐらいだね
今の段階でできる事はやはりそこになるか
そういうのに Arrow が活用できるとは知らず、今まで小難しい Arrow を避けてたが、
そろそろ本腰を入れて勉強してみるか
いろいろありがと
0758デフォルトの名無しさん
2011/09/20(火) 14:37:30.41萌えとは何か?
0759デフォルトの名無しさん
2011/09/20(火) 14:56:22.90一般職の付き合い方ネタ=ゴルフ 釣り
低底の付き合いネタ=パチンコ 麻雀
テンプレ付き合いネタでした
0760デフォルトの名無しさん
2011/09/20(火) 20:53:51.75集合の圏じゃなくてもいい。
SはStoreもしくはStateであることを明記しなくては意味ない。
IOモナドの解説でStateモナドの話が出てくるのはそのSに係った話をしていると考えられる。
0761Perl忍者
2011/09/20(火) 22:10:46.83perl-ninjaさん (id:perl-ninja) の今日の☆レポートです。
本日の☆ : 1
ただいまの☆総数 : 32
■ 洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059
星一 (id:hajimehoshi) ☆
〜 ☆をくれた人に「カラースター」でお返ししよう! 〜
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
hoshihajime
hoshihajimeです
みなさん覚えてください
Perl忍者の仲間に加わりました
星 はじめ です
hosi hajime
0762Perl忍者
2011/09/20(火) 22:14:19.81ツイートに一貫性がないな
やっぱり 仲間はずす
さようあんら
0763Perl忍者
2011/09/20(火) 22:26:26.45ひろゆきに伝えとくか
ひろゆきは親戚なので
ドワンゴ クビにするように
0764デフォルトの名無しさん
2011/09/20(火) 23:54:56.19iterateeの合成を使うとそういう処理が簡単にできます。
Iterateeが所謂foldと同じくデータを消費するもので、2つのIterateeを同時に
走らせてタプルにして返すコンビネータを使います。
http://okmij.org/ftp/Streams.html#1enum2iter
実際のパッケージではzipという名前がついてます。
0765デフォルトの名無しさん
2011/09/20(火) 23:59:38.180766デフォルトの名無しさん
2011/09/21(水) 00:09:49.44ようなので、そういう用途に使いやすいかもしれません。
0767デフォルトの名無しさん
2011/09/21(水) 00:25:52.21各処理をIterateeで書いて
後はIteratee用のライブラリのコンビネータで合成、接続、展開して取得
って感じでいけるのかなるほろなるほろ
0768デフォルトの名無しさん
2011/09/21(水) 11:24:08.39をやりたいのですが、FGLというパッケージが定番なのでしょうか?
他に何か選択肢があればご紹介ください。
0769デフォルトの名無しさん
2011/09/23(金) 10:02:42.410770デフォルトの名無しさん
2011/09/23(金) 10:08:38.08何と言う俺w
0771デフォルトの名無しさん
2011/09/23(金) 11:08:34.920772デフォルトの名無しさん
2011/09/23(金) 22:02:58.885.7練習問題でここだけ解けなかった。
以下、問題文を抜粋。
5.二つの生成器を持つリスト内包表記[(x,y) | x <-[1,2,3], y <-[4,5,6]]は、一つの生成器を持つリスト内包表記二つでも表現できることを示せ。
ヒント:一方のリスト内包表記を他方への中に入れ、またライブラリ関数concatも使え。
0773デフォルトの名無しさん
2011/09/23(金) 22:17:30.810774デフォルトの名無しさん
2011/09/23(金) 22:23:44.53単純にリスト内包表記をネストすれば良かったのね・・・
ありがとうございましたm(_ _)m
0775デフォルトの名無しさん
2011/09/23(金) 22:53:18.29(このタイトルでググればすぐに見れます)
[1.3 Arrows as computations] の後半辺りが理解できません
(5ページ目 But whereas monadic computations are・・・の辺り)
monadic computation は出力の型だけパラメタ化されて、
入力の型ではパラメタ化されない
一方 arrow computation は入力も出力もパラメタ化される、とあります
また、そのため、先のページで例示したストリーミングの arrow は(SF 型)、
arrow だからこそ表現でき、monad では表現できない例だとあります
この辺りの意味がよく分かりません
特にストリーミングの arrow が monad では表現できないという意味がわかりません
分からないなりに考えてみたのですが、
arrow ==> runSF (arr (+1)) [1..5] (同ドキュメントの4ページ目)
monad ==> [1..5] >>= (\x -> [x+1])
これは、arrow と同じ computation を monad で表現できるが、
arrow ==> delay x = SF (x:) (同ページ)
monad ==> ???
これは monad の中だけでは表現できない、ということなんでしょうか?
(もしそうだとしても、入力もパラメタ化できる事との繋がりがまだモヤモヤしてる)
0776デフォルトの名無しさん
2011/09/23(金) 23:21:17.410777デフォルトの名無しさん
2011/09/24(土) 01:30:55.69今度日本に助っ人としてくるみたい。
0778Perl忍者
2011/09/24(土) 10:58:43.43本日の☆ : 1
ただいまの☆総数 : 33
■ 洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059
hinassan (id:hinassan) ☆
〜 ☆をくれた人に「カラースター」でお返ししよう! 〜
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
0779Perl忍者
2011/09/24(土) 10:59:35.44大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
0780デフォルトの名無しさん
2011/09/24(土) 12:21:30.90reactiveみたいなFRPもある種のストリームプロセッシングとみなす事ができるよ
そしてそういうのは大抵MonadやApplicativeのインスタンスを持ってるから
工夫は必要だけど不可能というわけでも無いと思う
0781デフォルトの名無しさん
2011/09/24(土) 12:59:17.57(>>=) :: Monad m => m a -> (a -> m b) -> m b
の第二引数の最初の引数が m で包まれてないので
>>= を実装するために m a から a を取り出せる必要がある
この条件が Arrow に比べてできないことが増えてる
これがMonadでは入力がパラメタ化されていないということ
>>780
MonadはArrowの特殊な場合
一般には、ArrowはMonadではないってところが重要
Monadになっている時点でArrowの能力全部を使っていないはず
Programming with Arrows では、Monadでは表現できなくてArrowでは表現可能なストリームの例がある
0782デフォルトの名無しさん
2011/09/24(土) 13:41:02.82ストリームといえばStream A := νX. A×X の形のストリームのことを考えてたんだけど
この形のストリームは基本的にコモナドになる(free algebraのコモナド版にIdentityモナドを与えたようなやつ)んだよ
んでモナドからコモナド、コモナドからモナドの構成(ex. http://comonad.com/reader/2011/monad-transformers-from-comonads/)があるんで
それをばらしてやることで直接ストリームを扱うモナドというのは書ける様に思えるんだけどそうでもないの?
0783782
2011/09/24(土) 13:46:11.79ごめん忘れて
0784デフォルトの名無しさん
2011/09/24(土) 23:06:52.58枝葉の技術を解説したり実検したサイトやブログはよくあるんだけど、
ひとつアプリを作ってみましょうってのは見当たらないよね
その中で、何を目的にして、何を考えて、どう設計しているのか、
解説してるのがあるといいんだけど
0785デフォルトの名無しさん
2011/09/24(土) 23:58:45.47Haskellの理論を学ぶだけで精一杯で
まっとうなアプリという形まで仕上げられる人が少ないんだと思う。
かくいう俺も今のところ簡単なテキストフィルタを作るので精一杯だな。
0786デフォルトの名無しさん
2011/09/25(日) 00:01:50.810787デフォルトの名無しさん
2011/09/25(日) 00:19:10.78CUIなら引数を与えて動かすだけだけど、GUIはユーザーの指示をひたすら待たないといけない。
そこがHaskellにとっては不得手なんだろ。
言語が抽象的すぎて実感がわかないのと、他の言語でも同じ事できるし。
インタラクティブに弱いのかも。
0788デフォルトの名無しさん
2011/09/25(日) 00:48:17.20例えば darcs の思想の話は本家サイトからたどって見れるんだけど、
実際にソースコードを追って、こういう設計で作ってるんだという解説が見当たらない
オープンソースなんだから読めばいいだろとよく言われるんだが、
やはり分かっている人の道案内が欲しい
自分で言って気がついたが、Haskell ソースのガイドをしてくれる人っていないの?
0789デフォルトの名無しさん
2011/09/25(日) 00:50:43.47http://haskell.org/haskellwiki/Xmonad/Guided_tour_of_the_xmonad_source/StackSet.hs
0790デフォルトの名無しさん
2011/09/25(日) 03:15:48.56他の言語以上に数学が必要だろうか?haskellでアプリ作るのに。
0791デフォルトの名無しさん
2011/09/25(日) 03:26:05.820792デフォルトの名無しさん
2011/09/25(日) 03:32:06.360793デフォルトの名無しさん
2011/09/25(日) 03:51:10.72Windows で ghc を使ってコンパイルするのなら exe です。
基本的には実行環境にランタイムライブラリは不要です。
つまり、デフォルトでは実行ファイル exe に全て詰め込まれます。
ただし、外部ライブラリ(たとえば LAPAC とか GTK とか)を使ってるのなら、
それらの DLL などが必要になります。
と思ってるけど、違ってたらゴメンね
0794デフォルトの名無しさん
2011/09/25(日) 05:15:47.12GUIとか使うとmfc*.dllとかcomctrlとかいるのかなあと。ていうかそもそもHaskellでWindowって作れるのか・・
0795デフォルトの名無しさん
2011/09/25(日) 05:43:03.70gtk2hs<。。。
0796デフォルトの名無しさん
2011/09/25(日) 06:12:37.47いらないよ。
モナドだのアローだのとオナニーする気がないなら数学とか関係ない。
入出力のたびにオマジナイが必要な、単なる面倒臭い言語なだけだから。
0797デフォルトの名無しさん
2011/09/25(日) 06:13:53.09> Haskell を使ったアプリケーション プログラムの設計を解説したものってないんかな
オナニー言語にそんなもんあるわけない。
0799デフォルトの名無しさん
2011/09/25(日) 08:36:16.130800デフォルトの名無しさん
2011/09/25(日) 09:07:10.580801hajimehoshi
2011/09/25(日) 09:26:56.31社内のエンジニアがHaskellやってるから
仲間はずれにされるのが怖い
俺は数学もできないバカだけど はてな民、LL業界人の話題あわせでやっている
話ができなくなるから、Haskellやってないと舐められる
「え?エンジニアなのにHaskell知らないの?」
そう全部あのせい
あの記事が悪い
「本物のプログラマはHaskellを使う」っていう記事があった
こいつのせいだ
こいつのせいでLL界のやつらは洗脳された
これがなければ俺はHaskellをやる必要がなかった
クソったれが この記事が存在するために Haskellをやってないと本物のプログラマではない
”にわかプログラマ”っていうレッテルを貼られてしまう
残念なことだ
ちなみにアニメにもはまっている、 マドカまぎか それとブラウザ三国志にもはまっていた
社内ではやったから
君たちは洗脳されている
Haskellをやっても意味がない 踊らされている
気づけ
Perl忍者のコメントで洗脳が解除された
perl-ninja
洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Haskell学ばせる工作か?
0802デフォルトの名無しさん
2011/09/25(日) 09:33:29.72書いてあるソースコードをコピペすればそのまま動くなにかが手に入る、サルでもできるレベルか?
0803デフォルトの名無しさん
2011/09/25(日) 09:36:32.32むしろ偉い
0805デフォルトの名無しさん
2011/09/25(日) 09:39:24.97そういう時期はもう過ぎてると思うんだがなぁ・・・
自分は切欠はそう言うものでも、今は純粋に気に入って使ってる。
0806デフォルトの名無しさん
2011/09/25(日) 09:40:52.53Haskellで作った物見せてみ
0807デフォルトの名無しさん
2011/09/25(日) 09:48:33.15小物
0808デフォルトの名無しさん
2011/09/25(日) 09:54:14.01作ればいい。それだけの話。他人にあれこれ言うもんじゃないよ。
0809デフォルトの名無しさん
2011/09/25(日) 11:21:41.22お前が無能だから知らないとバカにされるんだろ
責任転嫁してんじゃねーよ屑
0810デフォルトの名無しさん
2011/09/25(日) 12:03:00.600811デフォルトの名無しさん
2011/09/25(日) 13:35:41.95> 枝葉以外は「普通の」言語と同じ設計で済むからだろ
本当にそうだろうか
実際に「普通の言語と同じ設計手法」を用いて
なにかアプリを作る解説が皆無なのはなぜだろうか
例えばソフトウェア工学で普通に学ぶような理論の多くは(OOADなど)、
現在の普通の言語(オブジェクト指向が普通に表現できる言語)を対象にしてる
だから普通の言語なら、それらの言語にそのまま翻訳すれば、
たいていは問題なくその理論の力を十分に発揮できる
でも Haskell だと(他の関数型や論理型言語などの事は知らん)
そのまま翻訳して利用するという訳にはなかなかいかない
そのまま翻訳した結果としてよるよくある失敗は、
どうしても明示的に保た(管理し)なければならない状態の数が多くなって、
かつ散らばり、かつその多くの状態が保たれる寿命が長くなるというもの
(さらには保つ必要のない状態まで残ってしまう事もあるが、これは設計手法とは別話)
この辺りは、改善策をちょっとしたトイプログラムやスニペットで示すことは難しい
アプリケーション全体の設計でどう Haskell で表現するかを示す必要があると思う
枝葉以外は普通の言語と同じ設計で済むのなら問題なくできるはずだが、俺には難しい
まぁだから解説はないかなと探しているんだが・・・
0812デフォルトの名無しさん
2011/09/25(日) 13:53:17.62都銀勘定系の構築事例の2,3も挙げてもらえると。
0813デフォルトの名無しさん
2011/09/25(日) 22:06:38.54実用の例を上げてもらえるかね。
0814デフォルトの名無しさん
2011/09/25(日) 22:08:15.49コテあげてここに書き込むアホってことがわかった
0815デフォルトの名無しさん
2011/09/25(日) 22:09:58.710816デフォルトの名無しさん
2011/09/25(日) 22:45:42.35http://blog.livedoor.jp/perlninja2/archives/50573052.html
こことか読むと厨房以下って感じなんだが…
0817デフォルトの名無しさん
2011/09/25(日) 22:49:50.170818デフォルトの名無しさん
2011/09/25(日) 23:45:49.34これで二十歳過ぎらしいからな
プログラミングとは残酷なものだね
0819デフォルトの名無しさん
2011/09/25(日) 23:54:59.940820デフォルトの名無しさん
2011/09/25(日) 23:56:14.85https ://gitorious.org/carettah
0821デフォルトの名無しさん
2011/09/25(日) 23:56:29.33ちなみにスレ違いだろ。
Perl忍者の話題は他でやれ。
0822デフォルトの名無しさん
2011/09/25(日) 23:57:39.08どうみてもネタブログ
0823デフォルトの名無しさん
2011/09/25(日) 23:59:00.560824デフォルトの名無しさん
2011/09/25(日) 23:59:11.730825デフォルトの名無しさん
2011/09/26(月) 00:01:40.510826デフォルトの名無しさん
2011/09/26(月) 00:12:40.46それだと話にならないよ
0827デフォルトの名無しさん
2011/09/26(月) 06:57:25.410828デフォルトの名無しさん
2011/09/26(月) 08:42:02.53Perl忍者はお前みたいな下等な分際と話もしたくないだろ
0829デフォルトの名無しさん
2011/09/26(月) 11:21:38.67他に客観的に判断できる資料はないのか
0830デフォルトの名無しさん
2011/09/26(月) 13:12:46.320831Perl忍者 ◆M5ZWRnXOj6
2011/09/26(月) 13:34:37.84なんか自分が書き込むと荒れます すみません
川上っていうやつ気持ち悪いな
hajimehoshiもわかってんだろ?
わかったなら することはわかるな?
暗殺だ
忍者プロダクションのスパイは日本のあらゆる企業にスパイがいるんだけどな
ドワンゴにはhajimehoshi
おっと これ以上は言えないが
始末しとけ hajimehoshi
ドワンゴ・川上量生氏との特別対談企画「ゲーマーはもっと経営者を目指すべき!」を本日よりスタート。第一回めのテーマは「世の中で一番面白いゲームは現実」
http://www.4gamer.net/games/000/G000000/20110922039/
0832デフォルトの名無しさん
2011/09/26(月) 13:35:21.180833デフォルトの名無しさん
2011/09/26(月) 13:37:14.71ズラかw
0834デフォルトの名無しさん
2011/09/26(月) 15:32:32.59なんか童顔すぎる。^^;
0835デフォルトの名無しさん
2011/09/26(月) 18:32:35.60Erlang/OTPみたいな監視系含んだフレームワークがあると実用的になると思うんだが。(もしかしてある?)
0836デフォルトの名無しさん
2011/09/26(月) 18:42:45.390837デフォルトの名無しさん
2011/09/26(月) 20:23:00.02ソースキボンヌ
0838デフォルトの名無しさん
2011/09/27(火) 17:45:37.530839デフォルトの名無しさん
2011/09/27(火) 18:03:03.77どうせなら、「Haskell」も漢字にしようぜ。
『現実世界 覇洲懸瑠』 雄雷莉 出版
0840デフォルトの名無しさん
2011/09/27(火) 18:37:27.570841デフォルトの名無しさん
2011/09/27(火) 18:48:03.080842デフォルトの名無しさん
2011/09/27(火) 19:43:27.35失敬。ハスケルって漢字にするのは難しい。^^;
それより ハスケルおっぱい のほうが豊満そうでいい。意味不明
0843デフォルトの名無しさん
2011/09/27(火) 19:48:21.520844デフォルトの名無しさん
2011/09/27(火) 19:57:59.670845デフォルトの名無しさん
2011/09/27(火) 20:10:13.90街宣車で喧伝する偽右翼みたいな感じか
0846デフォルトの名無しさん
2011/09/27(火) 20:30:25.260847デフォルトの名無しさん
2011/09/27(火) 22:34:52.140848デフォルトの名無しさん
2011/09/28(水) 01:21:37.49里垂兎
矮-魂尾寧汰
0849Ruby騎士団
2011/09/29(木) 10:15:02.340850Perl忍者
2011/09/29(木) 12:04:28.07バカだよな
気持ち悪かった情弱だとおもった
土地かってるやつとか リンデンスクリプトやってるバカとか
気持ち悪かった
0851Perl忍者
2011/09/29(木) 12:07:58.21Node.jsとかjavascript!!とかわめいてる社会のクズを見ると
惨めだわ
セカンドライフの情弱と通じるものがあるよなjavascriptバカは
0852デフォルトの名無しさん
2011/09/29(木) 12:26:29.750853デフォルトの名無しさん
2011/09/29(木) 15:30:47.07使ったことある人いる?
0854デフォルトの名無しさん
2011/10/01(土) 04:14:13.12抽象化が強力な言語って阿呆な人に使いこなせないから普及しにくいのかな。
0855デフォルトの名無しさん
2011/10/01(土) 07:19:22.630856デフォルトの名無しさん
2011/10/01(土) 09:30:37.89Haskellはニュージャージー・アプローチじゃなくて、どっちかと言えばMITアプローチだからじゃね?
個人的にはQIがお奨め。
0857デフォルトの名無しさん
2011/10/01(土) 09:59:42.760858デフォルトの名無しさん
2011/10/01(土) 10:18:31.35実用的ってどういう意味で言ってる?
強力なモナドだし、実行効率もそんなに悪くないけど、
コードが読み難くなりがちなのを嫌ってなるべく使わないようにしていると、
結果的に出番が少ない、というのが俺の印象
0859853
2011/10/01(土) 11:10:58.00うーん‥・ そもそも継続の使いどころが分からないっていうか‥・
手続き型言語だと広域脱出っていうのはたしかにやりたいときがあるんだけど、HaskellだとMaybeモナドとか、もっと馴染んだ道具のほうが使いやすい。
広域脱出以外だと、Schemeで継続を使ったステートフルなHTTPサーバのコードとか見たことあるけど、堅牢そうには思えなかった。
つまり、「関数呼び出しも、関数からのリターンも継続なんですよ!」みたいに一般化しなければ、継続の使いどころって広域脱出しか思いつかない。
でも、Haskellだと広域脱出なんてMaybeモナドで充分(つねに充分とはいえないが、継続みたいな難しいものを導入するほどではない)。
それなら、Continuation モナドはどういうときに使うんだろう、という感じ。
‥・とここまで書いてきた分かった。
要は、オレが継続を自家薬籠中のものにしていないから、怖がっているだけか。
0860デフォルトの名無しさん
2011/10/01(土) 11:17:55.37限定継続によってHaskell的に「お行儀をよくした」継続が可能になったわけで。
0861デフォルトの名無しさん
2011/10/01(土) 15:53:32.360862デフォルトの名無しさん
2011/10/01(土) 16:26:26.210863デフォルトの名無しさん
2011/10/01(土) 17:20:38.88そうでちゅよねー
0864a36 ◆K0BqlCB3.k
2011/10/01(土) 17:44:19.46読むのがめんどくさいから今のスレの話題を3行にまとめて。
0865デフォルトの名無しさん
2011/10/01(土) 18:44:03.07チキン
ポーク
0866デフォルトの名無しさん
2011/10/01(土) 19:13:08.50uy
民明書房
0867デフォルトの名無しさん
2011/10/01(土) 23:47:09.92http://www.amazon.co.jp/dp/477751630X
継続はプログラムの流れが分からなくなるからあまり使うな、とはあった。
0868デフォルトの名無しさん
2011/10/02(日) 00:03:49.36http://logic.cs.tsukuba.ac.jp/cw2011/tutorial.html
発表スライドと説明資料も公開されている。
http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/
OchaCamlとHaskellに関してチュートリアルがあって、
日本語の参考資料がOchaCamlで説明してたパートだけある。
0869デフォルトの名無しさん
2011/10/02(日) 03:03:09.99printfとかcoroutineとかバックトラックとかstateモナドが例に出てたけど
個人的にはどれも既存の実装や代替品で十分なので魅力的に見えないんだけど
限定継続やってる人は何に使おうと思ってるの?何が魅力なの?
応用なんてどうでもいいという意見とかなら
それはそれでいいけど
0870デフォルトの名無しさん
2011/10/02(日) 03:25:33.25何も違わない?
0871デフォルトの名無しさん
2011/10/02(日) 06:57:04.210872デフォルトの名無しさん
2011/10/02(日) 10:26:46.27セルのテキストをツールチップで出したいんだけど
無理かな?
0873デフォルトの名無しさん
2011/10/02(日) 11:09:23.350874デフォルトの名無しさん
2011/10/02(日) 13:05:31.81毎度のように遅れるなら前もって遅めに宣言しとけよ
0875853
2011/10/02(日) 13:37:39.30ありがと。これ読んだ:
http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-j.pdf
木の探索で、ちょっと戻ってきてテストして、再突入する話はおもしろかった。
もう少し勉強しようと思う。
0876デフォルトの名無しさん
2011/10/02(日) 15:17:57.04サーセン、関数型言語スレ同時に読み書きしてるんで。
(ついでにscalaの限定継続プラグイン使ったakka dataflow APIの話も気になった)
0877デフォルトの名無しさん
2011/10/03(月) 01:38:16.75鬼門はIO付の関数・・・
誰か、main関数書いて完成させてはくれまいか・・・
0878デフォルトの名無しさん
2011/10/03(月) 01:38:58.24import IO
import Char
import Random
data Te = G|V|P|Other
deriving (Eq, Show, Read)
data Hantei = Win|Lose|Aiko
deriving (Eq, Show, Read)
strToTe str | (toLower (head str)) == 'g' = G
strToTe str | (toLower (head str)) == 'v' = V
strToTe str | (toLower (head str)) == 'p' = P
strToTe _ = Other
intToTe i | i == 1 = G
intToTe i | i == 2 = V
intToTe i | i == 3 = P
isWin m com | m == com = Aiko
isWin m com | (m == G) && (com == V) = Win
isWin m com | (m == V) && (com == P) = Win
isWin m com | (m == P) && (com == G) = Win
isWin _ _ = Lose
janken s i = isWin (strToTe s) (intToTe i)
0879デフォルトの名無しさん
2011/10/03(月) 01:57:03.40hSetBuffering stdout NoBuffering
s <- putStr "input te> " >> getLine
i <- randomRIO (1,3) :: IO Int
print $ janken s i
0880デフォルトの名無しさん
2011/10/03(月) 08:54:24.48あいこでも続かず停止してる・・・
まあ、でも取り合えず動くから、これを手がかりに改良していきます。
thx
0881デフォルトの名無しさん
2011/10/03(月) 09:34:35.260882デフォルトの名無しさん
2011/10/03(月) 10:12:15.790883デフォルトの名無しさん
2011/10/03(月) 16:43:03.35877 :デフォルトの名無しさん:2011/10/03(月) 01:38:16.75
じゃんけんゲーム作ろうとしてるんだけど、どうもmain関数が上手く書けない・・・
鬼門はIO付の関数・・・
誰か、main関数書いて完成させてはくれまいか・・・
↑
はあ・・・
0884デフォルトの名無しさん
2011/10/03(月) 20:45:50.39次のようなデータ型と関数があるとします
data A = A Int
f :: a -> b -> ・・・ -> A Int
g :: A Int -> Int -> b
g (A x) y = [関数 g の計算]
関数 f はいくつかの引数を使って A Int 型の値を計算します
関数 g は A Int 型と Int 型の値を使って適当な b 型の値を計算します
第2引数が 0 以外の場合、x を使って b 型の値を計算しますが、
第2引数が 0 の場合、b 型の値を計算するのに x は全く利用しません
ここで、次のような式の場合、
x = g (f ・・・) 0
g (f ・・・) 0 を [関数 g の計算] に簡約し始める前に、
g の第2引数を (A x) にパターンマッチさせる為に、
先に f ・・・ を (A x) の形になるまで簡約されるのでしょうか
それとも、まず g (f ・・・) 0 が [関数 g の計算] の形に簡約され、
[関数 g の計算] の中で (A x) の x が必要になってから、
それから (f ・・・) が (A x) の形になるまで簡約されるのでしょうか
もしそうなら、上記の式の場合は第2引数が 0 なので (f ・・・) は簡約されませんよね
今回の場合は、遅延パターンマッチではないので前者の簡約順になる
と私は思っているのですが合ってますか、それとも、どちらも間違いですか
0885884
2011/10/03(月) 20:49:24.37すいません、提示する式の型シグネチャを間違えました
data A = A Int
f :: a -> b -> ・・・ -> A
g :: A -> Int -> b
g (A x) y = [関数 g の計算]
です
まぁ、意味は汲み取ってもらえると思いますが
0886デフォルトの名無しさん
2011/10/03(月) 22:32:51.18data A = A Int
f :: () -> A
f = undefined
g,h :: A -> Int -> ()
g (A x) y = ()
h ~(A z) y = ()
0888Perl忍者
2011/10/04(火) 09:17:43.61http://b.hatena.ne.jp/sudotan/
http://b.hatena.ne.jp/perl-ninja/follower
0889Perl忍者
2011/10/04(火) 09:21:00.9240 FOLLOWERS
http://twitter.com/sudotan/
都内の某私立校に通う中学生です。プログラム勉強中です。\nよろしくおながいします
はてなID
rokujyouhitoma
ニックネーム
rokujyouhitoma
自己紹介
nickName: とぅーる, ろくじょー
name: Tohru Ike
姓名:池徹
よみ:いけとおる
誕生日:1984年11月9日
0890デフォルトの名無しさん
2011/10/04(火) 11:00:55.11a x = x + 2
から、bを創りだすことって出来るんでしょうか?
0891853
2011/10/04(火) 12:00:21.37中学生レベルの数学じゃなイカ?
(a.b) x = x + 1
a (b x) = x + 1 ∵ (f.g) x = f (g x)
(b x) + 2 = x + 1 ∵ a x = x + 2
b x = x - 1
0892デフォルトの名無しさん
2011/10/04(火) 12:33:50.12コードできた
>>878に以下のコード追加で動きます。
ありがとうございました。
jankenMain = do
hSetBuffering stdout NoBuffering
s <- putStr "input te> " >> getLine
i <- randomRIO (1,3) :: IO Int
let kekka = janken s i
if kekka == Aiko then jankenMain else print kekka
main = do
jankenMain
0893デフォルトの名無しさん
2011/10/04(火) 12:34:39.62同人誌読んで頭痛くなったの初めてだ
0894デフォルトの名無しさん
2011/10/04(火) 13:16:08.460895デフォルトの名無しさん
2011/10/04(火) 13:57:43.860896デフォルトの名無しさん
2011/10/04(火) 14:56:17.18「ソフトウェア科学特論: Scalaと命題論理の推論体系」
ttp://bach.istc.kobe-u.ac.jp/lect/soft/org/scala-proplogic-system.html
0897デフォルトの名無しさん
2011/10/04(火) 20:44:51.24でも、ghci などで実行するとちゃんと値が返る
なので、手作業簡約の方が100%間違っているのは分かるが、どこがおかしい?
以下の定義のもとで、
import Control.Arrow
import qualified Control.Category as C
newtype SF a b = SF {runSF :: [a] -> [b]}
instance C.Category SF where
id = SF (map id)
SF g . SF f = SF (g . f)
instance Arrow SF where
arr f = SF (map f)
first (SF f) = SF (unzip >>> first f >>> uncurry zip)
nstance ArrowChoice SF where
left (SF f) = SF (\xs -> combine xs (f [y | Left y <- xs]))
where combine (Left _:xs) (y:ys) = Left y : combine xs ys
combine (Right x:xs) ys = Right x : combine xs ys
combine [] _ = []
h f = C.id ||| (f >>> h f)
次の式の簡約の様子が知りたい
runSF (h (arr undefined)) [Left 1]
==> [1]
0898897
2011/10/04(火) 20:46:12.72一番外側の関数から弱頭部正規形へ順に変換していくことを意識して簡約したら、
次のようになったんだけど、どこかがおかしいはず
プロポーショナル フォントだと式が見難くなるので、ここだけの省略文字を定義する
undefined => ⊥ C.id => cid C.id => . (最後の式だけ、SF の合成と関数の合成に同記号を使った)
Arrow 関係の演算子の簡約はライブラリ ドキュメントのソースのデフォルト定義をもとにした
また、細かな簡約手順は所々で端折った(端折った部分があやしかったら指摘してほしい)
runSF (h (arr undefined)) [Left 1]
[1]==> runSF (cid ||| (arr ⊥ >>> h (arr ⊥))) [Left 1]
[2]==> runSF (cid +++ (arr ⊥ >>> h (arr ⊥)) >>> arr untag) [Left1]
[3]==> runSF (arr untag . (cid +++ (arr ⊥ >>> h (arr ⊥)))) [Left1]
[4]==> runSF (SF f1 . (left cid >>> right (arr ⊥ >>> h (arr ⊥)))) [Left1]
f1 = map untag
[5]==> runSF (SF f1 . right (arr ⊥ >>> h (arr ⊥)) . left cid) [Left1]
[6]==> runSF (SF f1 . arr mirror . left (arr ⊥ >>> h (arr ⊥)) . arr mirror . left cid) [Left 1]
[7]==> runSF (SF f1 . SF f2 . left (h (arr ⊥) . arr ⊥) . arr mirror . left cid) [Left 1]
f2 = map mirror
[8]==> runSF (SF (f1 . f2) . left (h (arr ⊥) . arr ⊥) . arr mirror . left cid) [Left 1]
この後、 left (h (arr ⊥) . arr ⊥) を簡約して SF f の形にもっていかないといけないと思うが、
そうすると h (arr ⊥) を SF f の形に簡約しないといけなくなり、循環してしまう
0899デフォルトの名無しさん
2011/10/05(水) 00:47:40.280900デフォルトの名無しさん
2011/10/05(水) 01:20:00.17あとは.は結合規則成り立つから適当に()挿げ替えたら(.)の展開によってarr mirrorが簡約できる状態になるからそこで
SFを一番外に持ってこれてrunSFが外せるはず
最外簡約といっても書き換え規則は使えるからな、処理系でも実際に使ってるし
0901デフォルトの名無しさん
2011/10/05(水) 01:58:29.92= {leftを展開}
runSF (SF (\xs -> combine xs (⊥ [y | Left y <- xs]))) []
= { runSF, beta}
combine [] (f ...)
= { combine [] }
[]
さてleft (h (arr ⊥) . arr ⊥) はどう展開されるでしょうかっていう
0902デフォルトの名無しさん
2011/10/05(水) 02:05:00.650903デフォルトの名無しさん
2011/10/05(水) 07:32:19.9660行近くなったので、skyDriveにうpしておきます。
(うpするようなコードじゃないんですけどね・・・)
https://skydrive.live.com/#!/?cid=C4A8AEA1FE363811&id=C4A8AEA1FE363811%21767&sc=documents
それで、このコード動かしてて思ったんですが、IO関係の関数を関数内に含んでる関数は、再帰呼び出ししてもスタック消費してないのでしょうか?
また、それはなぜなのでしょうか?
yesコマンドをパイプでつないで2時間くらい自動実行してもスタックオーバーフローにならなかったのですが・・・
(Win環境なのでyesコマンドも自作してみました。「Haskell で UNIX コマンドを書こうシリーズ」でググると出てきます。使い方は「yes [好きな文字列(複数可)] | janken」)
0904デフォルトの名無しさん
2011/10/05(水) 07:54:24.30IOモナドだと、
f x = 何か >>= f x'
の形の再帰は末尾再帰になってスタックを消費しない
0905897
2011/10/05(水) 07:56:13.93ありがとうございます
今初めて知りました
(今まで何となくやってたことを理解したといった方がいいか)
data A = A Int
newtype B = B Int
f (A x) = 0
g (B x) = 0
この場合、f undefined は例外が発生し、g undefined は 0 が返る
つまり g のパターン (B x) の B は単に型を識別するための飾りで、
B 型にマッチするかどうかを調べるだけで、
B x というパターンにマッチするかどうかではない、ということですね
>>897 の方も考え方を正して、どうなるか調べてみます
0906デフォルトの名無しさん
2011/10/05(水) 08:00:58.09会社から帰って来るまでにレスが付けば良いかと思いきや、早い回答ありがとうございます
do以下で再帰をループ替わりに使うのもどうかと思って居たのですが、あまり心配しなくて良いと言う事ですかね?
どちらにしても、もっとスマートな方法が有ったら知りたいですが。。。
0907デフォルトの名無しさん
2011/10/05(水) 11:12:25.92つFRP
あと外部に貼るならskydriveよかhpasteがいいよ、軽いし
今の所一番簡単に使えるのはElereaなんでそれを使って書くとこんな感じ
qが入力されると終了するだけの簡単なものだけど雰囲気はつかめると思う
IOが伴うものを扱う場合は大体どんなFRPでもこんな構成になる筈
入力が無い場合に繰り返すときの処理を飛ばすとかもちょっと変更すればできる
import FRP.Elerea.Simple
import Control.Applicative
import Control.Arrow (second)
untilM_ p m = do { p' <- p <$> m ; if p' then return () else untilM_ p m }
main = do {
; (str,strUpdater) <- second (getLine>>=) <$> external ""
; loop <- start $ return $ (=="q") <$> str
; untilM_ (==True) $ strUpdater >> loop
}
0908デフォルトの名無しさん
2011/10/05(水) 16:25:07.11わざわざ末尾再帰だの余再帰だのにするとか
何の罰ゲームだかw
挙げ句にちょっと手を入れただけで末尾再帰が検出されないという罠w
バカがハサミを持つとはこの事だ
0909デフォルトの名無しさん
2011/10/05(水) 16:32:58.230910デフォルトの名無しさん
2011/10/05(水) 16:41:26.35そのたびにforやwhileが使えずに再帰の微妙な最適化に頼るんだろ?
それがハサミを使うバカっつーのw
0911デフォルトの名無しさん
2011/10/05(水) 16:43:41.690912デフォルトの名無しさん
2011/10/05(水) 16:43:47.31> どーせデータ構造作るたびにmapやfold実装するんだろ?
そんなことする必要ありません
0913デフォルトの名無しさん
2011/10/05(水) 16:44:33.58自分で作る
0914デフォルトの名無しさん
2011/10/05(水) 16:45:42.67再帰使って?
0915デフォルトの名無しさん
2011/10/05(水) 16:49:41.73Haskellでは再帰を使うのはクールじゃない。
0916デフォルトの名無しさん
2011/10/05(水) 16:49:59.64へー、どんなデータ構造でもなにもしなくてもmapやfoldがつかえるのかー
クスクス
0917デフォルトの名無しさん
2011/10/05(水) 16:56:13.57じゃあfoldrみたいなコンビネータ使って?
0918デフォルトの名無しさん
2011/10/05(水) 17:10:24.84それと必要ならStateモナドも使う。
0919デフォルトの名無しさん
2011/10/05(水) 17:12:42.23なるほど、ありがとう
0920デフォルトの名無しさん
2011/10/05(水) 17:41:19.690921デフォルトの名無しさん
2011/10/05(水) 20:53:01.230922897
2011/10/05(水) 21:01:32.67ちゃんと簡約できました
newtype と data の違いが理解できました
newtype A = A Int
というのは、同じ Int 型でもコンパイル時に他の Int 型と区別する為に
単に A というラベルが付いているだけなんですね
(で、コンパイルされたら A というラベルは剥がされる)
だから、
f (A x) = 0
a = A 1
f a
という場合、f a は a が A 型ならそれだけで f (A x) = の (A x) にマッチする
そして、= 0 で x の値は使われないから、x つまり A 1 の 1 の部分は評価されない
あとは、map f xs という式なら、map の定義が map f (x:xs) = なので、
まずは xs の部分を (:) x xs の形に簡約しようとする
これら2つの事を意識して芋づる式に簡約していったら、ちゃんとできました
ありがとうございました
0923デフォルトの名無しさん
2011/10/06(木) 08:32:05.35画面に文字が表示されて
「わーあーわーわー!!」
みたいな
自分ではHaskellやってますとかアピールしちゃって、「お、知的好奇心あるな」
って思われたいんだろうけど
やってることがバカだし
そもそも2chに書き込んでて、書き込み内容からみると頭が残念で”下手な横好き”程度なんだろうなって思ってしまう
バカだよな
Haskellやって知的好奇心ありますアピール、プログラマとしての美徳を感じながらHaskellを触ってるバカども
早く死ねばいいんじゃない?
0924デフォルトの名無しさん
2011/10/06(木) 08:41:23.650925デフォルトの名無しさん
2011/10/06(木) 08:54:07.17自分の意思を貫いて、いくら無駄、役に立たない、非実用的
お前みたいなバカがやっても何も生産性がない
ただの自己満足、知的好奇心ありますアピール、でも続ける
物凄い底辺技術者のゴミプライドだと思う
その多くの気持ち悪いプライドを支えているのは
はてな民や、LL民の「Haskell万歳制」
Matzが「次世代の言語にHaskellをあげていたのもそう」
「本物のプログラマはHaskellを使う 」っていう記事
これがHaskellプログラマの美徳を作り出してる
何か迷ったら、Haskellをバカにされたら
MatzやLL民、はてな民で人気あるんだ
IT業界はMatz,LL民、はてな民の言うとおりだ!!だからHaskellは凄い!!って思い込む
そして、ボロクソいわれたら
「本物のプログラマはHaskellを使う 」
っていう記事を思い出して一人で、美徳に浸る
俺は本物のプログラマなんだHaskellをやってるからって
気持ち悪いな早く死ねよいい加減
お前らさ?バカなのによくやってられるよな
0926デフォルトの名無しさん
2011/10/06(木) 08:59:29.580927デフォルトの名無しさん
2011/10/06(木) 09:03:47.510928デフォルトの名無しさん
2011/10/06(木) 09:16:42.16誰かメタンフェタミンくれ
0929デフォルトの名無しさん
2011/10/06(木) 10:30:03.73> っていう記事を思い出して一人で、美徳に浸る
ごめん。バカな底辺プログラマなんで、難しい日本語、よく分からないや。
0930デフォルトの名無しさん
2011/10/06(木) 10:56:58.21もっと分かりやすくて便利な言語が現れたらそっちを使う。
haskell使ってる奴が気持ち悪くてバカだと思うなら良い言語紹介してくれよ。
0931デフォルトの名無しさん
2011/10/06(木) 11:09:18.16言ってみろよ 何に対して便利なのか言ってみろゴミ
0932デフォルトの名無しさん
2011/10/06(木) 11:13:46.65俺にとって分かりやすく便利なんだよ。
早く俺が分かりやすく便利だと思う言語紹介してくれよ。
0933デフォルトの名無しさん
2011/10/06(木) 11:51:58.41便利・・・目的を果たすのに都合のよいこと。あることをするのに重宝で、役に立つこと。
っで目的ってなに?
早く言えよゴミ
0934デフォルトの名無しさん
2011/10/06(木) 11:53:34.90守秘義務により回答は差し控えさせていただきます。
0935デフォルトの名無しさん
2011/10/06(木) 11:57:53.32早く死ね
イエローがしゃしゃりでてんじゃねえよカス
ただ漠然とやってるバカ研究者気取りは気持ち悪いな本当に
ただの足し算、クソゲー作って満足してる脳みそか
新しい言語でてもサンプル程度動かして満足して2chに聞いてるバカの軍勢早く死ぬべきだなクズが
糞ジャップは死ね
0936デフォルトの名無しさん
2011/10/06(木) 12:00:49.110937デフォルトの名無しさん
2011/10/06(木) 12:08:36.94相手にするからつけあがるんだろ?
0938デフォルトの名無しさん
2011/10/06(木) 12:09:27.640939デフォルトの名無しさん
2011/10/06(木) 12:10:03.090940デフォルトの名無しさん
2011/10/06(木) 12:18:33.05寧ろ仕事でHaskell使ってカスコード量産してるのは外国人の割合が高いと思うけど
仕事でHaskell使ってる日本人が滅茶苦茶少ない的な意味で
0941デフォルトの名無しさん
2011/10/06(木) 12:41:37.030942デフォルトの名無しさん
2011/10/06(木) 12:42:27.160943デフォルトの名無しさん
2011/10/06(木) 12:54:04.51外国人見てるふうにほざいてるけどジャップ
紛れもなく海外旅行+滞在100回未満
幼少期、欧米に住んだことないジャップ
0944デフォルトの名無しさん
2011/10/06(木) 12:55:08.150945デフォルトの名無しさん
2011/10/06(木) 12:56:02.050946デフォルトの名無しさん
2011/10/06(木) 12:56:47.620947デフォルトの名無しさん
2011/10/06(木) 12:57:08.510948デフォルトの名無しさん
2011/10/06(木) 12:57:20.900949デフォルトの名無しさん
2011/10/06(木) 12:59:10.360950デフォルトの名無しさん
2011/10/06(木) 13:08:24.80アニメ・漫画がマスコミとかで取り上げられて
世界で日本=漫画・アニメみたいになって
誇らしげに日本文化だ!! サブカルチャー!!
とかほざいて ツイッターとかアニメアイコンにしたり
マドマギとか言ってる痛い連中
まじイエローが母国愛丸出しの気持ち悪いジャプpにしかみえねーわw
イエローがよw何で息してるのか?イエロージャップがw
ITは欧米にもボコボコだしw
ジャップは生まれつき殆どのやつが貧乏、小金もちで英語ができないしw
哀れだよなw
ITもゲームもだめじゃねえかw芸術産業は世界的にみてクソだとしか言いようがないw
何にしてもだめだなw食品もw
ジャップにすむと考えも低レベルになりそうだがw
気持ち悪いバカ愚民たちの考えの同調圧力w 流行w ごみみたいだなwジャップは
0951デフォルトの名無しさん
2011/10/06(木) 13:10:46.390952デフォルトの名無しさん
2011/10/06(木) 13:13:38.77日の丸をtwitterアイコンの下に入れてる奴が時々いるけど、
大抵頭のおかしいやつだね。
0953デフォルトの名無しさん
2011/10/06(木) 13:14:48.82あれみてると日の丸の冒涜にしか見えない連中が日の丸を掲げてるとしか
思えない時がある。
0954デフォルトの名無しさん
2011/10/06(木) 13:18:09.530955デフォルトの名無しさん
2011/10/06(木) 13:18:34.63そうだね、君の言うとおりだと思う。
日本人は自分で自分たちをすごいと言わないと自信が持てない民族なんだよな。
0956デフォルトの名無しさん
2011/10/06(木) 13:19:31.210957デフォルトの名無しさん
2011/10/06(木) 13:20:34.420958デフォルトの名無しさん
2011/10/06(木) 13:21:51.17ベイジアンフィルターをつかったスパム対策なんて参考になると思ってたん
だけど誰もやってないよね。
0959デフォルトの名無しさん
2011/10/06(木) 13:24:28.62全然おもしろくないじゃん
社員みたら、どいつもこいつもチョン顔
チョン顔って知ってる?
欧米人は顔の彫りが深いから、視覚的に感情表現がわかりやすくて
笑ってる、うれしい、怒ってるの感情が豊かだけど
面白法人とか名乗ってるカヤックとかさ、日本人はチョン顔ばっかりじゃん
顔が薄くて、表現がよくわからねえわw だから、おもしろくなくない?つまらないよね
おもしろいって感情表現が豊かな顔なんだよ
チョン顔はつまらないってこと
そもそもアジアって
コミュニケーション
英語力
脳みそ
身長
体格
声
性格
食文化
全てにおいてごみだよな
なんか、道に迷ってる人がいて
欧米人とアジア人が声をかけたら
どれくらいの人が道を教えてくれるかっていうので
断然白人のほうが上
0960デフォルトの名無しさん
2011/10/06(木) 13:25:45.43hopihajimeの顔面みたか?
チョン顔じゃん 怒ってるんだか、冷静なのか
よくわからない つまらなそうな顔
やっぱりアジアは感情表現がダメだな
つまらなそうにみえる
だから”おもしろい”とか名乗ってウケ狙わないとダメなんだと思う必死に
0961デフォルトの名無しさん
2011/10/06(木) 13:26:56.640962デフォルトの名無しさん
2011/10/06(木) 13:30:31.95全部、取ってくるデータの形式とこちらから発信するデータの形式さえ適当に定めてれば同じように購読、発信できるような抽象を考えてる
取ってくるだけならそれpla(死語)でいけるんだけど
0963デフォルトの名無しさん
2011/10/06(木) 13:37:14.08CERNふぇニュートリノが光速を上回る実験結果が出たそうだ
0964デフォルトの名無しさん
2011/10/06(木) 13:40:50.75工作もしてくれるしな
0965デフォルトの名無しさん
2011/10/06(木) 13:41:15.510966デフォルトの名無しさん
2011/10/06(木) 14:02:34.970967デフォルトの名無しさん
2011/10/06(木) 14:03:18.850968デフォルトの名無しさん
2011/10/06(木) 16:44:34.85このスレでHaskellで100行以上プログラミングしたことがある人どのくらいおる?
0969デフォルトの名無しさん
2011/10/06(木) 16:46:55.650970デフォルトの名無しさん
2011/10/06(木) 16:48:52.05ある。
0971970
2011/10/06(木) 16:49:33.270972デフォルトの名無しさん
2011/10/06(木) 16:56:57.530973デフォルトの名無しさん
2011/10/06(木) 17:01:18.16思ってね。
Lispとはまた違った抽象化が楽しいプログラミング言語だなと思った。
データ構造を作っていじるのはすごく面白いかも。
でも使いこなせる人ってそこそこたかいIQがないと厳しそう。
0974デフォルトの名無しさん
2011/10/06(木) 17:20:10.13UTF-8として、ソースで2048字以上ってこと?
100行よりも少なそうだが…
0975デフォルトの名無しさん
2011/10/06(木) 17:21:13.93俺職場でOOPで実装しただけでアスペルガ扱いされてるから
抽象化された世界を理解されない苦しみをこれ以上味わいたくない
かといって阿呆が書いたP*言語のメンテするのもいやだ
0976デフォルトの名無しさん
2011/10/06(木) 17:29:13.22読みにくいのはとことん読みにくいから
0977デフォルトの名無しさん
2011/10/06(木) 17:34:23.150978デフォルトの名無しさん
2011/10/06(木) 17:37:32.410979デフォルトの名無しさん
2011/10/06(木) 17:38:27.62> 他人の書いたHaskellプログラムって読めるものなの?
他の言語と比較して、っていうことだよね?
そういうのは大部分が慣れの問題であり、かついわば「どこまで読みたいか?」というのに依存するけど、
中置演算子を自由に定義できる、関数をいつでも中置記法化できる、というのはかなりのアドバンテージだと思う。
0980デフォルトの名無しさん
2011/10/06(木) 17:51:40.14あるよ
今作ってんのと過去に作ったガラクタ
0981デフォルトの名無しさん
2011/10/06(木) 18:38:20.830982デフォルトの名無しさん
2011/10/06(木) 18:43:01.05自然に理解できるんだろうよ。<中間表記
記号 難しいよな。読み方も
.|. とかみてると ぽこちん とか >=> をイカ とか言ってそうだもん。
0983デフォルトの名無しさん
2011/10/06(木) 18:50:53.970984デフォルトの名無しさん
2011/10/06(木) 18:55:18.960985デフォルトの名無しさん
2011/10/06(木) 22:12:50.760986デフォルトの名無しさん
2011/10/06(木) 22:25:19.04痛い痛いよ・・・
0987デフォルトの名無しさん
2011/10/07(金) 10:08:21.79遅延評価だから足を必要とするまで直らないよ。
0988デフォルトの名無しさん
2011/10/07(金) 11:12:37.380989デフォルトの名無しさん
2011/10/07(金) 11:14:39.140990デフォルトの名無しさん
2011/10/07(金) 11:20:29.060991デフォルトの名無しさん
2011/10/07(金) 11:34:26.94ファジー理論ってまだ息してるの?
0992デフォルトの名無しさん
2011/10/07(金) 11:59:44.790993デフォルトの名無しさん
2011/10/07(金) 11:59:56.470994デフォルトの名無しさん
2011/10/07(金) 12:01:25.050995デフォルトの名無しさん
2011/10/07(金) 12:11:17.610996デフォルトの名無しさん
2011/10/07(金) 12:22:21.42スレと関係ない話題は少しくらいならいいけど・・・
0997デフォルトの名無しさん
2011/10/07(金) 12:24:46.35Haskellの話題はあくまで彼等を呼び寄せるエサなんです
0998デフォルトの名無しさん
2011/10/07(金) 12:25:05.920999デフォルトの名無しさん
2011/10/07(金) 12:25:46.15次スレよろ
1000a36 ◆K0BqlCB3.k
2011/10/07(金) 12:28:07.87関数型プログラミング言語Haskell Part16
http://hibari.2ch.net/test/read.cgi/tech/1317958045/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。