関数型プログラミング言語Haskell Part15

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん: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
3デフォルトの名無しさん:2011/07/09(土) 17:19:45.18
4デフォルトの名無しさん:2011/07/09(土) 17:21:15.57
・Haskell API search Engine
ttp://www.haskell.org/hoogle/

【簡単な使い方】
1.検索バーに関数名を入れて検索
 例 map
2.検索バーに型名を入れて検索
 例 (a -> b) -> [a] -> [b]
5デフォルトの名無しさん:2011/07/09(土) 20:10:41.28
>>1
6デフォルトの名無しさん:2011/07/09(土) 22:15:29.24
諸君、議論をレジュームしたまえ
7デフォルトの名無しさん:2011/07/10(日) 06:36:49.99
>>2 ついかしとけ
Learn you a haskell for great good!
http://www.amazon.co.jp/dp/1593272839
http://learnyouahaskell.com/
8デフォルトの名無しさん:2011/07/10(日) 06:37:49.14
9デフォルトの名無しさん:2011/07/10(日) 13:55:51.13
諸君、さあ
10デフォルトの名無しさん:2011/07/11(月) 12:03:06.91
諸君、何故議論しないのだ
11デフォルトの名無しさん:2011/07/11(月) 12:07:37.83
男割りします
12デフォルトの名無しさん:2011/07/11(月) 12:34:45.52
尻滅裂
13デフォルトの名無しさん:2011/07/11(月) 12:44:09.69
(´;ω●)諸君・・・
14デフォルトの名無しさん:2011/07/12(火) 04:33:58.90
お、たってる。よかった。>>1 マジ乙。
15デフォルトの名無しさん:2011/07/12(火) 04:35:45.36
それではHaskellの普及に関してネタ振りしてみます。

参照透過性は新しい言語でも取り込まれています。
しかし非正格評価は処理量予測が難しいという問題があり、
今後も限られた範囲でしか使われないでしょう。
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
16デフォルトの名無しさん:2011/07/12(火) 07:06:42.36
OCaml使ってればいいじゃない。
ていうかMLスレはなかったんだっけ?
17デフォルトの名無しさん:2011/07/12(火) 07:18:25.09
素数ならData.Numbers.Primesでことたりる。
18デフォルトの名無しさん:2011/07/12(火) 07:35:52.44
ハスプラって新版インストールする度に追加していたライブラリは入れ直しなの?
19デフォルトの名無しさん:2011/07/12(火) 08:16:32.79
バイナリ互換次第だろうけど、道南?ghcベルトのバイナリ互換性は?
20デフォルトの名無しさん:2011/07/12(火) 08:24:21.42
パッチレベルリリースでもバイナリ互換性なし、全部壊れる
21デフォルトの名無しさん:2011/07/12(火) 08:56:49.49
俺はghc変わったら全部入れなおすなあ
22デフォルトの名無しさん:2011/07/12(火) 13:25:55.09
>>15
参考資料の人の結論は、

- Haskell は OCaml 並に普通に業務で使える言語
- Haskell マニアが嬉しそうに紹介している機能は実はほとんど使う必要が無い。
 せいぜい Monad transformer位で仕事は出来る
- Haskell には良いところもあるし、悪いところもある。手放しで神格化するのが一番問題

なので、そういう文脈で引用するのは作為的なのでは?
速度重視のコードを遅延評価で書くのは大変でも、どの言語でもそういうノウハウはあるわけで。
遅延の利点ばかりに目をやらないで、そういうノウハウも蓄積しましょうよ、って話だったよね、それ。

>>16
MLスレはあるけど、>>15のはそういうOCaml賛美とかじゃない。普通に読む価値がある文章だと思う。
23デフォルトの名無しさん:2011/07/12(火) 19:51:25.34
>>15
求人率に Prolog を加えると面白いんじゃなかったっけ。
24デフォルトの名無しさん:2011/07/12(火) 21:45:28.38
業務に使えるって、ようするに、スクリプト組んでデータ整形やるとかそんなレベルでしょ?
売り物のコードにHaskellのソースコード入れてから業務に使えると言ってほしい
25デフォルトの名無しさん:2011/07/12(火) 22:07:18.40
× 業務に使える
○ OCaml 並に業務で使える
26デフォルトの名無しさん:2011/07/12(火) 22:23:08.86
>>25
OCaml を業務に使ってる人がいなければ、「OCaml 並に業務で使える」という命題も「OCaml 並に業務で使えない」という命題も真になる
27デフォルトの名無しさん:2011/07/12(火) 22:47:42.18
>>24
そもそもコードを出荷しない会社なんじゃね?
チームのメイン言語がHaskellなら、業務に使える使えないを語って当然だろ
28デフォルトの名無しさん:2011/07/12(火) 23:07:55.67
出荷されないコードはこの世に存在しないと思ってる人も多いから
29デフォルトの名無しさん:2011/07/12(火) 23:09:39.56
>>27
そもそもチームすらないかも知れん
普通はExcelでデータ入力してて、暇になったときに上司にばれないようにHaskellのスクリプトで定期的に2chのログを収集してる程度でも、業務に使えるということに変わりはない
30デフォルトの名無しさん:2011/07/12(火) 23:12:57.90
>>28
業務=直接金になること という認識だから売買の対象にならなければ業務じゃない
売買の対象という意味じゃなければ、PCで遊んでるのも業務だからいちいち「業務で」と断る必要はない
31デフォルトの名無しさん:2011/07/12(火) 23:22:44.89
社内システムならHaskellでも許されると思うが
32デフォルトの名無しさん:2011/07/13(水) 01:37:06.53
>>15の人は金融系だよ。具体的な社名は知らないけど。

主に金融系でHaskellとかOCaml、F#とかの関数型言語は割と人気があって、
採用事例が多いそうな。Tsuru Capitalとか、かつてのリーマン・ブラザーズとか。
OCamlならJane Streetとか。もちろんチームで。

使っているのは、金融商品を取り扱うための言語フレームワークを作ったり、
統計的分析を元にした取引銘柄自動売買とかだってさ。

てか、リンク先読まずに想像でどうこう言うってのもどうなのよ。
33デフォルトの名無しさん:2011/07/13(水) 02:16:09.56
金融系ってなんで関数型言語多いの?
34デフォルトの名無しさん:2011/07/13(水) 02:48:32.29
>>33
ttp://d.hatena.ne.jp/camlspotter/20100330/1269927047
ttp://www.nri.co.jp/opinion/it_solution/2005/pdf/IT20050307.pdf

上のは元々の引用されてた人の話。下のは野村総研の人が書いた文章で、
LexiFi社のMLFiっていうDSLの紹介をしてる。こういう手法の先駆けなんだと。
コンビネータでお手軽金融商品定義! とか、受け良さそうじゃん。
35デフォルトの名無しさん:2011/07/13(水) 06:13:04.72
そもそもHaskellなんてHaskellコンパイラ作る為の言語みたいなものだったし
36デフォルトの名無しさん:2011/07/13(水) 06:28:08.72
だから何?
37デフォルトの名無しさん:2011/07/13(水) 07:00:02.30
So what?
38デフォルトの名無しさん:2011/07/13(水) 16:14:19.76
>>28
俺の嫌いな物は食べ物じゃない
39デフォルトの名無しさん:2011/07/13(水) 21:15:43.17
>>33
国債買ってて遊んでても給料がもらえて暇だから
40デフォルトの名無しさん:2011/07/15(金) 21:43:17.40
haskell使ってWEBのバックエンドシステム作ったらphpより簡単で保守し易すぎてワラタwwwww

みたいなこと誰か言ってくれたら俺もhaskellもうちょっと頑張れる気がする
41デフォルトの名無しさん:2011/07/15(金) 21:53:58.85
>>33
他人と同じことやってたら食っていけないからじゃないか?
金融系ちゅうかそれ証券系だよな
銀行生損保あたりは>>39だろ
42デフォルトの名無しさん:2011/07/15(金) 23:28:33.06
>>40
という話を鵜呑みにして、会社でHaskellを導入したら、haskell使ってWEBのバックエンドシステム作るプログラマをメンテ・教育するコストで会社が潰れると思う
43デフォルトの名無しさん:2011/07/16(土) 03:55:45.49
Haskellについてこれない低知能社は淘汰されれば良い




と言ってみたい
44デフォルトの名無しさん:2011/07/16(土) 08:03:58.18
Haskell使える奴なんかいくらでもいるからそこまでコストかからんと思う
45デフォルトの名無しさん:2011/07/16(土) 08:47:35.10
Haskell使えてる人ってソロプレイヤーが多くてスケールしないイメージ
根拠は無い
46デフォルトの名無しさん:2011/07/16(土) 10:03:43.83
>>45
@tanakh さんのツイートとか見てるとそんな印象だな。要するにあるレベル以上になると
使える人が急激に減るみたい。んなことはC++でもなんでも一般的には言えることだけど
Haskellの場合には減り方が激しいんだろうということ。

ただ、@tanakhさんは最近の、ICFCだっけか、ラムダ計算のカードゲームの話ではチーム
組んで良い成績をあげてるので、Haskell実力者どうしのチームが機能しないという話しでは
ないだろう。参戦記を読んだ限りでは、モナドを単位にしたモジュール化でうまく作業分担
していたようだ。
47デフォルトの名無しさん:2011/07/16(土) 10:13:52.60
ICFP Programming Contestで上位行くような人を集めてようやく使い物になるのか・・・
非現実的な事この上無し
48デフォルトの名無しさん:2011/07/16(土) 10:48:04.52
>>46
上級者÷一般レベル の値が一番小さいのがアセンブラ
4946:2011/07/16(土) 11:53:05.28
>>47
モナドを単位とした振り分けでチーム開発は可能であることの例証だし、世の中でもそこそこ
行われているんじゃないか、という話がしたかった。競技プログラミングを例にしたのは成果や
過程があるていどオープンになっていて引き合いに出しやすかったからだけど、実際に金融
やらなんやら我々の目に触れにくい(または触れることがない)分野でこういったモナドを単位とした
分担開発は行われているんじゃないか。
50デフォルトの名無しさん:2011/07/16(土) 12:02:36.12
そもそもモナドを単位として分割統治とか意味が分からんのだが
51デフォルトの名無しさん:2011/07/16(土) 12:27:19.53
>>49
我々の目に触れない理由を考えよう
52デフォルトの名無しさん:2011/07/16(土) 14:11:16.18
>>15
どうすれば速くなるか解説しているページがあったのでリンクします。
性能を追求する時は、文字列がリストだから文字列操作が簡潔という話は
Haskellの優雅さを示すための神話として切り捨てる必要があるのですね。

Haskellの神話
http://d.hatena.ne.jp/kazu-yamamoto/20100624/1277348961
>この記事では、神話になっている例を3つ取り上げ、
>効率のよい実装と合わせて紹介する。

Haskellライブラリ入門 (2011年版)
http://d.hatena.ne.jp/kazu-yamamoto/20110525/1306298046
>リストはとても柔軟ですが、リストで表現されている文字列は、
>メモリーをたくさん消費しますし、なにより遅いのです。
>実用的なプログラムを書くためには、
>必要に応じて適切なデータ構造を使う必要があります。
53デフォルトの名無しさん:2011/07/16(土) 14:51:33.13
次に売れる本は
スケーラブルHaskell開発
だな
54デフォルトの名無しさん:2011/07/16(土) 14:53:42.08
いやそのまえにクックブックをですね
55デフォルトの名無しさん:2011/07/16(土) 17:27:04.12
いやまずは13歳からはじめ・・・
56デフォルトの名無しさん:2011/07/16(土) 18:18:41.53
Haskellコードの高速化
http://www.kotha.net/hperf/

このテーマを掘り下げた本なら喜んで買います。
57デフォルトの名無しさん:2011/07/16(土) 18:29:56.21
まずは ByteString を返す show を作ります
58デフォルトの名無しさん:2011/07/16(土) 19:04:32.78
cabal install bytestring-show

先生できました
59デフォルトの名無しさん:2011/07/16(土) 19:19:41.17
>>52
Common Lispでも高速化させようと思ったら、ある程度
泥臭い記述が増えてくるよ。一部がマクロでかぶせられるとは言ってもね。
高速化って結構泥臭いもんだから同じだなと思った。
ととあるりすぱぁ(あたまもぱぁ)からの感想です。
60デフォルトの名無しさん:2011/07/16(土) 19:29:12.67
CLは文字列は文字の配列じゃないですかー!

リストで文字列を扱うときのメモリ消費はガチ。特に64ビット環境。
そりゃあ、バイト列使おうとかいう話にもなるよね。
61デフォルトの名無しさん:2011/07/16(土) 23:22:45.90
文字列がリストっていうのは楽なんだけどね。
リスト操作に慣れる、という意味での教育効果もあると思うし。

最近のPerlインタプリタとかjavascriptインタプリタとかの、文字列の内部的にどういう構造になっているんだろう?
文字配列のリスト?
62デフォルトの名無しさん:2011/07/17(日) 04:55:38.66
もうリストなんて廃止して
Educationモジュールに追いやっちゃえよ
63デフォルトの名無しさん:2011/07/17(日) 15:58:17.74
>>62
文字列以外の場所でもリストってやばいのか
64デフォルトの名無しさん:2011/07/17(日) 17:14:03.02
>>62
えー?
むしろ64bitが普及したらメモリ食うとか気にしなくなるだろうから、全部リストで済ませたいけどなぁ

最適化よりも楽にプログラミング出来る方が有難い
最適化したけりゃcの関数呼び出せば良いんだし
元々プログラマが最適化するのには関数型言語は向かないんだしさ
適材適所で手続き型言語を呼び出せば良い

そんなのより並列リストと普通のリストを統合したりして、基本的な文法で並列化出来るようにして欲しいぜよ
65デフォルトの名無しさん:2011/07/17(日) 17:24:42.83
observable sharing とはどういったものでしょうか

参照透過性に関係する問題だという漠然としたイメージはあるのですが、
どういったものか全く分かりません
66デフォルトの名無しさん:2011/07/17(日) 17:37:32.82
メモリをたくさん使う問題って
単純に量じゃなくてGCにCPU時間使うのが問題だと思ってる
67デフォルトの名無しさん:2011/07/17(日) 18:29:06.62
>>66
同意。その通りだと思う。GCに引っかかると途端に遅くなる。
数十バイトとか数キロバイトなら倍メモリ消費しても全然問題にならないけど、
数百メガバイトとかになってくると、倍とか普通にきつい。

リスト廃止しろとかは笑えないけど。楽で良いじゃんリスト。
68デフォルトの名無しさん:2011/07/17(日) 19:41:40.96
そういえば、printf関数とかなつかしい過去の記憶になったな。
まだまだ使っている人はもちろんいるんだろうけど。
69デフォルトの名無しさん:2011/07/17(日) 20:02:02.36
>>68
Text.Printf.printf 関数は今でも普通に使ってる

これ使わないと、数値から文字列を作るのがえらく面倒になる
特に桁を揃えたりゼロで埋めたい時
とてもシンプルに書けるから重宝してる

ただ、コンパイル時に型エラーを検出できないのが不満だ
他に総合的にもっと使いやすいライブラリがあるのなら教えてほしい
70デフォルトの名無しさん:2011/07/17(日) 20:05:22.85
template-haskellを使った型安全なprintfというのはよくあるネタだと思うけど
Text.Printfを置き換えられる程のものはなかったような
71デフォルトの名無しさん:2011/07/17(日) 21:31:15.49
>>69
あ、オレが言っていたのは、C言語のprintf関数のこと。
Doubleとかの浮動小数点数の桁をそろえて出力するHaskellの便利なライブラリは知らない。

オレは、表示してみて科学記法がならんで「ウザっ」て思うときは、表示するときだけmap (floor.(*10^3))とかしてしのいだり。

そういうことしてしのげないときは、科学記法で我慢している。
0.000000123と0.0000000234みたいな表記をされても、どうせどちらが大きいのかさえ一瞬では分からないので、科学記法のほうがいくぶんマシ。
72デフォルトの名無しさん:2011/07/17(日) 21:37:59.87
69氏が哀れ…
73デフォルトの名無しさん:2011/07/19(火) 15:42:11.91
早くHaskell GCを速くしろよ

Javaのそれと比べたら冗談みたいなレベルらしいじゃないか
74デフォルトの名無しさん:2011/07/19(火) 15:51:55.37
おまえがSunがJavaにしたみたいに資金的に支援すれば?
75デフォルトの名無しさん:2011/07/19(火) 16:39:11.18
そんなことしたらコミュニティが俺の犬になっちゃうよ?
アンドロイドに搭載された辺りで訴えちゃうよ?
76デフォルトの名無しさん:2011/07/19(火) 19:00:59.66
>>73
「らしい」なんて不確かなことで要求するな
77デフォルトの名無しさん:2011/07/20(水) 01:34:16.17
むしろ、膨大なリソースが投入されて
改良されてきたJVMが優れているという話にしかならん
78デフォルトの名無しさん:2011/07/20(水) 09:59:10.36
最終的にHaskellとAgda2はシンクロします
http://hackage.haskell.org/trac/ghc/wiki/Commentary/Contracts
79デフォルトの名無しさん:2011/07/22(金) 04:52:21.32
UTF8 bomマークつきの日本語テキストを処理しようとしていて、
大体上手く行っています。問題は、”☆”みたいな文字をいくつかのテキストに
付加するための定数として

star = "☆"

などとしておいて cs ++ star みたいな事をやると star の部分が文字化けしてしまうことです。
GHC.IO.Encoding.UTF8 を使ったら良さそうなのですがghci で import して :t utf8 しても
意味が理解できなくてどうやって utf8 という関数を使うのかが理解できません。
最初は

star = utf8 "☆"

と書いてみたんですがダメみたいです。(なにか根本的に誤解してるみたいです)。
プログラム内で utf8 文字列定数を定義するにはどうすれば良いのでしょうか?
(もちろんプログラム自体も UTF8 bom 付きで保存して ghc に食わせています。)
80デフォルトの名無しさん:2011/07/22(金) 05:05:50.80
>>79
あ... System.IO.UTF8 ってのを入れたらなんとかなるかも知れないですね。
cabal ってのが意味わかりませんがやってみます。
81デフォルトの名無しさん:2011/07/22(金) 05:17:31.10
>>80
cabal ってのが良く分からなかったけど、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にしないといけないのだけが面倒ですね...
82デフォルトの名無しさん: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
83デフォルトの名無しさん:2011/07/22(金) 20:25:14.09
ツイのハスケル連中、どこまで上から目線だか
84デフォルトの名無しさん:2011/07/22(金) 21:27:37.45
さーらーせ!さーらーせ!
ま、誰誰を指すかは大体検討はついてるけどね
85デフォルトの名無しさん:2011/07/22(金) 21:40:19.82
MonadPlus クラスの mzero 関数と mplus 関数
Monoid クラスの mempty 関数と mappend 関数

これらって、意味的に何か違いはあるんですか?

たとえば、ある型が既に Monad クラスのインスタンスであって、
なおかつ identity と associativity の両性質を持っていた場合、
その型は Monoid クラスのインスタンスにも、
MonadPlus クラスのインスタンスにも成れますよね

どちらのクラスのインスタンスにするか、
あるいは両方のインスタンスにするか、
判断する基準みたいなものは一般的に何かあるのですか?

単に好きな関数名が有る方を選んどけ、という程度でしょうか
86デフォルトの名無しさん:2011/07/22(金) 22:06:15.94
上から目線(キリッ)
87デフォルトの名無しさん:2011/07/22(金) 22:56:17.80
>>85
どちらかのインスタンスにする必要があるの?

そういう疑問がわくということは、べつにどちらのインスタンスにする差し迫った必要もなさそうだけど。
もしそうなら、どちらのインスタンスにする必要もないでしょ。

あと、mzeroは>>=に対して定義されているんだから、Monadに対してしか意味をなさないけど、
mzeroとmplusしか使わないなら、memptyとmappendと交換しても何もおかしくないとは思う。
88デフォルトの名無しさん:2011/07/22(金) 23:19:10.32
>>87
> どちらかのインスタンスにする必要があるの?

Monoid クラスのインスタンスにする必要がある時
MonadPlus クラスのインスタンスにする必要がある時

というのは、例えばどんな場合なのでしょうか
89デフォルトの名無しさん:2011/07/23(土) 02:17:43.58
>>88
> Monoid クラスのインスタンスにする必要がある時
mconcatとか、Data.Foldable.foldとか、引数(の一部)がMonoidクラスのインスタンスである必要がある関数を使いたいとき。

> MonadPlus クラスのインスタンスにする必要がある時
同様に、引数がMonadPlusクラスのインスタンスである必要がある関数を使いたいとき。

突き詰めれば、これだけの話だと思う。
90デフォルトの名無しさん:2011/07/23(土) 08:04:58.17
Control.Monad.guard使うならMonadPlus
とりあえず、インスタンスにする型がMonadでもある時にguardを使うかどうか考えてみて
言い換えれば計算の途中に特定の条件で計算を打ち切るようなことを期待する場合ね
そんなのあきらかにねーよってんならMonoidでいいと思うよ
91デフォルトの名無しさん:2011/07/23(土) 14:37:42.92
learnyouahaskellを購入したけど、clojureを良く使ってる身から
みるとclojureの母親だな。haskellって
92デフォルトの名無しさん:2011/07/23(土) 15:31:55.30
>>89
>>90
なるほど、ということは、機能としての違いでしかないというわけですね

そういった機能以外には、特に区別する意味は無い?

例えば Monad クラスしかなく Monoid クラスがまだ存在していなくて、
Data.Foldable.fold 関数らも Monoid クラスではなく
MonadPlus クラスのインスタンスを要求しているような世界において、
機能的にはそれで十分だと思うのですが、
Monoid クラスをライブラリに加えてくれという要求は出てこないのでしょうか
93デフォルトの名無しさん:2011/07/23(土) 16:25:14.83
>>92
> Data.Foldable.fold 関数らも Monoid クラスではなく
> MonadPlus クラスのインスタンスを要求しているような世界において、
> 機能的にはそれで十分だと思うのですが、
> Monoid クラスをライブラリに加えてくれという要求は出てこないのでしょうか

なんでそうなる。

すべてのデータ型が既にMonadならそういうことにもなるかもしてないけど、
現実にそうではないこの世界のHaskellにおいては、
MonadのインスタンスにできないがMonoidにできるデータ型はいくらでも考えられるでしょ。

そのとき、Monoidクラスは意味がある。

-- いや、正直、実際のプログラミングでMonoidクラスが有用だと感じたことはないが…
-- そういう意味では理論的関心が先行した感の強いクラスだとは思う
94デフォルトの名無しさん:2011/07/23(土) 16:42:02.66
>>97
> なんでそうなる。

だって、そういう(たとえ話の)世界では
identity と associativity の両性質があることで果たせる機能が
MonadPlus クラスのおかげで既に実現されているわけだから、
「機能という点において」は Monoid クラスが作られる必要性がないわけでしょ

でもそんな世界にあっても、もし Monoid クラスが必要だという要求が出てきたら、
それはそういう機能以外にも、Monoid という性質に意味があるということじゃないかな
あるいは、>>89>>90 以外にも Monoid ならではの機能があるとか

と、思考実験してみました

Monoid クラスにどんな意味(隠れた機能)があるのかまでは、まだ考えられてないけど

> いや、正直、実際のプログラミングでMonoidクラスが有用だと感じたことはないが…

同感です
95デフォルトの名無しさん:2011/07/23(土) 16:47:14.80
>>94
アンカーミスりました
本当は >>93 です

お詫びに面白そうな本を紹介します

A Framework for Programming Interactive Graphics in a Functional Programming Language

96デフォルトの名無しさん:2011/07/23(土) 16:54:06.90
>>94
いや、型クラスに関しては「機能が弱い」からこそ役に立つ場合がある
たとえばFunctorでできることは全てMonadでもできるけど、だからといってFunctorが不要な訳ではない
なぜならFunctorのインスタンスにはなれてもMonadのインスタンスになれない型が存在するから
MonoidとMonadPlusについても同様で、たとえばByteStringはMonoidインスタンスになれるけど、
MonadPlusインスタンスにはなれない

実際のプログラミングでも便利だと思うけどな、Monoidクラス
特に、mappend相当の関数名をいちいち考えたり覚えたりしなくて済むという点において
97デフォルトの名無しさん:2011/07/23(土) 16:55:59.83
なんでそうなる。
98デフォルトの名無しさん:2011/07/23(土) 17:04:35.24
しかしmappendって名前が失敗
99デフォルトの名無しさん:2011/07/23(土) 17:06:59.01
(<>) = mappend
を標準ライブラリに入れるって提案があったはずだけどどうなったんだろう
100デフォルトの名無しさん:2011/07/23(土) 17:26:18.86
>>96
> いや、型クラスに関しては「機能が弱い」からこそ役に立つ場合がある

「機能が弱い」のではなくて、「機能が重複している」のは何で?
と言いたかった

私には Momoid クラスの機能と MonadPlus の機能が
(今のところ)重複しているように見えます
何というか、Monad の性質 + Monoid の性質 = MonadPlus の性質
という感じがするのです

だから本質的に MonadPlus クラスは必要なく (MonadPlus m) => ... は
(Monad m, Momoid m) => ... とライブラリの設計を変えても、
機能的には何も問題なく働くのではないかと思うのですが、どうでしょう?
(まだ何となくそう考えているだけで、詳しく検証はしていません)

(ただ、機能は重複しても意味が違うのであれば、
2つのクラスはそれぞれ区別すべきだとも思います)
101デフォルトの名無しさん:2011/07/23(土) 17:40:07.15
そりゃ単純に理論(圏論)からの要請だろう。
計算機に載せた場合、機能として同じなのかもしれんが、
モノイドは集合の構造だけれど、モナドは圏の構造だから
もととなる土台がぜんぜん違う。
102デフォルトの名無しさん:2011/07/23(土) 17:41:10.76
単純にMonadPlusの方が古いってだけの理由かもよ
103デフォルトの名無しさん:2011/07/23(土) 17:44:02.06
一次資料を持ってこないとなんともいえない。
104デフォルトの名無しさん:2011/07/23(土) 18:30:59.26
というか、Functorとモノイドを別々にしている時点でHaskellに数学的整合性を求める方が間違っている
105デフォルトの名無しさん:2011/07/23(土) 18:40:45.73
さくさくっと直しちゃえばいいのに
互換性とか言ってそのままなのはそのへんにある世俗のプログラミング言語と同じ
求めてるのは、おれたちにできない事を平然とやってのけるHaskellなんだ
106デフォルトの名無しさん:2011/07/23(土) 23:23:54.13
>>104
なんでFunctorとモノイドを別々にすると数学的整合性が問題になるんだよ。
Functorとモノイドは基本関係ないじゃん。
107デフォルトの名無しさん:2011/07/23(土) 23:32:09.89
諸君、議論しているね
108デフォルトの名無しさん:2011/07/24(日) 01:25:32.00
>>100
(a `mplus` b) >>= k == (a >>= k) `mplus` (b >>= k)とかもMonadPlusの性質としてあるんだけど
これもMonoidとMonadの性質だけから導き出せると思う?
109デフォルトの名無しさん:2011/07/24(日) 11:47:00.54
>>108
とりあえず実験として 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 関数に書き換えても、
同じ証明方法が使えるのではないでしょうか
110デフォルトの名無しさん:2011/07/24(日) 12:04:02.55
>>109
ごめんなさい、テスト方法に不備がありまして、False になる場合もありますね
導けないかも知れません

興味があるので改めてお尋ねしますが、
>>108 の式の恒等性はどうやって証明するのでしょうか?
111デフォルトの名無しさん:2011/07/24(日) 12:16:57.02
実験をしたり、標準ライブラリのソースを見ていて分かったのですが、

Monoid クラスの mempty 関数と MonadPlus クラスの mzero 関数は
ともに同じ意味を持つと思うのですが、
Monoid クラスの mappend 関数と MonadPlus クラスの mplus 関数は
意味が違うような気がします

意味の違いが機能の違いに繋がってきて、どうも代用はできなさそうですね
私の勘違いで、機能の重複は無さそうです

どう違うのかはまだ分からないのですが、圏論が関係してくるのでしょうか
112デフォルトの名無しさん:2011/07/24(日) 12:19:21.72
>>110
自分も両辺のMonadPlusのインスタンスに対してmzeroと/=mzeroの場合で場合わけすればいけるのかなーとか考えてたんだけどやっぱ無理なのか
http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/tactics.pdf
の論文ではMonadPlusのインスタンスが満たすべき性質として>>108の分配法則が提示されてるから、
多分MonadとMonoidってだけでは証明できないと思うんだよな
そういう疑問が沸いたので>>108の質問を投げかけたわけで
113デフォルトの名無しさん:2011/07/24(日) 12:19:28.29
仕様書を読みなって。悪いが妄想世界に陥り始めているとしか思えない。
114デフォルトの名無しさん:2011/07/24(日) 12:25:36.96
>>111
意味が違うというかMonoid則と>>=に対する分配律を含んだ代数構造に属するmplusと
Monoid則のみの代数構造に属するmappendじゃ全く別物じゃんとしか思わないんだけど
何か引っかかる所ある?
115デフォルトの名無しさん:2011/07/24(日) 12:37:07.95
>>114
いや、引っかかる以前に、自分の頭の悪さ、知識のNASAに凹んでます

それらの代数構造をもっとしっかり勉強して出直してきます

とりあえず >>112 の論文と、>>113 の言うとおり仕様書をじっくり読んでみます
116デフォルトの名無しさん:2011/07/24(日) 12:44:05.83
ようするにa( b>>=c) = ab>>=acを満たすかみたさないかのちがいだろ?
117デフォルトの名無しさん:2011/07/24(日) 12:46:09.72
>>115
いや、仕様書は関係ないよw
論文と抽象代数の初歩だけで十分
余裕があればCoqとかAgdaとかHOLみたいな定理証明系で代数的な構造作って弄ってみるのもいいかも
ある代数構造とそれに一つだけ別の規則を足しただけの代数構造が全くの別物って感覚がはっきりわかるようになるよ
あとはMonadPlusに関しては
http://www.haskell.org/haskellwiki/MonadPlus
http://www.haskell.org/haskellwiki/MonadPlus_reform_proposal
あたりに目を通すといいかも
118デフォルトの名無しさん:2011/07/24(日) 12:55:59.17
一歩踏み出すと数学地獄とかやっぱHaskellこわい
119デフォルトの名無しさん:2011/07/24(日) 13:23:04.15
でも>>108は例えばErrorモナドだと成り立たないよね
120デフォルトの名無しさん:2011/07/24(日) 13:32:42.99
>>117
抽象代数の初歩ですか、ありがとうございます

地元の図書館には、タイトルに「抽象代数」がある本はこのくらいしかない
・抽象代数学 1973年 秋月康夫/著
・抽象代数幾何学 1991年 永田雅宜/著

あとは代数学、あるいは代数学の歴史やら、数の体系と超準モデルなど

なにかお勧めの本ってあります?
一冊買ってみようと思います
121デフォルトの名無しさん:2011/07/24(日) 13:36:26.37
群環体入門が初心者にオススメ。
そのあと永田の可環体論を読むと良い。
122デフォルトの名無しさん:2011/07/24(日) 13:37:52.71
>>119
それに関する議論は>>117のhaskell wikiのリンク先に書いてあるよ
zeroを持つMonadZeroと分配律を備えるMonadPlus、return aが左零元になるMonadOrに分けようっていう内容だったか
でもそんなことするよかErrorみたいな類はMonadPlusよかControl.Applicative.Alternativeとして使ったほうが意味がはっきりするんじゃねーのとも思う
123デフォルトの名無しさん:2011/07/24(日) 13:40:45.60
>>118
自然科学の中では数学が王様だからね
計算機科学も数学様に寄り添っていかないと、科学でなくなっちゃう
124デフォルトの名無しさん:2011/07/24(日) 14:14:21.08
初心者を(初歩といえど)数学に誘導するのは止めようぜ
きっと帰ってこない
125デフォルトの名無しさん:2011/07/24(日) 14:24:34.38
数学という奈落へ続く落とし穴がぼこぼこ空いてるHaskellの道こわい
126デフォルトの名無しさん:2011/07/24(日) 14:41:39.71
>>122
ありがとうございます
今図書館に着いたので読んでみます

>>125
私は数学を楽しいと感じる類の人間なので問題ありませんが、
気持ちは分かります
127デフォルトの名無しさん:2011/07/24(日) 14:54:53.60
>>125
計算量という概念がある時点でHaskellは数学から大きく乖離している
128デフォルトの名無しさん:2011/07/24(日) 15:18:19.79
P neq NP は数学の問題では無いと申すか
129デフォルトの名無しさん:2011/07/24(日) 15:24:01.34
もはや数学の問題じゃないな
数学を使った問題ではあるが
130デフォルトの名無しさん:2011/07/24(日) 15:33:36.18
CMIに言って来たほうが良いよ
ミレニアム懸賞問題に数学じゃない問題が入ってるって
131デフォルトの名無しさん:2011/07/24(日) 15:35:28.25
要するに数理や計算機科学は数学ではないと言いたいんでしょ

それにしても、大きくかけ離れてるってのは言い過ぎだと思う
132デフォルトの名無しさん:2011/07/24(日) 16:18:41.63
>>127
えっ
133デフォルトの名無しさん:2011/07/26(火) 11:16:32.66
C++プログラムからハスケルを呼び出したりする方法あったら教えてください。
134デフォルトの名無しさん:2011/07/26(火) 15:12:05.23
>>133
Winだったらコンパイル済みのハスケルプログラムを spawn すればいいじゃん
135デフォルトの名無しさん:2011/07/26(火) 17:10:17.07
ふつうにFFIで
136デフォルトの名無しさん:2011/07/26(火) 21:14:51.77
あんまり安全安全言ってると、そのうち足元すくわれるぞw
本当に安全なら、どうしてGHCにバグが残ってんだってww
137デフォルトの名無しさん:2011/07/26(火) 21:18:44.11
程度問題だよ
138デフォルトの名無しさん:2011/07/26(火) 21:30:21.78
>>136
君が問題視している「安全」がどの部分の安全性の事を言ってるのかわからん
139Perl忍者:2011/07/26(火) 22:57:17.38
数学嫌いないのになんでやってるの?
バカじゃん

ほら

すぐ影響うけるんだな。
さっさと死ねよ影響うけるゴミは
まつもとひろゆきの影響か!?
死ね!!
140デフォルトの名無しさん:2011/07/26(火) 23:14:25.87
すごくまともな意見だ。
141デフォルトの名無しさん:2011/07/27(水) 00:16:47.68
この前python使ったら実行時にtype errorで落ちたわwwww
142デフォルトの名無しさん:2011/07/27(水) 00:25:49.33
例外じゃなくて?
143デフォルトの名無しさん:2011/07/27(水) 08:46:39.55
Haskellでプログラミングしていると、ときどきびっくりするくらい型エラーがでて、一つ一つエディタで当該箇所を直していく。

そんなことをやっていると、「オレ、よくjavascriptとか型の緩い言語でプログラミングできてたよな」とか思うだけど、
なんかの事情で、またjavascriptとか、pythonとかでプログラミングすると、それはそれでプログラミングできて動くんだよね。

なんか不思議な感じではある。
144デフォルトの名無しさん:2011/07/27(水) 18:54:45.74
Haskellってmatlabの替りに使える?
145デフォルトの名無しさん:2011/07/27(水) 19:02:09.85
>>144
替りというのは、具体的にはどんなこと?
146デフォルトの名無しさん:2011/07/27(水) 19:12:08.30
suuchikeisann simure-syon
147デフォルトの名無しさん:2011/07/27(水) 19:45:06.65
とりあえず LAPACK のインターフェース ライブラリはある
148デフォルトの名無しさん:2011/07/27(水) 19:58:26.88
ウホッ! いい言語 >>147
149デフォルトの名無しさん:2011/07/27(水) 20:11:10.49
そのライブラリっては hmatrix なんだが、
4年近く開発されてて未だにバージョン 0.11.1.0 だ

人気のあるライブラリだそうだから使えることは使えるのだと思うが、
Haskell のライブラリってこんなのばっかだよね
いつになったらバージョン1になることやら
150デフォルトの名無しさん:2011/07/27(水) 21:00:14.17
バージョン番号の付け方のポリシーなんて人それぞれだろ
151デフォルトの名無しさん:2011/07/27(水) 21:39:57.57
そりゃそうだ、人それぞれなのを理解した上で、単に個人的見解を述べているだけ
152デフォルトの名無しさん:2011/07/28(木) 23:15:34.19
LOVE IS BLIND
153デフォルトの名無しさん:2011/07/28(木) 23:34:35.45
Craftの3rdが出てたので買った
初心者からして関数合成とオフサイドルールの説明が
今まで読んだ中で一番よかった

foo x y =
    x
      *
  y

まさかこんなのが動くとは思ってなかったさ
154デフォルトの名無しさん:2011/07/29(金) 06:45:13.33
Haskellerのみなさん おせーて!
自分はlisperでemacs + slimeというような環境で開発スタイルを作ってる
のですが、
Haskellでの一般的な開発スタイルってどのようなものなんでしょう?
eclipseFP,vim haskell-mode,emacs+haskell-mode ...
いろいろあるようですが、
155デフォルトの名無しさん:2011/07/29(金) 07:31:24.17
>>154
「一般的」と言えるような開発環境はまだありません
好きなエディタでプログラミングしてください

個人的には、今のところ Haskell にインテリセンスは必要ないと思ってます
色分けとオートインデントがあれば十分ではないでしょうか

私は emacs + haskell-mode で上記2機能のみ使ってます
156デフォルトの名無しさん:2011/07/29(金) 08:51:54.60
>>154
私も、emacs + haskell-modeです。
あと、開発環境というか、ある型がどのクラスのインスタンスか、クラス・メソッドは何かといったことを、インタプリタ(ghci)のコマンドを叩いてよく調べています。
157デフォルトの名無しさん:2011/07/29(金) 09:22:09.74
ちょwwww
函数プログラミングの集いに前提知識が追加されてるwwww

おれ関数型まったくしらないJava屋の友達連れていこうかと思ってたけどそういうのは
止めた方がいいのかな。
158デフォルトの名無しさん:2011/07/29(金) 09:27:36.83
スタートHaskellでさえあの様でしたからな
とはいえ今回のは最初の3セクションぐらいは特定の関数型言語の前提知識無しでもそれなりについていけそうな話題だと思う
最初の2つはチュートリアルだしね☆
159Perl忍者:2011/07/29(金) 15:50:32.72
数学できないゴミが必死に数学好きになって自分は数学が詳しいみたいな
かっこつけてる
まつもとひろゆき信者は気持ち悪い

数学が苦手ならHaskellやらなければいいじゃん

なに?すぐ真似事だよほら

ほら

どうせMacbookだろ
言語はRuby+Haskell


ほらテンプレ
テンプレだよ

気持ち悪い死ね
死ねよ?早く死ねよ

真似事

数学苦手ならHaskellやる必要ない
無理に好き気取らなくていいよ
素養がないやつは不幸になるっていってただろ松本ひろゆきが

お前らのことだよゴミ
ごみだな
160Perl忍者:2011/07/29(金) 15:53:08.31
Haskell会場で そこらへんのゴミHaskellユーザーに聞いてみたよ

自分「Haskellでなにかつくったことあんですか?」

Haskellユーザー「いえいえ^^; えーと  勉強してるだけかなw」

とかほざいてたよ

こういうゴミがわんさかいるんだろうね


知的好奇心(情弱笑)

とかほざいちゃって

自分は勉強好きアピールしちゃって

ごみみたいだな
161デフォルトの名無しさん:2011/07/29(金) 16:22:46.76
>>155,154
こめんとありがとさん
色分けオートインデントがあればよさそうですね。
じゃあ、vim でも emacs でも良さそうだ。
vimもemacsもとりあえず環境だけは作ってみたけど
emacs+haskell-mode, screen+ghci/vim+haskell-mode
でもそんなに使い勝手は同じようなもんみたいですね。
162デフォルトの名無しさん:2011/07/29(金) 17:42:48.18
>>160
俺もtwitter民嫌いだよ
163デフォルトの名無しさん:2011/07/29(金) 19:42:48.07
Perl忍者生きてたのか
164デフォルトの名無しさん:2011/07/29(金) 21:07:58.55
俺もHaskellで書かないけど論文読むのは好きだな
そういう言語(笑)
165Perl忍者:2011/07/29(金) 21:10:29.86
Twitter民の便乗+影響がすげえ気持ち悪い
流行のことおいかけて逆に効率悪いだろあれ
頭悪いんじゃないの

新しい知識無理やり突っ込んでドキュメントあさるざま
まさにごみみたいだね
効率悪いだろ
頭悪い

それ1ヶ月ペースで繰り返してるね
言語とかデータベースとか

http://www.atmarkit.co.jp/news/200902/13/matz.html

Matzの影響
気持ち悪い

ここの会場の写真にうつってるやつ全員死ね
次はcofferScriptか!?
まだこんなミーハーごっこやってるんだな!落ち着きがない連中だぜ
さっさと死ぬなりしてくれ!!!
死ね!!!


emacsとかviとかHaskellとか情弱じゃん
効率悪いじゃん
カスタマイズに時間かけてんだろ バカみたいに
死んだほうがいいんじゃないんですかね?楽になりますよ?
166Perl忍者:2011/07/29(金) 21:11:24.93
まつもとひろゆき

「これから来る言語 Ruby Haskell Erlang APL」

信者気持ち悪い
167デフォルトの名無しさん:2011/07/29(金) 21:14:55.13
>>165
なんや 俺にいってるんか、^^; emacs やvimの環境はできてるし
1時間もかからんのに。最近Haskellが流行ってるかどうか知らんよ。
twitterもやってへんし。

お前おもろいから、Scalaスレに出向いて色々言ってこいよ。
興味がある。
168Perl忍者:2011/07/29(金) 21:25:23.32
Tsuwabuki君がいるスレはここですか

http://twitter.com/#!/iasija

tsuwabuki
tsuwabuki
@iasija
pi-calculus, CSP, lambda-calculus, haskell, erlang, HTML5, P2P, 料理作り(プリン・パンなど), 筍, 紅茶, サーバ運用, 自作サーバ, 電子書籍, iPhone, Android, Arduino, gumonji

早く死ねよ情弱
169デフォルトの名無しさん:2011/07/29(金) 21:53:59.81
perlいいですよね
170デフォルトの名無しさん:2011/07/29(金) 22:35:57.06
そう言いたい気持ちはなんとなくわかる。
誰が悪いわけでもない、根本的に対話の相手としての選択を間違えているのが
問題なんだ。
徒労に終わったのかもしれないけれど、ゼロになることを恐れていちゃ
なんにもならないよ。
171デフォルトの名無しさん:2011/07/29(金) 23:27:12.14
これからLLからどんどん徒労者がでるな
カオスがよりいっそう渦巻くだろうな
ssig33やHolyGrailを見てごらん
墜落だよ 墜落したLL  堕ちたLL
ssig33は努力したが選ばれなかった 選ばれなかったLL
HolyGrailは見栄を張ったあげく嘘で固めてunholyになりさがった
172デフォルトの名無しさん:2011/07/30(土) 07:26:30.34
妄想はよそうよ。
173デフォルトの名無しさん:2011/07/30(土) 09:06:38.55
判断がおかしい人間が多すぎなんだよ。
174デフォルトの名無しさん:2011/07/30(土) 09:08:36.91
Perl忍者にこのスレで反応するな
175デフォルトの名無しさん:2011/07/30(土) 09:21:38.23
自分も最初は単なる煽りかと思っていたけれど、ここ最近の反応は
表現を除いて言いたいことのみ考えれば、至ってごく正常なものだ。
176デフォルトの名無しさん:2011/07/30(土) 09:29:18.95
ここまで全部自演
177 【東電 62.6 %】 :2011/07/30(土) 10:02:43.14
にんじゃおもろい
178デフォルトの名無しさん:2011/07/30(土) 10:21:15.67
あんなリスキーな表現、実際思ってても使うわけないだろ。
179デフォルトの名無しさん:2011/07/30(土) 12:44:23.72
しばらく前に、craft3eの話題が少し出てたけど、
3eと2eでかなり変更があるように思うが、良かった点と悪かった点を
聞ければいいなぁ。
180デフォルトの名無しさん:2011/07/30(土) 15:40:35.60
忍者さんのありがたいお答え
181デフォルトの名無しさん:2011/07/30(土) 18:44:55.91
忍者に触る奴は全員忍者だぞ
182デフォルトの名無しさん:2011/07/30(土) 18:55:31.85
名言だな
183デフォルトの名無しさん:2011/07/30(土) 19:00:15.09
忍者化ウィルス
184デフォルトの名無しさん:2011/07/30(土) 19:46:36.45
この雰囲気では書きにくいが:
Learn You a Haskell for Great Good!
って 山本さんのPDFを見てると翻訳されるみたいなことが書かれてたね。
185デフォルトの名無しさん:2011/07/30(土) 19:53:16.88
>>184
haskellの入門書が増えるのは大歓迎だな
初心者にアピールするには入門書の数と質だと思う
186デフォルトの名無しさん:2011/07/30(土) 20:06:12.07
>>184
田中さんが訳してるはず
187デフォルトの名無しさん:2011/07/30(土) 20:14:22.61
初心者増やしたいならライブラリのマニュアル日本語化しろよ
せめて自分の愛用してる奴くらいは
188デフォルトの名無しさん:2011/07/30(土) 20:15:14.39
入門書の翻訳が出るのは喜ばしいのだが、プログラミング初心者向けの入門書が日本人の手で書かれないものか。。。
189デフォルトの名無しさん:2011/07/30(土) 20:18:51.03
田中さん暇なんだね
190デフォルトの名無しさん:2011/07/30(土) 20:21:46.39
>>189
暇にならないために訳の仕事受けたんじゃね?
191デフォルトの名無しさん:2011/07/30(土) 20:23:52.37
色んなプログラミングコンテンストで入賞している世界的に有名な人でもHaskellなんかに精を出した結果がこれか
192デフォルトの名無しさん:2011/07/30(土) 20:28:16.66
話切ってごめん

cabal install の途中で設定ファイルを手でエディットして
インストール続行するのって
具体的にどうやるの?

つまり下記みたいにしたいときのcabalのオプションはどうすればいい?

$ cabal insatll (pkg) tar.gzダウン+展開したところでとめる
(手でファイルを直す)
$ 上のcabal insatllを続行

要は前スレPart14 の94をやりたいんだけどcabalとかHaskellが
まだよくわってないもんで。
193デフォルトの名無しさん:2011/07/30(土) 20:31:18.52
cabal unpack パッケージ名
でいいんじゃね?
194デフォルトの名無しさん:2011/07/30(土) 20:45:12.65
本スレなのになんでこんな悲観的なんだよ
楽しければそれで幸せじゃない
195デフォルトの名無しさん:2011/07/30(土) 20:56:02.55
>>179
2eは読んでないし3eも100ページほどしか読んで無いんだけど
2eから3eの変更点は公式サイトに書いてあるよ
http://www.haskellcraft.com/craft3e/Changes.html

良い点として挙げられそうなのは、丁寧な説明、
図表を適度に含んでいる、練習問題が豊富、
プログラム自体の初級者向けの配慮が行き届いてることなど
(4章は『いかにして問題を解くか』 in Haskell)
逆にいえばHaskell中級者以上が読むにはコスパ悪そう

Learn You ... は練習問題がついてないのでCraftと対称的だと思う
196デフォルトの名無しさん:2011/07/30(土) 21:00:39.06
>>194
ネガる人が混じればこうなるけど、スルーして他で盛り上げましょ。:-)
197デフォルトの名無しさん:2011/07/30(土) 22:21:39.32
余談だけど2chの忍法帖っていうシステムは
Perl忍者をもとにして作られたんだよねこれが
Perl忍者の登場時期から、少し立ってから出てたからな
198デフォルトの名無しさん:2011/07/30(土) 22:22:06.40
つまり2chはPerl忍者の真似をしたわけだ
負けたんだな
ネタや発想的に
199デフォルトの名無しさん:2011/07/30(土) 22:32:55.77
>>193
ありがとう、おかげでパッケージを展開できたよ。

ついでに、展開して編集したパッケージフォルダを指定して
cabal installするにはどうすればいい?

cabal install (xx.cabalのあるPATH\)
でいいと思うんだけど
思うように事態が改善しないんで、ちゃんとPATH指定でinstallできているのか不安に
なってきたので、一応確認させてください
200デフォルトの名無しさん:2011/07/30(土) 23:28:54.45
>>199
展開して編集したパッケージの Setup.lhs や *.cabal があるフォルダに入って
"cabal install" とするだけでいいよ
201デフォルトの名無しさん:2011/07/31(日) 01:56:06.70
>>200 どもありがとうです
とりあえずコマンドはあってるっぽいです

ところで
>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 ってやっても
そんなパッケージないって言われるし、、
202デフォルトの名無しさん:2011/07/31(日) 02:27:05.78
>>201
pkg-config は Haskell のライブラリじゃなくて、
gcc なんかと一緒に使う exe ファイルのひとつだよ

たとえば gtk のライブラリ内にも入ってて、
gtk2hs をインストールしようとする場合にこれが必要になる
だから、インストールした gtk の bin フォルダへのパスを
環境変数 PATH に追加しておく

203デフォルトの名無しさん:2011/07/31(日) 10:13:45.69
コード書けたって社会性ゼロじゃあな…
204デフォルトの名無しさん:2011/07/31(日) 23:53:51.83
Haskell Invitational Handicap開催age
205デフォルトの名無しさん:2011/08/01(月) 22:27:27.28
Haskellはプログラムを書くための単なる一つの言語の名前だよ。
206デフォルトの名無しさん:2011/08/01(月) 23:45:48.94
>>202
ありがとう
別途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 に成功した人
どういう風にやったか教えて
207Perl忍者:2011/08/02(火) 16:28:48.49
くだらねえことやってんだな
ごみみたいな

お前が作れるアプリはゴミ

そう運命が語ってる
208デフォルトの名無しさん:2011/08/02(火) 16:39:17.00
Coqスレの方にはこないの?
209デフォルトの名無しさん:2011/08/02(火) 21:11:39.70
Coqスレとかあったのか、行ってくる。
210デフォルトの名無しさん:2011/08/02(火) 21:19:56.38
ところで、お前ら、Haskellのどこが好き?

オレは、高度に洗練された型システムが好き。
GHC拡張のGADTとか、多引数の型クラスとかも。

オレの中では、副作用がないとか、遅延評価だとかいうのは、じつはあんまり重要じゃない。
211デフォルトの名無しさん:2011/08/02(火) 21:46:04.66
>>210
上手く言えないけど、プログラミング言語っぽさが薄い所
ifとかswitch,forを見かけないのが良い
(ifなんて、言語でサポートしてるのに使われない)
212デフォルトの名無しさん:2011/08/02(火) 22:01:57.20
分岐をあまり使わないところ。 中括弧大好き言語じゃないところ。
213デフォルトの名無しさん:2011/08/03(水) 08:36:56.35
見た目が好きだな。遅延評価あってこその見た目なんでそっちも重要。
214デフォルトの名無しさん:2011/08/03(水) 20:15:42.48
「本物のプログラマはHaskellを使う」 が更新された

http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend


更新は毎月第1水曜日(1月のみ第2水曜日)
これってもう消してもいいような気がするんだが・・・
215デフォルトの名無しさん:2011/08/03(水) 20:50:45.47
ざっと眺めただけだけど、並列って…GHCが出力したコードはマルチスレッドみたいになってるの、これ?
216デフォルトの名無しさん:2011/08/03(水) 21:01:25.73
手で並列プログラムを書くのが前提でしょう
自動並列化は人類の夢
217デフォルトの名無しさん:2011/08/04(木) 06:06:47.45
豊かな大地は遙かな夢
218Perl忍者:2011/08/04(木) 08:58:59.56
214みたいなのってマジ好都合だね
情弱

学習というなの情弱

TomitaやHaskell著者の良い餌

「本物のプログラマはHaskellを使う」
っていうフレーズに洗脳

Matzのこれからくる言語の
「Haskell]に洗脳

ばかみたいだな

上位LL使いのHaskell勉強会
「俺もやってないと時代おくれかな 上の人もやってるしHaskellやっとこ」みたいなノリ

今すぐ死んだほうがいいよ
お前らみたいな流行に便乗してるキョロハーは
219Perl忍者:2011/08/04(木) 09:04:49.32
まあお前らがやることは
時間x金x学習価値

に見合わない代物ができあがるんだろう

Haskellだとなんだ?演算とか数式?
くだらないな

ゲームも作れる?
インベイダーとかブロック崩しとかでしょ笑わせんなって

くだらねええ

いい加減くだらなさに築けよ
まじで終わってんぞ

まあMatzとか上のやつらがHaskellっていってると
お前らの脳みそではHaskellが必要ってループされんだけど

Haskellのどこが好きとかほざいてる情弱もいるけど

言語仕様+学習についてしか学んでおらず
”知的好奇心(苦笑)”というなのお勉強
最終言い訳はパズルとかほざくのかな いや作るっていうよりかも 学びたいだけみたいな
ごみだな
220Perl忍者:2011/08/04(木) 09:09:35.14
お前ら洗脳されてて気持ち悪い
目的を果たすというより
言語をお勉強してる感じだな

新しい言語が出るたびにそれらを繰り返すんだろ?
Matzがなんか会議とかで

新言語の紹介したら

それに食いつくんだろ
Haskellやめちゃうかな

絶対やめそうだね

その新しい言語

全部Matzや上のLL使いの真似事

お前ら本当にうざい
書き込みみてるとぶっ○したくなるよ
221デフォルトの名無しさん:2011/08/04(木) 09:12:06.82
そう思ってるけど言う訳がない。
フォロー解除くらうよ。
たしかに、洗脳されてる人多いな。
222デフォルトの名無しさん:2011/08/04(木) 09:13:57.37
学ぶ理由なんだけど、勉強会やカンファレンスとかで
話のネタに困らないように、Haskellやってるわけで
>>目的を果たすというより
いや話のネタw なんか港で流行ってるみたいなので
223デフォルトの名無しさん:2011/08/04(木) 09:25:15.11
また 胡散臭い方向にスレを変えてるな。
うざいと言いながらスレを見に来る神経が理解できないな。
なんなの?この人
224デフォルトの名無しさん:2011/08/04(木) 09:32:46.13
>>222
話のネタ、共感っていうのも一理あるね。
225デフォルトの名無しさん:2011/08/04(木) 11:06:49.01
TSPとか川渡り問題解く方が現実的な使い方だよね
226デフォルトの名無しさん:2011/08/04(木) 11:15:12.95
役に立つか立たないかとかより、世の中に無いから作ったってことだけに価値があるのだろうな。
227デフォルトの名無しさん:2011/08/04(木) 12:06:00.21
バカが沸いてるな。
金融系とかでいくらでも使われてるという話が出てきているのに
「アーアー聞こえないー」とかw

川渡り問題みたいなのはPrologのほうが向いてるし、
TSPは計算量で解くならC言語とアセンブラ併用、理論的なアプローチなら
まずは紙と鉛筆だろ。
228デフォルトの名無しさん:2011/08/04(木) 12:09:58.51
>>223
なんなの?この人と思わせる術を使う
229デフォルトの名無しさん:2011/08/04(木) 12:11:44.70
早稲田の研究所でグレインがどうとかの自動並列化の研究やってたな、たしか
あれどうなったんだろう
230デフォルトの名無しさん:2011/08/04(木) 12:59:36.46
http://cdsmith.wordpress.com/2011/08/03/haskell-for-kids-introduction/
12,3歳児にhaskellを教えるんだって。イントロだけやけど。
231デフォルトの名無しさん:2011/08/04(木) 13:14:09.71
230で使いそうな、glossは2dグラフィックライブラリ(opengl系)
> 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.
が意識にあるんだろうな。
232デフォルトの名無しさん:2011/08/04(木) 13:28:44.93
わざわざ、やる価値もない言語だからなHaskell
やってる人は相当頭がいいっていうことか、そうかそうか
って言っても周りを見ると、WEB土方しかいない訳でw
233デフォルトの名無しさん:2011/08/04(木) 13:30:59.09
Haskellが実際に役に立ったっていう事例はないな。
よく、ほかの言語でもあるが、○○○で使われている「だから凄い」程度でしかない。
本質的に使うとなると実用性がない言語、2ch書いてるような輩が使うまでもない。
234デフォルトの名無しさん:2011/08/04(木) 13:34:41.80
金融系って、得体の知れない浮動小数点型の変数が
何を表すものかの型がないと怖いとか、そういう理由なのかな?
235デフォルトの名無しさん:2011/08/04(木) 13:37:00.40
>>233
バカとハサミは使いようなわけで、haskellを手にしても使い道のない人間の方が多いんだろ
○○で使われてるなら、pugsとか、xmonadじゃねーの?
236デフォルトの名無しさん:2011/08/04(木) 13:38:46.01
「本質的」来ましたーw
237デフォルトの名無しさん:2011/08/04(木) 13:41:52.61
>>235
だいたい、pugasみたいに2chで低レベルな部分を実装するやつがいるとは思えない。
まして、騒いでるITプロやTwitter民なども、使い道が見合ってない連中ばっかりだろ。
なんというか煙い。
238デフォルトの名無しさん:2011/08/04(木) 13:42:04.99
まず凄い人間がいてたまたま彼がしっくり来ると感じた言語がHaskellなだけであって
lisp系同様にHaskellが凄いんじゃなくてつかってる奴が凄いだけ
239デフォルトの名無しさん:2011/08/04(木) 13:51:57.57
>>238
なんていうのかな。。。 抽象化を上手にできる人ならlisp系やhaskell
にハマるんだと思うよ。アルゴリズムをそのままガシガシ書いている
感じになってくるからね。
でも、抽象化が不得意な人にとって見れば、ただの複雑怪奇な難解な
言語ということなんでしょう。
C++でも抽象化できるけど、あちらは抽象化すればするほど、すっきり
するんじゃなくて、泥沼に入ってしまう。
240デフォルトの名無しさん:2011/08/04(木) 13:54:55.60
Haskell見てて思うのは、ダイナミックプログラミングには強い
という印象だな。
また、極論を振りかざすだけの人は残念だけどHaskellには向いていないと思う。
そういった人が今数人あらわれているけど、さっさと自分に見合った言語を
みつけてそこで、腕を磨いてください。
241デフォルトの名無しさん:2011/08/04(木) 13:56:54.26
tanakh
tanakh 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使うメリットってなんだろうね
242デフォルトの名無しさん:2011/08/04(木) 13:57:53.13
otf含めこういうクズな連中がHaskellをやる理由が全く理解できない。
ブラウザでもあるけど
ガキってブラウザの名前沢山しってるよな、使ったり
あーいう感じかな。言語を沢山使ってます的な。
243Perl忍者:2011/08/04(木) 13:59:54.94
>>242
激しく同意

どう見ても 頭悪そうなツイートや身なり自己紹介をしてくせに
Haskellやるとか 本当におかしいと思うな
どうしたの!?ってかんじだよ
明らか研究職じゃないのに
ニートやアニオタのクソが使ってるとかわからない
242のいうとおりだ
244Perl忍者:2011/08/04(木) 14:01:36.95
Perlやるやつは高レベルだな

Haskellはバカアホ+研究職気取りしかやらない
日本人で使ってるやつの99%がにわか

にわか

バカを隠すための言語=Haskell

よってPerlの勝ち
245242:2011/08/04(木) 14:02:59.80
はい
246デフォルトの名無しさん:2011/08/04(木) 14:08:14.52

これでもよんどれ、Perl忍者一味
http://blog.tatsuru.com/2011/08/01_1108.php
247デフォルトの名無しさん:2011/08/04(木) 14:10:00.35
c++でstlつかうのって凄く面倒だし
コーディング作法やメモリの解法なんかでも無駄に行数のびるし
新規にプログラミングを始めるなら、手続き型は情弱言語だっていってみよう

ふつうに考えて高階関数ある言語の方が問題解くのに便利だよね
248Perl忍者:2011/08/04(木) 14:16:07.87
っでお前RSSとかページ取得とか
そういうのHaskellでやるの?
バカだな情弱だな
死ね?早く死ね
ゲームもHaskellか? まあ作れたとしてもインベイダーぐらい
調べたらその程度のゴミゲーム グライディウスとかそんなもんだよよな
さささとしね
249Perl忍者:2011/08/04(木) 14:17:17.45
おれさ
ここのカスどもとか
ツイッターでHaskellやってるごみと
すかいぷしたんだけど

話したんだよクソだったよ
Haskellやってるだけみたいな連中
何も作ってない何もできない
全員それだったゴミ20人そうだったな

ゴミしかいねーんだよごみしか
消えろ
250Perl忍者:2011/08/04(木) 14:18:40.48
死ねよ鼻デカ不細工
251デフォルトの名無しさん:2011/08/04(木) 14:21:21.25
>>忍者
そこまでHaskellを嫌うのにここに来て毒をまくのはなぜ?知りたい。
もしよかったら、忍者がHaskellと出会った時から、病的に嫌うようになった
原因を探ろうじゃないか?と思うので、過去から今までのHaskellとの
関係を書いておくれ、Matzもかなり嫌ってるようだけど、こちらはperlの
敵とみなしてるから?danさんが草葉の陰で泣いてるぞ
252デフォルトの名無しさん:2011/08/04(木) 14:22:19.44
tanakahと忍者の朝生とか見てみたい
253デフォルトの名無しさん:2011/08/04(木) 14:23:22.62
>>251
お前みたいなのがかまってくれるからだろ
いいからほっとけよ
254デフォルトの名無しさん:2011/08/04(木) 14:28:45.86
>>253
この人みてると、周りがいようといまいと関係ない人に見えるよ。かまって
ちゃんと言うより、ストレスのはけ口として使ってるだけだろうから。
概して狂人になったヒトというのは同じなんだけど、周りから良い影響は
まず与えられない。最終的に病院にいくしかなくなる。リアルの付き合いが
ある人たちくらいしか制御できないと思うかな。

幸い、この人専ブラならアボーンできるというのはいいことかも。でも
自演の匂いも少しあるが。

PS
忍者専用のスレがあるようだから、そっちに移動してもらうほうがいいな。
255デフォルトの名無しさん:2011/08/04(木) 14:48:05.35
そういや、Perl 6って、まともなOOP言語になるらしいね。
移行できなくって、イライラしている人がいるのかしら。
256デフォルトの名無しさん:2011/08/04(木) 15:12:46.79
pugsの実装を作ったのってhaskellだよね

ってか、RSS読んだり、webアプリを作るのがプログラミングだとでも思ってんのかな?w
257デフォルトの名無しさん:2011/08/04(木) 19:41:40.12
>>251
Haskell以外のとこでも、同じ様な文書いてるからスクリプトだろ。
258Perl忍者:2011/08/04(木) 19:53:39.24
他人の名前に寄り掛かるなクズ
259Perl忍者:2011/08/04(木) 20:00:34.46
>>251
ああ?
新しい言語がうざい
テリトリーを害される気分
Rubyが有名じゃなくてPerlより使われなかったらむかついてない
後からできたくせしてしゃしゃりやがってよ
うぜえんだよマジで そのせいでMatzやその信者たちも憎く見えるこ、ろしたいと思う
「Rubyを全面的に採用した東京ガスの地震防災システムの紹介」
こういうのなウザいんだよ
Rubyが存在するだけでPerlの立場がなくなる 勉強してきたって勢力で押されて
「え?Perl?なんでRubyじゃないの?」 「いまどきRuby Perlはオワコン」とかな いわれるんだよ
腹立たしく感じる 憎い ろこしたい
Rubyが新しく使われる 知名度があがるPerlはもうだめになる気がして名
しかもHaskellも最近すごいなんか言われてるだろ?
悔しいんだよ Perl使いが消える気がして
だから新しい言語がでるたびにPerlが追いやられる感じがして憎い
260Perl忍者:2011/08/04(木) 20:04:22.64
このスレのやつが憎い
Haskellやめて欲しい
死ね
261デフォルトの名無しさん:2011/08/04(木) 20:05:52.05
一見やっていることはおかしいはずなのに、
よくよく考えると正常なことをやっている。
262デフォルトの名無しさん:2011/08/04(木) 20:05:57.18
言語に嫉妬w
263デフォルトの名無しさん:2011/08/04(木) 20:45:40.34
複数のプログラミング言語を駆使してる者なんて、世界人口の1%も居ないのに、その中でのシェアw
264デフォルトの名無しさん:2011/08/04(木) 20:56:43.16
理由を話してくれてありがとう>忍者
テキスト関係の処理はまだ速いしPerlに自信を持ってればいいよ。
たぶんPerlを食ってる言語は世界的には隣のPだとは思う。Haskell
とは得意分野も違うから、そんなに危機感を持たなくていいよ。
10年くらい前の勢いは難しいかもしれないけど、ある一定数は
消えずに残る言語だと思うよ。
265デフォルトの名無しさん:2011/08/04(木) 21:00:39.48
>>263
そんなに少ないの? 意外。(俺が世間知らずなだけかも)
抽象化の腕を磨くには大変良い言語だし、他の言語の腕を上げる
のにもフィードバックできると考えとる。
266Perl忍者:2011/08/04(木) 21:04:35.23
うん
267Perl忍者:2011/08/04(木) 21:05:14.91
ありがとう
268デフォルトの名無しさん:2011/08/04(木) 21:09:15.55
ありがとうwwwwwwwwwwwwwwwwwwwwwwwwwww
269デフォルトの名無しさん:2011/08/04(木) 21:20:24.53
おかしな人が居付いてるね。おまいにはF-BASICあたりがお似合いだよ。Haskellとか無理だから
270デフォルトの名無しさん:2011/08/04(木) 21:23:47.13
忍者さんにdisられたら一流
271デフォルトの名無しさん:2011/08/04(木) 21:26:15.49
Haskellスレ住民とは思えない人が構っちゃってるからたちが悪い
272デフォルトの名無しさん:2011/08/04(木) 21:27:53.36
>>268
Perl忍者はHaskellやってないんだけど
273デフォルトの名無しさん:2011/08/04(木) 21:29:44.39
忍者に触る奴は全員忍者だぞ
274デフォルトの名無しさん:2011/08/04(木) 21:35:15.68
まぁ、忍者居ていいけど
スレ伸びるから、
275デフォルトの名無しさん:2011/08/04(木) 22:58:20.58
忍者弄りとcabalコマンドが主な話題
276デフォルトの名無しさん:2011/08/05(金) 22:41:45.10
記憶がどんどん書き換えられていく気がするのだけど、気のせいなんだろう。
277デフォルトの名無しさん:2011/08/05(金) 22:44:11.61
健忘の術
278デフォルトの名無しさん:2011/08/05(金) 22:49:13.79
>>276
記憶領域を上書きするような言語を使ってはいけません。
279デフォルトの名無しさん:2011/08/05(金) 23:31:45.81
Haskell 自習してるんだけど、参照型 IORef の動作がよくわからない。
例えば次のコードを走らせたとき、関数 writeIORef の引数 r の中身が変わってる。
引数の値を変えるなんて Haskell でできるの?

import Data.IORef

main = do
r <- newIORef 0
x <- readIORef r
print x
writeIORef r 1
x <- readIORef r
print x

そもそも、こういうのって関数の副作用とは言わないの?
俺は、純粋関数とは数学的な関数の挙動と同じにしようって
思想だと理解していたんだが、もっとゆるいんかな。
280デフォルトの名無しさん:2011/08/05(金) 23:36:05.44
>>279
r自体の値は変わっていない
rの値であるIORef型の値が指す先が変わっているだけ
281デフォルトの名無しさん:2011/08/05(金) 23:45:49.73
ghciってctags,etagsに対応してるんだね。
282デフォルトの名無しさん:2011/08/06(土) 00:31:09.90
ライフゲームをCUDAで書いてて思ったんだが
関数型でデータ並列とかめちゃくちゃ書きにくくね?
つかライフゲーム自体書きにくい。
283279:2011/08/06(土) 01:46:32.29
>>280
コンパイル後の機械語での動作はそうなんだろうけど,
haskell の文法上ではポインターなんて概念はないでしょ

IORef 型の値を,Haskell の意味論の中で理解しようとしたとき
どう考えればいいのかわからない.
284Perl忍者:2011/08/06(土) 07:36:39.23
>>282
お前うざいんだが
車輪の再発明

ライフゲームなんてすでに出てんだが

こういうとほとんどのやつがこう返すんだが

「仕組みを理解するためであって、車輪の再発明は関係ない。」

ばっかみてーだが
あほだな
どうせ人生ずっと車輪の再発明+勉強だろ
死ね情弱
285デフォルトの名無しさん:2011/08/06(土) 08:00:36.55
>>279
IOの中の純粋性なんてゆるゆる。
むしろ副作用あるかもよっていうマーク。
IORefに関してはファイル操作に置き換えて考えてみたら?
286Perl忍者:2011/08/06(土) 08:06:15.42
Haskellって驚きもなにもないよな
ごみみたい
自分は難しいことやってるって思ってるゴミが多い

作れるものはそんなpugsみたいなすごいものじゃなくてごみばっかり
すごいやつに任せればいいじゃん
まして2chに書いてるゴミなんてそんなサンプル程度だろ
287デフォルトの名無しさん:2011/08/06(土) 08:08:57.85
288Perl忍者:2011/08/06(土) 08:12:23.92
KLabもごみみたいなことやってんだな
車輪の再発明
Haskellで将棋のAIとか
くだらねえ

何も生み出せないよおもしろいもの

依存のゲームを、俺つええカッケー言語(Haskellなど)で書き換えたものばっかり
LLのやってることって浅はかなんだよね

コーディングとかすげーめんどくさくやってるけど
得られるものがごみくずだし

UE3とかUnityでゲーム作ってるやつのほうが完成したもの含めすべてにおいてすばらしいと思うわ

いくらHaskellで小難しい論理とかモナドとかほざいても

所詮ゲーム業界のやつらが作ったゲームと比べたら作品においてすべてがごみなんだよね

作品を求めるっていうよりかは、プログラミング!!プログラミング!!
プログラミングしてる自分すげー!!によってるごみばっかりだしな
何事もコーティング
完成した最寄かもコーディング ごみみたいだな
289Perl忍者:2011/08/06(土) 08:14:59.00
っ出お前らHaskellでなにつくったことあるの?

っていうとほとんど学習 作ったものはただのゴミみたいな計算機とかよくてゲームのシューティングや
ライフゲーム+オセロとかだろわらわせんなって

知的好奇心(笑い) 世の中に無駄なことはひとつもない(笑い)

とかいっちゃってお茶濁しちゃうからなあ

やっぱりゴミだな
290Perl忍者:2011/08/06(土) 08:17:48.15
車輪の再発明やってるやつがクズに見える

代用することを考えない

自己流(笑)  オリジナル(笑)自己満足(笑)



まさにクズだな
291デフォルトの名無しさん:2011/08/06(土) 09:33:46.62
忍者はCoqとかいざぼーとかNurPRL叩かないの?
292Perl忍者:2011/08/06(土) 10:06:48.63
ブラウザ厨と同じだよ
その大人版

気持ち悪いね
ガキがたくさん言語ほざくのと同じ

自己紹介にたくさん言語かいちゃうのとおなじ


ごみみたいだな くそアピール
293デフォルトの名無しさん:2011/08/06(土) 10:15:42.43
>>284
でどう並列化するの?
294デフォルトの名無しさん:2011/08/06(土) 11:12:47.99
いまさらだけど煽りみたいな批判するときはPerl忍者ってつけることを知った
まじイイネ
295デフォルトの名無しさん:2011/08/06(土) 11:22:30.87
>>283
いや機械語の話はしてない。あくまでHaskell上で、rの値は不変

>IORef 型の値を,Haskell の意味論の中で理解しようとしたとき
>どう考えればいいのかわからない.
IORefは例えばStringだと思って問題ない
命令「newIORef 0」は、ユニークな文字列を生成し、グローバルなテーブルに0とともに登録して、それを返す
「readIORef r」は、文字列rをテーブルから検索し、それに関連付けられている値を取得する
「writeIORef r 1」は、テーブル上で文字列rと結び付けられている値を1で置き換える
もちろん、これらの操作を通じてStringの値は変わらない

もちろん実際の実装はテーブル検索なんてまわりくどいことはしてない。rの実体は一個のポインタ
296デフォルトの名無しさん:2011/08/06(土) 11:39:46.30
>>279
IORef自体が変わるんじゃなくて、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
先ほどのプログラムがこのように自動的に書き換えられていると考えれば副作用は必要ない。
297296:2011/08/06(土) 11:41:19.48
被ってしまった・・・
リロードしてから書き込むべきだった。
298デフォルトの名無しさん:2011/08/06(土) 12:11:50.99
>>279, 283
> こういうのって関数の副作用とは言わないの?

少なくとも、それは関数の副作用ではない。

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の意味論上、そもそも値にバインドされていない記号、と言いたいけど、それが正しいという自信はない…
299デフォルトの名無しさん:2011/08/06(土) 12:18:56.22
モナドを一言で言うと「本末転倒」
300Perl忍者:2011/08/06(土) 13:32:00.86
目覚ませよお前ら
301279:2011/08/06(土) 13:51:52.86
あー,そうか
writeIORef による状態変化は戻り値の IO () に伝搬してるんだ.
IORef には参照先の状態も含まれてると思い込んでた.
実際は FilePath と同じように,ただのラベルなのか
302Perl忍者:2011/08/06(土) 13:57:55.32
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
303デフォルトの名無しさん:2011/08/06(土) 14:23:52.22
304Perl忍者:2011/08/06(土) 16:17:47.67
だれだよそいつ
そんなやつの乗せるな
早く死ね!!!!!!

目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
305デフォルトの名無しさん:2011/08/06(土) 16:25:21.15
専門卒の嫉妬が酷いな
量産体制に入ったウェブアプリに目新しいものなんてないだろ
いい加減、perlが時代遅れでjavaに負けたって認めればいいのに
306デフォルトの名無しさん:2011/08/06(土) 16:25:44.06
307デフォルトの名無しさん:2011/08/06(土) 16:48:31.53
Javaも10年遅い言語だよね
ブルーカラーのための言語
308デフォルトの名無しさん:2011/08/06(土) 19:24:14.51
304
Perl忍者はTreeBoaです

ソース
http://blog.plaync.jp/giko/302948.slog

@TreeBoaIsPerl
309デフォルトの名無しさん:2011/08/06(土) 21:12:10.79
別人だろ
ソースっていっても、なりすましの疑いもあるしな
310Perl忍者:2011/08/06(土) 21:18:13.36
そいつによく間違われるけどな
ああ、無視してくれない?
いいよ、反応しなくて
さっさと死ねよ鼻でか不細工
いちいち反応するお前らはクズだな
無視してくれ

お前らをグズ発言して 目をさまようとさせてるだけだから
311デフォルトの名無しさん:2011/08/07(日) 02:35:56.62
もうuyってコテは使わないの?鼻でか不細工
312デフォルトの名無しさん:2011/08/07(日) 06:24:16.70
モナドを一言で言うと、自分の手さえ汚さなければ何をやってもいいと思っている自己中
313デフォルトの名無しさん:2011/08/07(日) 07:12:55.22
自己関手の圏のモノイド対象
と大差無いぐらいわかりにくい例えだな
山本さんだかが言っていたprogramable semicoronというのが喩えの中では一番分かりやすいと思う
314デフォルトの名無しさん:2011/08/07(日) 11:04:20.65
解ってないんだな山本さん
315デフォルトの名無しさん:2011/08/07(日) 11:11:23.44
「モナド?あれでしょ副作用隠蔽するんでしょ?詐欺だよね〜」
みたいな、モナドと言えばIOモナドしか知らない人と
それ以外の人では話がかみ合うはずも無い
316デフォルトの名無しさん:2011/08/07(日) 11:18:41.94
モナドって暗黙のうちに値を渡していく能力が本質で
どのモナドも副作用って言われればそうだなあと思う
317デフォルトの名無しさん:2011/08/07(日) 11:22:48.15
318デフォルトの名無しさん:2011/08/07(日) 11:23:36.43
実装に副作用はないが使う側から見れば副作用
319デフォルトの名無しさん:2011/08/07(日) 13:03:54.60
教育コストが指数関数的に増大するという重大な副作用がある
320デフォルトの名無しさん:2011/08/07(日) 13:54:03.76
>>319
手続き型言語の事だよ。それ
関数型言語はむしろ教育コスト低いよ
321デフォルトの名無しさん:2011/08/07(日) 13:54:37.93
ははは
322デフォルトの名無しさん:2011/08/07(日) 14:46:14.77
分かった気になるという点では低いな
323デフォルトの名無しさん:2011/08/07(日) 14:51:12.98
>>320
日本語のテキストの量だけでも1対1000くらいで関数型のテキストの方が少ないと思うんだけど、これってテキスト書くレベルの人を教育するコストすら物凄く高いということだと思うけど
324デフォルトの名無しさん:2011/08/07(日) 14:54:25.99
>>322
マジレスすると、手続き型言語では分かった気になる事すら難しい
325デフォルトの名無しさん:2011/08/07(日) 14:55:09.87
それは遅延評価だから
モノ書けるレベルの人に、「書いて」ってお願いするまで
テキストが出力されない
326デフォルトの名無しさん:2011/08/07(日) 14:56:06.75
>>323
それは単にお金にならないだけ
学ぶ機会が少ないだけ
327デフォルトの名無しさん:2011/08/07(日) 15:00:56.77
>>324
手続き型なら分かる必要すらないということか…

たしかに、会社じゃ何のプロシージャか分からないのにプログラミングしてるのが普通だし
328デフォルトの名無しさん:2011/08/07(日) 15:26:00.99
手続き型言語はメモリモナドがデフォルトな関数型言語
329デフォルトの名無しさん:2011/08/07(日) 15:49:49.62
ぶっちゃげ、現時点では、Haskellの学習はかなり高コストだと思う。

本来は、IOモナドのdo記法は副作用を使うための特別なシンタックス、という認識でも支障ないと思うし、
その使い方はなんとなくdo記法を使っていればなんとなく理解できるとは思うんだけど、
現時点ではどうしても「モナドって何?」「圏論ってなに?」ってことを勉強したくなって、
よほど才能あるか、数学が得意でないかぎりかなりの苦闘になる。

でも、べつにいいじゃん。
そこで苦しんだだけの見返りはちゃんとあるよ。
330デフォルトの名無しさん:2011/08/07(日) 15:53:15.35
言語仕様で直接副作用を扱わなくてもよくなるという、
アプリケーションプログラマには何のメリットもない見返りな。
331デフォルトの名無しさん:2011/08/07(日) 16:04:41.48
だったら「アプリケーションプログラマ」=「おまえ」は使わなければいいだけの話だよ。
332デフォルトの名無しさん:2011/08/07(日) 16:22:09.65
コストが高いならば下げるよりほかない。
過酷な山登りに喩えられるようなコスト構造よりは、せいぜい大学受験ぐらい
に喩えられるコスト構造にしないと理論的内容も含めた普及はない。
一般的に好まれるのはローコストでハイリターンなものだからね。
333デフォルトの名無しさん:2011/08/07(日) 16:34:36.90
残念ながら匿名掲示板でどんな高尚な理屈を垂れたところで、
Haskellに(たとえば)MLのレコード型みたいに副作用が使えるものとか、
そういったものが入ることはありえません。

ローコストでハイリターンが好きなら一生PHPでもなんでも使ってるのが
あなたにとって一番の幸せだと思います。多分。
334デフォルトの名無しさん:2011/08/07(日) 16:37:29.43
正直IOモナドは副作用より自然で直感的だと思う
335デフォルトの名無しさん:2011/08/07(日) 16:52:10.82
>>333
なので、コストを下げる努力はしない、ということか?
336デフォルトの名無しさん:2011/08/07(日) 16:55:03.34
リストモナドだけは未だに気持ち悪い
なんでだろう
337デフォルトの名無しさん:2011/08/07(日) 17:01:44.98
>>331
そして誰も使わなくなったとさ
338デフォルトの名無しさん:2011/08/07(日) 17:09:07.61
>>337 そういう強がりは利用者がまだ10人とかいう時に言っておこうねw
339LLピザ:2011/08/07(日) 17:13:47.51
tokuhirom,yusukebeとかHaskellやってないしな
なのにすごい

お前らの脳みそ=Haskellやってる=すごい
らしいな
だけどバカだな

お前らクズじゃねーかよ

みたらTsuwabukiみたいな、へなちょこばっかりwwwwwwwwww
ゴミクズしかいねえのな
340デフォルトの名無しさん:2011/08/07(日) 17:14:25.67
>>338
大学以外で実務で使ってそれで金もらってる人は日本で10人もいないよ
341デフォルトの名無しさん:2011/08/07(日) 17:20:32.88
関数型は学者の頭の中の思考形式でプログラムできる(気がする)のが最大のウリだからな
342デフォルトの名無しさん:2011/08/07(日) 17:48:55.18
リリース予定って遅れる為にあるの?
343デフォルトの名無しさん:2011/08/07(日) 17:50:57.82
>>330
なんで? Parsecをdo記法で書けるのはすげー便利だが。

もともとWebアプリケーション用としてではなく、不完全なHTMLで書かれていて、かつ仕様も予告なくころころ変わるWebページを定点観測していたときには、すげー便利だったParsec。
Haskellがなければ、あんなこと二度としようとは思わん(それをやるだけで給料もらえるならやるけど)。
344LLピザ:2011/08/07(日) 17:50:59.55
>>338
現実みろよゴミ
345LLピザ:2011/08/07(日) 17:52:19.13
ツイッターみてきたけど雑魚が使ってたぞHaskell
ゴミだったな

まぁ使っていいのはMacだと木下、荻原、Matzあたりだろ
あとはゴミだしなMac使いは

そもそも2chに書き込んでるゴミが使ってもただの個人学習にしかすぎない
346デフォルトの名無しさん:2011/08/08(月) 14:57:16.67
7月予定だったplatformまだー
待ちくたびれたー
347デフォルトの名無しさん:2011/08/09(火) 00:40:23.37
Leksahってソース整形はできないの?
348デフォルトの名無しさん:2011/08/09(火) 18:16:00.53
>>343
普通にコンビネータ使える言語ならどうにでもならねえか、それ?
349デフォルトの名無しさん:2011/08/09(火) 20:28:00.00
>>348
実際に手続き型言語でパーサコンビネータを組んでみたけど、Parsecほど使いやすくはならなかったよ。
とくに順次処理をして自分の使いたい型のデータを返すのが、面倒な問題を引き起こす。

例えば、"000 - 000"という文字列を解析して、整数のペアを返したい。
厳密にコンビネータだけ使うなら、例えば seq(seq(number, string(" - ")), number)みたいなやり方をするわけだけど、
これは読みにくいし、せいぜい配列かリストを返すことになって自由な型のデータを返せない

他方、
 x = number();
 string(" - ")();
 y = number();
 return (x, y)
みたいにパーサーを実際に副作用させる構文で、自由な型のデータを返すことはできるけど、
最後の()を良く忘れるが必ずしも型検査に引っかからず、バグが見つけにくかった。

まぁ、実際に試してみれば分かると思うけど。
350デフォルトの名無しさん:2011/08/09(火) 20:29:20.56
Boost.Spirit.Qiとかか
351デフォルトの名無しさん:2011/08/09(火) 23:31:09.81
>>349
scalaのコンビネータライブラリなら
number~"-"~number ^^{case (x,_,y) => (x,y)}
だな
352デフォルトの名無しさん:2011/08/10(水) 00:09:13.74
>>351
do
 x <- number
 string " - "
 y <- number
 return (x, y)

のほうが読みやすくない?
これくらいなら大した差はないかもしれないけど、5〜6要素以上を抽出することになったら、そういう書き方だと面倒くさすぎるだろう。
353デフォルトの名無しさん:2011/08/10(水) 00:39:36.45
そもそも、>>330
> 言語仕様で直接副作用を扱わなくてもよくなる
> アプリケーションプログラマには何のメリットもない見返りな

というのと、

>>343
> なんで? Parsecをdo記法で書けるのはすげー便利だが

が、どう繋がっているのか分からない
だれか解説してくれたら助かる

>>343 のは言語仕様で直接副作用を扱うのかどうかというレベルじゃなくて、
プログラムのレイアウトのレベルの問題だと思うのだが
354デフォルトの名無しさん:2011/08/10(水) 01:45:57.75
>>353
俺も良く分からない。do記法って構文糖でしょ? 副作用を持つ言語でも同じことできるよね?

>>349もあんまピント合ってない気がする。seqとかは可変長引数とかで見やすくなるし、
演算子を定義しても良い。>>351みたいに。Haskell以外の言語でも問題なくできる部分。

自分で実装した時は、むしろ参照透明性とか遅延評価とかが大きいと思ったけどな。
正格評価だと迂闊にオブジェクトを作ると性能に響くし、かといって副作用で更新すると、
tryとかでオブジェクトをコピーしないといけない場面が出てきて、これまた性能に響く。
効率良く動作するものをHaskellやClean以外で作るのは地味にキツいんじゃないかと感じた。
355デフォルトの名無しさん:2011/08/10(水) 21:18:56.30
モナドが組込みでなくたって、lazyな言語なら全く同じことができるよな。
356デフォルトの名無しさん:2011/08/10(水) 23:26:58.91
「モナド」が何を指すのかによる
do記法のことなら(lispのようなマクロが無い言語では)組み込みじゃないと無理
あとlazyは関係が無い気がする。OCamlでもモナド使うし
357デフォルトの名無しさん:2011/08/11(木) 10:17:31.99
モナド内包表記って何に使うの?
358329=343=349=352:2011/08/11(木) 14:46:03.01
>>353

>>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)
って書くほうが、読みやすく、仕様変更に応じて手を加えるのにミスしにくい、とオレは思う。
しかし、そうは思わないという人が多いのであれば、これ以上はなんとも。
359デフォルトの名無しさん:2011/08/11(木) 15:04:53.22
OCamlのpa_monadは?
perform記法ってdo記法と似てると思うよ

http://www.cas.mcmaster.ca/~carette/pa_monad/
360デフォルトの名無しさん:2011/08/11(木) 16:34:30.62
>>358
何か直交する色んなことを一緒くたに混ぜてる気がするなー。

とりあえず、モナドの利点としてパーサコンビネータを出したのは分かった。(だよね?)
でも、do記法の便利さとモナドの便利さってレイヤーが違うよね?
切り分けないから「?」ってなるんだよ。

>>356が触れているように、Lispのようなメタプログラミングができたり、
>>359が紹介しているような構文拡張ができるプリプロセッサがあれば、
do記法はHaskell以外でも実現できる。

あと余談だけど、do記法については、

ttp://d.hatena.ne.jp/kazu-yamamoto/20101211/1292021817

って意見もある。逆の立場の意見も勿論あるから、これは人によると思う。
自分はdo記法の方が読みやすいと感じる。
361デフォルトの名無しさん:2011/08/11(木) 17:56:17.49
モナドって関数の合成をリーダビリティ高くやる方法見つけましたってだけじゃないの?
362デフォルトの名無しさん:2011/08/11(木) 18:01:51.22
もなどなど〜な〜 ど〜な〜
363デフォルトの名無しさん:2011/08/11(木) 18:21:43.01
>>358

>>329 は「そこで苦しんだだけの見返り」といってる

現時点ではどうしても圏論などとの繋がりが気になって勉強したくなるが、
でも数学が得意でないかぎりかなりの苦闘するよね、というのが「苦しみ」

(もっと深く知りたくて)圏論を勉強しようとして苦闘しても、べつにいいでしょ
苦闘しただけの見返りはあるよ、と言っている

>>329 の言う見返りは、圏論などを学んで「深く関わって」苦闘した上での見返りなんだよ
使い方自体は、do記法を使っていればなんとなく理解できるとも言ってるし

それを受けた >>330>>329 の言いたい事をちゃんと分かった上で、
「圏論などを学んでそこまで深く関わって」得られた見返りは、
アプリケーションプログラマにとっては特にメリットもないよね、と言ってる
使い方を理解すればアプリケーションプログラマには十分だということだろう

で、問題の >>343
それはべつに圏論などを学んで深く関わったからこそ得られた知識
という訳ではないだろう
どちらかと言うと、それは「使い方を理解すれば」の方ではないか?

何による見返りについて話しているのか、が前レスと異なっているように思える
このズレが違和感を覚える
364デフォルトの名無しさん:2011/08/11(木) 18:52:17.75
モナドが関数の合成であるとは限らないでしょう
WriterとかMaybeとか色々あるでしょう
365デフォルトの名無しさん:2011/08/11(木) 19:33:29.84
あ、ちなみにScalaでもこんな風に書けるよ
for {
 y <- number
 _ <- string("-")
 m <- number
 _ <- string("-")
 d <- number
 _ <- string(" ")
 h <- number
 _ <- string(":")
 m <- number
} yield (y,m,d,h,m)
366デフォルトの名無しさん:2011/08/11(木) 21:07:46.63
scalaのforがhaskellのdoに見えてきた、、、
367デフォルトの名無しさん:2011/08/11(木) 21:15:45.91
ScalaはHaskellだったのか!
368デフォルトの名無しさん:2011/08/12(金) 02:47:52.52
http://www.google.com/m?hl=ja&gl=jp&
q=%E3%83%A2%E3%83%8A%E3%83%89%E3%81%AF%E8%B1%A1%E3%81%A0
PART2の最後にhaskellのdoとscalaのforの対比があるよ
369デフォルトの名無しさん:2011/08/12(金) 02:50:25.65
370デフォルトの名無しさん:2011/08/16(火) 20:37:25.69
ghc 7.2が出たみたいね。
http://ja.wikipedia.org/wiki/GHC
371デフォルトの名無しさん:2011/08/16(火) 21:15:59.99
http://www.haskell.org/ghc/

きとったか
372デフォルトの名無しさん:2011/08/16(火) 22:21:34.71
GHC 7.4 won't have top-level MonoPatBinds anymore!
http://hackage.haskell.org/trac/ghc/ticket/2357
373デフォルトの名無しさん:2011/08/17(水) 09:29:16.82
Scala is NOT Haskell but a child of Haskell.
374デフォルトの名無しさん:2011/08/17(水) 16:08:28.02
7.2 のghciに新たにできた? :set +m はよさそうね。replの
使い勝手が少し良くなりそう。
375デフォルトの名無しさん:2011/08/18(木) 11:47:29.02
プログラミングHaskellのp.41に
add x y = x + y

add = \x -> (\y -> x+y)
は同等と書かれているのですが、
前者は add :: Num a => a -> a -> a
後者は add :: Integer -> Integer -> Integer
になり、後者は小数の加算ができません。
どこからIntegerだと型推論されるのでしょうか?
GHC7.0.3もHugsも同じようです。
376デフォルトの名無しさん:2011/08/18(木) 13:05:53.11
Monomorphism restriction
377デフォルトの名無しさん:2011/08/18(木) 13:08:39.12
defaultingという仕組みによるものです。
http://www.sampou.org/haskell/report-revised-j/decls.html#sect4.3.4

上のレポートにあるように、add :: Num a => a -> a -> aと型シグニチャを書くか
defaultingを止めるためにモジュールの先頭で

{-# LANGUAGE NoMonomorphismRestriction #-}
default ()

としてやると意図通りの型になります。
378デフォルトの名無しさん:2011/08/18(木) 13:09:40.86
>>375
ほんとだ、、、
型かけばちゃんとNumになるのに、、、
379デフォルトの名無しさん:2011/08/18(木) 14:52:23.51
>>376,>>377
ありがとうございます。

4.5.5にそのままの例が載っていますね。
今の自分にはかなり難しいので、
もうちょっと理解が進んでからよく読み直してみたいと思います。

ところで、
{-# LANGUAGE NoMonomorphismRestriction #-}
default ()
をすると、p.18の練習問題にある
n = a `div` length xs
where
a = 10
xs = [1,2,3,4,5]
がエラーになってしまいます。
型推論に頼るのはなかなか難しいものですね。
380デフォルトの名無しさん:2011/08/18(木) 15:08:33.58
> 379

最小の再現コードは

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])
381デフォルトの名無しさん:2011/08/18(木) 15:12:32.55
基本的にはdefaultingが云々とか気にせず、自分の想定している型を
書くようにするのが嵌らないし、良いお作法だと思いますよ。
382デフォルトの名無しさん:2011/08/18(木) 16:09:06.94
何度もありがとうございます。
型シグネチャをつける有用性がよくわかります。

型が曖昧というのは、length が使われる環境から 1 とか 2 の型が確定できな
いということでしょうか。
で、数値に限っては、こういう場合にデフォルトがとれるようにしてあると。

ためしに、
s = show 1
をやってみるとエラーになるのも、たぶん同じ理由ですね。

ありがとうございました。
383デフォルトの名無しさん:2011/08/18(木) 22:22:49.57
整数を扱うとき、IntにするかIntegerにするかいつも迷う。
(大きさはIntで十分。効率も問わない場合)

どちらが基本(多くのライブラリ関数が想定してる)のだろう?
384デフォルトの名無しさん:2011/08/18(木) 22:55:41.28
余程大きな数を扱う可能性が捨てきれないとき以外は普通は Int じゃないか
いくら Integer の処理速度が上がってきているとはいえ、
メモリ量も処理速度も Int の方がまだまだ圧倒的に効率いいよね

Hoogle でざっと見てみたところ、日付や時間を扱う関数では Integer をよく使うね
それほど真面目に調べてはいないけど、それくらいしか見当たらないような気がする
385デフォルトの名無しさん:2011/08/19(金) 11:07:25.10
これだけ型安全に拘った型システムで、
実行効率を犠牲にしてでも遅延評価による計算可能性に拘った言語で、
わざわざ有限桁の整数型つかうのかよw
386デフォルトの名無しさん:2011/08/19(金) 12:38:39.50
>>385
そのようなしっかりした根拠とポリシーを持っているのなら、
あなたは無限桁の整数型を使えばいいだけの話だよ

人の意見に無理に従う必要は無い
387デフォルトの名無しさん:2011/08/19(金) 14:30:19.72
まだ、発展途上なんですよ
388Perl忍者:2011/08/19(金) 15:49:10.04
お前らまだこんな無駄なことやってんのか
かわいそう
















哀れ
389デフォルトの名無しさん:2011/08/19(金) 15:52:45.11
>>387
発展途上ったって、bignumぐらい有限桁とシームレスに使わせろよ。
LISP以下だぞwww
390デフォルトの名無しさん:2011/08/19(金) 17:03:02.57
LISP使ってろって
391デフォルトの名無しさん:2011/08/19(金) 19:11:23.21
実際Integerは遅いんだから仕方ない
Integerを多用してるtimeライブラリがボトルネックになることがあるくらい
392デフォルトの名無しさん:2011/08/19(金) 19:47:12.79
なんで遅いの?
他の言語だと同じような遅さはあるの?
それともHaskellの実装が腐ってるの?
393デフォルトの名無しさん:2011/08/19(金) 19:47:23.40
LISP使ってろって
394デフォルトの名無しさん:2011/08/19(金) 20:50:19.60
なんで、ってBigNumだからとしか言いようがない

他の言語でもBigNumなら似たようなもん
395デフォルトの名無しさん:2011/08/19(金) 21:29:37.20
Int作ったやつ頭おかしいだろ
まともに整数を実装できてないデータ型なんだからUnsafeIntにすべき
危険なのにもかかわらずunsafeが付いていないのはおかしい
headやlastと同じくらい消えるべき存在
396デフォルトの名無しさん:2011/08/19(金) 21:48:21.28
>>394
んなこたねえよ。
今時の処理系なら小さい数字のパフォーマンスはほとんど落ちない。
遅延評価のコストに比べりゃ誤差の範囲内だ。
397デフォルトの名無しさん:2011/08/19(金) 22:08:29.77
と、数字も出さずに語るのが関数型スレの特徴です。
398デフォルトの名無しさん:2011/08/19(金) 22:14:39.36
自分で比較実験すれば容易に分かることをいちいち提示しないのが関数型スレ

そんな簡単なことも面倒がってやらない >>397 のような奴は消えろ
399デフォルトの名無しさん:2011/08/19(金) 22:34:54.53
いやどう考えても>>396は間違ってる
遅延評価のコストは小手先の最適化でかなり回避できるけど、
Integerを使ってしまったら局所的にいじってもどうにもならない
400デフォルトの名無しさん:2011/08/19(金) 22:41:33.26
fixnumの範囲の値はfixnumで扱って、bignumの範囲の値はbignumで扱い、
それをひとつの型で隠蔽するっていう、最近ではごく普通に使われる手法の話じゃないの?
401デフォルトの名無しさん:2011/08/19(金) 22:46:53.72
>>400
それをやってるのがInteger
402デフォルトの名無しさん:2011/08/19(金) 22:57:46.47
じゃあ、それでも遅いってことは、>>392の言う所の後者ということで、
プリミティブなインストラクションを生成しないとかで、GHCの最適化性能が良くないってこと?

まさか多倍長整数の計算をしてて遅いとか言ってることはないと思うけど、どうなんだろう。
403デフォルトの名無しさん:2011/08/19(金) 23:01:12.18
間接参照を剥がすのが遅い
404デフォルトの名無しさん:2011/08/19(金) 23:07:13.43
なるほど。それじゃあ、現状で複数の型があるのは現実的な選択なわけだ。
個人的には>>395の言うようにUnsafeIntとかの方が良いと思うけど、互換性の問題があるだろうし。
教えてくれてありがとう。
405デフォルトの名無しさん:2011/08/19(金) 23:15:32.47
>>395
> まともに整数を実装できてないデータ型なんだから「Unsafe」Intにすべき

Haskell における Unsafe というのは、そういう意味なの?
406デフォルトの名無しさん:2011/08/19(金) 23:16:44.90
理想的にはlengthとか!!とかもIntegerベースにしたいところだろうが、
まだきついか。
407デフォルトの名無しさん:2011/08/19(金) 23:21:25.14
>>406
冗談だろ
408デフォルトの名無しさん:2011/08/19(金) 23:24:38.85
>>406
Data.List.genericLength
Data.List.genericIndex
理想主義者のためだけに用意された関数だ、受け取れ
409デフォルトの名無しさん:2011/08/19(金) 23:25:32.77
Integerにしてもコンパイルすると32bitまたは64bit値として扱われるとかそういうのならおk
むしろIntegerどころか0とSuccが定義されてるなんらかのクラスのインスタンスならなんでもおkみたいなぐらい一般化してくrくr
どうせ最終的にAgdaとHaskellはシンクロする運命なんだし
410デフォルトの名無しさん:2011/08/19(金) 23:28:47.26
>>409
> Integerにしてもコンパイルすると32bitまたは64bit値として扱われるとかそういうのならおk

その Integer 型の値が32bitまたは64bit値に収まる範囲しか使っていないのかどうか、
コンパイル時にどうやって調べるの?
411デフォルトの名無しさん:2011/08/19(金) 23:30:20.00
正しさの検証をしやすいのは圧倒的にIntegerだねえ
412デフォルトの名無しさん:2011/08/19(金) 23:34:21.47
Agdaとシンクロして自動証明のテクニックでどうにかするようになればいい
413デフォルトの名無しさん:2011/08/20(土) 00:50:24.23
ルビを最適化した天才ティーンネイジャー呼んで最適化してもらえよ
414デフォルトの名無しさん:2011/08/20(土) 08:46:38.54
いくら i++ しても 0x7fffffff に達することはないと仮定したお気楽コード書いてる奴なんだろうな
415デフォルトの名無しさん:2011/08/20(土) 08:54:19.63
length :: forall a n. Integral n => [a] -> n
let unmo = length xs in
(hoge :: Int) + unmo
こんな感じで一般化されたものを使用される部分で明示的に効率重視の型に制限してやるとコンパイル時に最適化可能だから
その辺のアプローチでいくのが現実的かな?common lispのtheみたいなものか
でも行き着く先は依存型を使って、コンパイラが自動n∈[minBound (a:=Int), maxBound(a:=Int)]的な命題の証明を試みて
それが通ればIntに具体化するみたいな機構になると思う
416デフォルトの名無しさん:2011/08/20(土) 11:11:14.23
417デフォルトの名無しさん:2011/08/20(土) 16:32:32.45
>>415
それを証明出来るケースなんて、そう多くないぞ。
418デフォルトの名無しさん:2011/08/20(土) 16:50:59.40
win版のhaskellってメモリ簡約使ってないの?
linux x86-64版だと時間かかる処理でも一回実行すれば、メモリ簡約が効いて速くなるのに、winだと速くならん
同じ処理時間が掛かってる
419デフォルトの名無しさん:2011/08/20(土) 17:25:34.61
>>418
Linuxでメモリ簡約が効いていると判断した手段を用いて、Windowsでメモリ簡約が効いているかどうかを確かめてみる
420デフォルトの名無しさん:2011/08/20(土) 17:27:45.63
>>419
いや、だから使って見て明らかに効いてないんよ
421デフォルトの名無しさん:2011/08/20(土) 18:46:44.53
>>418
メモリ簡約ってのは初めて聞いた言葉だけど、メモ化のこと?

問題をもう少し絞り込みたいんだけど、
とりあえずコア言語レベルではどちらのOSでコンパイルしても同じなの?

それを再現できる可能な限り小さいプログラムのソースは提示できる?

422デフォルトの名無しさん:2011/08/20(土) 18:51:43.25
>>418
あと、+RTS -p オプションで出力した *.prof ファイルで、
問題の関数の entries や %time はどちらのOSでも同じなの?

他に *.prof ファイルで、Linux と Windows で違いは出てる?
423デフォルトの名無しさん:2011/08/20(土) 18:52:33.82
>>421
メモ化の事です

sum関数に時間が掛かってると感じる程度の、でかいリスト入れればおk
もう一度、同じ引数渡したら、普通はメモリ内を検索して結果を返すだけの時間しか掛からない
424デフォルトの名無しさん:2011/08/20(土) 19:17:41.45
>>423
申し訳ないが、具体的にあなたが試したコードを見せてくれないだろうか
原因が他に隠れている事は一切無いとは言い切れないし、
一字一句同一のコードで試したい

あと大事なことを忘れていた
各OSのバージョン、およびGHCのバージョンも教えてほしい
425デフォルトの名無しさん:2011/08/20(土) 19:22:31.80
この具体的なコードの出さなさ具合と環境を言わないのと根拠があいまいな点から考えると
問題の切り分けにすら不慣れなレベルで
8割くらい他の原因orただの勘違いと予想しておくよ
426デフォルトの名無しさん:2011/08/20(土) 19:28:32.37
そもそも、今の GHC って自動で「引数 <-> 戻り値」のメモ化するの?

最新のは知らんが、少し前までは自動ではメモ化しない方針だったはずだが
427デフォルトの名無しさん:2011/08/20(土) 19:33:03.81
>>424
ghci上だし、単純極まりないですよ?

sum [1..10000000]

以上ですw
実行ファイルで試すなら、上記コードを繰り返す実行ファイルを作るとかでしょうか。。。

環境は
win7 ghc 7.2.1
ubuntu 11.04 ghc 6.12.3

cpu Core i5 memory 2GB(デュアルブートなので、ハードスペックは同一です)

428デフォルトの名無しさん:2011/08/20(土) 19:34:35.34
あ、ubuntuは64bit版です
多分コンパイラも64bitかと
429デフォルトの名無しさん:2011/08/20(土) 19:45:27.10
以上ですw じゃねぇよ、コピペで完全に再現できるコードを示せ
GHC のバージョンを揃えて実験しろ
+RTS -p オプションで出力したプロファイラを比べろ

何度も言わせるな


これからこちらで ubuntu のデュアルブートの環境を作りますから、
それまでに完全なソースコードと、プロファイラの実験をお願いします
430デフォルトの名無しさん:2011/08/20(土) 20:23:01.74
環境間でのオブジェクトコードの比較するのにバージョンすら揃えないってのはどうなのよ……。
431デフォルトの名無しさん:2011/08/20(土) 21:13:03.95
それghciで1.5Gも食いやがる。^^;
432デフォルトの名無しさん:2011/08/20(土) 21:31:25.40
一応実行ファイルになるコードは書けたんですが、+RTS -pオプション付けるとエラーが出るんですが。。。
(-pを消すと一応エラーは出ない)

プロファイルとかとった事無いので、分かりません。。。

元が単純なので、一行コードです

main = putStr ((show. (( sum [1..100000]) + ( sum[1..100000]))) ++ "\n")

バージョンは最近までhaskellPratformで同じバージョンにしてたのですが、ghcの最新バージョンをwinの方に入れたので。。。
(linuxは初心者なのでcabからしか入れられないです)
433デフォルトの名無しさん:2011/08/20(土) 21:32:33.92
>>431
プロファイルとか分からないんで、体感出来るくらいの差が出るようにしたら、そんな事になりました
434デフォルトの名無しさん:2011/08/21(日) 09:37:09.98
諸君、良い朝だ
議論したまえ
435デフォルトの名無しさん:2011/08/21(日) 09:58:37.58
>>434
>>432のプロファイルの取り方教えて下さい
436デフォルトの名無しさん:2011/08/21(日) 10:15:45.02
なんでドキュメント読まないの?
なんでググらないの?
バカなの? 死ぬの?
437デフォルトの名無しさん:2011/08/21(日) 10:23:04.78
>>436
realWorldHasell読みながらやってみたけど、上手くいかない。。。
438デフォルトの名無しさん:2011/08/21(日) 10:38:52.07
書籍は情報が古くなる場合もあるから、公式のドキュメント読んだ方が良いよ。
あと、上手くいかないって、どこが上手くいってないのか教えてくれないと、
エスパーじゃないと教えられんと思うよ。エラーメッセージくらい出そうぜ。
439デフォルトの名無しさん:2011/08/21(日) 10:49:29.33
>>438
ありがとう
もうちょい頑張ってみます

初めてプロファイルなるもの出そうとしてるから、ファイルが生成されるのか、何か表示されるのかすら分かってない

RTSとは何をするのかから、調べてみます

エラーは、RTSへのオプションが違うと言われてるんで、

プログラム名 +RTS -p -RTS

の-pに何か追加で書くのが有るんじゃ無いかと推測してるんですが。。。
440デフォルトの名無しさん:2011/08/21(日) 12:12:34.44
+RTS -s -RTSなら通ったので、一応linuxとwinでファイルに保存してzipに固めました。
URL長いですが・・・

https://skydrive.live.com/?sc=documents&cid=c4a8aea1fe363811#cid=C4A8AEA1FE363811&id=C4A8AEA1FE363811%21767&sc=documents
441デフォルトの名無しさん:2011/08/21(日) 12:59:23.35
ghc-7.0.3では
コンパイルする時に-prof -auto-all -rtsopts付けて
実行時に+RTS -p -RTSだけでいけましたお
442デフォルトの名無しさん:2011/08/21(日) 13:06:09.77
>>432
だからな、コードは書き写しじゃなくてコピペしてくれ
show の後にドットがあっては型エラーだろ?

次のコードで試してみてくれないか?

main = putStr (show ({-# SCC "sum1" #-}sum [1..100000] + {-# SCC "sum2" #-}sum [1..100000]) ++ "\n")

コンパイル時はオプション 「-O2 -rtsopts -prof」 を付けてくれ
実行時はオプション 「+RTS -p」 を付けてくれ

そうすると、*.prof ファイルができる
ただのテキストファイルだから適当なエディタで開いてくれ

>>443 へ続く
443デフォルトの名無しさん:2011/08/21(日) 13:06:33.26
>>442 からの続き

下の方に列名が 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 で一瞬だった)

とりあえず結果のみだ、こうなる理由はこれから検証してみる
444デフォルトの名無しさん:2011/08/21(日) 13:08:05.01
>>441
コンパイル時に-rtsoptsしか付けてませんでした。。。
再度挑戦して来ます

本当にありがとうございます
445デフォルトの名無しさん:2011/08/21(日) 13:12:50.71
>>442
了解です
446443:2011/08/21(日) 13:24:29.97
すまん、うちの Windows7、GHC 7.0.3 の結果が違ってた
ソースファイルを保存しないで、間違ってた古いファイルでコンパイルしてた

正しくは、sum1 も sum2 もほぼ 50% の処理時間で、50% のメモリ量だった

つまり、どちらの sum もしっかり同じ総和計算をしていた
GHC はメモ化は自動では行わないと私は思っていたから、
これは予想通りと言えば予想通り


さきほど ubuntu をやっとインストールできたから、
これからそちらでも試してみる
447デフォルトの名無しさん:2011/08/21(日) 13:55:43.83
>>446
>>432のコードで良いんですよね?
出かけないと行けないので、帰ってからうpしますが、こちらも似たような結果でした
どうも、GCがlinuxの方が速いのが勘違いの原因みたいな。。。
(>>440でうpしたファイルから推測)
448443:2011/08/21(日) 14:07:32.68
>>447
> >>432のコードで良いんですよね?
意味はそれいでいいけど、show の右のドットは消せよ

実は私の >>446 の結果は、[1..100000] じゃなくて [1.10000000] でやってみた
2.5秒ほどかかって、先ほども言ったように処理時間&メモリ量ともに半々だった

私も出かけるので、ubuntu での検証は後でしてみる
449デフォルトの名無しさん:2011/08/21(日) 15:20:35.37
450443:2011/08/21(日) 21:40:15.68
ubuntu 11.04
GHC 7.0.3

で、全く同じプログラムを全く同じように試してみたが、
Windows で試した時と全く同じ結果だったぞ
(こちらでも [1..100000] ではなく [1.10000000] で実験した)

こちらも、sum1 と sum2 でほぼ50%ずつの時間を消費し、
ほぼ50%のメモリ領域を使ってた
Windows で試した時よりも若干遅かったが

GHC のバージョンを揃えて試した結果だ
予想通り、GHC は自動でメモ化は行わないんだよ

そちらの ubuntu で試して明らかに Windows より速いのなら、
メモ化ではない何か別の要因だと思うぞ
451デフォルトの名無しさん:2011/08/21(日) 22:09:54.44
>>450
長々とお手数掛けました
ありがとうございますm(_ _)m

検証に使ったコードだとGCで2倍の速度差が出てるみたいでしたので、最初のやたらメモリ喰うコードだと差が大きくなったのかと予測してます

何なんでしょう。。。
コンパイルでもlinuxの方が速かったし。。。
コンパイラの32bitと64bitの差でしょうかね。。。

ともあれ、ありがとうございました!!

452デフォルトの名無しさん:2011/08/21(日) 23:03:58.49
コンパイルに関してはwindowsネイティブでやるよか
仮想環境上のubuntuでやった方が明らかに速いとかあるからな・・・
453SCHEME餃子 ◆8X2XSCHEME :2011/08/21(日) 23:39:54.68
グラフ簡約があるんでないの?
それで 50% ずつ消費されるってのは納得いかないな。
454443:2011/08/21(日) 23:53:21.45
f x = x + x という関数の f (3 + 1) という適用なら
x がグラフ簡約されて (3 + 1) は1回しか計算されない

でも、f x = g x + g x という関数の f (3 + 1) という適用だと、
たしかに x がグラフ簡約されて (3 + 1) は1回しか計算されないが、
g x つまり g 4 は記述通り2回計算される
g の引数 4 とその結果の値との対応関係がメモ化されないからだ

今回のは後者に相当する
455デフォルトの名無しさん:2011/08/21(日) 23:53:23.43
この例だと二つのグラフが独立に存在するだけで繋がってない
456デフォルトの名無しさん:2011/08/22(月) 02:58:29.15
ま、scalaの方が上だなw
457デフォルトの名無しさん:2011/08/22(月) 04:13:05.91
>>454-455
じゃじゃじゃあどうしたら良いの?
458デフォルトの名無しさん:2011/08/22(月) 04:16:09.37
graph rewritingの本でも読め
459デフォルトの名無しさん:2011/08/22(月) 07:40:53.68
>>457
let x = sum [1.1000000] in x + x
とやればいい
460デフォルトの名無しさん:2011/08/22(月) 09:39:56.39
>>459
あり^^
もちろんwhereでやっても良いんだよね?
461SCHEME餃子 ◆8X2XSCHEME :2011/08/22(月) 19:45:23.38
>>454
同値であっても同一でなければグラフ簡約されないってこと?
462デフォルトの名無しさん:2011/08/22(月) 21:13:26.94
>>460
うん

>>461
グラフ簡約で共有されるのは同一の変数の値だけという意味なら、そう
463デフォルトの名無しさん:2011/08/22(月) 23:40:24.88
ところでなんで明示的に指示しないとグラフ簡約してくれないの?
参照透明なら関数と引き数の纏まりも簡約しちゃって害無いでしょ?
464デフォルトの名無しさん:2011/08/23(火) 07:32:07.06
>>463
グラフ簡約は自動でやる、自動でやらないのはメモ化だ

そして、メモ化を「指示」する方法は無い、自分でメモ化の仕組みを作れ

自動でメモ化をしない理由は、正確なところは知らん
たぶん、普通の実用的なアプリにおいてメモ化を自動でやる意味がないからだろ

普通のアプリでは、関数に渡す値の依存関係の根っこは、
たいていユーザーから入力されたり、センサーから入力された外部のデータだ
だから、例えば引数も戻り値も32bit整数型だったとして、
どの範囲の値をメモ化すべきかコンパイル時には普通は自動で判断できない

かといって、全範囲を自動でメモ化するわけにはいかない
(必要なメモリ量が大変なことになる)

あるいは、実行時に自動で逐次メモ化するような仕組みが
勝手に埋め込まれるというのも、余計なお世話だ
その仕組みのオーバーヘッドのせいで処理速度が落ちるかもしれんし、
アプリのサイズが余計に大きくなるかもしれん

また、引数の型や数、戻り値の型、また必要な範囲や出現確率、
アプリユーザーの一般的なアプリ使用傾向などから、
最適なメモ化の仕組みは1種類とは限らないかもしれん

つまり、コンパイラが「自動で」判断するわけにはいかないんだよ
465デフォルトの名無しさん:2011/08/23(火) 08:53:34.29
(´・ω・`)はい
466デフォルトの名無しさん:2011/08/23(火) 09:00:57.64
遅延評価って深さ優先探索みたいにやるんですよね

広さ優先探索的にやる研究ってありますか?

そしたらメモ化を自動化できそうな気がします
467デフォルトの名無しさん:2011/08/23(火) 09:14:47.54
論文書いたら教えてね
468デフォルトの名無しさん:2011/08/23(火) 11:25:33.11
まあ >432 みたいなのは、単に部分式共通化すればいいだけなので、難しくないけどね。
ただし >442 みたいにプロファイル取得指示を入れると共通化できなくなる。

>432 の人の言う現象が再現できなかったのはそれが原因かも知れない。
469デフォルトの名無しさん:2011/08/23(火) 12:56:03.99
>>466
遅延評価は、ラムダ式を評価する時、
正規順序簡約で弱頭部正規形にまで簡約してから
トップにある変数や関数などを評価し、
また正規順序簡約で弱頭部正規形にまで簡約
というのを繰り返すことで実現している

深さ優先というのとはちょっと感じが違う

言うなら、式をツリー状に表現した時、
まずルートのものを評価して、次にツリーを変換して、
またトップに来たものを評価して・・・という感じ
深いところ深いところへと目指している訳ではない
470デフォルトの名無しさん:2011/08/23(火) 20:13:26.76
深さ優先はeagerな評価だな
471443:2011/08/23(火) 23:04:19.83
>>468
試してみた

コード(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 の方が目に見えて速いという説明には使えないと思う
472デフォルトの名無しさん:2011/08/23(火) 23:47:25.17
GHCの部分式共通化はこれですね。基本的には自分でletかwhereでくくり出せということです。
http://www.haskell.org/haskellwiki/GHC:FAQ#Does_GHC_do_common_subexpression_elimination.3F
473デフォルトの名無しさん:2011/08/23(火) 23:53:15.24
common subexpression elimination って共通部分式除去って日本語が普通だと思うんだけど
Haskellの世界では部分式共通化って言うの?
僕はいわゆる普通のコンパイラの業界ですが
474デフォルトの名無しさん:2011/08/24(水) 00:01:25.99
まあ意味は通じるでしょ
僕はいわゆる仕分けされかけたコンパイラの業界ですが
475デフォルトの名無しさん:2011/08/24(水) 00:04:13.82
>>471
なるほど。
メモ化? によって総和計算は自動で1回になるんですね。
476472:2011/08/24(水) 00:04:43.71
HaskellでもCSEはCSEなので邦訳だけ別というのは考えづらいので
共通部分式除去だと思いますよ。流れを見れば通じるのでそのまま書きましたが。
477デフォルトの名無しさん:2011/08/24(水) 02:23:36.45
未だにモナドの理解があやふやなのですが、計算を繋げるっていうイメージはこんなもので合っていますか?
IOモナドだったら|みたいな、縦棒1本の計算が繋っていて、
Maybeモナドだったらトみないな、片方はNothingで止まっている分かれ木で、
Eitherモナドだったら∧みたいな、二つのどちらかに繋るもので、
Listモナドだったら可変個の分岐すべての計算が続く。

ただ、このイメージだと、IdentityモナドとIOモナドの区別がつかないのでまだ理解が足りないのかと思ってます。
478デフォルトの名無しさん:2011/08/24(水) 04:14:14.43
>>477
Eitherってモナドだっけ?
479443:2011/08/24(水) 07:15:52.56
>>475
> メモ化? によって総和計算は自動で1回になるんですね。

誰がそんなこといった?

一般的に GHC は自動でメモ化はしないと言われている
今回の件が自動でメモ化されている結果なのかは未検証で不明

バイナリを直接調べる以外に確かめる方法は
GHC のソースからコンパイルの様子を調べるしかないんだろうか
480デフォルトの名無しさん:2011/08/24(水) 07:46:56.70
>>466
深さ優先の意味が分かった
例えば (f 3 (1 + 5)) という式だと

*
├5
└*
 ├1
 └*
  ├+
  └*
   ├3
   └f

こういうツリーを想定したんだね(左右の違いは無視)

正規順序簡約で簡約するから、一番外側
つまりツリーの一番深いノードの f 3 から簡約すると

これなら確かに深さ優先だ

で、広さ(幅)優先の簡約というのは、
このイメージだと正格評価そのものになると思うんだが
481480:2011/08/24(水) 07:55:59.48
ん?
やっぱイメージがおかしいな

(f 3 (1 + 5)) だったら、こうか

*
├*
│├5
│└*
│ ├1
│ └+
└*
 ├f
 └3

これだと深さ優先もやっぱ違うな
482480:2011/08/24(水) 08:06:53.27
あ、深さ優先のイメージで合ってるのか

ごめん、お騒がせしました
寝てくるわ
483デフォルトの名無しさん:2011/08/24(水) 09:06:56.22
>>475
メモ化っていうのは実行時のテクニック。
実行時に、「あー この関数でこの引数の計算はもうやったわー はいはい、再計算しなくても、覚えてますよー」ってのがメモ化

共通部分式除去ってのはコンパイル時のテクニック。
コンパイル時に「あれ? この式のこの部分とあの部分って同じじゃね? それなら、一回の計算で済むんで、自動的にletだかwhereだか挟んどきますわー」ってのが共通部分式除去。

全然ちがう。
484デフォルトの名無しさん:2011/08/24(水) 09:08:41.63
>> 443, 475
バイナリ見なくても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回計算します。
485デフォルトの名無しさん:2011/08/24(水) 09:12:23.32
ghc-coreを入れてない場合はghc -ddump-simpl ...でみてください。
ghc-coreは色がつくのでおすすめ。
http://hackage.haskell.org/package/ghc-core
486デフォルトの名無しさん:2011/08/24(水) 09:44:40.95
>>483
コンパイル時に
f x = g x + g xを自動で共通部分式除去してくれないの?
487443:2011/08/24(水) 12:46:53.48
>>484 >>485
Windows7、GHC 7.0.3 でも確認できた

確かに -O0 オプションで2回計算されて、
-O2 オプションで1回になってる

共通部分式除去が働いているということか
488デフォルトの名無しさん:2011/08/25(木) 02:37:33.39
>>477
オレはモナドを視覚的に考えるときには、矢印の先っぽが色つきなイメージで考えるときがある

普通の関数合成







List

▼(赤)

▼(赤)

▼(赤)

IO

▼(青)

▼(青)

▼(青)

こういういろいろな色の矢印がHaskell圏(すべての型が対象である圏)のなかを行ったりきたりして、色とりどり、みたいな。
役に立たない話でごめん。
489デフォルトの名無しさん:2011/08/25(木) 08:11:27.74
>>477
「モナドは木である」という比喩を扱ったチュートリアルがあったはず
ちょっと今見つからないけど
490デフォルトの名無しさん:2011/08/25(木) 17:30:30.95
Haskell 2010では、n+kパターンが廃止されましたが、
これを使ってるプログラムを機械的に書き換えるには
一般にはガードを使うしかないのでしょうか?

f (n+1) = g n
みたいなのは、単純に
f n = g n-1
としてしまうと、f 0 もマッチしてしまうので、
f n | n >= 1 = g n-1
としないと完全には等価じゃないですよね。
491デフォルトの名無しさん:2011/08/25(木) 18:09:50.24
viewパターンが使える
492デフォルトの名無しさん:2011/08/25(木) 18:41:53.68
おぉぉ、ViewPatternsオプションでこんなのができるんですね。
fib 0 = 1
fib 1 = 1
fib n@((>=2) -> True) = fib (n - 1) + fib (n - 2)

ありがとうございます。
これは将来的に標準になるのでしょうか?
493デフォルトの名無しさん:2011/08/25(木) 23:55:07.14
>>489
「モナドは接ぎ木である -- Monads are Trees with Grafting」 かな
http://nwn.tumblr.com/post/327220822/monads-are-trees-with-grafting
494デフォルトの名無しさん:2011/08/26(金) 13:27:41.88
落ちてる?
495Perl忍者:2011/08/26(金) 23:10:12.59






相変わらずゴミなことやってんだな
















お前らはほんとにゴミだな
496デフォルトの名無しさん:2011/08/27(土) 11:55:17.42
>>495
そっくりそのまま返すよ
497デフォルトの名無しさん:2011/08/27(土) 12:51:58.69
圏論を基礎の基礎の更に基礎から学びたい者のために本を紹介しよう

Conceptual Mathematics 第2版
http://www.amazon.co.jp/dp/052171916X/

とてつもなく丁寧に、とてつもなく優しく学べ、圏論と友達になれる
他の圏論関係の本を読んだりWebで学ぶなら、まずこれを読んでおくことを勧める

ただ良書なのに和訳されておらず、けっこう高価な本なのが玉に瑕
498Perl忍者:2011/08/27(土) 17:43:12.72
くだらね

死ね情弱
499デフォルトの名無しさん:2011/08/27(土) 23:17:34.32
>>497
というか、圏論って、イントロダクションに400ページも必要なの?
500デフォルトの名無しさん:2011/08/27(土) 23:30:37.73
>>499
そんなのは人によるとしか言いようがない

群論と友達になるのに数百ページ必要な人もいれば、
たった数ページ(定義と数例)だけでいい人もいるのと同じ

400ページもあるのは少しずつ丁寧に端折らず説明されてるから
ページ数でマイナスイメージを持ってしまうのはちょっと勿体ない

これは、焦らずゆっくり読んでいけば
躓くということはほとんど無いというメリットであると考えてほしい
501デフォルトの名無しさん:2011/08/28(日) 01:37:15.63
mac lion にhaskell platform をインストールしました。

hello.hs
main = putStrLn "Hello world"

としてコンパイルしてみましたが、
ld: warning: text reloc in _cBR_str to _stg_ap_v_info
のような警告が大量に出てしまいます。./helloしてみると問題なく実行できるようです。
何とも気になるのですが、直し方わかる方、教えていただけないでしょうか?
502デフォルトの名無しさん:2011/08/28(日) 01:51:46.29
"ld: warning: text reloc" でググったら
関係ありそうなページがすぐに出てきたぞ
http://hackage.haskell.org/trac/ghc/ticket/5128

GHC のバグだそうだ

応急処置の方法も書かれてあるが、
別のワーニングが出るとか何とか・・・
503デフォルトの名無しさん:2011/08/28(日) 02:11:34.80
>>497,499
圏論の有用性についてなにも言えないのに、さも当たり前のように紹介するのは不誠実。
結局一体何の役に立つと言うんだ。
ただ単に延々とやっているという事実があるだけで、有用性についてはなにも示されていない。
504デフォルトの名無しさん:2011/08/28(日) 02:20:26.98
>>502
ありがとうございます。修正版がでるのをまつ感じですかねー。。
505デフォルトの名無しさん:2011/08/28(日) 08:56:35.74
難しいことをやるのが美徳

それはゲームの世界でもそう

非効率でも誰もやってない行動をやっちゃう

それが難しい行動


いくら非効率でも難しいから お前にはできないのか?wっていう優越感を味わえる

それはHaskellもおなじ

死ね

こいつらただ学習してるだけ Haskellやってますってほざきただけ
死ね
506デフォルトの名無しさん:2011/08/28(日) 08:57:01.35
早く死ねよお願いだから
死んでくれないか

死ね
507デフォルトの名無しさん:2011/08/28(日) 09:09:10.20
とうとうコテ外したかw
あぼーんされてスルーされるのが余程嫌だったんだな
508デフォルトの名無しさん:2011/08/28(日) 09:43:16.45
Readインスタンスの書き方解らん
readsprecとか変態で設計者の神経疑う
509デフォルトの名無しさん:2011/08/28(日) 10:00:24.96
>>503
モナド則の意味や理由、概念の元は理解できるか?

はっきり言えば、理解できなくても全く問題ない

ただ、理解できると Haskell がもっと楽しくなる
Haskell を深く理解しようとする過程も楽しくなる


紹介する前にこれを言えば良かったのか?
今後気をつけるよ
510デフォルトの名無しさん:2011/08/28(日) 10:21:29.96
1930年代、ゲーテルによって、数学そのものに矛盾が存在することが明らかになった
数学の基礎を再構築する必要がでてきて、その基礎に圏論を使う一派が出てきた
彼らは、集合の定義とか、数の定義とか、論理の定義を圏論でやろうとした
集合の定義をするときに、ラッセルのパラドックスを技術的に表面上から隠すテクニックのひとつに、集合の上にクラスを置いて定義するという方法がある
この、クラスを使うような集合の定義も圏論でできた
で、このクラスと集合を同時に扱うような圏論の使い方を応用すれば、プログラミングの型と演算を同時に定義することができることが分かった
この、プログラミングの仕様書式(技術的用語)として圏論を使いまくって言語を構築したのが Haskell

モナドというトリッキーなテクニック/概念が先にあってそれを圏論の言葉で説明したのか、
圏論の定理から推論してモナドというテクニックを発見したのか(つまり、圏論がなければモナドは理解できないのか)、
歴史的にはどっちなのかはよく分からない

ちなみに、アローやモノイドやファンクタといった概念は圏論とは独立に存在する
例えば、「モノイドを(あえて)圏論で説明すると…」といった感じになる
511デフォルトの名無しさん:2011/08/28(日) 10:24:08.52
>>510
数学に矛盾が存在する  は、正しくは  数学には矛盾か無矛盾かを判断できない定理が存在するという「不都合」が存在する  ね
512デフォルトの名無しさん:2011/08/28(日) 10:30:16.43
圏論は1950年代にはもう体系化されてたんだろ?なら圏論が先に決まってる
モナドとラムダ計算に関するものはMoggiによる1980年後半から1990年代にかけての仕事だし
513デフォルトの名無しさん:2011/08/28(日) 10:42:47.17
>>512
1950年代までのプログラミングじゃモナドに相当するテクニックは使ってなかったの?
514デフォルトの名無しさん:2011/08/28(日) 10:43:56.94
気づいたのはHASKELL言語がわかってない人は
モナドを理解するために圏論の教科書を1ページ目から読んで
最後の方に書いてあるモナドのところまで読まないといけないということだな。
515デフォルトの名無しさん:2011/08/28(日) 10:54:53.24
そういう小難しいことは(理解していれば頼もしいが)どうでもいいよ

Haskell も圏論も共に楽しみたい人で、かつ興味ある人だけ読めばいい
そういう軽いノリで惹かれる人に対して紹介したんだから
俺の中では「楽しめる=役に立つ」という等号も成り立ってる

Haskell を実用的に使うのなら、圏論など全く必要ない
たとえば圏論が分からなくても、俺FPRライブラリは十分に作れるし、
GUIライブラリも構築できるし、データベースにアクセスすることもできる
516デフォルトの名無しさん:2011/08/28(日) 10:55:25.48
>>514
いんや
リストと再起を徹底して覚えれば十分
あとは必要になってからで良い

使う分にはモナドは多分、覚える優先度としては一番低い
517デフォルトの名無しさん:2011/08/28(日) 10:57:45.25
ハスケルは学びたくない、本も読みたくないっていう人に
もわかるモナドのホームページないの?
518デフォルトの名無しさん:2011/08/28(日) 11:07:50.99
>>514
ブール代数も圏論のテキストでは300ページ目くらいに出てくる
だけど、圏論なんかなくても理解できる
519デフォルトの名無しさん:2011/08/28(日) 11:21:04.88
>>517
Haskell 学びたくないのなら、OCaml スレとかで訊いてこい
520SCHEME餃子 ◆8X2XSCHEME :2011/08/28(日) 11:42:51.65
>>515
それは俺も思ったこと有るなぁ。
日本語話者が全員、その文法を理解しているわけもなければ、文学作品を書くために日本語を使っているわけでもないみたいな。

Haskell でもリスト操作程度で出来ることは案外多い。
ちょっとしたオペレーションを自動化するとか、バッチファイルのような用途で Haskell を使うっていう選択肢だってあっていいと思う。
日常会話としての言語。

要するに、言語を使う前に背景をきちんと全部理解するべきだ、という考え方はハードルを上げ過ぎだろうって話。

まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。
521デフォルトの名無しさん:2011/08/28(日) 12:23:17.56
ちょっとしたリスト操作どころか、Haskellを「ちゃんと」使う場合であっても圏論の知識は必要ないよ
Monadクラスを理解していることは必要だけど

>まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。
俺が個人的に知ってるHaskellプログラマは特に数学好きじゃない奴の方が多い
そもそもHaskellって別に数学的な言語じゃない。言語設計が間接的に圏論の成果を使ってるだけで
(計算機科学が数学の一分野だと言うなら、もちろん話は別)
522デフォルトの名無しさん:2011/08/28(日) 12:42:30.54
米田とかkan拡張(略してカンチョー)とか一体どういう時に使うのか全く分からんよな
関手のfmapの分配とか見た目どおり過ぎるし・・・
自然変換で順番入れ替えると全部展開しなくても式が簡単にできるとかぐらいか
Haskellにおける圏論なんて式変形キチの道具箱のほんの一部ってぐらいの印象だわ
523デフォルトの名無しさん:2011/08/28(日) 13:21:03.37
代数データ型と遅延評価だけでも十分価値がある。
数学うんたらと言うのは初学者への威嚇でしかない。
524デフォルトの名無しさん:2011/08/28(日) 13:34:24.51
遅延評価は罠
525デフォルトの名無しさん:2011/08/28(日) 13:36:07.32
considered harmful
526デフォルトの名無しさん:2011/08/28(日) 13:58:34.31
なにが considered harmful なんだ?
527デフォルトの名無しさん:2011/08/28(日) 14:01:22.89
using haskell without DCompSci
528デフォルトの名無しさん:2011/08/28(日) 14:27:41.22
なんでそう思うんだ?
529デフォルトの名無しさん:2011/08/28(日) 14:34:52.82
no haskell no hustle
530デフォルトの名無しさん:2011/08/28(日) 15:12:48.61
米田の定理は、他の定理の証明に使うので、定理を使う側の人のほとんど知らなくても関係ない
ぶっちゃけると、整数を定義して 1+1=2 を証明することを考える人以外は圏論を知らなくても問題ない
531デフォルトの名無しさん:2011/08/28(日) 16:54:20.27
無駄なんだよ  無駄

かっこつけて 無駄じゃねーとかいってみろよ雑魚

>>
まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。


かっこつけて奇人気取ってるゴミ

奇特=かっこいい 人と違う 違いを出せると思っててきもちわりーんだよ

ほかの言語やれよまじ迷惑きえてくれねーかな

死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
532デフォルトの名無しさん:2011/08/28(日) 16:55:23.44
モナドとか関係ない 無駄 問題ない 無駄なんだよ
なくても平気なんだよ
お前らジャップは欧米より脳みそ知能指数低いだろ!?!!!!!!!!!!!!!!!!!!!!!!!!!!

きもちわりいー黄色人種の花で株細工ジャップ眼鏡が国論とかモナドとかわめいてんじゃねー!!!!


死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
533デフォルトの名無しさん:2011/08/28(日) 16:56:14.23
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
534SCHEME餃子 ◆8X2XSCHEME :2011/08/28(日) 18:33:19.10
>>531
> かっこつけて奇人気取ってるゴミ

一応言っとくと俺は Haskell 使ってないけどな。
Scheme があれば幸せ。
535デフォルトの名無しさん:2011/08/28(日) 18:48:39.97
>>534
今まで頓珍漢な発言してたのはそのせいか
こんな所に来るなよ
536デフォルトの名無しさん:2011/08/28(日) 19:02:56.13
>>534
こういうコード書きたくなる時あるよな
((lambda (x) (x x)) (lambda (x) (x x)))
537デフォルトの名無しさん:2011/08/28(日) 19:09:52.89
>>534
schemeとかっこつけるをかけてるのか
ちょっと面白い
538デフォルトの名無しさん:2011/08/28(日) 21:06:52.95
>>534
なんで餃子?
539デフォルトの名無しさん:2011/08/28(日) 22:13:18.83
>>531-533
高2病かよ
540Perl忍者 ◆M5ZWRnXOj6 :2011/08/29(月) 00:02:04.80
やあ SCHEME餃子 。
もっとこいつら攻撃してくれ。
忙しいからこんなスレに来てる暇はないけどな。
541デフォルトの名無しさん:2011/08/29(月) 00:27:07.64
Perl忍者さんはSchemeも嫌いそうだけどw
542497:2011/08/29(月) 00:27:52.78
Haskell らしい話題が無くてつまらなそうなので、適当に投下してみます

GHC は自動でメモ化を行う事は無いという話が以前ありました
ではメモ化はどうやってやるのという話に発展するのかと思いきや、
話の本筋ではなかったようで、全く触れられなかったんですね

特定の関数をメモ化する方法は 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

この記事の続編にあたるものも書かれているので、
ブログ内をぶらぶらと散策してみるのもいいと思います

(圏論みたいな周辺知識を得る本の紹介よりも、
こういった直接的な技術の紹介の方がいいですか)
543デフォルトの名無しさん:2011/08/29(月) 05:29:29.84
Macでghciを起動すると

GHCi, 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を呼ぶと問題なく起動できるのですが、
直し方がわかる方いますでしょうか?
544uy:2011/08/29(月) 06:04:15.63
>>531-533
全同意

こいつら時代遅れってことがわかってないんだよなぁ
もうとっくに研究終わっていて、使えないって証明されていることを
誰も指摘してくれないから、Haskell界隈は井の中の蛙ホイホイになって
宗教みたいになってる
545デフォルトの名無しさん:2011/08/29(月) 07:23:14.74
>>543
7.2.1でも試してみてください
7.0.3ではghciにおいてshared libraryの解決関連のバグがあった記憶があります
546デフォルトの名無しさん:2011/08/29(月) 07:34:06.44
>>545
ありがとうございます。

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がない場所ではエラーが出るようです。
547デフォルトの名無しさん:2011/08/29(月) 07:46:49.68
-L/usr/lib/ -L/usr/local/lib -liconvオプション付きで起動ではどうですか?
548デフォルトの名無しさん:2011/08/29(月) 08:11:28.36
>>547
ありがとうございます
だめなようでた。。
549Perl忍者 ◆M5ZWRnXOj6 :2011/08/29(月) 11:03:31.46
uyはよくわかってる



こいつら時代遅れってことがわかってないんだよなぁ
もうとっくに研究終わっていて、使えないって証明されていることを
誰も指摘してくれないから、Haskell界隈は井の中の蛙ホイホイになって
宗教みたいになってる




>>531-533 のいうとおり
こんな単純なことがわかってない
こいつら情弱

死んだほうがいい
550デフォルトの名無しさん:2011/08/29(月) 12:19:13.10
頼むからPerl忍者は全てのレスにちゃんと名前を入れてくれ
あとPerl忍者にレス返すやつは本文にPerl忍者って入れてくれ
551デフォルトの名無しさん:2011/08/29(月) 12:30:07.71
研究終わって安定してるからみんな使おうぜ!
552デフォルトの名無しさん:2011/08/29(月) 12:39:26.38
>>548
これでも駄目かー、パッケージ中のDYLIBの参照先がおかしいのかな
ちょっと自力でiconvパッケージをcabal installしなおして試してくれ
553SCHEME餃子 ◆8X2XSCHEME :2011/08/29(月) 12:39:39.91
>>521
それもそうか。
Scheme 使いでも表示的意味論だとか操作的意味論だとかを理解してるやつなんていねーもんな。
554デフォルトの名無しさん:2011/08/29(月) 13:44:09.45
餃子、は、忍者、の韻を踏んでるのかw
555SCHEME餃子 ◆8X2XSCHEME :2011/08/29(月) 16:07:49.59
>>554
ちがう。 チャオズ。
556Perl忍者:2011/08/29(月) 18:30:27.02
549って本当に偽だなwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwww
557Perl忍者:2011/08/29(月) 18:30:47.02
誰だこいつwwwwwwww
toby_netか?
558デフォルトの名無しさん:2011/08/29(月) 23:33:15.80
559デフォルトの名無しさん:2011/08/30(火) 10:09:21.15
なんだよPerl忍者とかScheme餃子とか
増殖してんじゃねーよ
次は何よ?C#孔雀か?
560デフォルトの名無しさん:2011/08/30(火) 11:31:54.56
Scala煎餅とかどうよ
561497:2011/08/30(火) 12:40:50.91
おまえら、どうすれば Haskell の話をしてくれるの?
562SCHEME餃子 ◆8X2XSCHEME :2011/08/30(火) 13:00:49.65
>>559
Scheme餃子じゃねーよ。 SCHEME餃子だよ。
二度と間違えるな。
Haskell だって case sensitive だろ。 さてはお前、 Haskeller じゃないな?
563デフォルトの名無しさん:2011/08/30(火) 13:12:15.89
Yiがemacsよか有名になったら
564デフォルトの名無しさん:2011/08/30(火) 13:19:58.81
>>542
正直、そのライブラリをどういう風につかってメモ化を行うのかよく分かりません。
でも、ソース中のCプリプロセッサの使い方は面白かった。
565デフォルトの名無しさん:2011/08/30(火) 19:19:37.23
>>563
まずは簡単にインストールできて、
問題なく起動できなければ話にならないのだが・・・

どうしたものか
566デフォルトの名無しさん:2011/08/30(火) 21:58:21.83
エディタ、webフレームワークなど設定や拡張がhaskellなアプリケーションをまとめた開発環境あれば、
(自分は初歩的な知識しかないけど)有望な新人に研修として押し付けるんだけどな
http://www.haskell.org/haskellwiki/Applications_and_libraries#Haskell_applications_and_libraries
567デフォルトの名無しさん:2011/08/30(火) 22:03:17.28
有望な新人って概念が他力本願な気がする
568デフォルトの名無しさん:2011/08/30(火) 22:13:43.07
ひょんな会社だとCOBOLからJAVAの移行もそんな感じだったに違いない
JAVAで作りなさい、おじさんはCOBOLしか知らないけど。
569デフォルトの名無しさん:2011/08/30(火) 22:25:53.47
有望な俺
570デフォルトの名無しさん:2011/08/30(火) 22:26:02.77
>>566
phpみたいに、htmlに埋め込みでhaskell書けたら本気出す
571デフォルトの名無しさん:2011/08/30(火) 22:29:26.49
>>564
ソースの一番最後
572497, 571:2011/08/31(水) 00:15:24.43
>>571 >>564
反応がないですね・・・

ソースの一番最後に書かれてるように、
メモ化させたい関数を 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 の引数の値を大きくすれば効果がよくわかります
本当に実行時間が半分になります
573デフォルトの名無しさん:2011/08/31(水) 00:17:52.03
>>570
え、できるだろ
出来ないの?
できるだろ?
574デフォルトの名無しさん:2011/08/31(水) 00:36:32.36
プログラム埋め込みは、どうなんだろうね。
Htmlテンプレート
http://www.yesodweb.com/book/templates/conceptId_________
575デフォルトの名無しさん:2011/08/31(水) 01:22:47.59
>>572
いろいろサンクス

{- 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

(つづく)
576575:2011/08/31(水) 02:20:13.57
これで試してみると、たしかにTest3はTest1より速い。
たぶん、メモ化が働いているんだろうと思います。

しかし、ラムダ式としては同値なはずのTest2がTest1よりも遅いことと、
なぜかTest3.hsのコストセンタ"sum1""sum2"がプロファイルに反映されていないことが、
まだよく理解できませんが・・・
577Perlにんじん2:2011/08/31(水) 12:41:27.09
こんな場所で質問してるようなやつがやるような言語じゃない
お前がやっても何も変わらない
何も

何 も

終わり
578デフォルトの名無しさん:2011/08/31(水) 13:40:39.32
どんな言語も最初からちゃんと使えるやつなんていないし、
たくさん使って恥かいてネイティブに教えてもらって覚えるもんさ
579デフォルトの名無しさん:2011/08/31(水) 22:55:53.13
> こんな場所で質問してるようなやつがやるような言語じゃない

もはやそんな大それたもんでもないな
Perlのようがよっぽど難しい
580497:2011/09/01(木) 00:33:52.17
>>546
ラムダ式としては同値なはずの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 で分岐しても同様ですね)
581497:2011/09/01(木) 00:35:57.08
>>580
猫を観ててにやけてたら安価ミスりました

すいません >>576 宛です
582デフォルトの名無しさん:2011/09/02(金) 19:57:29.63
猫でもわかるReadインスタンス書き方講座お願いします

そんな低レベルな事訊くなと言うなら
Haskell初心者質問スレ作って下さい
583デフォルトの名無しさん:2011/09/02(金) 22:21:38.45
回答出る前にキレるなよ
584デフォルトの名無しさん: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/
585デフォルトの名無しさん:2011/09/02(金) 22:50:20.70
deriving Read
586デフォルトの名無しさん:2011/09/02(金) 23:06:59.02
>>582
書き方さえ分かればいいんですね

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 型の使い所がさっぱり分かりません
何か役に立つんでしょうか
587デフォルトの名無しさん:2011/09/03(土) 06:59:55.50
なんかデータ入力する時、パーサわざわざ書く必要がなくて楽じゃん?
588デフォルトの名無しさん:2011/09/03(土) 10:44:57.21
そうそうderiving前提なんだよなぁ
589デフォルトの名無しさん:2011/09/03(土) 11:36:49.92
Readを自動導入しないのなら、結局自分でパーサーを作らなければなりませんし、
Readを自動導入したのなら、read関数で読み取れる文字列が
Showを自動導入した場合にshow関数で得られる文字列に制限されます

後者の場合、読み取り可能な文字列の制限が少しきついです
融通が効かないと言いますか

Persecは比較的簡単で直感的なので、私はPersecでやってしまいます
590デフォルトの名無しさん:2011/09/03(土) 11:48:55.28
Parsecェ…
591デフォルトの名無しさん:2011/09/03(土) 12:02:26.06
ShowみたいなPrettyPrinterも同時定義されるようなParsecが欲しいな・・・
bidirectionalizationっていう分野になるのか?
592デフォルトの名無しさん:2011/09/03(土) 13:56:31.21
そういうのも bidirectional っていうのですか

私はどちらかと言うと、A -> B かつ A <- B みたいなのを
bidirectional っていうのだと思ってました

たとえば、ちょっとした DSL を使って関数(数式)を定義しておけば、
A から B への関数と同時に、逆関数も自動的に作られるみたいな
(当然、必要になるまで遅延される)
593592:2011/09/03(土) 13:59:08.15
>>591
すいません、解釈は合ってましたね
bidirectionalization です
594デフォルトの名無しさん:2011/09/03(土) 16:35:39.50
595デフォルトの名無しさん:2011/09/07(水) 06:59:38.17
本物のプログラマはHaskellを使う
第49回 GHCの測定機能やプロファイラで並列プログラムの振る舞いを調べる
http://itpro.nikkeibp.co.jp/article/COLUMN/20110906/368177/
596デフォルトの名無しさん:2011/09/07(水) 12:24:22.40
このスレを見てたみたいな記事だな
597デフォルトの名無しさん:2011/09/07(水) 12:27:39.75
並列プログラムの振る舞いを測定するんだから、全然別だろ

数回前から続いてる一連の流れだし
598デフォルトの名無しさん:2011/09/08(木) 08:00:50.41
function@l2ch経由でこのスレの内容を見ているという事はありそうだけど
その記事に関しては関係なさそうだ
599デフォルトの名無しさん:2011/09/10(土) 18:26:54.82
図書スレから誘導されたので、改めてこちらで質問します

洋書でも和書でも全く構わないんですが、
Haskell でランクとか kind とか forall とかの意味や役割を
丁寧に解説している本って何か無いですか?

あるいは、forall なら forall(とその関連)だけでいいですから、
まとまって丁寧に説明されているサイトなどあれば嬉しいです
600デフォルトの名無しさん:2011/09/10(土) 20:11:12.78
601デフォルトの名無しさん:2011/09/10(土) 20:35:25.76
>>600
ありがとうございます

本の方は、Rank や kind なんかも関係してくるのでしょうか
602デフォルトの名無しさん:2011/09/10(土) 21:36:06.51
その本の内容をさらうとrankやkindの理論的な背景がわかる
高階の型を扱うためのkindと高階関数の多相性の為のuniversal quantified types
もう一つのforallの使い方existentially quantified typesの事もその後ぐらいに載ってる
kindに関する議論があるのは結構最後の方だけども
TAPLでは特に前提としているわけでもないけどでもできれば術語論理や集合論の初歩もあった方がいいかも、
603デフォルトの名無しさん:2011/09/10(土) 21:39:46.16
>>602
ドンピシャっぽいですね
術語論理や集合論は最近復習したばかりなので、ちょうどいいかもしれません

その本を購読してみます

ありがとうございました
604デフォルトの名無しさん:2011/09/11(日) 05:57:21.10
それぐらい自分で調べられない人が理解できるとは思えんがね、
605デフォルトの名無しさん:2011/09/11(日) 23:10:01.13
プログラミングhaskellの練習問題に挑戦中なんだけど、これがどうしても分かりません

教えてもらって良いでしょうか


以下、引用

5.7 練習問題

2.関数lengthと同じように、ある要素のみからなるリストを生成するライブラリ関数replicate :: Int -> a -> [a]をリスト内包表記を用いて定義せよ。以下に使用例を示す。

> replicate 3 True
[True, True, True]
606デフォルトの名無しさん:2011/09/11(日) 23:31:21.37
無理やり書いてみたが多分違う。

replicate n x = [y | n > 0, y <- x : replicate (n-1) x]
607デフォルトの名無しさん:2011/09/11(日) 23:39:53.34
>>606
それは私も書いて、エラーで弾かれたパターンですね^^;
608デフォルトの名無しさん:2011/09/11(日) 23:50:17.85
5章で息絶えた漏れが貼ってみます

replicate n x = [x| _ <- [1..n]]
609デフォルトの名無しさん:2011/09/11(日) 23:57:36.12
>>608
俺はこう書いたが、そっちの方が正解っぽいな

replicate n a = [x | x <- take n (repeat a)]
610デフォルトの名無しさん:2011/09/12(月) 00:17:40.77
>>608-609
ありがとうございますm(_ _)m
目から鱗です

勉強になりました
611デフォルトの名無しさん:2011/09/12(月) 04:45:59.74
>>607
エラーにはならないよ。
ただ、出題者の意図と違うだろうという気がした。
612デフォルトの名無しさん:2011/09/12(月) 13:17:56.42
プログラミングHaskell仲間がけっこういるんだな。
9章練習問題4と5だけは放置中。
Haskellで使えるGUIって何がポピュラーなの?
613デフォルトの名無しさん:2011/09/12(月) 18:14:27.08
Haskellまで行っちゃった人にとっては、GUIの方がかえって使いにくい
614デフォルトの名無しさん:2011/09/12(月) 18:17:40.00
だからダメなんだという自覚もないのか…
615デフォルトの名無しさん:2011/09/12(月) 18:33:26.88
やっぱgtk2hsとwxHaskellあたりかなぁ
でもどっちも7.2.1にはまだ対応してないんだっけ・・・
616デフォルトの名無しさん:2011/09/12(月) 21:59:05.63
qtHaskellも推しておく
617デフォルトの名無しさん:2011/09/12(月) 22:01:32.46
コンパイルにメモリ8G食い尽くす糞パッケージの話題はそこまでだ
618デフォルトの名無しさん:2011/09/12(月) 22:30:57.68
qtHaskell はポピュラーではないと思う
619デフォルトの名無しさん:2011/09/13(火) 20:44:44.19
複数行に渡る文字列リテラルってどう書くんだった?
620デフォルトの名無しさん:2011/09/13(火) 21:02:30.89
>>619
すまん、自己解決してしまった

言語仕様にちゃんと書かれてるのね

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.
621デフォルトの名無しさん:2011/09/13(火) 21:03:17.13
string-qqのようなQuasiQuoterを使う
622デフォルトの名無しさん:2011/09/13(火) 23:53:33.43
>>621
ありがと、申し訳ない、そっちの方も今度調べてみる

それはそうと、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 ってテキストノードかどうかを判定するものなんじゃないの?
623デフォルトの名無しさん:2011/09/14(水) 10:22:11.32
全体から抽出するなら
procXml = multi isTextでいいんじゃねぇの?
624デフォルトの名無しさん:2011/09/14(水) 12:47:47.17
>>623
それでやっても相変わらず得られるのは空の XML だった

でも、いろいろ実験してるうちに偶然変なことを発見した

>>622 に提示した例には、問題には関係ないと思い込み省いてたんだが、
本当は writeDocumentToString のオプションで withIndent yes を指定してた
http://www.haskell.org/haskellwiki/HXT ここの例を真似た)

で、このオプションを省いてみると、俺の方法でも >>622 の方法でも、
どちらでもちゃんとテキストノードだけを集められた

なんで? (バグか?)
625デフォルトの名無しさん:2011/09/14(水) 12:49:31.88
>>623 >>624
失敬

> 俺の方法でも >>622 の方法でも

俺の方法でも >>623 の方法でも(multi isText にしても)
626デフォルトの名無しさん:2011/09/14(水) 16:13:29.43
そもそも俺の試したverではwithIndentなんてなかった
とりあえず最新版にしてもう一度試してみては?
627デフォルトの名無しさん:2011/09/14(水) 18:43:13.19
>>626
最新版なんだが(hxt 9.1.4)
628デフォルトの名無しさん:2011/09/14(水) 18:45:26.66
それはすまなんだ
629デフォルトの名無しさん:2011/09/14(水) 21:18:52.20
立て続けに質問ですまんが、hxt には意味不明なことが多すぎ
hxt の 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つのリストを ++ 演算で結合してるだけに見えるんだが・・・

何か使い方がおかしい?
630Perl忍者:2011/09/15(木) 12:15:26.73
数学できないバカがバカを隠すためにやる言語=Haskell

バカ隠し気持ち悪い
631デフォルトの名無しさん:2011/09/15(木) 12:56:29.22
>>630
バカ丸出しあたま悪い
632デフォルトの名無しさん:2011/09/15(木) 13:06:46.91
633Perl忍者:2011/09/15(木) 13:09:11.60
こいつら童貞キモクソ
treeboa=俺だと勘違いしてるゴミ
早く死ね
デートもしたことないかわいそうなやつら
かわいそうだな 彼女暦=年齢
気持ち悪いHaskellやってるんだな
一生だ
気持ち悪い
生産性のないゴミ つまらないゴミ言語
お前らがやっても無駄無駄
634Perl忍者:2011/09/15(木) 13:10:17.82
彼女いない暦=年齢

哀れのゴミ死ね
635Perl忍者:2011/09/15(木) 13:16:12.94
2chブラウザ作ってるとかほざいてる高校生は帰れ
車輪の再発明
てめーはクズだ
わかったな死ね

俺以下ゴミ つまらない発想してんじゃねーぞ
俺の発想はおもしろい
ネタを創造する能力がある
636Perl忍者:2011/09/15(木) 13:41:30.48
vps490円ってこれってsmtpとか使えますか
教えてください
追加できますかこれ?servermanです
お願いします
637デフォルトの名無しさん:2011/09/15(木) 17:31:56.68

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
638デフォルトの名無しさん:2011/09/15(木) 17:34:55.92
透明ってことは、やつが現れたか。
639デフォルトの名無しさん:2011/09/15(木) 17:37:25.67
>>630
実際、他の言語に比べておもちゃみたいに簡単なんだが。。。
もっと広まっても良さそうなモンなのにな
640デフォルトの名無しさん:2011/09/15(木) 17:44:57.13
>>639みたいのが敷居を高くしている元凶
641デフォルトの名無しさん:2011/09/15(木) 23:32:44.40
wikipediaを見てエラトステネスの篩を実装して見たのだけど、、
http://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])
642デフォルトの名無しさん:2011/09/16(金) 00:03:20.62
型シグニチャを書くべき。
(tail pL)^2 って何ぞ?
643デフォルトの名無しさん:2011/09/16(金) 00:13:22.53
関数型言語はLuaみたいな感じで生き残りを模索したほうがいいと思う
644デフォルトの名無しさん:2011/09/16(金) 00:28:29.40
プログラミング言語に対して「生き残りを模索」なんて馬鹿馬鹿しい

宗教や文化遺産でもなければ、誰かの芸術作品でもない
他の言語と何か競争しているわけでもない

使う人がいれば生き残り、誰にも使われなければ消えていく
それだけだ

生き残らせるという考え方自体が間違ってる
645デフォルトの名無しさん:2011/09/16(金) 01:23:34.47
>>644
概ね同意だけど、プログラミング言語はある種の芸術作品だと思うんだがなぁ。。。

言語だけじゃ無しに、プログラムって、道具であると同時に作品だと思うんだが
646デフォルトの名無しさん:2011/09/16(金) 05:49:53.51
>>645
で、あんたは売らんがための芸術作品を買いたいのか?
647デフォルトの名無しさん:2011/09/16(金) 06:32:46.43
>>646
欲しいと思って、金を持ってれば買うだろ。普通
648デフォルトの名無しさん:2011/09/16(金) 07:52:07.17
>>641
手続き的に描くならモナド使うのがわかりやすい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
649 [―{}@{}@{}-] デフォルトの名無しさん:2011/09/16(金) 07:52:25.99
>>644
ある言語を気に入って、使い続けたいと思うなら、
コミュニティが生き残らないと困るし、可能なら大規模になって欲しいだろ

Haskellがここ数年で急速に実用的になったのは、
コミュニティが十分大きくなってライブラリが整備された/GHCへのフィードバックが増えたのが大きいと思う
650デフォルトの名無しさん:2011/09/16(金) 08:06:03.13
>>641>>648
プログラミングHaskellのp.160にあるprimes見たら感動するよ
651デフォルトの名無しさん:2011/09/16(金) 08:29:20.60
そんなものよりここ見た時の方が驚いたよ
色々あるんだなぁあという意味でw
http://www.haskell.org/haskellwiki/Prime_numbers#Turner.27s_sieve_-_Trial_division
652デフォルトの名無しさん:2011/09/16(金) 16:25:35.76
>>629
hasName "from" <+> hasName "to"
とやると<from>と<to>の両方が集められたから大体orの意味になってるんじゃね?

とりあえずトップはテキストノードじゃないよね?
で、次にgetNameに行くわけだけど、getNameはタグ名のあるノードつまり全てのノードにマッチするわけだからトップにマッチするわな
んでgetNameでタグ名取得してmkTextで取得したタグ名を内容とするテキストノード生成・・・と
deepだからその時点で探索終了するから>>629の振る舞いで有ってるんじゃないの?
653デフォルトの名無しさん:2011/09/16(金) 23:28:40.55
s1 :: String の中に Shift-JIS でエンコードされたデータがあります。

これを UTF8 に変換したいです。
s2 = f s1

この関数 f を提供してくれるライブラリはないでしょうか。
ファイルや標準入力などからの読み込みではなく、
String や ByteString などの中にあるデータを直接変換するものです。

[環境]
・Windows7
・GHC 7.0.3
654デフォルトの名無しさん:2011/09/17(土) 01:51:13.36
みなさんHaskellでなにやってるの?
スタディがてらマルバツゲームを作ってみたけど正直便利と思えない。
655デフォルトの名無しさん:2011/09/17(土) 07:36:33.16
vbaとかのほうがいいよ
656デフォルトの名無しさん:2011/09/17(土) 07:37:56.17
>>653
iconvパッケージを使って
import qualified Codec.Text.IConv as IConv

toString . IConv.convert "Shift_JIS" "UTF-8" . fromString
でいけると思う
IConv.convertはByteStrinを対象としてるから、String用にする為にはStringからByteStringの変換、
ByteStringからStringへの変換をはさんでやるわけだ
657デフォルトの名無しさん:2011/09/17(土) 09:04:51.64
>>665
iconvはwinGWかcygwinでしか使えないんですよね。
658デフォルトの名無しさん:2011/09/17(土) 09:19:07.06
じゃあicuいるけどuconvとかは?
659デフォルトの名無しさん:2011/09/17(土) 12:21:07.94
今日の忍者は某セミナー行きかな?
帰ったらレポ頼むわw
660デフォルトの名無しさん:2011/09/17(土) 15:33:06.75
>>658
http://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 を実行しておく必要があるのでしょうか。
661デフォルトの名無しさん:2011/09/17(土) 15:54:54.29
>>660
icu4c-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 を使うのは難しいですね。
とりあえずまだ諦めずに、もう少し色々探ってみます。
662デフォルトの名無しさん:2011/09/17(土) 22:35:11.60
ラムダ計算がチューリング完全である証明ってどうやるの?
663デフォルトの名無しさん:2011/09/18(日) 07:51:50.97
反復と分岐が可能ならオッケー、だったような。
664デフォルトの名無しさん:2011/09/18(日) 13:55:41.61
チューリングマシンシミュレーターが作れればいいのじゃね?
665デフォルトの名無しさん:2011/09/18(日) 15:55:19.66
おまえら数学好きなんじゃないの?
666デフォルトの名無しさん:2011/09/18(日) 16:00:27.79
含む記号が∈じゃなくてiの上に^が乗った記号を使うのは
数学でどんな分野ですか?
667デフォルトの名無しさん:2011/09/18(日) 17:07:05.59
>>665
釣り好きでもフライは興味ないやつも居る
車好きでもカートには興味ない奴も居る
668デフォルトの名無しさん:2011/09/18(日) 17:52:19.39
アジフライおいしいのに
669デフォルトの名無しさん:2011/09/18(日) 18:00:33.10
要は数学っぽいものが好きなだけっで数学が得意なわけではないと
670デフォルトの名無しさん:2011/09/18(日) 18:40:36.21
数学が好きなんじゃなくて形式化が好きなのだ
671デフォルトの名無しさん:2011/09/18(日) 18:42:23.16
>>665
数学が好きと、数学が得意は必ずしも一致しない

ええ、下手の横好きです
672デフォルトの名無しさん:2011/09/18(日) 18:43:52.10
>>669
というよりは、解析学は好きだけど集合論は好きじゃない、の方が近い

集合論は色んな数学の基礎のひとつになってるが、それにはあまり興味は無く、
その上に作られた解析学の方に興味がある、みたいな

ある言語(算法、計算)がチューリング完全であるかどうかは、
計算機科学の基礎の一つではあるが、ハスケラーの間でも興味がない人がほとんどだろ
673デフォルトの名無しさん:2011/09/18(日) 18:50:00.65
ハスケラーだとピリッとしないからカレー野郎にしようぜ
674デフォルトの名無しさん:2011/09/18(日) 18:53:23.63
おとこの子はハスケラー
おんなの子はハスケルン
675デフォルトの名無しさん:2011/09/18(日) 19:11:26.86
集合論は好きじゃないけどハスケラーw
676 [―{}@{}@{}-] デフォルトの名無しさん:2011/09/18(日) 19:39:50.47
>>672
むしろ逆で、いわゆる数学(解析学とか代数学とか)よりも、
計算機科学やその周辺(論理とか集合論)に興味のあるユーザが多い印象
677 [―{}@{}@{}-] デフォルトの名無しさん:2011/09/18(日) 19:40:51.40
おっと誤読してた、解析学云々は比喩か
678デフォルトの名無しさん:2011/09/18(日) 19:56:48.89
能書きいいから証明して
コードもかけなきゃ証明もできないのか
679デフォルトの名無しさん:2011/09/18(日) 20:03:43.78
>>675
たとえ話だ(数学は好きなんだが、分野に依ると >>669 に言いたかった)
すまん、喩えがまずかったな

>>678
できません
諦めてください

と、暗に言ってきたつもりだが、お前の脳では解釈できなかったか
680デフォルトの名無しさん:2011/09/18(日) 20:42:20.51
>>678
他の人は知らんけど、自分はlength関数をCでもjavaでもrubyでも自作出来なかったのに、haskellだとあっさり少ない知識で書けちゃったのに惚れたんで、分かりませんね
(Cとrubyで書いて貰ったこと有るけど、初心者がいきなり書けるようなコードじゃ無かった)

今も、「これ、rubyとかでどう書くんだろ?」とか思いながら書く事が多いです


681デフォルトの名無しさん:2011/09/18(日) 21:15:03.17
そりゃまた無脳ですな
682デフォルトの名無しさん:2011/09/18(日) 21:32:00.55
>>681
うい

だからこそ、haskellは簡単だと実感してるですよ

683デフォルトの名無しさん:2011/09/18(日) 21:42:54.73
俺は集合好きだけど
コンパクト集合の積集合がコンパクトになることの証明が
さくっと出てこない程度にはニワカ

いや
好きなんだけどね
684デフォルトの名無しさん:2011/09/18(日) 23:06:21.08
なんでhaskell使うのにそんな気張らなけりゃならんのか
何年前の感覚だ?

手続型に関する多くの難解な研究を把握してからじゃないと
VBを使っちゃだめなのかい
685デフォルトの名無しさん:2011/09/19(月) 04:51:02.20
もう9月も下旬に差し掛かるのに
7月予定だった蓮麩羅が未だに揚がってこないね
686デフォルトの名無しさん:2011/09/19(月) 06:22:49.85
証明といえばintroduction to functional programming using haskellの練習問題には証明問題が沢山あるけど
あれcoqとか使ってやりたい
687デフォルトの名無しさん:2011/09/19(月) 06:31:56.96
InductiveかつCoinductiveな型がhaskellのlistで
さらに全ての型がbottomっていう変な値を持ってるのが証明系でどうあつかうのかわかんね
あとは計算量と空間使用量の証明な式簡約系を自分で作って
そいつの振る舞いをに付いて証明することで間接的に証明するやり方はあるんだけど、気軽にできるものではないな
結局Haskell向けに新たに定理証明系を作るという修士・博士論文並みのプロジェクトをやることになる・・・
688デフォルトの名無しさん:2011/09/19(月) 10:20:09.53
>>685
確かにあれはツォルンのほだいを使うからふつうは出てこないよな。
689デフォルトの名無しさん:2011/09/19(月) 12:18:06.99
結局能書きたれたい奴用の言語か
690デフォルトの名無しさん:2011/09/19(月) 13:07:30.73
こういう場で嫌味とか皮肉を言いたくなる奴の心理が分からん
691hajimehoshi:2011/09/19(月) 13:36:39.29
692Perl忍者:2011/09/19(月) 13:38:54.56
perl-ninjaさん (id:perl-ninja) の今日の☆レポートです。

本日の☆ : 1
ただいまの☆総数 : 32

■ 洗脳されてるよお前ら気持ち悪い うざい  死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって  Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059
星一 (id:hajimehoshi) ☆

〜 ☆をくれた人に「カラースター」でお返ししよう! 〜

大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
693デフォルトの名無しさん:2011/09/19(月) 13:41:04.42
忍者はicfpか・・・裏山
694デフォルトの名無しさん:2011/09/19(月) 13:45:22.73
International Conference on Functional Programming の略。

毎年6月頃にプログラミングコンテストが開催され、どの言語が最強か、決定される。
695デフォルトの名無しさん:2011/09/19(月) 13:56:19.54
そっちじゃなくて今日のセミナーのことだよ
696デフォルトの名無しさん:2011/09/19(月) 14:29:23.58
どのOSが最強とか
どのアーキテクチャが最強とか
そういうコンテストも欲しいね
697デフォルトの名無しさん:2011/09/19(月) 14:30:12.71
忍者がセミナーでてるって本当?
あいつが出るわけない、反感買ってるから殺される
698デフォルトの名無しさん:2011/09/19(月) 14:34:09.48
リアバレしてないから大丈夫だろ
start-haskellとか潜入レポートやってたじゃん
699デフォルトの名無しさん:2011/09/19(月) 14:41:00.86
サイバイマンディフェンスまで乗り込んだらしいな
まあ平気だろうな
700デフォルトの名無しさん:2011/09/19(月) 17:19:34.56
何が彼をそんなに突き動かすの?
701デフォルトの名無しさん:2011/09/19(月) 17:26:31.02
Perl忍者がドワンゴ入ったらおもしろそうだな
702デフォルトの名無しさん:2011/09/19(月) 18:17:24.55
怪しい薬やって暴れてクビになるくらいおもしろいことは起きないと思うんだ
703デフォルトの名無しさん:2011/09/19(月) 18:32:47.31
そういや彼もHaskellerだった
704デフォルトの名無しさん:2011/09/19(月) 19:31:45.07
>>690
小学生の頃、好きな子にやたらと突っかかる奴いただろ
705デフォルトの名無しさん:2011/09/19(月) 19:40:19.30
積みあがったトランプ崩したくなったり、リスカしたくなったりするあれだろ
わかるよ
706デフォルトの名無しさん:2011/09/19(月) 20:05:25.82
み上げたものぶっ壊して!!!身に付けたものとっぱらって!!!
707デフォルトの名無しさん:2011/09/19(月) 20:06:29.81
ところでさあ、どうしてハスケルの人達って、他の言語を馬鹿にするの?
普通にハスケルの良い所をアピールすればいいだけなのに、
他の言語を馬鹿にしなければならないほどアピールポイントが皆無なの?
708デフォルトの名無しさん:2011/09/19(月) 20:09:12.13
そんなの山○さんと○中さんぐらいしかしらんわ
709デフォルトの名無しさん:2011/09/19(月) 20:11:36.39
関数型プログラミングに誇りを持っているんだよ
しかも難しくて何をやってるかよくわからないだろ?
ちょっと、普通のプログラマと違いをつける一工夫のためにHaskellやってんじゃないかな
気持ち悪いから死ね
710デフォルトの名無しさん:2011/09/19(月) 20:16:21.62
vs OCamlの人とか、いい具合にやりあってると思うが?

他の言語とかに対する言論がちょっとアレかな、と思う人というとMatzとかScalaのあの人とか、
あれぐらいのアレではじめてちょっとどうかな、とか思う。

>>707 はネット一切見なければいいよ。見たくないものは見なきゃいい。それだけ。
711デフォルトの名無しさん:2011/09/19(月) 20:18:33.28
>>707
むしろ他の言語ユーザーよりはバカにしてる姿見かけ無いんだが。。。
そう言う平和な所も割と気に入ってる
712デフォルトの名無しさん:2011/09/19(月) 20:18:53.74
Haskell系は優しいと思う
Rubyは怖い
マジで
713デフォルトの名無しさん:2011/09/19(月) 20:20:03.23
すぐ影響うける気持ち悪い

Matzくらいの有名なやつがほざくだkですぐまね

クソガキとかもまね

なんでこいつ?Haskellとかわめいてんの?気持ち悪いっていうやつも多数
意味がわからない

ただやってるだけ
早く死ね

死ね
にくい

気持ち悪い
憎いしね
714デフォルトの名無しさん:2011/09/19(月) 20:24:04.43
>>711
ポカーン...
手続き型は難しすぎてわかりませーん、とか、完全に見下して煽ってるだろ...
715デフォルトの名無しさん:2011/09/19(月) 20:24:09.11
Perl忍者を受け入れるくらい優しいスレです
716デフォルトの名無しさん:2011/09/19(月) 20:26:31.16
もう プログラミング+サーバいじり


そんなやつわんさかいる

ばかじゃねーの

もう時代はかわった

お前ら情弱消えろ

死ね

そんなの誰でもできる
バカでも
717デフォルトの名無しさん:2011/09/19(月) 20:27:11.49
ポカーンってセリフが許されるのは二次元まで
718デフォルトの名無しさん:2011/09/19(月) 20:29:08.58
そういえばハスケルって二次元ヲタが多いな
しかも隠そうともしない
719デフォルトの名無しさん:2011/09/19(月) 20:32:34.37
誰でもできることで食ってけるだけお金貰うことは素晴らしいことあるよ
720デフォルトの名無しさん:2011/09/19(月) 20:35:12.96
2次元オタも気持ち悪いしな
一種のコミュニケーションかな

Perlコミュニティでいうラリーウォールと小飼がアニメキャラ好きだし
影響うける話あわせのクズもおいな

sっさと死んでくれ

”影響”受けるやつが憎いんだが
721デフォルトの名無しさん:2011/09/19(月) 20:36:49.03
> air, hack2, loli, maid, miku, moe, nemesis
このへんの hackage は割と死ねと思ってる
722デフォルトの名無しさん:2011/09/19(月) 20:36:50.10
これからの情報戦争の時代に流行るのは各国の重要機関に攻撃かけて機密情報を取ってそれを売買するハッカー
プログラマなんてもう古いということをいいたいんですね
さすが忍者だ 感動的だな
723デフォルトの名無しさん:2011/09/19(月) 20:39:01.86
そうだよ

まあな

見てみ みんないい子づらしてるだろ?

あんなプログラミング 脆弱性発見

どこが楽しいんだ?

破壊する 匿名で迷惑をかける 困らせる
陥れる つぶす  こっちのほうが楽しいだろ

愉快犯

もうそんな時代は終わった いい子ばっかり

いい子ずら

何もしない 怖くてできないびびり

そういうやつばっかりだな

なに考えてるんだよ まったく理解できない
724デフォルトの名無しさん:2011/09/19(月) 20:39:36.50
Perl忍者さんコテ付けてくださいお願いしますよ
725デフォルトの名無しさん:2011/09/19(月) 20:42:10.53
ハスケルの奴等がアニメ好きなのは、3次元は副作用だらけで不純だからだろ
不純を嫌ってピュアな身内同士でオナニーの見せっこ
726デフォルトの名無しさん:2011/09/19(月) 20:43:07.34
てめぇの2ちゃんねる荒らしこそオナニーもいいところだろ、屑が
727デフォルトの名無しさん:2011/09/19(月) 20:44:08.36
ネットギャングを構成したい 身長180センチ以上
体格もいい

ハッキングもできる

集団リンチ可能

爆破テロ 放火 ショットガン ネットギャング
かっこいい

Rubykaigiに乱入して無差別に破壊したいとおもったことある
728デフォルトの名無しさん:2011/09/19(月) 20:45:50.25
なにそれ
かっこよすぎ
729デフォルトの名無しさん:2011/09/19(月) 20:47:04.77
忍者はそんな近代的な飛び道具を使いませんが
手裏剣ですね
730デフォルトの名無しさん:2011/09/19(月) 20:51:53.88
>>714
ごめん
それ、煽りでも何でもなく、マジで挫折したんだ。。。
731デフォルトの名無しさん:2011/09/19(月) 20:52:42.16
忍者に触れる奴はみな忍者
732デフォルトの名無しさん:2011/09/19(月) 20:53:15.87
忍者はウイルスだったのか
733デフォルトの名無しさん:2011/09/19(月) 21:02:25.03
忍者はNG
734デフォルトの名無しさん:2011/09/19(月) 21:03:57.10
忍者は凄いよ
見方につくとマクロされみたいに、アンチや憎いやつらを叩いてくれる
宣伝までしてくれる
よくできたAI
735デフォルトの名無しさん:2011/09/19(月) 21:21:30.82
おまえらは副作用の難しさがわかってないだけ、
という優越感が滲み出てるよな
736デフォルトの名無しさん:2011/09/19(月) 21:41:10.44
>>652
ありがと、おかげさまで deep と <+> の挙動は何とか理解できた
あと multi の挙動も理解できた

だた、processChildren がよく分からない
multi とは違う挙動なのは確認できたが、理屈が分からない
737デフォルトの名無しさん:2011/09/19(月) 21:43:14.18
体をこわすくらいなら職業プログラマなんてやめればいいと思うの。
738デフォルトの名無しさん:2011/09/19(月) 21:43:30.07
>>735
被害妄想だよ。。。^^;
言う程副作用怖く無いから
739デフォルトの名無しさん:2011/09/19(月) 23:32:26.76
haskellって普通のプログラムで書くほとんどのコードを外に追い出してるだけだよね。
ioとかguiとか。
740デフォルトの名無しさん: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 系などと別々に用意し、
何らかの方法でそれらを合成すれば一度の巡回で上記のと同じ結果が得られる
なんて方法はないかと、暇があれば考えてるんだけど・・・何かないかな
こういう条件に絞れば可能、とかいう話でも良いんだが
もしできれば、エッセンスを抽出して関数化したいと思ってる
741デフォルトの名無しさん:2011/09/20(火) 00:08:18.79
>>739
追い出してるって言うか・・・
副作用のある関数からは、純粋な関数を呼べるけど、逆は駄目ってだけ
(結果的にトップレベル付近に副作用のある関数が集まる)

純粋な関数から作って、それに外部からデータ渡すためのインターフェースとして副作用のある関数作れば、それ程ほかの言語と違和感感じない
742デフォルトの名無しさん:2011/09/20(火) 00:13:04.15
人が必要とする機能にアクセスできないHaskell
743デフォルトの名無しさん:2011/09/20(火) 00:56:43.29
>>742
うーん
普通の言語でも、入力->加工->出力が理想だと思うんだが。。。

自分が昔、綺麗だと思ったCのコードとかは、mainの中身は関数を2、3個呼んでるだけのシンプルな感じだったし

それが自然と出来るようになる感じ
すぐに慣れる
744デフォルトの名無しさん:2011/09/20(火) 01:03:24.21
Haskellでは停止しないプログラムの意味はボトム。

ということは、
[[ OSプログラム ]] = ボトム = [[ f = f]]

やった! Haskellだと1行でOSが書けたよ
745デフォルトの名無しさん:2011/09/20(火) 01:08:50.35
副作用なしにGUIは作れない
副作用なしにゲームは作れない
局所的なプログラミング言語だと思う。
746デフォルトの名無しさん:2011/09/20(火) 02:32:48.32
gtk2hsさん、、、
747デフォルトの名無しさん:2011/09/20(火) 06:05:39.19
的外れな指摘だらけでワロタ
748デフォルトの名無しさん:2011/09/20(火) 06:59:08.60
>>745
純粋関数型言語って言葉に引きずられ過ぎ
副作用部分ではhaskellは、オブジェクト指向は無いけど、関数型な機能をふんだんに使える手続き型言語として機能する

純粋とか、関数型言語とかにこだわり過ぎ
749デフォルトの名無しさん:2011/09/20(火) 07:06:25.14
IOモナドの本質は二枚舌
750デフォルトの名無しさん:2011/09/20(火) 08:00:20.76
7, 8年前はJavaを引き合いに「Objectとは何か」「Object指向的発想とは」みたいなのが流行ったけど、
今度は関数型言語のパラダイムで同じことが繰り返される訳か。胸熱。
751デフォルトの名無しさん:2011/09/20(火) 08:32:33.73
OOで揉めるのは「OOとはなにか」が未だ明確に規定できてないから。
関数型で揉めるのは「関数型とはなにか」が未だ明確に規定できてないから。
752デフォルトの名無しさん:2011/09/20(火) 09:26:16.83
純粋関数型は副作用なしが定義でしょ
だからそもそもありえないんだよ
753デフォルトの名無しさん:2011/09/20(火) 09:31:13.51
副作用してるのは下っぱランタイムが勝手にやってるだけ
私は副作用なんて汚いことしませんよ?
とか言って騙せばいいんだよ
754デフォルトの名無しさん:2011/09/20(火) 10:18:12.49
>>740
RULES プラグマをうまく使えばやりたいことができそう。

でも、オレが未熟なだけかもしれんが:
RULES プラグマは、それがどう適用されるか結果を見てみないと確信できない
 ↓
コーディング中に自信が持てない & 試行錯誤
 ↓
開発効率低下

結論として、個人的には、いまやっている方向でよいんじゃない? と思う。
755デフォルトの名無しさん:2011/09/20(火) 10:19:31.58
集合の圏の上では副作用は直積型の冪対象で表現されるんやな
side-effects T A := (A×S)^S
756デフォルトの名無しさん:2011/09/20(火) 10:30:31.82
>>740が手作業でタプルを返すfoldの中身を書くっていうのはtuplingという手法なんだけど
それを自動化する事は考えられてる・・・がまだ研究段階でした残念!
現実的な解としては複雑化されてしまうfoldの中身をコンビネータで判りやすく組み立てる仕組みを作る事ぐらいだね
ちょっと前にでてたHXTのArrowとかまさにそれだと思う
757デフォルトの名無しさん:2011/09/20(火) 12:41:30.27
>>754
RULES プラグマ でどこまでやれるか検証してみる

>>756
> 手作業でタプルを返すfoldの中身を書くっていうのはtuplingという手法なんだけど

そういう名前なのか
ACM で "automated tupling" "automate tupling" なんかのキーワードで検索してみたが、
結構古くから研究されてるんだな、ちょっと論文漁ってみるよ

> 現実的な解としては複雑化されてしまうfoldの中身をコンビネータで判りやすく組み立てる仕組みを作る事ぐらいだね

今の段階でできる事はやはりそこになるか
そういうのに Arrow が活用できるとは知らず、今まで小難しい Arrow を避けてたが、
そろそろ本腰を入れて勉強してみるか

いろいろありがと
758デフォルトの名無しさん:2011/09/20(火) 14:37:30.41
>>751
萌えとは何か?
759デフォルトの名無しさん:2011/09/20(火) 14:56:22.90
プログラマーの付き合いネタ=レッドブル 萌え アニメ

一般職の付き合い方ネタ=ゴルフ 釣り

低底の付き合いネタ=パチンコ 麻雀


テンプレ付き合いネタでした
760デフォルトの名無しさん:2011/09/20(火) 20:53:51.75
>>755
集合の圏じゃなくてもいい。
SはStoreもしくはStateであることを明記しなくては意味ない。
IOモナドの解説でStateモナドの話が出てくるのはそのSに係った話をしていると考えられる。
761Perl忍者:2011/09/20(火) 22:10:46.83
久しぶりですねみなさん

perl-ninjaさん (id:perl-ninja) の今日の☆レポートです。

本日の☆ : 1
ただいまの☆総数 : 32

■ 洗脳されてるよお前ら気持ち悪い うざい  死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって  Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059
星一 (id:hajimehoshi) ☆

〜 ☆をくれた人に「カラースター」でお返ししよう! 〜

大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?

hoshihajime

hoshihajimeです

みなさん覚えてください

Perl忍者の仲間に加わりました

星 はじめ です

hosi hajime
762Perl忍者:2011/09/20(火) 22:14:19.81
星っていうやつはダメだな

ツイートに一貫性がないな

やっぱり 仲間はずす

さようあんら
763Perl忍者:2011/09/20(火) 22:26:26.45
星っていうやつは ドワンゴも首になれ

ひろゆきに伝えとくか

ひろゆきは親戚なので

ドワンゴ クビにするように
764デフォルトの名無しさん:2011/09/20(火) 23:54:56.19
>>740
iterateeの合成を使うとそういう処理が簡単にできます。
Iterateeが所謂foldと同じくデータを消費するもので、2つのIterateeを同時に
走らせてタプルにして返すコンビネータを使います。

http://okmij.org/ftp/Streams.html#1enum2iter

実際のパッケージではzipという名前がついてます。
765デフォルトの名無しさん:2011/09/20(火) 23:59:38.18
そういえばiterateeをIO以外で使ったことなかったな
766デフォルトの名無しさん:2011/09/21(水) 00:09:49.44
使ったこと無いので外してるかもしれませんが、iterIOはpureなiterateeも想定している
ようなので、そういう用途に使いやすいかもしれません。
767デフォルトの名無しさん:2011/09/21(水) 00:25:52.21
潜る対象の木からEnumeratorを作って(enumListみたいな)
各処理をIterateeで書いて
後はIteratee用のライブラリのコンビネータで合成、接続、展開して取得
って感じでいけるのかなるほろなるほろ
768デフォルトの名無しさん:2011/09/21(水) 11:24:08.39
頂点や辺がいろいろな属性をもつようなグラフの操作(作成・変形・探索)
をやりたいのですが、FGLというパッケージが定番なのでしょうか?
他に何か選択肢があればご紹介ください。
769デフォルトの名無しさん:2011/09/23(金) 10:02:42.41
さあ、連休だ。これから思いっきり、はすけりまくるぞ。
770デフォルトの名無しさん:2011/09/23(金) 10:08:38.08
>>769
何と言う俺w
771デフォルトの名無しさん:2011/09/23(金) 11:08:34.92
俺もこれからルンルン ハスケルン♪
772デフォルトの名無しさん:2011/09/23(金) 22:02:58.88
プログラミングHaskellの5.7練習問題5問目、どうも自分が問題自体を理解できてないんだけど、解けた人いる?
5.7練習問題でここだけ解けなかった。



以下、問題文を抜粋。

5.二つの生成器を持つリスト内包表記[(x,y) | x <-[1,2,3], y <-[4,5,6]]は、一つの生成器を持つリスト内包表記二つでも表現できることを示せ。
ヒント:一方のリスト内包表記を他方への中に入れ、またライブラリ関数concatも使え。
773デフォルトの名無しさん:2011/09/23(金) 22:17:30.81
concat [[(x , y) | y ← [4, 5, 6]] | x ← [1, 2, 3]]
774デフォルトの名無しさん:2011/09/23(金) 22:23:44.53
>>773
単純にリスト内包表記をネストすれば良かったのね・・・

ありがとうございましたm(_ _)m
775デフォルトの名無しさん:2011/09/23(金) 22:53:18.29
「Programming with Arrows」というドキュメントを読んでいるのですが、
(このタイトルでググればすぐに見れます)

[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 の中だけでは表現できない、ということなんでしょうか?
(もしそうだとしても、入力もパラメタ化できる事との繋がりがまだモヤモヤしてる)
776デフォルトの名無しさん:2011/09/23(金) 23:21:17.41
そろそろ haskell行者 とか scalaモヒカン があらわれても良い頃。
777デフォルトの名無しさん:2011/09/24(土) 01:30:55.69
ラグビーをみてるとHaskellって選手が現役イングランド代表にいるよ。
今度日本に助っ人としてくるみたい。
778Perl忍者:2011/09/24(土) 10:58:43.43
perl-ninjaさん (id:perl-ninja) の今日の☆レポートです。

本日の☆ : 1
ただいまの☆総数 : 33

■ 洗脳されてるよお前ら気持ち悪い うざい  死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって  Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059
hinassan (id:hinassan) ☆

〜 ☆をくれた人に「カラースター」でお返ししよう! 〜

大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
779Perl忍者:2011/09/24(土) 10:59:35.44
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
780デフォルトの名無しさん:2011/09/24(土) 12:21:30.90
>>775
reactiveみたいなFRPもある種のストリームプロセッシングとみなす事ができるよ
そしてそういうのは大抵MonadやApplicativeのインスタンスを持ってるから
工夫は必要だけど不可能というわけでも無いと思う
781デフォルトの名無しさん:2011/09/24(土) 12:59:17.57
>>775
(>>=) :: 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では表現可能なストリームの例がある
782デフォルトの名無しさん:2011/09/24(土) 13:41:02.82
>>781
ストリームといえばStream A := νX. A×X の形のストリームのことを考えてたんだけど
この形のストリームは基本的にコモナドになる(free algebraのコモナド版にIdentityモナドを与えたようなやつ)んだよ
んでモナドからコモナド、コモナドからモナドの構成(ex. http://comonad.com/reader/2011/monad-transformers-from-comonads/)があるんで
それをばらしてやることで直接ストリームを扱うモナドというのは書ける様に思えるんだけどそうでもないの?
783782:2011/09/24(土) 13:46:11.79
あーArrowガン無視だからこの話題は別問題だなぁ
ごめん忘れて
784デフォルトの名無しさん:2011/09/24(土) 23:06:52.58
Haskell を使ったアプリケーション プログラムの設計を解説したものってないんかな
枝葉の技術を解説したり実検したサイトやブログはよくあるんだけど、
ひとつアプリを作ってみましょうってのは見当たらないよね

その中で、何を目的にして、何を考えて、どう設計しているのか、
解説してるのがあるといいんだけど
785デフォルトの名無しさん:2011/09/24(土) 23:58:45.47
日本人は数学を苦手とする人が多いから
Haskellの理論を学ぶだけで精一杯で
まっとうなアプリという形まで仕上げられる人が少ないんだと思う。
かくいう俺も今のところ簡単なテキストフィルタを作るので精一杯だな。
786デフォルトの名無しさん:2011/09/25(日) 00:01:50.81
いや、べつに英語でも構わないんだが
787デフォルトの名無しさん:2011/09/25(日) 00:19:10.78
今の所、今までの手続き言語のほうがGUIに向いてるからじゃないか?
CUIなら引数を与えて動かすだけだけど、GUIはユーザーの指示をひたすら待たないといけない。
そこがHaskellにとっては不得手なんだろ。
言語が抽象的すぎて実感がわかないのと、他の言語でも同じ事できるし。
インタラクティブに弱いのかも。
788デフォルトの名無しさん:2011/09/25(日) 00:48:17.20
ごめん、GUI でなくてもいいんだ

例えば darcs の思想の話は本家サイトからたどって見れるんだけど、
実際にソースコードを追って、こういう設計で作ってるんだという解説が見当たらない

オープンソースなんだから読めばいいだろとよく言われるんだが、
やはり分かっている人の道案内が欲しい

自分で言って気がついたが、Haskell ソースのガイドをしてくれる人っていないの?
789デフォルトの名無しさん:2011/09/25(日) 00:50:43.47
790デフォルトの名無しさん:2011/09/25(日) 03:15:48.56
>>785
他の言語以上に数学が必要だろうか?haskellでアプリ作るのに。
791デフォルトの名無しさん:2011/09/25(日) 03:26:05.82
haskellで作った実行ファイルってexeなんですか?実行環境にもランタイムライブラリとかいりますか?
792デフォルトの名無しさん:2011/09/25(日) 03:32:06.36
elf だったり runghc スクリプトだったりもします
793デフォルトの名無しさん:2011/09/25(日) 03:51:10.72
>>791
Windows で ghc を使ってコンパイルするのなら exe です。
基本的には実行環境にランタイムライブラリは不要です。
つまり、デフォルトでは実行ファイル exe に全て詰め込まれます。

ただし、外部ライブラリ(たとえば LAPAC とか GTK とか)を使ってるのなら、
それらの DLL などが必要になります。


と思ってるけど、違ってたらゴメンね
794デフォルトの名無しさん:2011/09/25(日) 05:15:47.12
>>793
GUIとか使うとmfc*.dllとかcomctrlとかいるのかなあと。ていうかそもそもHaskellでWindowって作れるのか・・
795デフォルトの名無しさん:2011/09/25(日) 05:43:03.70
>>794
gtk2hs<。。。
796デフォルトの名無しさん:2011/09/25(日) 06:12:37.47
>>790
いらないよ。
モナドだのアローだのとオナニーする気がないなら数学とか関係ない。
入出力のたびにオマジナイが必要な、単なる面倒臭い言語なだけだから。
797デフォルトの名無しさん:2011/09/25(日) 06:13:53.09
>>784
> Haskell を使ったアプリケーション プログラムの設計を解説したものってないんかな

オナニー言語にそんなもんあるわけない。
798 [―{}@{}@{}-] デフォルトの名無しさん:2011/09/25(日) 07:07:52.63
枝葉の解説しかないのは、枝葉以外は「普通の」言語と同じ設計で済むからだろ
799デフォルトの名無しさん:2011/09/25(日) 08:36:16.13
RWH とか読んだのか?
800デフォルトの名無しさん:2011/09/25(日) 09:07:10.58
あんなんで実用の例になってると思うわけ?さすがスーパーオナニスト集団w
801hajimehoshi:2011/09/25(日) 09:26:56.31
みんなやってるから俺もやる
社内のエンジニアがHaskellやってるから
仲間はずれにされるのが怖い
俺は数学もできないバカだけど はてな民、LL業界人の話題あわせでやっている
話ができなくなるから、Haskellやってないと舐められる
「え?エンジニアなのにHaskell知らないの?」
そう全部あのせい
あの記事が悪い
「本物のプログラマはHaskellを使う」っていう記事があった
こいつのせいだ
こいつのせいでLL界のやつらは洗脳された
これがなければ俺はHaskellをやる必要がなかった
クソったれが この記事が存在するために Haskellをやってないと本物のプログラマではない
”にわかプログラマ”っていうレッテルを貼られてしまう
残念なことだ
ちなみにアニメにもはまっている、 マドカまぎか それとブラウザ三国志にもはまっていた
社内ではやったから
君たちは洗脳されている
Haskellをやっても意味がない 踊らされている
気づけ

Perl忍者のコメントで洗脳が解除された

perl-ninja
洗脳されてるよお前ら気持ち悪い うざい  死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって  Haskell学ばせる工作か?
802デフォルトの名無しさん:2011/09/25(日) 09:33:29.72
実用実用と喚いてるバカはどの程度の内容を期待してるんだ?
書いてあるソースコードをコピペすればそのまま動くなにかが手に入る、サルでもできるレベルか?
803デフォルトの名無しさん:2011/09/25(日) 09:36:32.32
流行ってるからやるってのは何の問題もないよな
むしろ偉い
804Perl忍者:2011/09/25(日) 09:38:21.74
>>801

ぐだぐだ長文うざいんだよ
Haskellやってろ糞ったれが
805デフォルトの名無しさん:2011/09/25(日) 09:39:24.97
>>801
そういう時期はもう過ぎてると思うんだがなぁ・・・
自分は切欠はそう言うものでも、今は純粋に気に入って使ってる。
806デフォルトの名無しさん:2011/09/25(日) 09:40:52.53
>>805
Haskellで作った物見せてみ
807デフォルトの名無しさん:2011/09/25(日) 09:48:33.15
出せないってことは相当クズなことやってんだろうな
小物
808デフォルトの名無しさん:2011/09/25(日) 09:54:14.01
気に入らないんだったら、JavaだろうがC++だろうがご自由に利用して
作ればいい。それだけの話。他人にあれこれ言うもんじゃないよ。
809デフォルトの名無しさん:2011/09/25(日) 11:21:41.22
>>801
お前が無能だから知らないとバカにされるんだろ
責任転嫁してんじゃねーよ屑
810デフォルトの名無しさん:2011/09/25(日) 12:03:00.60
また新しい人格でも誕生したのか?
811デフォルトの名無しさん:2011/09/25(日) 13:35:41.95
>>798
> 枝葉以外は「普通の」言語と同じ設計で済むからだろ

本当にそうだろうか
実際に「普通の言語と同じ設計手法」を用いて
なにかアプリを作る解説が皆無なのはなぜだろうか

例えばソフトウェア工学で普通に学ぶような理論の多くは(OOADなど)、
現在の普通の言語(オブジェクト指向が普通に表現できる言語)を対象にしてる

だから普通の言語なら、それらの言語にそのまま翻訳すれば、
たいていは問題なくその理論の力を十分に発揮できる

でも Haskell だと(他の関数型や論理型言語などの事は知らん)
そのまま翻訳して利用するという訳にはなかなかいかない

そのまま翻訳した結果としてよるよくある失敗は、
どうしても明示的に保た(管理し)なければならない状態の数が多くなって、
かつ散らばり、かつその多くの状態が保たれる寿命が長くなるというもの
(さらには保つ必要のない状態まで残ってしまう事もあるが、これは設計手法とは別話)

この辺りは、改善策をちょっとしたトイプログラムやスニペットで示すことは難しい
アプリケーション全体の設計でどう Haskell で表現するかを示す必要があると思う

枝葉以外は普通の言語と同じ設計で済むのなら問題なくできるはずだが、俺には難しい
まぁだから解説はないかなと探しているんだが・・・
812デフォルトの名無しさん:2011/09/25(日) 13:53:17.62
>>802
都銀勘定系の構築事例の2,3も挙げてもらえると。
813デフォルトの名無しさん:2011/09/25(日) 22:06:38.54
てことはJavaも.NETも実用じゃないのか。
実用の例を上げてもらえるかね。
814デフォルトの名無しさん:2011/09/25(日) 22:08:15.49
とりあえずhajimehoshiっていうやつは
コテあげてここに書き込むアホってことがわかった
815デフォルトの名無しさん:2011/09/25(日) 22:09:58.71
実用じゃない言語ってCASL?
816デフォルトの名無しさん:2011/09/25(日) 22:45:42.35
Perl忍者って実際どのくらいのレベルなの?
http://blog.livedoor.jp/perlninja2/archives/50573052.html
こことか読むと厨房以下って感じなんだが…
817デフォルトの名無しさん:2011/09/25(日) 22:49:50.17
某M社の系列企業のサーバに侵入して色々持ち出したとかいう話は聞いた
818デフォルトの名無しさん:2011/09/25(日) 23:45:49.34
>>816
これで二十歳過ぎらしいからな
プログラミングとは残酷なものだね
819デフォルトの名無しさん:2011/09/25(日) 23:54:59.94
まあHolyGrailはもっとゴミクズって証明されてるけどね
820デフォルトの名無しさん:2011/09/25(日) 23:56:14.85
>>806
https ://gitorious.org/carettah
821デフォルトの名無しさん:2011/09/25(日) 23:56:29.33
Perl忍者はssig33やotsuneより断然まとも。
ちなみにスレ違いだろ。
Perl忍者の話題は他でやれ。
822デフォルトの名無しさん:2011/09/25(日) 23:57:39.08
>>816
どうみてもネタブログ
823デフォルトの名無しさん:2011/09/25(日) 23:59:00.56
これからPerl忍者と書き込むやつは、全員Perl忍者
824デフォルトの名無しさん:2011/09/25(日) 23:59:11.73
NGしろ
825デフォルトの名無しさん:2011/09/26(月) 00:01:40.51
かわいそうだからできない
826デフォルトの名無しさん:2011/09/26(月) 00:12:40.46
もっと長いコードはないの?
それだと話にならないよ
827デフォルトの名無しさん:2011/09/26(月) 06:57:25.41
>>814 なりすましだろ
828デフォルトの名無しさん:2011/09/26(月) 08:42:02.53
>>826
Perl忍者はお前みたいな下等な分際と話もしたくないだろ
829デフォルトの名無しさん:2011/09/26(月) 11:21:38.67
>>828
他に客観的に判断できる資料はないのか
830デフォルトの名無しさん:2011/09/26(月) 13:12:46.32
perl忍者はperlユーザーの評判を下げるためのrubistな工作員だろ
831Perl忍者 ◆M5ZWRnXOj6 :2011/09/26(月) 13:34:37.84
こんにちは、なんかスレ荒れてますね
なんか自分が書き込むと荒れます すみません

川上っていうやつ気持ち悪いな
hajimehoshiもわかってんだろ?
わかったなら することはわかるな?
暗殺だ

忍者プロダクションのスパイは日本のあらゆる企業にスパイがいるんだけどな
ドワンゴにはhajimehoshi

おっと これ以上は言えないが
始末しとけ hajimehoshi

ドワンゴ・川上量生氏との特別対談企画「ゲーマーはもっと経営者を目指すべき!」を本日よりスタート。第一回めのテーマは「世の中で一番面白いゲームは現実」
http://www.4gamer.net/games/000/G000000/20110922039/
832デフォルトの名無しさん:2011/09/26(月) 13:35:21.18
こりゃ、川上消えそうだな
833デフォルトの名無しさん:2011/09/26(月) 13:37:14.71
見たけど茶髪が似合ってないなw
ズラかw
834デフォルトの名無しさん:2011/09/26(月) 15:32:32.59
1968年生まれってwikipediaにあったけど1986の間違いじゃないの?
なんか童顔すぎる。^^;
835デフォルトの名無しさん:2011/09/26(月) 18:32:35.60
Haskellのネットワークプログラムは速いし簡潔だといわれているので、
Erlang/OTPみたいな監視系含んだフレームワークがあると実用的になると思うんだが。(もしかしてある?)
836デフォルトの名無しさん:2011/09/26(月) 18:42:45.39
そろそろ捜査の手が伸びる
837デフォルトの名無しさん:2011/09/26(月) 20:23:00.02
>>835
ソースキボンヌ
838デフォルトの名無しさん:2011/09/27(火) 17:45:37.53
今更かもしれんけど、現実世界ハスケルを手に入れた。
839デフォルトの名無しさん:2011/09/27(火) 18:03:03.77
>>838
どうせなら、「Haskell」も漢字にしようぜ。

『現実世界 覇洲懸瑠』 雄雷莉 出版
840デフォルトの名無しさん:2011/09/27(火) 18:37:27.57
男塾にでてきそうな固有名詞になった
841デフォルトの名無しさん:2011/09/27(火) 18:48:03.08
猛納怒
842デフォルトの名無しさん:2011/09/27(火) 19:43:27.35
>>839
失敬。ハスケルって漢字にするのは難しい。^^;
それより ハスケルおっぱい のほうが豊満そうでいい。意味不明
843デフォルトの名無しさん:2011/09/27(火) 19:48:21.52
仮想世界に行けるプログラミング言語はありますか?
844デフォルトの名無しさん:2011/09/27(火) 19:57:59.67
吉里吉里かNScripterあたり
845デフォルトの名無しさん:2011/09/27(火) 20:10:13.90
>>830
街宣車で喧伝する偽右翼みたいな感じか
846デフォルトの名無しさん:2011/09/27(火) 20:30:25.26
ネトウヨの同族嫌悪がどうかしたか?
847デフォルトの名無しさん:2011/09/27(火) 22:34:52.14
えっ、ねとうよ!?
848デフォルトの名無しさん:2011/09/28(水) 01:21:37.49
他墳留
里垂兎
矮-魂尾寧汰
849Ruby騎士団:2011/09/29(木) 10:15:02.34
Matzさんこっちです
850Perl忍者:2011/09/29(木) 12:04:28.07
セカンドライフとか必死にわめいてたやついたけど
バカだよな

気持ち悪かった情弱だとおもった
土地かってるやつとか リンデンスクリプトやってるバカとか
気持ち悪かった
851Perl忍者:2011/09/29(木) 12:07:58.21
セカンドライフとかほざいてた情弱と
Node.jsとかjavascript!!とかわめいてる社会のクズを見ると
惨めだわ
セカンドライフの情弱と通じるものがあるよなjavascriptバカは
852デフォルトの名無しさん:2011/09/29(木) 12:26:29.75
s/javascript/haskell/
853デフォルトの名無しさん:2011/09/29(木) 15:30:47.07
Continuation モナドって実用的?
使ったことある人いる?
854デフォルトの名無しさん:2011/10/01(土) 04:14:13.12
haskellを勉強してるけど、型言語やのに、抽象化はかなり強力やね。
抽象化が強力な言語って阿呆な人に使いこなせないから普及しにくいのかな。
855デフォルトの名無しさん:2011/10/01(土) 07:19:22.63
また忍者が沸きそうなことを
856デフォルトの名無しさん:2011/10/01(土) 09:30:37.89
>>854
Haskellはニュージャージー・アプローチじゃなくて、どっちかと言えばMITアプローチだからじゃね?
個人的にはQIがお奨め。
857デフォルトの名無しさん:2011/10/01(土) 09:59:42.76
HaskellやOCamlはヨーロッパ風
858デフォルトの名無しさん:2011/10/01(土) 10:18:31.35
>>853
実用的ってどういう意味で言ってる?
強力なモナドだし、実行効率もそんなに悪くないけど、
コードが読み難くなりがちなのを嫌ってなるべく使わないようにしていると、
結果的に出番が少ない、というのが俺の印象
859853:2011/10/01(土) 11:10:58.00
>>858
うーん‥・ そもそも継続の使いどころが分からないっていうか‥・

手続き型言語だと広域脱出っていうのはたしかにやりたいときがあるんだけど、HaskellだとMaybeモナドとか、もっと馴染んだ道具のほうが使いやすい。
広域脱出以外だと、Schemeで継続を使ったステートフルなHTTPサーバのコードとか見たことあるけど、堅牢そうには思えなかった。

つまり、「関数呼び出しも、関数からのリターンも継続なんですよ!」みたいに一般化しなければ、継続の使いどころって広域脱出しか思いつかない。
でも、Haskellだと広域脱出なんてMaybeモナドで充分(つねに充分とはいえないが、継続みたいな難しいものを導入するほどではない)。
それなら、Continuation モナドはどういうときに使うんだろう、という感じ。

‥・とここまで書いてきた分かった。
要は、オレが継続を自家薬籠中のものにしていないから、怖がっているだけか。
860デフォルトの名無しさん:2011/10/01(土) 11:17:55.37
先日の継続チュートリアルに来れば良かったのに。
限定継続によってHaskell的に「お行儀をよくした」継続が可能になったわけで。
861デフォルトの名無しさん:2011/10/01(土) 15:53:32.36
限定継続ってprintf以外に使い道あるの?
862デフォルトの名無しさん:2011/10/01(土) 16:26:26.21
coroutineの実装とか?
863デフォルトの名無しさん:2011/10/01(土) 17:20:38.88
>>854
そうでちゅよねー
864a36 ◆K0BqlCB3.k :2011/10/01(土) 17:44:19.46
久しぶりにhaskellスレ覗いた。
読むのがめんどくさいから今のスレの話題を3行にまとめて。
865デフォルトの名無しさん:2011/10/01(土) 18:44:03.07
ビーフ
チキン
ポーク
866デフォルトの名無しさん:2011/10/01(土) 19:13:08.50
忍者
uy
民明書房
867デフォルトの名無しさん:2011/10/01(土) 23:47:09.92
工学社のIOBOOKSから出た、謎の関数型プログラミングの本(作者はGC系の教授)で、
http://www.amazon.co.jp/dp/477751630X
継続はプログラムの流れが分からなくなるからあまり使うな、とはあった。
868デフォルトの名無しさん:2011/10/02(日) 00:03:49.36
>860のいっている限定継続チュートリアルは、
http://logic.cs.tsukuba.ac.jp/cw2011/tutorial.html
発表スライドと説明資料も公開されている。
http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/
OchaCamlとHaskellに関してチュートリアルがあって、
日本語の参考資料がOchaCamlで説明してたパートだけある。
869デフォルトの名無しさん:2011/10/02(日) 03:03:09.99
限定継続のチュートリアル見ると
printfとかcoroutineとかバックトラックとかstateモナドが例に出てたけど
個人的にはどれも既存の実装や代替品で十分なので魅力的に見えないんだけど
限定継続やってる人は何に使おうと思ってるの?何が魅力なの?

応用なんてどうでもいいという意見とかなら
それはそれでいいけど
870デフォルトの名無しさん:2011/10/02(日) 03:25:33.25
型付きがポイントなんじゃないの?
何も違わない?
871デフォルトの名無しさん:2011/10/02(日) 06:57:04.21
バックトラックに関してはリストモナドを使った場合より性能が出ることがあるらしい
872デフォルトの名無しさん:2011/10/02(日) 10:26:46.27
gtk2hsのTreeViewでセル上にマウスポインタをかざした時に
セルのテキストをツールチップで出したいんだけど
無理かな?
873デフォルトの名無しさん:2011/10/02(日) 11:09:23.35
clojureスレでも限定継続の話題が 同時多発限定継続テロ?
874デフォルトの名無しさん:2011/10/02(日) 13:05:31.81
蓮麩羅リリースが遅れてるな
毎度のように遅れるなら前もって遅めに宣言しとけよ
875853:2011/10/02(日) 13:37:39.30
>>860,868
ありがと。これ読んだ:
http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-j.pdf

木の探索で、ちょっと戻ってきてテストして、再突入する話はおもしろかった。
もう少し勉強しようと思う。
876デフォルトの名無しさん:2011/10/02(日) 15:17:57.04
>>873
サーセン、関数型言語スレ同時に読み書きしてるんで。
(ついでにscalaの限定継続プラグイン使ったakka dataflow APIの話も気になった)
877デフォルトの名無しさん:2011/10/03(月) 01:38:16.75
じゃんけんゲーム作ろうとしてるんだけど、どうもmain関数が上手く書けない・・・
鬼門はIO付の関数・・・

誰か、main関数書いて完成させてはくれまいか・・・

878デフォルトの名無しさん:2011/10/03(月) 01:38:58.24
以下、コード

import 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)

879デフォルトの名無しさん:2011/10/03(月) 01:57:03.40
main = do
hSetBuffering stdout NoBuffering
s <- putStr "input te> " >> getLine
i <- randomRIO (1,3) :: IO Int
print $ janken s i
880デフォルトの名無しさん:2011/10/03(月) 08:54:24.48
>>879
あいこでも続かず停止してる・・・
まあ、でも取り合えず動くから、これを手がかりに改良していきます。
thx
881デフォルトの名無しさん:2011/10/03(月) 09:34:35.26
適当なFRPライブラリを使って試しに作ってみるか・・・
882デフォルトの名無しさん:2011/10/03(月) 10:12:15.79
lift系を知らずに戸惑ったとか?
883デフォルトの名無しさん:2011/10/03(月) 16:43:03.35

877 :デフォルトの名無しさん:2011/10/03(月) 01:38:16.75
じゃんけんゲーム作ろうとしてるんだけど、どうもmain関数が上手く書けない・・・
鬼門はIO付の関数・・・

誰か、main関数書いて完成させてはくれまいか・・・





はあ・・・
884デフォルトの名無しさん: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 ・・・) は簡約されませんよね

今回の場合は、遅延パターンマッチではないので前者の簡約順になる
と私は思っているのですが合ってますか、それとも、どちらも間違いですか
885884:2011/10/03(月) 20:49:24.37
>>884
すいません、提示する式の型シグネチャを間違えました

data A = A Int
f :: a -> b -> ・・・ -> A
g :: A -> Int -> b
g (A x) y = [関数 g の計算]

です

まぁ、意味は汲み取ってもらえると思いますが
886デフォルトの名無しさん:2011/10/03(月) 22:32:51.18
実験すりゃいいやん

data A = A Int
f :: () -> A
f = undefined
g,h :: A -> Int -> ()
g (A x) y = ()
h ~(A z) y = ()
887884:2011/10/03(月) 23:06:04.65
>>886
あぁ、なるほど

遅延パターンでないと、やはり先に (A x) の形にまで簡約されますね

ありがとうございました
888Perl忍者:2011/10/04(火) 09:17:43.61
id:sudotan さんが id:perl-ninja さんをお気に入りに追加しました。
http://b.hatena.ne.jp/sudotan/
http://b.hatena.ne.jp/perl-ninja/follower


889Perl忍者:2011/10/04(火) 09:21:00.92
@sudotan の ReTweet

40 FOLLOWERS

http://twitter.com/sudotan/
都内の某私立校に通う中学生です。プログラム勉強中です。\nよろしくおながいします


はてなID
rokujyouhitoma
ニックネーム
rokujyouhitoma
自己紹介

nickName: とぅーる, ろくじょー

name: Tohru Ike

姓名:池徹

よみ:いけとおる

誕生日:1984年11月9日
890デフォルトの名無しさん:2011/10/04(火) 11:00:55.11
(a.b) x = x + 1
a x = x + 2
から、bを創りだすことって出来るんでしょうか?
891853:2011/10/04(火) 12:00:21.37
>>890
中学生レベルの数学じゃなイカ?

(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
892デフォルトの名無しさん:2011/10/04(火) 12:33:50.12
>>879
コードできた

>>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


893デフォルトの名無しさん:2011/10/04(火) 12:34:39.62
「簡約!λカ娘」か
同人誌読んで頭痛くなったの初めてだ
894デフォルトの名無しさん:2011/10/04(火) 13:16:08.46
適当に書き換え規則を与えることでそれを計算機に解かせる方法については知りたい
895デフォルトの名無しさん:2011/10/04(火) 13:57:43.86
Prolog?
896デフォルトの名無しさん:2011/10/04(火) 14:56:17.18
こんなのみつけた
「ソフトウェア科学特論: Scalaと命題論理の推論体系」
ttp://bach.istc.kobe-u.ac.jp/lect/soft/org/scala-proplogic-system.html
897デフォルトの名無しさん: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]
898897:2011/10/04(火) 20:46:12.72
>>897
一番外側の関数から弱頭部正規形へ順に変換していくことを意識して簡約したら、
次のようになったんだけど、どこかがおかしいはず

プロポーショナル フォントだと式が見難くなるので、ここだけの省略文字を定義する
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 の形に簡約しないといけなくなり、循環してしまう
899デフォルトの名無しさん:2011/10/05(水) 00:47:40.28
4の時点でSFでてきてるからそこで(.)を簡約すればrunSF . SFが取れるんじゃね?
900デフォルトの名無しさん:2011/10/05(水) 01:20:00.17
あー8か、まぁいいや
あとは.は結合規則成り立つから適当に()挿げ替えたら(.)の展開によってarr mirrorが簡約できる状態になるからそこで
SFを一番外に持ってこれてrunSFが外せるはず
最外簡約といっても書き換え規則は使えるからな、処理系でも実際に使ってるし
901デフォルトの名無しさん:2011/10/05(水) 01:58:29.92
runSF (left undefined) []
= {leftを展開}
runSF (SF (\xs -> combine xs (⊥ [y | Left y <- xs]))) []
= { runSF, beta}
combine [] (f ...)
= { combine [] }
[]

さてleft (h (arr ⊥) . arr ⊥) はどう展開されるでしょうかっていう
902デフォルトの名無しさん:2011/10/05(水) 02:05:00.65
そしてnewtypeをdataにかえてみて同様の式を評価すると・・・
903デフォルトの名無しさん:2011/10/05(水) 07:32:19.96
>>878,>>892のじゃんけんゲーム作ってたものですが、終了するか聞いて、Yesなら終了。Noならじゃんけんをまた始めるように改良しました。
60行近くなったので、skyDriveにうpしておきます。
(うpするようなコードじゃないんですけどね・・・)

https://skydrive.live.com/#!/?cid=C4A8AEA1FE363811&id=C4A8AEA1FE363811%21767&sc=documents

それで、このコード動かしてて思ったんですが、IO関係の関数を関数内に含んでる関数は、再帰呼び出ししてもスタック消費してないのでしょうか?
また、それはなぜなのでしょうか?

yesコマンドをパイプでつないで2時間くらい自動実行してもスタックオーバーフローにならなかったのですが・・・
(Win環境なのでyesコマンドも自作してみました。「Haskell で UNIX コマンドを書こうシリーズ」でググると出てきます。使い方は「yes [好きな文字列(複数可)] | janken」)
904デフォルトの名無しさん:2011/10/05(水) 07:54:24.30
>>903
IOモナドだと、
f x = 何か >>= f x'
の形の再帰は末尾再帰になってスタックを消費しない
905897:2011/10/05(水) 07:56:13.93
>>900-902
ありがとうございます
今初めて知りました
(今まで何となくやってたことを理解したといった方がいいか)

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 の方も考え方を正して、どうなるか調べてみます
906デフォルトの名無しさん:2011/10/05(水) 08:00:58.09
>>904
会社から帰って来るまでにレスが付けば良いかと思いきや、早い回答ありがとうございます

do以下で再帰をループ替わりに使うのもどうかと思って居たのですが、あまり心配しなくて良いと言う事ですかね?

どちらにしても、もっとスマートな方法が有ったら知りたいですが。。。
907デフォルトの名無しさん:2011/10/05(水) 11:12:25.92
>>906
つ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
}
908デフォルトの名無しさん:2011/10/05(水) 16:25:07.11
普通にforとかwhileすりゃいいのに
わざわざ末尾再帰だの余再帰だのにするとか
何の罰ゲームだかw

挙げ句にちょっと手を入れただけで末尾再帰が検出されないという罠w
バカがハサミを持つとはこの事だ
909デフォルトの名無しさん:2011/10/05(水) 16:32:58.23
わざわざforとかwhileとか使わなくてもmapとかfoldとか使えばいいじゃん
910デフォルトの名無しさん:2011/10/05(水) 16:41:26.35
どーせデータ構造作るたびにmapやfold実装するんだろ?
そのたびにforやwhileが使えずに再帰の微妙な最適化に頼るんだろ?
それがハサミを使うバカっつーのw
911デフォルトの名無しさん:2011/10/05(水) 16:43:41.69
forとかwhileってどこにあんの?
912デフォルトの名無しさん:2011/10/05(水) 16:43:47.31
>>910
> どーせデータ構造作るたびにmapやfold実装するんだろ?
そんなことする必要ありません
913デフォルトの名無しさん:2011/10/05(水) 16:44:33.58
>>911
自分で作る
914デフォルトの名無しさん:2011/10/05(水) 16:45:42.67
>>913
再帰使って?
915デフォルトの名無しさん:2011/10/05(水) 16:49:41.73
>>914
Haskellでは再帰を使うのはクールじゃない。
916デフォルトの名無しさん:2011/10/05(水) 16:49:59.64
>>912
へー、どんなデータ構造でもなにもしなくてもmapやfoldがつかえるのかー
クスクス
917デフォルトの名無しさん:2011/10/05(水) 16:56:13.57
>>915
じゃあfoldrみたいなコンビネータ使って?
918デフォルトの名無しさん:2011/10/05(水) 17:10:24.84
>>917
それと必要ならStateモナドも使う。
919デフォルトの名無しさん:2011/10/05(水) 17:12:42.23
>>918
なるほど、ありがとう
920デフォルトの名無しさん:2011/10/05(水) 17:41:19.69
fmap活用しないの?
921デフォルトの名無しさん:2011/10/05(水) 20:53:01.23
よく知らないけど-XDeriveFoldable使えばfoldを実装しなくてもいいんじゃないの?
922897:2011/10/05(水) 21:01:32.67
>>900-902
ちゃんと簡約できました
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つの事を意識して芋づる式に簡約していったら、ちゃんとできました

ありがとうございました
923デフォルトの名無しさん:2011/10/06(木) 08:32:05.35
こいつらって、小さいことばっかりやってるよね
画面に文字が表示されて
「わーあーわーわー!!」
みたいな

自分ではHaskellやってますとかアピールしちゃって、「お、知的好奇心あるな」
って思われたいんだろうけど
やってることがバカだし
そもそも2chに書き込んでて、書き込み内容からみると頭が残念で”下手な横好き”程度なんだろうなって思ってしまう
バカだよな

Haskellやって知的好奇心ありますアピール、プログラマとしての美徳を感じながらHaskellを触ってるバカども
早く死ねばいいんじゃない?
924デフォルトの名無しさん:2011/10/06(木) 08:41:23.65
いいぞもっとやれ
925デフォルトの名無しさん:2011/10/06(木) 08:54:07.17
言ってることが当てはまっててもなおやめないw
自分の意思を貫いて、いくら無駄、役に立たない、非実用的
お前みたいなバカがやっても何も生産性がない
ただの自己満足、知的好奇心ありますアピール、でも続ける

物凄い底辺技術者のゴミプライドだと思う
その多くの気持ち悪いプライドを支えているのは
はてな民や、LL民の「Haskell万歳制」
Matzが「次世代の言語にHaskellをあげていたのもそう」
「本物のプログラマはHaskellを使う 」っていう記事
これがHaskellプログラマの美徳を作り出してる

何か迷ったら、Haskellをバカにされたら
MatzやLL民、はてな民で人気あるんだ
IT業界はMatz,LL民、はてな民の言うとおりだ!!だからHaskellは凄い!!って思い込む

そして、ボロクソいわれたら
「本物のプログラマはHaskellを使う 」
っていう記事を思い出して一人で、美徳に浸る
俺は本物のプログラマなんだHaskellをやってるからって

気持ち悪いな早く死ねよいい加減
お前らさ?バカなのによくやってられるよな
926デフォルトの名無しさん:2011/10/06(木) 08:59:29.58
図星すぎて死ねる
927デフォルトの名無しさん:2011/10/06(木) 09:03:47.51
目覚ませよ
928デフォルトの名無しさん:2011/10/06(木) 09:16:42.16
眠い、カフェインが足りない
誰かメタンフェタミンくれ
929デフォルトの名無しさん:2011/10/06(木) 10:30:03.73
>>925
> っていう記事を思い出して一人で、美徳に浸る

ごめん。バカな底辺プログラマなんで、難しい日本語、よく分からないや。
930デフォルトの名無しさん:2011/10/06(木) 10:56:58.21
haskellが分かりやすくて便利だから使う。それだけだ。
もっと分かりやすくて便利な言語が現れたらそっちを使う。
haskell使ってる奴が気持ち悪くてバカだと思うなら良い言語紹介してくれよ。
931デフォルトの名無しさん:2011/10/06(木) 11:09:18.16
だから、何に対してわかりやすく便利なんだ?
言ってみろよ 何に対して便利なのか言ってみろゴミ
932デフォルトの名無しさん:2011/10/06(木) 11:13:46.65
>>931
俺にとって分かりやすく便利なんだよ。
早く俺が分かりやすく便利だと思う言語紹介してくれよ。
933デフォルトの名無しさん:2011/10/06(木) 11:51:58.41
だから便利の意味わかってる?

便利・・・目的を果たすのに都合のよいこと。あることをするのに重宝で、役に立つこと。

っで目的ってなに?
早く言えよゴミ
934デフォルトの名無しさん:2011/10/06(木) 11:53:34.90
>>933
守秘義務により回答は差し控えさせていただきます。
935デフォルトの名無しさん:2011/10/06(木) 11:57:53.32
都合が悪くなるといつもそうだよなジャプp
早く死ね
イエローがしゃしゃりでてんじゃねえよカス
ただ漠然とやってるバカ研究者気取りは気持ち悪いな本当に
ただの足し算、クソゲー作って満足してる脳みそか
新しい言語でてもサンプル程度動かして満足して2chに聞いてるバカの軍勢早く死ぬべきだなクズが
糞ジャップは死ね
936デフォルトの名無しさん:2011/10/06(木) 12:00:49.11
さあ、早くhaskellより良い言語紹介してくれよ
937デフォルトの名無しさん:2011/10/06(木) 12:08:36.94
言葉遣いをわかってないレスなんてスルーすりゃいいのに。
相手にするからつけあがるんだろ?
938デフォルトの名無しさん:2011/10/06(木) 12:09:27.64
Haskellと同等以上に型に頑固で、高い抽象性のあるコードが書けて、型推論が強力で、コミュニティがでかくて、周辺ツールとライブラリが充実してる言語教えてくれ。
939デフォルトの名無しさん:2011/10/06(木) 12:10:03.09
「煽れば教えて貰える」厨ってまだ生息していたんだな。胸熱。
940デフォルトの名無しさん:2011/10/06(木) 12:18:33.05
なんで日本人に限定するの?
寧ろ仕事でHaskell使ってカスコード量産してるのは外国人の割合が高いと思うけど
仕事でHaskell使ってる日本人が滅茶苦茶少ない的な意味で
941デフォルトの名無しさん:2011/10/06(木) 12:41:37.03
日本のIT産業はアメリカより数十年遅れてる。
942デフォルトの名無しさん:2011/10/06(木) 12:42:27.16
ココまで全部俺の自演。ふう、さすがに疲れたぜ。
943デフォルトの名無しさん:2011/10/06(木) 12:54:04.51
日本人に限定するとか言っちゃう時点でジャップ
外国人見てるふうにほざいてるけどジャップ
紛れもなく海外旅行+滞在100回未満
幼少期、欧米に住んだことないジャップ
944デフォルトの名無しさん:2011/10/06(木) 12:55:08.15
ジュップジュップ
945デフォルトの名無しさん:2011/10/06(木) 12:56:02.05
ジョブズ死亡だが、また一つ面白い会社が終わったな。
946デフォルトの名無しさん:2011/10/06(木) 12:56:47.62
森首相のときのイット革命で著しく前進したよ
947デフォルトの名無しさん:2011/10/06(木) 12:57:08.51
フランスに渡米したい
948デフォルトの名無しさん:2011/10/06(木) 12:57:20.90
100回も外国に行く機会なんてそうそうないと思う。
949デフォルトの名無しさん:2011/10/06(木) 12:59:10.36
俺のおばさん5年間で韓国へ100回以上行ったよ
950デフォルトの名無しさん:2011/10/06(木) 13:08:24.80
なんか日本プライド持ってるやついるみたいだよなw
アニメ・漫画がマスコミとかで取り上げられて
世界で日本=漫画・アニメみたいになって

誇らしげに日本文化だ!! サブカルチャー!!
とかほざいて ツイッターとかアニメアイコンにしたり
マドマギとか言ってる痛い連中

まじイエローが母国愛丸出しの気持ち悪いジャプpにしかみえねーわw
イエローがよw何で息してるのか?イエロージャップがw
ITは欧米にもボコボコだしw
ジャップは生まれつき殆どのやつが貧乏、小金もちで英語ができないしw

哀れだよなw

ITもゲームもだめじゃねえかw芸術産業は世界的にみてクソだとしか言いようがないw
何にしてもだめだなw食品もw

ジャップにすむと考えも低レベルになりそうだがw
気持ち悪いバカ愚民たちの考えの同調圧力w 流行w ごみみたいだなwジャップは
951デフォルトの名無しさん:2011/10/06(木) 13:10:46.39
過剰な自虐も日本の文化
952デフォルトの名無しさん:2011/10/06(木) 13:13:38.77
>>950
日の丸をtwitterアイコンの下に入れてる奴が時々いるけど、
大抵頭のおかしいやつだね。
953デフォルトの名無しさん:2011/10/06(木) 13:14:48.82
>>952
あれみてると日の丸の冒涜にしか見えない連中が日の丸を掲げてるとしか
思えない時がある。
954デフォルトの名無しさん:2011/10/06(木) 13:18:09.53
忍者でも欧米人でも欧米かでもいいけど、コテハンつけてくれよ
955デフォルトの名無しさん:2011/10/06(木) 13:18:34.63
>>950
そうだね、君の言うとおりだと思う。
日本人は自分で自分たちをすごいと言わないと自信が持てない民族なんだよな。
956デフォルトの名無しさん:2011/10/06(木) 13:19:31.21
ここは自然言語処理とファジー論理を使って忍者とかuy臭いレスを検出してあぼーんする2chブラウザをHaskellで作るべき
957デフォルトの名無しさん:2011/10/06(木) 13:20:34.42
twitter時代に新しい2chブラウザを作る価値が果たしてあるのだろうか。
958デフォルトの名無しさん:2011/10/06(木) 13:21:51.17
>>956
ベイジアンフィルターをつかったスパム対策なんて参考になると思ってたん
だけど誰もやってないよね。
959デフォルトの名無しさん:2011/10/06(木) 13:24:28.62
おもしろ法人カヤックだっけ?
全然おもしろくないじゃん
社員みたら、どいつもこいつもチョン顔
チョン顔って知ってる?
欧米人は顔の彫りが深いから、視覚的に感情表現がわかりやすくて
笑ってる、うれしい、怒ってるの感情が豊かだけど
面白法人とか名乗ってるカヤックとかさ、日本人はチョン顔ばっかりじゃん
顔が薄くて、表現がよくわからねえわw だから、おもしろくなくない?つまらないよね
おもしろいって感情表現が豊かな顔なんだよ
チョン顔はつまらないってこと
そもそもアジアって

コミュニケーション
英語力
脳みそ
身長
体格

性格
食文化
全てにおいてごみだよな
なんか、道に迷ってる人がいて

欧米人とアジア人が声をかけたら
どれくらいの人が道を教えてくれるかっていうので
断然白人のほうが上
960デフォルトの名無しさん:2011/10/06(木) 13:25:45.43
だからお前らジャップなんだよw
hopihajimeの顔面みたか?
チョン顔じゃん 怒ってるんだか、冷静なのか
よくわからない つまらなそうな顔

やっぱりアジアは感情表現がダメだな
つまらなそうにみえる

だから”おもしろい”とか名乗ってウケ狙わないとダメなんだと思う必死に
961デフォルトの名無しさん:2011/10/06(木) 13:26:56.64
書き込みの99%がブロックされる。
962デフォルトの名無しさん:2011/10/06(木) 13:30:31.95
2chだろうがしたらばだろうが個人の掲示板だろうがtwitterだろうがfacebookだろうがその他SNSだろうが
全部、取ってくるデータの形式とこちらから発信するデータの形式さえ適当に定めてれば同じように購読、発信できるような抽象を考えてる
取ってくるだけならそれpla(死語)でいけるんだけど
963デフォルトの名無しさん:2011/10/06(木) 13:37:14.08
お前らそんな下らないことで騒いでる場合じゃないぞ。
CERNふぇニュートリノが光速を上回る実験結果が出たそうだ
964デフォルトの名無しさん:2011/10/06(木) 13:40:50.75
Perl忍者を利用すれば、物凄いビジネスができる気がしてならん
工作もしてくれるしな
965デフォルトの名無しさん:2011/10/06(木) 13:41:15.51
ニュートリノはよく知らないが三色トリノは好きだった
966デフォルトの名無しさん:2011/10/06(木) 14:02:34.97
タイムマシンを作る巨大プロジェクトで仕事が増えるかもしれない。
967デフォルトの名無しさん:2011/10/06(木) 14:03:18.85
ジョブズも死んだことだし、haskellでタイムマシンを再実装だ
968デフォルトの名無しさん:2011/10/06(木) 16:44:34.85
さて、話を仕切り直そう。
このスレでHaskellで100行以上プログラミングしたことがある人どのくらいおる?
969デフォルトの名無しさん:2011/10/06(木) 16:46:55.65
行数という古い指標を持ち出すような人間にhaskellの理念が理解できるはずがない
970デフォルトの名無しさん:2011/10/06(木) 16:48:52.05
>>968
ある。
971970:2011/10/06(木) 16:49:33.27
っていうか、Parsec使っていると縦に長くなるから、100行くらいすぐいく。
972デフォルトの名無しさん:2011/10/06(木) 16:56:57.53
2KB以上プログラミングしたことがある人どのくらいおる?
973デフォルトの名無しさん:2011/10/06(木) 17:01:18.16
100行くらいはすぐに行くけど、このスレのことだから(ry と
思ってね。
Lispとはまた違った抽象化が楽しいプログラミング言語だなと思った。
データ構造を作っていじるのはすごく面白いかも。
でも使いこなせる人ってそこそこたかいIQがないと厳しそう。
974デフォルトの名無しさん:2011/10/06(木) 17:20:10.13
>>972
UTF-8として、ソースで2048字以上ってこと?
100行よりも少なそうだが…
975デフォルトの名無しさん:2011/10/06(木) 17:21:13.93
他人の書いたHaskellプログラムって読めるものなの?
俺職場でOOPで実装しただけでアスペルガ扱いされてるから
抽象化された世界を理解されない苦しみをこれ以上味わいたくない
かといって阿呆が書いたP*言語のメンテするのもいやだ
976デフォルトの名無しさん:2011/10/06(木) 17:29:13.22
適当なパッケージのソースコードでも読んでみたら?
読みにくいのはとことん読みにくいから
977デフォルトの名無しさん:2011/10/06(木) 17:34:23.15
978デフォルトの名無しさん:2011/10/06(木) 17:37:32.41
jekyll のhaskell番まであるんだな。https://github.com/jaspervdj/hakyll
979デフォルトの名無しさん:2011/10/06(木) 17:38:27.62
>>975
> 他人の書いたHaskellプログラムって読めるものなの?

他の言語と比較して、っていうことだよね?

そういうのは大部分が慣れの問題であり、かついわば「どこまで読みたいか?」というのに依存するけど、
中置演算子を自由に定義できる、関数をいつでも中置記法化できる、というのはかなりのアドバンテージだと思う。
980デフォルトの名無しさん:2011/10/06(木) 17:51:40.14
>>972
あるよ
今作ってんのと過去に作ったガラクタ
981デフォルトの名無しさん:2011/10/06(木) 18:38:20.83
記号や中置演算子の定義し過ぎは読みにくいと思う
982デフォルトの名無しさん:2011/10/06(木) 18:43:01.05
英語のSVOに準じた形になってる時は欧米の人にとって
自然に理解できるんだろうよ。<中間表記
記号 難しいよな。読み方も
.|. とかみてると ぽこちん とか >=> をイカ とか言ってそうだもん。
983デフォルトの名無しさん:2011/10/06(木) 18:50:53.97
ForthやLispが、中置記法がないせいでどんだけ不人気だよ
984デフォルトの名無しさん:2011/10/06(木) 18:55:18.96
なんとなく取ってきたコードが IO で素朴に書いてあると安心する
985デフォルトの名無しさん:2011/10/06(木) 22:12:50.76
本物のHaskellerはコメントを書かない
986デフォルトの名無しさん:2011/10/06(木) 22:25:19.04
痛いよ・・・足捻挫したよ・・・
痛い痛いよ・・・
987デフォルトの名無しさん:2011/10/07(金) 10:08:21.79
>>986
遅延評価だから足を必要とするまで直らないよ。
988デフォルトの名無しさん:2011/10/07(金) 11:12:37.38
いやむしろ、足を必要とする迄、痛みを感じないのでは?
989デフォルトの名無しさん:2011/10/07(金) 11:14:39.14
足を必要とするまで捻挫しないだろ
990デフォルトの名無しさん:2011/10/07(金) 11:20:29.06
もはや嫌がらせの領域
991デフォルトの名無しさん:2011/10/07(金) 11:34:26.94
>>956
ファジー理論ってまだ息してるの?
992デフォルトの名無しさん:2011/10/07(金) 11:59:44.79
息はして無いけどパターン認識の分野の肥やしにはなってる
993デフォルトの名無しさん:2011/10/07(金) 11:59:56.47
>>911 生まれなければ死にもしない
994デフォルトの名無しさん:2011/10/07(金) 12:01:25.05
死ぬのが怖くて生きられない
995デフォルトの名無しさん:2011/10/07(金) 12:11:17.61
ファジー理論じゃなくてファジー論理じゃないかと。
996デフォルトの名無しさん:2011/10/07(金) 12:22:21.42
なんか メンヘラー がこのスレに常駐してしまったのだろうか。
スレと関係ない話題は少しくらいならいいけど・・・
997デフォルトの名無しさん:2011/10/07(金) 12:24:46.35
実質忍者達と遊ぶスレですから
Haskellの話題はあくまで彼等を呼び寄せるエサなんです
998デフォルトの名無しさん:2011/10/07(金) 12:25:05.92
次スレ立ってないのに雑談は勘弁してほしいわ
999デフォルトの名無しさん:2011/10/07(金) 12:25:46.15
>>950
次スレよろ
1000a36 ◆K0BqlCB3.k :2011/10/07(金) 12:28:07.87
■次スレ

関数型プログラミング言語Haskell Part16
http://hibari.2ch.net/test/read.cgi/tech/1317958045/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。