関数型プログラミング言語Haskell Part16
レス数が1000を超えています。これ以上書き込みはできません。
0001a36 ◆K0BqlCB3.k
2011/10/07(金) 12:27:25.71ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
0002a36 ◆K0BqlCB3.k
2011/10/07(金) 12:28:54.57・Introduction to Functional Programming Using Haskell (2nd ed.)
ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/
・Haskell: The Craft of Functional Programming
ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/
・The Fun of Programming
ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
・入門Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/
・ふつうのHaskellプログラミング
ttp://item.rakuten.co.jp/book/4052963/
・Programming in Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/
・Real World Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980
・関数プログラミングの楽しみ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056
0003デフォルトの名無しさん
2011/10/07(金) 12:29:05.410004a36 ◆K0BqlCB3.k
2011/10/07(金) 12:29:39.25・GHC Wiki
ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex
・A History of Haskell
ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/
・関数型関連の用語集
ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/
・本物のプログラマはHaskellを使う
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
0005デフォルトの名無しさん
2011/10/07(金) 12:48:08.04テンプレ書いてる途中に汚すな馬鹿
0006a36 ◆K0BqlCB3.k
2011/10/07(金) 12:59:56.19ttp://www.haskell.org/hoogle/
【簡単な使い方】
1.検索バーに関数名を入れて検索
例 map
2.検索バーに型名を入れて検索
例 (a -> b) -> [a] -> [b]
0007a36 ◆K0BqlCB3.k
2011/10/07(金) 13:01:00.52議論をお続け下さい
0008デフォルトの名無しさん
2011/10/07(金) 13:16:30.50乙
0009デフォルトの名無しさん
2011/10/07(金) 13:58:10.810010デフォルトの名無しさん
2011/10/07(金) 20:10:08.390011デフォルトの名無しさん
2011/10/07(金) 20:49:56.650012デフォルトの名無しさん
2011/10/08(土) 00:49:29.330013デフォルトの名無しさん
2011/10/08(土) 00:51:17.260014デフォルトの名無しさん
2011/10/08(土) 02:30:15.86こういうのは、だめなんだ。難易度的に簡単すぎて面白くないんだ。
元の台詞を”全く変更しないで”意味が通る場合にのみ書くようにしよう。
0015デフォルトの名無しさん
2011/10/08(土) 07:52:00.23>>13
こういうのは、だめなんだ。難易度的に簡単すぎて面白くないんだ。
元の台詞を”全く変更しないで”意味が通る場合にのみ書くようにしよう。
0016デフォルトの名無しさん
2011/10/08(土) 07:52:31.64こうか
0017デフォルトの名無しさん
2011/10/08(土) 08:05:12.520018デフォルトの名無しさん
2011/10/08(土) 09:02:40.310019デフォルトの名無しさん
2011/10/08(土) 09:20:35.39汗でしっとりしててヤな感じ。
0020デフォルトの名無しさん
2011/10/08(土) 09:23:09.970021デフォルトの名無しさん
2011/10/08(土) 09:56:34.49Haskellを始めたのはいつからですか?
0022デフォルトの名無しさん
2011/10/08(土) 10:03:29.060023デフォルトの名無しさん
2011/10/08(土) 10:04:21.930024デフォルトの名無しさん
2011/10/08(土) 10:09:47.74テキストファイル中のaをAにするフィルタが
すごく簡単に書けるんだな。驚いた。
他の言語ではこうはいかない。
0025デフォルトの名無しさん
2011/10/08(土) 10:43:14.97最初はLearnYou読んでたけど冗長過ぎ要点得なさ過ぎでブチ切れてRealWorld読んでるなう。
まだI/Oのとこまでだけど、
モナドがHaskellの静的な部品をつなぐホットグルーの様なものだって認識に達してるなう。
0026デフォルトの名無しさん
2011/10/08(土) 10:56:56.11ゴルファーあらわる
ちなみにどれくらいの長さになった?
0027デフォルトの名無しさん
2011/10/08(土) 11:09:35.280028デフォルトの名無しさん
2011/10/08(土) 11:13:36.68webで公開してる良文書教えてちょんまげ。
http://www.haskell.org/haskellwiki/Learning_Haskell
上のリンクの中で良かったものとか、ここに載ってないものとか、知りたい。
0029デフォルトの名無しさん
2011/10/08(土) 11:26:35.26趣味グラ魔なのでかなりゆっくりペースだが
最近まではghciで関数チマチマ作ってただけだし
0030デフォルトの名無しさん
2011/10/08(土) 12:11:40.29まともにやり始めたのは今年の7月ぐらいから。
0031デフォルトの名無しさん
2011/10/08(土) 12:26:07.94Learn You Haskellは読み終えたけど
全然冗長には感じなかったから読み方の問題だろ
0032デフォルトの名無しさん
2011/10/08(土) 12:39:59.71いまはReal Worldに移ってるけど、時々日本語の意味がわからないのが
難点。何でもかんでも感じに訳せばいいってもんじゃないと感じさせる。
でもこの辺にSICPの訳の影響を感じるところかも。
0033デフォルトの名無しさん
2011/10/08(土) 12:40:17.01やってることがじゃっぷ
ジャップは小物を愛する
薄型コンパクト
お前らの顔は、薄い
お前らの声は、小さい
お前らの身長は、チビ
お前らの財産は、無い
お前らの体格は、ひょろい
お前らの声は、きもい
お前らのおもしろさは、無い
お前らの脳みそは、欧米より劣ってる
お前らの生産性は、無い
お前らの目的は、無い
お前らの趣味は、人の影響
早く死ね糞ジャップ
0034デフォルトの名無しさん
2011/10/08(土) 12:41:27.44Haskellの勉強をしていると、データ構造を凝りたくなってしまう。
0035デフォルトの名無しさん
2011/10/08(土) 12:43:31.95早く死ね
Haskellやっても意味が無い
3D,2Dオンラインゲーム作ってるやつのほうが凄い
プログラミングレベルでもそいつらのほうが上
おもしろさも
Haskellとか意味が無い
おもしろさ、利便性、インフラも支えられない、ゴミの言語
さっさと死ねよゴミ
ゴミ言語
お前らは、ゴミ
お前らは、英語ができない
お前らは、数学力が無い
お前らは、鼻がつぶれてる
お前らは、キモメガネ
お前らは、くさい
お前らは、ネットワークプログラミングができない
お前らは、ゲームが作れない
お前らは、日本人
お前らは、まつもとひろゆき信者
0036デフォルトの名無しさん
2011/10/08(土) 12:44:38.630037デフォルトの名無しさん
2011/10/08(土) 12:45:49.650038デフォルトの名無しさん
2011/10/08(土) 12:46:32.380039デフォルトの名無しさん
2011/10/08(土) 13:36:01.80時々日本語の意味が…、自分も同じ感じがした。分からないまま単に英語訳した感じやね。
入門書のつもりで買ったけどそうじゃなくて、タイトル通り使用例を眺めて使い道を創造するのに用いるのが良さそう。
最初は別の本かPDF拾ってくるのが正解か
0040デフォルトの名無しさん
2011/10/08(土) 14:49:12.57C 言語で書かれた、FILE 構造体のポインタを引数として取る関数を
Haskell 側から使いたい場合、Haskell の openBinaryFile 関数などで得た
Handle 型の値は使えないのでしょうか(Handle 型を CFile 型に変換するなど)
もしかして、C 言語の open 関数も import して使う必要がありますか
0041デフォルトの名無しさん
2011/10/08(土) 15:22:55.70使えない
素直にFILE*を作るCライブラリを呼び出す
どうしてもHandleから作る必要があるなら fd を通す
handleToFd で Handle から fd にして
C の fdopen で fd からFILE* にして
とか
FILEとかHandleはライブラリも状態を持ってるから直接のマッピングは無理
fd は状態をカーネルが管理しているから、ライブラリ間では比較的ポータブルだけど
0042デフォルトの名無しさん
2011/10/08(土) 15:43:03.24open関数? openはファイルディスクリプタを返して、FILE構造体へのポインタを返すのはfopenでは?
一般論としては、CレベルのfdやFILE *を使いたいなら、Cのopenなりfopenなりをインポートする必要がある。
GHCの場合、System.Posix.Internals.c_open が Cのopenのラッパーなので、ファイルディスクリプタで良いなら、何とかこれを呼べばよいだろう。
でも、FILE *のほうは自分でfopenをimportするしかないと思う。
004342
2011/10/08(土) 15:45:48.72そういうものがあるなら、オレの書いたことは無駄だったな。
0044デフォルトの名無しさん
2011/10/08(土) 15:56:30.32あはは
その程度で劣等感感じてるのは中国人か韓国人だけ
欧米人も日本人に劣等感感じてるの知ってから、気が楽になったよ
0045デフォルトの名無しさん
2011/10/08(土) 15:57:34.67ありがとうございます
すいません、fopen でした(C を久しく触ってないもので・・・)
記憶している状態がそもそも違うから、簡単に変換できるわけではないのですね
C の関数が使えない(SDK を入れてない)ので、C の fdopen を呼ぶこともできない
問題に突き当たったライブラリは libpng なんですけど、
デフォルトでは FILE* を必要とするのですが、どうも
独自のIO処理が使えるようにコールバックの仕組みも用意されているっぽいので、
それでなんとか対応できないか検討してみます
0046デフォルトの名無しさん
2011/10/08(土) 16:09:49.12お前はイエローなんだよ
ジャップ
お前はそうやって ”欧米人も”って欧米を引き合いにしないと
気が楽にならないジャップ
お前はジャップ
消えろ
0047デフォルトの名無しさん
2011/10/08(土) 16:12:44.15ばっちいものに触ると、お前もばっちくなるよ
0048デフォルトの名無しさん
2011/10/08(土) 16:24:18.74概出だとは思いますが、皆さんはどんなのを読まれたんでしょうか?
0049デフォルトの名無しさん
2011/10/08(土) 16:30:33.77Learn you ~
Real world
0050デフォルトの名無しさん
2011/10/08(土) 16:44:16.12あぁあとghc-pkgか
0051デフォルトの名無しさん
2011/10/08(土) 17:01:10.20>>46
>お前はそうやって ”欧米人も”って欧米を引き合いにしないと
>>33
言い出しっぺ乙
0052デフォルトの名無しさん
2011/10/08(土) 17:02:11.57ライブラリならGHC.IO、Grapefruitとか
0053デフォルトの名無しさん
2011/10/08(土) 17:15:29.98論文ならそれなりに
0054デフォルトの名無しさん
2011/10/08(土) 18:17:59.81005548
2011/10/08(土) 18:19:23.10ライブラリを読む、というのは気がつきませんでした。
Haskell導入時に、Haskellでコンパイルするやり方がある、と聞いた時点で気付くべきでした。
0056デフォルトの名無しさん
2011/10/08(土) 19:44:03.09でググって出る最初のページも参考になるよ
0057デフォルトの名無しさん
2011/10/10(月) 06:16:11.880058デフォルトの名無しさん
2011/10/10(月) 07:17:00.11理念からしてそいつら向けの部分があるし、まあ仕方ない
0059デフォルトの名無しさん
2011/10/10(月) 09:21:22.01って、どの理念?
0060デフォルトの名無しさん
2011/10/10(月) 10:48:04.29実用的な意味が全くない、と思ってるんじゃないかな。
並列実行とか最適化に全く興味がないプログラマなら、そう考えるんだろうね。
006148
2011/10/10(月) 11:10:21.99研究は先行投資。
本来はスパンの違いだけの話なんだが、研究の振りをした連中も確かに一部には居る。
0062デフォルトの名無しさん
2011/10/10(月) 11:25:24.78使われてるんだと思うよ。突き詰めると定義が曖昧ですから。
0063デフォルトの名無しさん
2011/10/10(月) 11:29:34.650064デフォルトの名無しさん
2011/10/10(月) 11:30:58.710065デフォルトの名無しさん
2011/10/10(月) 11:31:26.560066デフォルトの名無しさん
2011/10/10(月) 11:32:08.49難しいかどうかって人それぞれなんじゃないの?
俺はCより簡単だと思ってる。
0067デフォルトの名無しさん
2011/10/10(月) 11:34:39.46どっちの言語でもHallo Worldくらいのプログラムしか書けない
0068デフォルトの名無しさん
2011/10/10(月) 11:35:04.250069デフォルトの名無しさん
2011/10/10(月) 11:36:31.61誹謗中傷だろ、それ。
0070デフォルトの名無しさん
2011/10/10(月) 11:40:24.830071デフォルトの名無しさん
2011/10/10(月) 11:46:43.330072デフォルトの名無しさん
2011/10/10(月) 11:49:49.89Hallo Worldさんに対する誹謗中傷
もしかしたら、すさまじいプログラムかもしれない可能性を、意図的に排除してる
0073デフォルトの名無しさん
2011/10/10(月) 11:50:43.690074デフォルトの名無しさん
2011/10/10(月) 12:01:42.89俺をバカにしてるのか?
0075デフォルトの名無しさん
2011/10/10(月) 12:02:03.74haskell情報で重宝してるところってどこ?
planet haskell,
stackoverflow
haskell cafe
などあるけど
0076デフォルトの名無しさん
2011/10/10(月) 12:03:24.410077デフォルトの名無しさん
2011/10/10(月) 12:07:51.790078デフォルトの名無しさん
2011/10/10(月) 12:22:16.16google search
0079デフォルトの名無しさん
2011/10/10(月) 12:24:28.38http://d.hatena.ne.jp/kazu-yamamoto/touch
0080デフォルトの名無しさん
2011/10/10(月) 12:28:56.800081デフォルトの名無しさん
2011/10/10(月) 12:34:18.84貧乏人はciteseerx
0082デフォルトの名無しさん
2011/10/10(月) 12:47:08.080083デフォルトの名無しさん
2011/10/10(月) 12:50:10.79関連して Haskell Wiki のインデックスから色々飛べる
あと GHC Wiki もなかなかディープな情報が得られる
Haskell Wiki
http://haskell.org/haskellwiki/Category:Haskell
GHC Wiki
http://hackage.haskell.org/trac/ghc/wiki/TitleIndex
0084デフォルトの名無しさん
2011/10/10(月) 15:08:15.53そうじゃない領域の問題は、言語を選ぶ必要があるが、全てを唯一つの言語で無理矢理カバーする必要も無い。
IBMのSシリーズブロトタイプ開発にAPLを使った例とかもある。
0085中2
2011/10/10(月) 15:58:57.61はじめた理由聞きたいかな?
0086デフォルトの名無しさん
2011/10/10(月) 16:20:23.40大いに楽しむといいよ
0087デフォルトの名無しさん
2011/10/10(月) 18:34:37.05gnuplotやchartを使ってますが
他にあれば知りたいです
R と答えてほしいのかな?
http://ja.wikipedia.org/wiki/R%E8%A8%80%E8%AA%9E
0089デフォルトの名無しさん
2011/10/10(月) 19:00:38.560090デフォルトの名無しさん
2011/10/10(月) 19:54:01.63Haskellの開発動機として、応用だけじゃなく研究の道具ってのがったのはたとえばA History of Haskellに書いてある
0091デフォルトの名無しさん
2011/10/10(月) 19:55:51.27どんなグラフを求めてるのか知らんが、
僅かなコードでここまでできるなら十分だろ
png に保存もできるし
http://dockerz.net/twd/HaskellCharts
0092デフォルトの名無しさん
2011/10/10(月) 19:56:49.17だから、それはどういう理念なんだよ
自分の言葉で説明しろよ
0093デフォルトの名無しさん
2011/10/10(月) 20:11:54.530094デフォルトの名無しさん
2011/10/11(火) 05:50:55.78まずは自分が説明しろ
0095デフォルトの名無しさん
2011/10/11(火) 07:13:25.74意味が分からない
何で俺なの?
>>58 が「理念からして・・・」と言ってるんだよ
「実用する気とか全然なくて研究のプラットフォームとしか思ってない奴ら向きの理念」
とは何かを自分の言葉で説明すべきは >>58 本人でしょ
0096デフォルトの名無しさん
2011/10/11(火) 22:45:56.60またオープンソースもそれほど盛んな時代ではなかったので、
大学を異動すると前の処理系は使えず、別の処理系を作り始める必要がある場合があった。
これでは人的リソースの無駄なので、
イギリス大学内での共通言語を目指してHaskellプロジェクトが立ち上がった。
0097デフォルトの名無しさん
2011/10/11(火) 22:46:41.760098デフォルトの名無しさん
2011/10/12(水) 00:36:19.86こういうものの情報はやはり英語探らないと駄目なんだろうか
0099デフォルトの名無しさん
2011/10/12(水) 01:25:13.82モダンHaskell(モダンPerlっぽいいいまわし)みたいな本が日本語あれば、
pythonみたいな誰かに教えたい欲求が高いチューター層が増加して、
モダンHaskell入門ハッカソソンとか開催されるようになるかも。
むしろ、初心者で読書会はじめて、そこからチューター呼んで開催するとか誰かしてくれませんか。
0100デフォルトの名無しさん
2011/10/12(水) 01:30:21.83サンプルコード添削してるの見てると、使ってるライブラリの世代や発想が違う感がバリバリあったりする。
0101デフォルトの名無しさん
2011/10/12(水) 01:35:49.490102デフォルトの名無しさん
2011/10/12(水) 01:44:10.900103デフォルトの名無しさん
2011/10/12(水) 09:10:01.470104◇QZaw55cn4c
2011/10/12(水) 12:19:07.94人を騙るのならちゃんとトラップまで騙ってください。
0106デフォルトの名無しさん
2011/10/12(水) 21:16:19.320107デフォルトの名無しさん
2011/10/12(水) 22:24:44.610108デフォルトの名無しさん
2011/10/13(木) 01:41:12.790109Perl忍者
2011/10/13(木) 19:07:32.820110Perl忍者
2011/10/13(木) 19:08:00.730111デフォルトの名無しさん
2011/10/13(木) 19:49:31.550112デフォルトの名無しさん
2011/10/13(木) 21:15:17.110113デフォルトの名無しさん
2011/10/13(木) 21:56:46.050114デフォルトの名無しさん
2011/10/14(金) 00:10:20.410115デフォルトの名無しさん
2011/10/14(金) 03:39:44.890116デフォルトの名無しさん
2011/10/14(金) 07:42:48.61その場合は module モジュール名 (***) where の *** の部分に、
関数全てと module M を明示的に記入しないといけないのでしょうか
全ての関数だけなら、 (***) を省略することで全て公開しますが、
import したモジュールもとなると省略記法がわかりません
0117デフォルトの名無しさん
2011/10/14(金) 08:11:20.590118デフォルトの名無しさん
2011/10/14(金) 10:51:18.57自分の環境で確認していないんだけどHaskell Reportによれば、自分自身のモジュール名も参照してエクスポートリストに入れられる:
A module can name its own local definitions in its export list using its own name in the “module M”
syntax, because a local declaration brings into scope both a qualified and unqualified name (Section
5.5.1). For example:
module Mod1( module Mod1, module Mod2 ) where
import Mod2
import Mod3
Here module Mod1 exports all local definitions as well as those imported from Mod2 but not those
imported from Mod3.
http://www.cse.iitk.ac.in/users/karkare/courses/2010/cs653/Papers/haskell2010.pdf
の64ページ
0119デフォルトの名無しさん
2011/10/14(金) 12:42:19.48なるほど、それは気がつきませんでた
確かにできました
ありがとうございました
0120デフォルトの名無しさん
2011/10/14(金) 20:15:24.65型エラーにはまってしまう初心者なんですけど、
型エラーの泥沼に溺れないコツみたいなのってあるんですか?
0121デフォルトの名無しさん
2011/10/14(金) 20:19:40.560122デフォルトの名無しさん
2011/10/14(金) 20:24:11.07はまってしまう型エラーって、例えばどんなのがあった?
0123デフォルトの名無しさん
2011/10/14(金) 21:18:53.01IOがらみ IO[Char]と[Char]をくっつけようとしてエラーにはまってたとか
IO GHC.IO.Exception.ExitCode で混乱したりしてた。
0124デフォルトの名無しさん
2011/10/14(金) 21:28:29.18おこられた例ですた。> IO GHC.IO.Exception.ExitCode
0125デフォルトの名無しさん
2011/10/14(金) 21:58:31.29使い方を勉強すればいい
型エラーは、間違いを教えてくれただけ
はまっていいたのは、型エラーじゃなくて、IOモナドを使ったプログラミング
型エラーの泥沼に溺れたという認識を深化させて、IOモナドの泥沼に溺れたと考え直すのが最初の一歩
0126デフォルトの名無しさん
2011/10/14(金) 23:09:15.78ありがとう。 IOモナドのこと、おさらいしてみます。
0127デフォルトの名無しさん
2011/10/15(土) 00:26:31.58ただ一度汚染されたら元には戻らないけど
つーわけで>>=とかの型をよく眺めるといい
0128デフォルトの名無しさん
2011/10/15(土) 09:50:57.710129デフォルトの名無しさん
2011/10/15(土) 09:55:07.570130デフォルトの名無しさん
2011/10/15(土) 09:58:52.030131デフォルトの名無しさん
2011/10/15(土) 10:07:58.94ビジュアル的にそこらへんのWEBデザイナーのほうが凄いと思うぜ
お前らって素人や普通のプログラマに見せても、は?みたいな顔されて終わりだぜ
やってても意味がない 意味を求めるんじゃないとかかっこつけてほざくんだろうけど
お前らがやってること哀れだよ Haskellなんてやめたらどう?
Matz以下の脳みそがやったって 世界に何の発展もないと思うよ ましては日本
君たちはゴキブリ以下のサンプルHaskell使いって感じだねw
0132デフォルトの名無しさん
2011/10/15(土) 10:09:28.400133デフォルトの名無しさん
2011/10/15(土) 10:16:07.240134デフォルトの名無しさん
2011/10/15(土) 10:16:41.77http://twitter.com/#!/cucmberium Twitterクライアントとか車輪の再発明 何故かHaskell
http://twitter.com/#!/keisuke_n 技術ネタほざいてるけど 成果物がゴミクズなチンコロ
http://twitter.com/#!/ketaiorg ketaiorg ketaiorg(松井 健太郎) Haskellマニアのニートが応募してきたので、即日採用したところ。
__gfx__ Fuji, Goro
@
@Maki_Daisuke HaskellとかSchemeそれ自体難しいので、その壁を超えてしまった人にはなんということはないのかもしれませんが…。
普通のLLと違いを出すために難しいことをやって 普通のLLとは違うんだって優越感に浸る情弱
何せこいつらgfx以下、成果物見てもgfx以下
何がやりたいんだろう
彼らはなぜ Haskellを特別視するのか Haskellをやってる時点でLLプログラマとして実力があるように見ている
あとは”本物のプログラマはHaskellを使う”とかクソ記事につられてる情弱
早く死んでくれませんかねw 首つって死ね
0135デフォルトの名無しさん
2011/10/15(土) 10:16:52.030136デフォルトの名無しさん
2011/10/15(土) 10:39:26.87ボキャブラリが少ない人だからNGにしやすい。
0137デフォルトの名無しさん
2011/10/15(土) 11:26:02.92gtk2hs以外は良く知らないんだが。
0138デフォルトの名無しさん
2011/10/15(土) 11:39:47.950139デフォルトの名無しさん
2011/10/15(土) 11:52:48.78Win32API、使ってる。
Windows環境でしか使えないけど、枯れたAPIのかなり単純なバインディングだから、安定感はんぱない。
0140デフォルトの名無しさん
2011/10/15(土) 12:27:31.02.NET もベースとしては意外に使いやすかった
本格的に活用するなら、この上にラッパーを作らんといかんが
http://hackage.haskell.org/package/hs-dotnet
0141デフォルトの名無しさん
2011/10/15(土) 12:33:57.490142デフォルトの名無しさん
2011/10/15(土) 12:35:01.180143デフォルトの名無しさん
2011/10/15(土) 12:37:27.670144デフォルトの名無しさん
2011/10/15(土) 13:07:58.010145デフォルトの名無しさん
2011/10/15(土) 14:33:22.57リストのそれぞれ隣同士の2要素を使って新たな値のリストを作る関数
f :: (a -> a -> b) -> [a] -> [b]
f g (x1:x2:xs) = g x1 x2 : f g (x2 : xs)
f _ [_] = []
f _ [] = []
このような関数 f は、どのような名前が適当でしょうか
0146デフォルトの名無しさん
2011/10/15(土) 14:50:11.50f k l = zipWith k l (tail l)
なので zipTailWith とでも名づけるかな
0147デフォルトの名無しさん
2011/10/15(土) 14:54:53.86みたいなのを思いついたけどAdjacentっていう単語そのものが冗長だからうんk
0148デフォルトの名無しさん
2011/10/15(土) 16:04:13.690149デフォルトの名無しさん
2011/10/15(土) 17:19:24.27フィボナッチ数列と性質が似てるから、fibZipWithってのは?
0150デフォルトの名無しさん
2011/10/15(土) 18:00:48.60みなさんの意見を参考に、mapA に決定しました (A = Adjacent)
0151デフォルトの名無しさん
2011/10/15(土) 18:01:59.000152デフォルトの名無しさん
2011/10/15(土) 18:05:14.33私は、[a] を [a] に変換するから map を名前に付けようと思いました
(当然、要素数は1つ減りますが)
0153デフォルトの名無しさん
2011/10/15(土) 18:06:20.12あ、すいません
[a] を [b] に変換です
0154デフォルトの名無しさん
2011/10/15(土) 18:22:17.68>>146に乗っかっただけ
0155デフォルトの名無しさん
2011/10/15(土) 18:27:44.900156デフォルトの名無しさん
2011/10/15(土) 18:33:46.42頭痛が痛いみたいな違和感が出てきてちょっとDRY的によろしくない感じ
zipだともうちょっと意味が狭くなって [a] `f` [b] -> [a `f` b]的なリストとfの分配法則みたいな意味が出てくるけど
これも型みりゃだいたい入ってる、こちらは入れてもいい気もするけど
だから隣り合ったを示す言葉とか二つ目を一個ずらすみたいな命名ができると余すところ無く名前と型両方に無駄なく意味をこめることができていいかなぁ
とか思った
0157デフォルトの名無しさん
2011/10/15(土) 19:01:54.050158デフォルトの名無しさん
2011/10/15(土) 19:04:04.21メンバ
登録日: 2011-09-30
投稿: 10
いまCD-R 700MBとガリガリ君ソーダ味かってきました
Ubuntu入れなおしたほうが早いと思いました
回答ありがとうございました
0159デフォルトの名無しさん
2011/10/15(土) 19:05:30.71メンバ
登録日: 2011-09-30
投稿: 10
Ubuntuを起動するとフリーズしていまいます
ターミナルの画面が真っ白で、ちょっと動かすと元の色にもどります
そしてウインドウを動かしたり ターミナルにコマンド打ち込んだり フォルダ開いたりしようとすると反応がありません
上のメニューバーの再起動とかログアウトはボタン選べるんですが まったく応答がありません
いろいろデスクトップのフォルダを開こうとしても開けないです
どうすればいいんですか?教えてください
直しかた教えてください
昨日まで普通に使えてたのに突然使えなくなりました
再起動したりなんかいも起動しなおしても同じ現象です
0160デフォルトの名無しさん
2011/10/15(土) 19:14:16.51ですが、ここのスレに来てはいけないというルールはありません。
0161デフォルトの名無しさん
2011/10/15(土) 19:17:23.16では、mapAdj や mapN (N = Neighborhood) で
>>156
「名前と型両方に無駄なく意味をこめる」
なるほど、そういう考え方もあるのですね
わたしは、改めてこの関数を使うプログラマの立場に立って考えてみると、
型シグネチャはライブラリ ドキュメントを見ることでしか確認はせず、
普段ソース中でこの関数を使っている時は関数名しか見ないと思いました
そして、ライブラリ ドキュメントはソースに比べてそう頻繁に見るものではない
(自分がそうなので)
だからソースを眺めた時、この関数を使っているところで、
「何がどのような結果になるのか」という情報が仕舞われた頭の抽斗が開けやすくなる、
抽斗の場所がぱっと思い浮かぶようなキーワードがいいなと
ポイントフリーで使っていると余計にそう感じます
というわけで、私はむしろ型シグネチャで分かる意味・ニュアンスも、
積極的に関数名に入れていこうと、皆さんの意見を聞いて思いました
0162デフォルトの名無しさん
2011/10/15(土) 19:18:30.540163デフォルトの名無しさん
2011/10/15(土) 20:12:34.890164デフォルトの名無しさん
2011/10/15(土) 21:42:48.20translator
tramsformer
transducer
厳密な使い分けはあるのだろうか?
0165デフォルトの名無しさん
2011/10/15(土) 22:11:44.66converter、diverter などもありますね
0166デフォルトの名無しさん
2011/10/15(土) 23:12:07.79ghci ではロードできないのでしょうか
ghc コマンドでは普通にコンパイルできたのですが、
ghci の :l でロードしようとすると、次のようにメッセージが出ます
Error: bytecode compiler can't handle unboxed tuples.
Possibly due to foreign import/export decls in source.
Workaround: use -fobject-code, or compile this module to .o separately.
これは、ghci でロードしたかったら、hs ファイルではなく
オブジェクト ファイルにコンパイルしとけ、という意味でしょうか
ghci でロードできないのでしたら、一つのソースコードで、
ghc でのコンパイルの場合は非ボックス化タプルを使って、
ghci でロードする場合は普通のタプルに自動的に切り替える
というようなことはできないでしょうか
0167デフォルトの名無しさん
2011/10/16(日) 10:45:43.20ハスケルたんは悪くない(キリッ
勉強不足の初心者が悪い!
ですか?
0168デフォルトの名無しさん
2011/10/16(日) 11:56:15.70そういうこと。あるいはghciに-fobject-codeを渡すのでもいい
>というようなことはできないでしょうか
少なくとも今はできない
0169デフォルトの名無しさん
2011/10/16(日) 12:07:28.59丁寧に答えてくれた人に 何しょうもない事言ってんねん。どっかいけ
答えてもらって助かったからそれでええんじゃ。
0170デフォルトの名無しさん
2011/10/16(日) 12:20:19.090171デフォルトの名無しさん
2011/10/16(日) 12:26:32.54Haskell界は住みやすくpurityが保たれている
ありがとう>125
0172デフォルトの名無しさん
2011/10/16(日) 12:35:10.32でも、スレには何も知らずに荒らす連中が来るようになってる。
日本語版stackoverflowでもあったほうがいいんだろうかね。
0173デフォルトの名無しさん
2011/10/16(日) 12:59:22.17忍法帳を発展さてくれればいいんだけど嫌がるひとも多いか
あとプログラム板でもID表示とか
0174デフォルトの名無しさん
2011/10/16(日) 13:06:48.21こうしてHaskell界では
モナドモナドモナドモナカモナコ....だけでスレが消費され続けるのですた
メデタシメデタシ
0175デフォルトの名無しさん
2011/10/16(日) 13:44:32.750176デフォルトの名無しさん
2011/10/16(日) 14:15:40.79> あるいはghciに-fobject-codeを渡すのでもいい
なるほど、ロードする度にオブジェクトコードを生成するよう指示すれば
ghc の様にコンパイルされるので非ボックス化タプルが使えるのですね
で、欠点はコンパイルに時間を要するかも知れないことと、
ghci のデバッガからは見えないことですね
> 少なくとも今はできない
わかりました
デバッガは今までも特に活用したことないので、
-fobject-code オプションでの対処で凌ぐことにします
0177デフォルトの名無しさん
2011/10/16(日) 14:27:50.62おぞましくさせない工夫が必要なほど幼稚な日本語をしゃべる人
(日本人とは限らない。)が多いのは事実だ。アノニマスには
開放できない罠。一番いいのは英語を使えることというのは否定でけん。
0178デフォルトの名無しさん
2011/10/16(日) 14:35:19.94stackoverflowのhaskellタグ。
0179デフォルトの名無しさん
2011/10/17(月) 22:52:36.79中間言語を吐き出すのでしょうか?
それとも機械後を吐き出してくれるのでしょうか?
0180デフォルトの名無しさん
2011/10/17(月) 23:01:04.24それは言語の仕様ではないので厳密には実装によるが、デファクトスタンダードのGHCは基本的にネイティブコードを吐く。
0181デフォルトの名無しさん
2011/10/18(火) 00:53:08.36> GHC compiles Haskell code either directly to native code or using LLVM as a back-end. GHC can also
> generate C code as an intermediate target for porting to new platforms. The interactive
> environment compiles Haskell to bytecode, and supports execution of mixed bytecode/compiled programs.
という紹介になってた。
0182179
2011/10/18(火) 13:32:09.880183デフォルトの名無しさん
2011/10/20(木) 11:39:21.53コマンドプロンプトから、ファイル名を入力したら、実行はできます。
0184デフォルトの名無しさん
2011/10/20(木) 12:31:00.43たぶん、実行はされているけど、すぐにプログラムが終了してコンソールが閉じているだけだと思う
main = let loop = loop in putStr "Hello World!!\n" >> loop
でコンパイルしてダブルクリックしてみ
0185デフォルトの名無しさん
2011/10/20(木) 13:20:15.64ありがとうございます!
その通りでした!
0186デフォルトの名無しさん
2011/10/20(木) 22:49:20.89どうやったらこんな発想が出来る様になるんだろ。
fizz = cycle ["","","Fizz"]
buzz = cycle ["","","","","Buzz"]
f s n
| s == "" = show n
| otherwise = s
main = print $ zipWith f (zipWith (++) fizz buzz) [1..100]
0187デフォルトの名無しさん
2011/10/20(木) 23:11:26.56オレ、そのアルゴリズム自力で思いついたけど、そんなに不思議かな。
たしか、3を法とする商群と5を法とする商群をなんとかすれば・・・ みたいなことを考えていて、思いついた
0188186
2011/10/20(木) 23:29:22.83C、java、rubyと来たのでmapは理解していたけど、手続き型言語には無い発想だと思う。
ついでに言うと、今なら手続き型言語ユーザーが何故、関数型言語を誤解するのか判る気がする。
「関数」「型」「評価」など、同じ字面でも関数型言語とは違う意味で説明される物が多い。
0189SCHEME餃子 ◆8X2XSCHEME
2011/10/20(木) 23:52:51.12英語で話すときは英語で考えなきゃ滑らかに話せないって話は聞くけど、
Haskell で書くときは Haskell で考えなきゃいけないってことだろ
0190デフォルトの名無しさん
2011/10/20(木) 23:53:46.97いいかどうかは別にして、カウンタやインデキシングを避けて、
何でもリストで考えればそうなる。
そうするとリストの代数的操作でプログラミングするようになる。
Richard Bird先生の本を読むのがいいかもしれない。
0192デフォルトの名無しさん
2011/10/21(金) 00:05:06.910193デフォルトの名無しさん
2011/10/21(金) 00:10:44.14あまりいい回答ではないと思ったかな。fibbuzzとかはやってるけど
関数型言語の普通の作り方すれば、最後のリストを[1..100]と
違うのだけの違いだから新鮮にも見えなかったよ。抽象化が得意な言語
とそうでないものでのさがあるんだなということかな。
prnFizzBuzz = mapM_ putStrLn.FizzBuzz
FizzBuzz n 。。。パターンマッチ
で
prnFizzBuzz [1..100] とか prnFizzBuzz fibSeq とかでおしまいだろ?
0194デフォルトの名無しさん
2011/10/21(金) 00:14:42.74泥臭くって、抽象化ができないよね。関数オブジェクトなどを使って
抽象化させて作るんだったら、初級っぽくないだろうし。
0195デフォルトの名無しさん
2011/10/21(金) 07:52:37.500196186
2011/10/21(金) 08:04:56.77>>>186
>Richard Bird先生の本を読むのがいいかもしれない。
情報有難う!
Research paperを幾つか、ざっと読んでみた。
まだよく理解出来ない所も多いけど、Haskellって面白い。
0197デフォルトの名無しさん
2011/10/21(金) 08:52:36.35細かい抽象化は全体からみれば効果がないだろうよ
0198デフォルトの名無しさん
2011/10/21(金) 09:48:20.45鳥先生に興味が出てきたら早速ピアソンのサイトへ行ってAlgebra of Programmingを手に入れるんだ
0199デフォルトの名無しさん
2011/10/21(金) 10:38:23.33何を優先してるかで違うのは当然だが、抽象化のセンスを見るのにも
いいとは思うがな。ボイラープレイトを取り除くにしても、この手の単純な
抽象化が出来なければ難しく感じるだろう。
余談だが、この辺の抽象化のセンスってLispのマクロを作るセンスにも通じ
てる印象がある。マクロで関数を作成するにしてもマクロを作成するにして
もボイラープレイと除去と同じセンス必要なので。
0200デフォルトの名無しさん
2011/10/21(金) 11:19:02.96type Magma a = a -> a -> a
class MonadZero m where
mzero :: m a
class MonadZero m => MonadOr m where
mor :: Magma (m a)
class MonadZero m => MonadPlus m where
mplus :: Magma (m a)
instance MonadZero [] where
mzero = []
instance MonadOr [] where
mor xs = if null xs then id else const xs
instance MonadPlus [] where
mplus = (++)
fizz = cycle $ replicate 2 mzero `mplus` return "Fizz"
buzz = cycle $ replicate 4 mzero `mplus` return "Buzz"
fizzbuzz = zipWith mplus fizz buzz
main = print $ zipWith mor fizzbuzz $ map show [1..100]
listモナドの和を論理和(つまりMaybeモナドの和)、数値和の二通りに見ることで数値和で作ったfizzbuzzのパターンと数字のパターンを論理和で合成する・・・と
Listを信号としてみれば、もろor回路による信号の合成だよな。始まる場所が変わることに対してはdrop等で開始位置をずらしてつまり信号のdelay回路か
SignalArrowを使った抽象化でもいけそうに見えるな
それはさておき垂直合成、つまりモナド変換子を使うのはどうなるんだろうか
FizzT (FuzzT Identity Int) [String]みたいな型になればそれっぽいんだけど
0201デフォルトの名無しさん
2011/10/21(金) 12:37:44.28で、いざHaskellでEnumeratorとモナド使ったfor記法が定義されたら
嬉々として使うんだろ?
0202デフォルトの名無しさん
2011/10/21(金) 12:43:09.39いらないよ。ループ系ですらほとんど使わないのに。
0203デフォルトの名無しさん
2011/10/21(金) 12:50:12.54それってfoldlとどう違うの?
0204デフォルトの名無しさん
2011/10/21(金) 14:40:50.67そんな書き込みして何が楽しいの?
0205デフォルトの名無しさん
2011/10/21(金) 17:53:37.66思考が言語を作ったが
今や言語が思考を制限するのですね
0206デフォルトの名無しさん
2011/10/21(金) 18:00:38.900207デフォルトの名無しさん
2011/10/21(金) 18:07:06.790208デフォルトの名無しさん
2011/10/21(金) 18:27:55.96あと、エキスパートの思考は言語化できないことが多い
0209デフォルトの名無しさん
2011/10/21(金) 19:45:59.140210デフォルトの名無しさん
2011/10/21(金) 21:08:24.890211デフォルトの名無しさん
2011/10/21(金) 21:33:02.92毎回のように延期するんならもうちょっと余裕を持ってスケジュール宣言しとけよ
0212デフォルトの名無しさん
2011/10/21(金) 21:47:04.40スケジュール通りに発売されたドラクエなんて、逆に心配だろ?
0213デフォルトの名無しさん
2011/10/21(金) 22:00:15.460214デフォルトの名無しさん
2011/10/21(金) 22:25:17.56URLぷりーず。
ピアソン?
0215デフォルトの名無しさん
2011/10/21(金) 23:43:26.13Matz王国へ乗り込むんだな。
0216デフォルトの名無しさん
2011/10/21(金) 23:54:23.33つhttp://www.pearsoned.co.uk/bookshop/detail.asp?item=100000000010900
0217デフォルトの名無しさん
2011/10/22(土) 16:35:01.20linuxだとcabalをapt-getで入れて、gtk-buildingToolsをcabalで入れれば良いだけみたいなんだけど、Winのgtk2hsインストール手順が別になってて複雑っぽい。。。
0218デフォルトの名無しさん
2011/10/22(土) 16:47:47.561. http://www.gtk.org/download/win32.php へ行き、
All-in-one bundles のバージョン 2.16 をダウンロード(2.22 ではダメ)
2. All-in-one bundles を展開してホワイトスペースが無いパスに置き、
All-in-one bundles の \bin ディレクトリへのパスを環境変数 %PATH% に追加する
3. GHC インストールフォルダ内の mingw/bin ディレクトリへのパスも
環境変数 %PATH% に追加する
4. cabal install gtk2hs-buildtools
次いで cabal install gtk
最新の Haskell Platform にある GHC のバージョンより
高いバージョンの GHC を入れていたり、別の環境だったりした場合、
どうするかは知らん
0219デフォルトの名無しさん
2011/10/22(土) 17:18:04.17ありがとう
やってみます
0220デフォルトの名無しさん
2011/10/22(土) 17:20:56.32ライブラリの構造を整理してほしいな
0221デフォルトの名無しさん
2011/10/22(土) 17:54:16.39失敗したみたいなんですが、cドライブ直下だとダメとか、ありますでしょうか?
0222デフォルトの名無しさん
2011/10/22(土) 18:02:28.53だからダメと言う事は在るのでしょうか?
ghcにあわせてwin32版を落として設定して失敗してます
0223デフォルトの名無しさん
2011/10/22(土) 18:28:23.45ごめん、言い忘れてた
私の環境は
OS : Windows7 Home Premium 32bit
Haskell Platform : 2011.2.0.1
これ以外の環境でどうやるかは分からない
> だからダメと言う事は在るのでしょうか?
あるんじゃないかな
64 bit 版の All-in-one bundles でやってみたらどう?
さっき提示したページの上部に [Download] のリンクがあるから、
そこから 64 bit 版へ飛べる(まだ実験バージョンだと書かれているが)
0224デフォルトの名無しさん
2011/10/22(土) 18:34:53.13私の方こそ忘れてました。
haskellPlatformは同じバージョンを使ってます。
ダメモトで64bit版も試してみます。
0225デフォルトの名無しさん
2011/10/22(土) 18:50:11.12http://projects.haskell.org/gtk2hs/
0226デフォルトの名無しさん
2011/10/22(土) 19:56:50.82何とかWin7の64bitでgtk2hsインストール完了しました
結論から言うと、gtk+の64bit版ではなく、>>218でダメと言われてた2.22で成功しました。。。
(手順はそれ以外は同じで、サンプルコードの動作確認も完了済み)
因みに、64bit版ではインストールに成功するものの、リンクでこけました
これでgtk2hsの勉強が始められそうです
ありがとうございました
0227デフォルトの名無しさん
2011/10/22(土) 21:33:29.29楽しいね、これ。ずっとスレ覗くだけだったけど、久しぶりにhaskellしたくなってきたよ。
0228デフォルトの名無しさん
2011/10/22(土) 21:36:15.30を早くする方法で悩み中。
リストの最後の数値は判ってるんだから、すぐに出力出来るはずなんだが…
0229デフォルトの名無しさん
2011/10/22(土) 21:41:00.81> リストの最後の数値は判ってるんだから
なぜ?
0230デフォルトの名無しさん
2011/10/22(土) 21:42:14.51リストは先頭からしか読めないからな
最後の数値を即座に取り出したいなら別のデータ構造を考える必要がある
0231デフォルトの名無しさん
2011/10/22(土) 21:57:41.34既にソースに書いてある。
先頭から見て行かないと判らない、というならそれはHaskellの出来の問題じゃないの?
0232デフォルトの名無しさん
2011/10/22(土) 22:02:58.14リストのデータ構造の性質
haskellじゃなくても、リストを使えば先頭からしか辿らない
0233デフォルトの名無しさん
2011/10/22(土) 22:07:14.120234デフォルトの名無しさん
2011/10/22(土) 22:25:23.49たとえば [1..3] は 1 : (2 : (3 : [])) であり、
「リストを構成するデータ型」の値だ
そして、 : や [] はこのデータ型の「値構築子」だ( : は中置値構築子)
last 関数は、last [] = errorEmptyList "last"; last (x:xs) = ・・・
という形のパターンマッチを行う関数だ
last [1..3] は last (1: (2 : (3 : []) なので、
(x:xs) にパターンマッチし、x=1、xs=(2 : (3 : [])) と束縛する
リストに限らず、データ型の値を作ってる値構築子の引数(この場合は 1 や 2 など)は、
このようにパターンマッチさせて値構築子を剥がす事でしか参照できない
で、リスト 1 : (2 : (3 : [])) がこのようなネスト構造を成している以上、
ネスト構造を「順に剥がしていく」ことでしか中の値は参照できない
ちなみに、f (_:_:x:_) = という関数で f [1..3] などとして一気に x=3 と束縛しようとしても、
内部で順に値構築子を剥がす処理をしてパターンにマッチするかを調べるから同じ事
これを 「Haskellの出来」 というのなら、そうだね、としか言いようがない
0235デフォルトの名無しさん
2011/10/22(土) 22:55:21.45haskellの出来じゃない
配列と違って、リストはメモリ上に連続して並んでる保証はない
だから、先頭から順々に次に要素のアドレスを参照していくしかない
配列なら、連続して並んでるから、先頭から要素のサイズをステップ数として、希望の位置までアドレスの参照先をずらせば良い
c言語でも同じ事
(haskellで配列使った事ないから分からんが、配列と言うデータ構造の性質としてはO(1)になるはず)
0236デフォルトの名無しさん
2011/10/22(土) 22:56:21.45o要素一つのサイズ
0237SCHEME餃子 ◆8X2XSCHEME
2011/10/22(土) 23:06:30.13構文木の段階の情報と、実行時の段階のマシンコード (バイトコード) ではレイヤが違う話。
レイヤをまたいでうまいことやれば…というのは個別の実装の最適化をがんばってもらうしかない。
0238デフォルトの名無しさん
2011/10/22(土) 23:15:23.45それでじゃあ、この最適化があれば実装の出来がいいかって言われると
うーん
0239デフォルトの名無しさん
2011/10/22(土) 23:25:42.57うん?
ghciの話じゃないのか
ghcにO2オプション付ければ積極的に最適化されるから、
last [1..3] = 3
みたいに最適化されてんじゃないの?
0240デフォルトの名無しさん
2011/10/22(土) 23:44:29.49少なくとも GHC 7.0.3 ではされません
0241デフォルトの名無しさん
2011/10/22(土) 23:47:33.53Haskellや関数型プログラミングらしくなくて、むしろ気持ち悪いくらいなんだけど
0242デフォルトの名無しさん
2011/10/22(土) 23:54:35.79俺は、楽しいかどうかというより、
そういう発想が他のどういうところに活かされるのか気になる
0243デフォルトの名無しさん
2011/10/22(土) 23:56:32.370244デフォルトの名無しさん
2011/10/23(日) 00:00:25.87>>241 はFP的ではないと感じてるわけだから、
どの辺りがFP的か簡単にでも説明してあげないと堂堂回りになるよ
0245デフォルトの名無しさん
2011/10/23(日) 00:03:30.59の事ってのは通じてる?
Bird先生の本もこの系譜になると思うけども。
0246デフォルトの名無しさん
2011/10/23(日) 00:25:49.78普通はプログラミングパラダイムの方を思い浮かべる
0247デフォルトの名無しさん
2011/10/23(日) 00:30:01.52Function Programmingの略!
これが関数道の正しい道!
0248デフォルトの名無しさん
2011/10/23(日) 00:32:44.35>>186のどこが関数的?
0249デフォルトの名無しさん
2011/10/23(日) 00:41:48.580250デフォルトの名無しさん
2011/10/23(日) 01:26:52.91関数的とも手続き的手も言えん、なんとも分からん代物
0251デフォルトの名無しさん
2011/10/23(日) 01:42:08.77mainの最後を[2..100]と変えたらおかしくなることからして関数的でないことが分かる
それに関数的かどうかとは別に、プログラムとしても洗練されてない
fizzとbuzzの空文字列や関数fに数値を渡す設計はどうにかならなかったのかと思うし
fの中で文字列の比較をしてるのも酷い
Bird先生?難しい本を薦める前に添削してやれよと…
0252デフォルトの名無しさん
2011/10/23(日) 04:25:14.59Bird先生は別に要素レベルの演算までリストでやれと言ってるわけではないと思う。
lift n = (n,"")
fizz (n,s) = (n,s ++ if n `mod` 3 == 0 then "fizz" else "")
buzz (n,s) = (n,s ++ if n `mod` 5 == 0 then "buzz" else "")
fizzbuzz xs = map (buzz . fizz . lift) xs
くらいでも関数的と言っていいんじゃないか。
0253デフォルトの名無しさん
2011/10/23(日) 04:54:09.210254デフォルトの名無しさん
2011/10/23(日) 07:27:28.91洗練されたコード早く
0255デフォルトの名無しさん
2011/10/23(日) 07:46:21.09>>252
0256デフォルトの名無しさん
2011/10/23(日) 08:15:42.99それはBird先生の本を薦めていた人たちに言ってくれよ
俺は剰余を使ったつまらないのしか書けないから
しかし>>252も何がしたいのかよく分からないなw
0257デフォルトの名無しさん
2011/10/23(日) 08:32:01.870258デフォルトの名無しさん
2011/10/23(日) 08:49:31.00つListLike
0259デフォルトの名無しさん
2011/10/23(日) 11:08:00.97うん
そういうのを使って「標準ライブラリ」を大掃除して整理してほしいんだよ
そうすれば、外部ライブラリもそれに倣う
0260デフォルトの名無しさん
2011/10/23(日) 11:19:24.02そんだけ肥大化して硬直化してるんだろうな
少なくともfold/buid書き換えがstream fusion(笑)に変わるよか後で
Cabalのdependency hellが解決されるのと同じくらい(見込みが無い)ように思える
0261デフォルトの名無しさん
2011/10/23(日) 11:37:11.82今ある標準ライブラリはもう手を付けず deprecated にして、
真標準ライブラリを新たに作ればいいのにな
それか、標準ライブラリにバージョンを付けるとか
0262デフォルトの名無しさん
2011/10/23(日) 11:40:25.87Preludeはそういう鈍重な憂き目にあうのは、つまり、Prelude自動読み込みというアイデアがアウトだったのでは
0263デフォルトの名無しさん
2011/10/23(日) 11:47:36.18仕様が 2010 に変わる時にいっしょに整理しておくべきだったよな
0264デフォルトの名無しさん
2011/10/23(日) 11:51:42.420265デフォルトの名無しさん
2011/10/23(日) 12:12:23.800266デフォルトの名無しさん
2011/10/23(日) 18:53:15.42returnは別に汚点じゃない。
0267デフォルトの名無しさん
2011/10/23(日) 20:06:09.980268デフォルトの名無しさん
2011/10/23(日) 23:05:12.84Haskell版Boostをご所望か?
0269デフォルトの名無しさん
2011/10/23(日) 23:26:21.32ごめん、Boost とどう繋がるのか全く分からん
0270デフォルトの名無しさん
2011/10/24(月) 00:21:47.40うん。酔っぱらってた。
0271デフォルトの名無しさん
2011/10/24(月) 00:47:01.620272デフォルトの名無しさん
2011/10/25(火) 00:39:21.95Prelude> let a = reverse
で、:t a と :t reverse が互いに同様なのに、
Prelude> import List
Prelude List> let b = group
で、:t b と :t group が互いに違うのは何でだろ?
エロイ人教えて。
0273デフォルトの名無しさん
2011/10/25(火) 03:15:22.56たぶん、単相性制限とGHCiにおける型のデフォルト化の拡張の結果。
単相性制限
http://www.sampou.org/haskell/report-revised-j/decls.html#sect4.5.5
GHCiにおける型のデフォルト化の拡張
http://www.kotha.net/ghcguide_ja/latest/interactive-evaluation.html#extended-default-rules
0274デフォルトの名無しさん
2011/10/25(火) 11:19:01.55言語仕様が焼け太りしてきたな♪
0275デフォルトの名無しさん
2011/10/25(火) 11:25:06.280276デフォルトの名無しさん
2011/10/25(火) 22:45:52.30死んだ
0277デフォルトの名無しさん
2011/10/25(火) 22:47:07.73一つの生命が途絶えた
Perl忍者
Perl忍者の意志を継ぐものが現れるよ
新生
そう感じる
0278デフォルトの名無しさん
2011/10/25(火) 23:04:45.72ファンだったのに、、、
0279デフォルトの名無しさん
2011/10/26(水) 23:30:49.18これはいつ評価される(べき)か、とか考えつつデータ構造を作りながら、
ふとそう思った。
0280デフォルトの名無しさん
2011/10/26(水) 23:53:21.74捉え方は無限大とはいわないけど十色ぐらいはあると思う
0281デフォルトの名無しさん
2011/10/27(木) 00:09:47.16そう決めてしまうと
発想を狭めることにはなるかもしれないな
0282デフォルトの名無しさん
2011/10/27(木) 06:02:46.69ちがうよ
0283デフォルトの名無しさん
2011/10/27(木) 10:21:40.180284デフォルトの名無しさん
2011/10/27(木) 12:12:07.98発想はよさだろ
発想が狭くても良ければいい
お前みたいなやつはクソ
海外旅行経験300回未満のゴミが
"欧米では〜〜、海外では〜〜、視野を広める、心を広く、発想を広く、世界は広い、井の中の蛙、まだまだ甘かった
日本人は〜、コミュニケーションは大事、むこうでは〜〜、ボブがよ!ヘイ!ジョンとかブログに書く馴れ馴れしく”
とかほざいてるのとおなじ気持ち悪いんだよゴミ
なあゴミ
0285デフォルトの名無しさん
2011/10/27(木) 12:15:28.51海外旅行をすればHaskellがバリバリ書けるようになりますか?
0286デフォルトの名無しさん
2011/10/27(木) 12:31:24.60良い発想かどうかは、誰がどうやって判断するんだろ。。。
0287デフォルトの名無しさん
2011/10/27(木) 12:32:19.360288デフォルトの名無しさん
2011/10/27(木) 12:39:59.83そんなのは世界中のHaskellに関わり、
かつのその発想に関わる人間みんなが判断していくんだろ
そして、大多数の人に良い発想だと認められれば、
その発想が世の中に認められているということだ
ごく普通の当たり前のことだと思うが、そんなに疑問に思うことか
0289デフォルトの名無しさん
2011/10/27(木) 12:49:24.80パーサー実装はHaskellの練習としては手頃なのでお奨め。
0290デフォルトの名無しさん
2011/10/27(木) 12:56:12.28これを否定されてそんなに腹が立ったのかいw
0291デフォルトの名無しさん
2011/10/27(木) 12:57:24.900292デフォルトの名無しさん
2011/10/27(木) 13:00:13.59それより「発想」ってのが何かのトラウマのスイッチを押してしまったらしいよ
0293デフォルトの名無しさん
2011/10/27(木) 13:01:52.270294デフォルトの名無しさん
2011/10/27(木) 13:04:54.290295デフォルトの名無しさん
2011/10/27(木) 13:17:59.98全部一緒なんじゃなかろうな
0296デフォルトの名無しさん
2011/10/27(木) 13:36:35.90X: 関数型言語がいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
O: ハスケルがいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
0297デフォルトの名無しさん
2011/10/27(木) 19:14:05.00文学はいいので工学の話してください
0298デフォルトの名無しさん
2011/10/27(木) 23:19:35.930299デフォルトの名無しさん
2011/10/27(木) 23:47:18.79「できない」アプローチが「ある」っていう概念が理解できないから説明してくれろ
0300デフォルトの名無しさん
2011/10/28(金) 00:14:33.39>全部一緒なんじゃなかろうな
284〜296まで一人で自演乙
でも、こんな過疎スレで一時間ちょいで十レス以上とか、
もうちょっとリアリティってヤツを考えたほうがいいね。
0301デフォルトの名無しさん
2011/10/28(金) 02:56:26.22みたいな作法って持ってます?
ある組成式を受けとったら、その分子の平均質量とかマススペクトルとかを返してくれるような
プログラムを書いてみようかと思ったんだけど、まず基本となる原子のデータ型から作っていって、
data Atom = Atom { abbr::Char, abundance::Distributions }
type Distributions = [(Int,Double)]
とか定義しておいて、average :: Atom -> Doubleやspectrum :: Atom -> (Int -> Double)
みたいな関数を作り、組成式はtype Molecule = [(Atom,Int)]としてみようか、と考えています。
で、Atomを拡張してname::Stringみたいな値も格納しておこうか、と思いついたとき、
Atom型の値の中身をパターンマッチで分解している部分は全て書き直さなければならなくなります。
変更に弱いから、手探りでコーディングをしているときはパターンマッチによる分解は使うべきじゃない、ということで良いのでしょうか。
0302デフォルトの名無しさん
2011/10/28(金) 03:18:36.06とりあえず、その個別の問題に対しては、
data T1 = T1 { c :: Char }
data T2 = T2 { d :: Char, s :: String}
f T1{c = 'a' } = "c is 'a'"
f T1{c = c } = "c is not 'a': " ++ show c
g T2{d = 'a' } = "d is 'a'"
g T2{d = d } = "d is not 'a': " ++ show d
以上のパターンを用いることによって対処できる
さらに、
h t2@T2{d = 'b' } = t2{d = 'c', s ="foo" }
のようにasパターンと組み合わせることものできるから、かなりの柔軟性が確保できるはず。
0303302
2011/10/28(金) 03:20:39.58T1とT2は、別の型というよりも、変更前の型と変更後の型をシミュレートしていると考えて。
だから、このコードではcとdは別の識別子だけど、変更前と変更後で同じ識別子にすることができる。
0304デフォルトの名無しさん
2011/10/28(金) 07:47:46.60> Atom型の値の中身をパターンマッチで分解している部分
ここが元凶じゃないかな
Atom型の値の中身をパターンマッチで分解するのなら、
何の為に abbr 関数や abundance 関数を定義したの?
パターンマッチで分解するんじゃなく、
これらの関数を使って中身を取得すべきじゃないの?
パターンマッチだと型の構成を固めちゃうよ
ちなみに、見た目よく似た問題に Expression Problem というのがある
data X = A | B という型をパターンマッチで A B 仕分けしている関数が多くあり、
そこに新たに C という値構築子を追加したいが、修正すべき関数が多くて大変
なんとか楽にしたい、ついでにできれば再コンパイルしたくない
そういう場合なら、たとえばこことか日本語で分かりやすい
http://d.hatena.ne.jp/maoe/20101214/1292337923
0305デフォルトの名無しさん
2011/10/28(金) 08:16:42.39普通はデータ構築子をmodule外に非公開にすることで
内部構造を隠匿する
よくあるOOP言語ではclassが抽象データ型の単位だけど
Haskellだとmoduleになる
0306301
2011/10/28(金) 09:25:56.34haskellの入門書などではdata X = MkX Int Double Charなどとしておいて、
f (X i d c) = ...と記述することが「できる」とあったのですが、これって便利なのか?と疑問に思ったのです。
>>304確かにアクセッサ関数を定義しているので、型に何かを追加する可能性がある場合は
柔軟性を保てるのですが、例えば存在比を(Int,Double)のリストで表すよりもData.Mapで表す方がベターだと思った場合、
やっぱり変更先が多くなりそうになって嫌だなあと思った次第でして。
>>304のリンク先の方法がスマートに見えるので試してみたいと思います。
最終的には原子に限らず、平均値と分布を出せるようになりたいので、averageやspectrumをAtomだけに制限するのは良い手じゃなさそうです。
0307デフォルトの名無しさん
2011/10/28(金) 12:53:34.49> 例えば存在比を(Int,Double)のリストで表すよりもData.Mapで表す方がベターだと思った場合
そういう場合は、Data.Map 型を使ったコンテナに対するアクセス関数を公開して、
そのコンテナ内部で Data.Map 型を使っていることは隠蔽しておく
>>305 も同じ様なことをアドバイスしている
こうやって、データとそのユーザとの間にインターフェースを設けるのは、
Haskell に限らず、まず間違いなく全ての言語で共通する考え方
CICP 的に言えば「抽象の壁」だ
ちなみに、>>304 の後半で紹介した Expression Problem は、
少なくとも >>301 から読み取れる問題とは別ものと思われる
(応用できるかどうかは分からないけど)
0308デフォルトの名無しさん
2011/10/28(金) 12:54:58.72すまん
誤) CICP 的に言えば
正) SICP 的に言えば
0309デフォルトの名無しさん
2011/10/28(金) 18:25:33.57で作業をしていくための工夫という感じだな。ってね。安全な作業をするには必
要なんだってのもようやくわかった。
同時に感覚的なイメージでモナドを上手に例えて伝えるようなものがあまりない
のかもとも思ったかな。水中で普通のデジカメで撮影をするには防水ケースの中
に入れて使うけど、あの防水ケースっぽい働きなんだなってね。そんなアナロジー
を想像してしまったかな。
0310デフォルトの名無しさん
2011/10/28(金) 19:10:16.64> 同時に感覚的なイメージでモナドを上手に例えて伝えるようなものがあまりない
> のかもとも思ったかな。
確かにね
hage :: [Int]
hage = do
x <- [1..5]
when (x == 3) (fail "discard")
return x
こういうのだと、どの世界とどの世界に分けてるのか曖昧だし
明確に分けられたとしても、その世界に何かを閉じ込めているのとも違う気がする
0311デフォルトの名無しさん
2011/10/28(金) 20:14:47.390312デフォルトの名無しさん
2011/10/28(金) 20:59:44.73いや、たがら、そのリストモナドが分けた2つの世界は何と何か
という辺りが自分では上手く説明できないなぁと
0313デフォルトの名無しさん
2011/10/28(金) 21:06:31.22結果を渡される以外無関係ってと事だろう?
0314デフォルトの名無しさん
2011/10/28(金) 21:31:03.44>>310 のは実質これ
hage :: [Int]
hage = [1..5] >>= \x -> when (x == 3) (fail "discard") >> return x
>>313 の言う流儀というのは、結局
Monad クラスのインスタンスの定義方法、だよね
(>>= 関数をどう定義するか、return 関数をどう定義するか、など)
でもそれは、たとえばアローでも同じ事が言えて、
proc do内の世界はproc doの流儀に従ってる・・・
つまり Arrow クラスのインスタンスの定義方法がその流儀となる
じゃあ、アローもモナドと同じように、世界を2つに分けているのかな
分けているのなら、モナドが分ける世界とアローが分ける世界は何が違う?
そこまで考えて初めて、モナドが何をどう分けているのか、
ということの理解に繋がると思う
0315デフォルトの名無しさん
2011/10/28(金) 21:46:35.520316デフォルトの名無しさん
2011/10/28(金) 21:47:25.840317デフォルトの名無しさん
2011/10/29(土) 00:06:08.58なので、また探ってみたい。やっと面白いと思うことが増えてきた感じです。
arrowのことは他の理解を終えてから取っかかるよ。
実はRWHをようやく半分まで消化したところ
0318デフォルトの名無しさん
2011/10/29(土) 10:48:25.49他にこれは読んでおけ、このページは見ておけというものはありますか?
0320デフォルトの名無しさん
2011/10/29(土) 11:06:24.93Haskell Report
0321デフォルトの名無しさん
2011/10/29(土) 12:31:01.72ありがとうございます
そうですね、元の Haskell の仕様を読んでおくのは当然ですね
熟読します
0322デフォルトの名無しさん
2011/10/29(土) 14:25:06.170323デフォルトの名無しさん
2011/10/29(土) 14:44:46.62ありがとうございます
Webサイトや README をざっと見た感じ、自分でパーサーを作らなくても
extcore 自体を使って目的が達成できそうな気配なので、ちょっと試してみます
0324デフォルトの名無しさん
2011/10/29(土) 19:04:56.33core言語って何?
0325デフォルトの名無しさん
2011/10/29(土) 19:05:53.180326デフォルトの名無しさん
2011/10/29(土) 21:13:07.970327デフォルトの名無しさん
2011/10/29(土) 21:18:07.01どうした、いきなり
0328デフォルトの名無しさん
2011/10/30(日) 22:46:14.150329デフォルトの名無しさん
2011/10/30(日) 23:07:42.93IOモナドになるけど、余計なライブラリも使わず意外に簡単だったりする
0330デフォルトの名無しさん
2011/10/30(日) 23:23:54.14そうか。ありがとう。
0331デフォルトの名無しさん
2011/10/31(月) 07:50:06.70・・・ `a' is a rigid type variable bound by ・・・
この rigid type というのは何の分野の用語なの?
どういう状況のエラーなのか、もっと深く理解したい
0332デフォルトの名無しさん
2011/10/31(月) 10:01:18.00数値型はたくさんあるから。
0333デフォルトの名無しさん
2011/10/31(月) 14:19:00.000334デフォルトの名無しさん
2011/10/31(月) 18:00:29.57リリース予定どうなってんすか?
0335デフォルトの名無しさん
2011/10/31(月) 18:33:23.55>>333
基本liftAというか<$>を使うけどControl.MonadをimportしているようなモジュールならliftMでいいんじゃないかなぁってぐらい
0336デフォルトの名無しさん
2011/10/31(月) 18:46:46.74最新の GHC や Cabal、ライブラリ群を個別にインストールして問題なく使える
というわけで最近 Haskell Platform を捨てたら、
パンツを脱いで仁王立ちした時のように清々しかった
0337デフォルトの名無しさん
2011/10/31(月) 19:07:48.050338デフォルトの名無しさん
2011/10/31(月) 23:36:25.82じゃあ、逆に rigid な型にはどういったものがあるの?
0339デフォルトの名無しさん
2011/11/01(火) 01:39:44.22ありがとう
参考にさせてもらいます。:-)
0340デフォルトの名無しさん
2011/11/01(火) 06:30:13.520341デフォルトの名無しさん
2011/11/01(火) 06:52:12.180342デフォルトの名無しさん
2011/11/01(火) 07:59:55.20ゲソゲソ
0343デフォルトの名無しさん
2011/11/01(火) 11:26:20.060344デフォルトの名無しさん
2011/11/01(火) 11:26:41.970345デフォルトの名無しさん
2011/11/01(火) 17:40:45.020346デフォルトの名無しさん
2011/11/01(火) 17:51:04.66http://en.wikipedia.org/wiki/Broken_windows_theory
0347デフォルトの名無しさん
2011/11/02(水) 07:00:55.80hoogleに無かったら無いんじゃろか。。。
0348デフォルトの名無しさん
2011/11/02(水) 07:10:35.640349デフォルトの名無しさん
2011/11/02(水) 07:54:00.260350デフォルトの名無しさん
2011/11/02(水) 08:42:59.270351デフォルトの名無しさん
2011/11/02(水) 09:11:33.050352デフォルトの名無しさん
2011/11/02(水) 10:19:08.45サンクス
家帰ったら、試してみる
0353デフォルトの名無しさん
2011/11/04(金) 05:10:23.89登録はハスキルだね。
ハスケル ハスケルと読んでたけど、イギリスよみじゃハスキルのほうが
近いのかな。と思った。
0354デフォルトの名無しさん
2011/11/04(金) 07:15:35.57日本ではミリアム・ハスケルで通ってるみたい。
イギリスとアメリカじゃ読みが違うのか?
0355デフォルトの名無しさん
2011/11/04(金) 09:33:28.24そんな書き方をしているのはどんな人なの?
0356デフォルトの名無しさん
2011/11/04(金) 09:51:30.210357デフォルトの名無しさん
2011/11/04(金) 10:35:20.27schwa音だから、母音はどうでもいい。
0358デフォルトの名無しさん
2011/11/04(金) 12:32:15.54もっと Haskell の何かを表した、言い得てみょんな当て字があるといいんだけどなぁ
bookkeeping -> 簿記
function -> 函数
みたいに
0359デフォルトの名無しさん
2011/11/04(金) 12:50:46.86治具とjigとか
0360デフォルトの名無しさん
2011/11/04(金) 13:01:35.960361デフォルトの名無しさん
2011/11/04(金) 13:01:42.730362デフォルトの名無しさん
2011/11/04(金) 13:33:58.200363デフォルトの名無しさん
2011/11/04(金) 17:15:28.220364デフォルトの名無しさん
2011/11/04(金) 17:15:46.200365デフォルトの名無しさん
2011/11/04(金) 23:08:47.74必ずミュータブルな操作を持つデータ型を使わないといけないのか、
それともIOモナドやSTモナドの中に入れてしまうだけでいいのでしょうか。
例えば配列でMArrayを使わずに、
IORef (Array Int Int)みたいなデータ型を用意して、
IOモナドの中でmodifyIORef x (// y)としても、配列を新しく作り直さずにxを更新できたことにはなるんでしょうか?
0366デフォルトの名無しさん
2011/11/05(土) 10:51:35.93IORefはポインタ
writeIORefで破壊的に更新できるのはポインタ部分だけで、
中身を破壊できる訳ではない
modifyIORef x (//y)とすると、新しい配列(を作るサンク)が作られた上で、
xがそれを指すように更新される
0367デフォルトの名無しさん
2011/11/05(土) 16:31:37.95やっぱり駄目かー。
0368デフォルトの名無しさん
2011/11/05(土) 18:33:22.15新しい実体といっても、後ろに追加する以外でも、メモリ上で共有される実装であれば、
参照は遅いけど、更新が軽いという場合があるよ。
0369デフォルトの名無しさん
2011/11/05(土) 19:05:50.19>LinuxやMac OS XなどのUnix環境では,ロケール(locale)の設定を見て自動的に適切な文字コードに変換してくれます。ロケールは,言語や時刻など,使用しているOSのローカルな設定を決めるためのものです。
>Prelude System.IO> putStrLn "テスト"
>テスト
>一方,Windowsでは,UTF(UCS Transformation Format)とHaskellプログラム内部の文字コードとの間で変換を行うことはできますが,技術的な問題からShift_JIS(Microsoftコード・ページ932)のような2バイト文字ではまだ文字コードの変換ができません
LinuxやMacはiconvとか無しでも日本語扱えるようになったのに、Windowsだけなんて・・・orz
HaskellのArrayはpersistentじゃない
0371デフォルトの名無しさん
2011/11/05(土) 20:17:35.880372デフォルトの名無しさん
2011/11/05(土) 20:57:00.85フィルタリングするイメージデータを格納するコンテナには何が適切なの?
0373デフォルトの名無しさん
2011/11/05(土) 21:03:14.210374デフォルトの名無しさん
2011/11/05(土) 21:11:15.45ありがと、調べてみる
0375デフォルトの名無しさん
2011/11/05(土) 21:24:41.490376デフォルトの名無しさん
2011/11/06(日) 01:25:51.610377デフォルトの名無しさん
2011/11/06(日) 02:49:06.58Haskel Reportを読んでもはっきりと書かれていないような。
以下のように関数(>>?)を定義してvalue1, value2を求めると
value1は普通に求められるが、value2は\s -> s + aのところで
aが未定義ですとか言われる。
括弧があると変数の有効範囲が変わるのかな?
(>>?) :: a -> (a -> b) -> b
v >>? f = f v
value1 = (1, 2) >>? \(a, b) -> b >>? \s -> s + a
value2 = (1, 2) >>? (\(a, b) -> b) >>? \s -> s + a
0378デフォルトの名無しさん
2011/11/06(日) 05:53:55.40関数の仮引数の有効範囲はその関数本体というのが基本原則。
> value1 = (1, 2) >>? \(a, b) -> b >>? \s -> s + a
は
value1 = (1, 2) >>? (\(a, b) -> b >>? \s -> s + a)
と解釈されるのでs + aは\(a,b) -> ...の関数本体内に含まれるが
> value2 = (1, 2) >>? (\(a, b) -> b) >>? \s -> s + a
はかっこがあるため含まれない。
0379デフォルトの名無しさん
2011/11/06(日) 13:47:42.37メタルールか。なんとなく理解した。
0380デフォルトの名無しさん
2011/11/06(日) 16:49:56.150381デフォルトの名無しさん
2011/11/06(日) 18:32:21.28そのための$です
意外とLisp化食い止められてない気がするけど…
0382デフォルトの名無しさん
2011/11/06(日) 18:33:01.25少なくとも )))) はだいぶ消えると思うけど。
0383デフォルトの名無しさん
2011/11/06(日) 19:07:40.410384デフォルトの名無しさん
2011/11/06(日) 20:02:50.82逆に言えば、そこにしか効果ないんよ
0385デフォルトの名無しさん
2011/11/06(日) 20:50:27.44HaskellはLispの飼い猫なんだし
0386デフォルトの名無しさん
2011/11/06(日) 20:56:34.75)))) って何これ、ってことだったので、それが緩和されるというのは俺にとっては
大きいw
0387デフォルトの名無しさん
2011/11/06(日) 22:02:11.57飼い猫ちゃう
Haskellは汎用関数型決戦兵器や
Lispは・・・深海型やな
0388デフォルトの名無しさん
2011/11/06(日) 22:02:17.970389デフォルトの名無しさん
2011/11/07(月) 00:04:02.33俺どんな言語で書いても表見ないと安心できない
そのうち面倒くさくなってきてlisp化しちゃう
0390デフォルトの名無しさん
2011/11/07(月) 00:16:22.77算数・数学の結合順序とほとんど同じだろ?
覚えるって程のことかいな。
微妙に分からんところは()で明示すればいいし。
0391デフォルトの名無しさん
2011/11/07(月) 00:29:24.10最初はそんなんだったけど慣れた。
でもちょっと不安な所は、()だらけ。
0392デフォルトの名無しさん
2011/11/07(月) 00:31:14.84あれだけはいつもかっこつけてる。
0393デフォルトの名無しさん
2011/11/07(月) 01:24:33.490394デフォルトの名無しさん
2011/11/07(月) 01:35:26.66そうか?
$使えるところは関数合成できるから、ghciでlet使って試し書きする時は、$使って、ソースに書いてghciでテストする時にソースに$を関数合成に変えたものを書いてる。
(ghci上で直に定義するときは何故か関数合成できない)
0395デフォルトの名無しさん
2011/11/07(月) 06:03:53.93フォーマッタで余計なカッコ外せばいいだろ。
原始時代じゃあるまいし…
0396デフォルトの名無しさん
2011/11/07(月) 07:51:34.75hlintしないの?
0397デフォルトの名無しさん
2011/11/07(月) 08:10:41.16そしたら:iで確かめたらいいし。
0398デフォルトの名無しさん
2011/11/07(月) 10:45:37.92フオーマッタについてもう少しkwskplz
0399デフォルトの名無しさん
2011/11/07(月) 21:04:19.70実効速度違ってくるの?
0400デフォルトの名無しさん
2011/11/07(月) 21:06:43.130401デフォルトの名無しさん
2011/11/07(月) 21:10:41.580402デフォルトの名無しさん
2011/11/07(月) 22:12:23.77ghcに渡すフラグをどこで指定するのかが分からないので教えて欲しい
ぐぐったらinit.elにsetq haskell-ghci-program-args で行けるそうだったけども
どうも反映されない。-Wallを付けたいんだけど…
あと皆さんはどういう環境でHaskell書いてるのかも教えて欲しい
0403デフォルトの名無しさん
2011/11/07(月) 22:31:25.21ただし相当うざいから覚悟すべし
0404デフォルトの名無しさん
2011/11/08(火) 07:19:50.65コンパイルやghciは別にコマンドプロンプトを開いてる(開いておく)
emacsからghcやghciを立ち上げたりはしない
0405デフォルトの名無しさん
2011/11/08(火) 07:55:29.03宗教戦争始めてよ
0406デフォルトの名無しさん
2011/11/08(火) 10:23:13.380407デフォルトの名無しさん
2011/11/08(火) 10:23:23.09所で、haskell版emacsと聞いてYi落としたかったんだが、サーバ落ちてるっぽい
0408デフォルトの名無しさん
2011/11/08(火) 12:02:54.58そもそも領土問題は無い
みたいな
0409デフォルトの名無しさん
2011/11/08(火) 12:09:51.380410デフォルトの名無しさん
2011/11/08(火) 12:15:55.750411デフォルトの名無しさん
2011/11/08(火) 12:36:29.87どちらでも普通に Haskell 使えるし
俺 (>>404) はたまたま Haskell 以外の、普通の文章なんかも書きたかったから、
Windows でプロポーショナルフォントが問題なく使える Emacs を選択した
(vi は固定幅フォントしか使えん)
Haskell コーディングで俺が使う機能としては秀丸でもいいくらいだが、
Emacs の方が個人的には使い心地がいい
0412デフォルトの名無しさん
2011/11/08(火) 12:47:18.45好きなほう選べば良い。
0413301
2011/11/08(火) 13:17:35.69インデントがどうなるのか分からないので使ってない。そんなに数学記号に親しいわけでもないし。
0414デフォルトの名無しさん
2011/11/08(火) 14:09:30.24精精\をλにぐらいだなぁ
0415デフォルトの名無しさん
2011/11/08(火) 17:34:01.70インデントが重要になる場所ではスペース以外使わない習慣を付ければ、
たとえプロポーショナルフォントでも安心してHaskellを書けるよ
0416デフォルトの名無しさん
2011/11/08(火) 18:44:24.02かしこくするようなハックってある?
あと、++ とか && とかでつながった長い行を分けたいとき、
演算子の前で改行する?後で改行?
0417デフォルトの名無しさん
2011/11/08(火) 20:05:54.64とりあえずゲームを作ってみたいので、[The Yampa Arcade] とか
[The University of New South Wales School of Computer Science and Engineering]
なんかの論文や Haskell Wiki を読んだりして試してます
ただ、も少しまとまった情報はないものでしょうか
簡単なものでいいので関数を解説した一覧表なんかあると良いのですが
0418デフォルトの名無しさん
2011/11/08(火) 20:46:15.86AnimasっていうYampaのfork版だともう少しまともなドキュメントになってたけどやっぱりよくわからん
俺はelereaとかreactive-bananaとかの方が遥かに使いやすいと思ったわ
実行効率もいいしな
0419デフォルトの名無しさん
2011/11/08(火) 23:20:26.24ありがとう。ただcabalの設定ファイルだと俺の環境ではうまく行かなかった
それを手がかりに調べて、ホーム\AppData\Roaming\ghc\ghci.confに書いたらうまくいった
-Wall付けたら警告いっぱい出て、パターンマッチが網羅されてないとか役立つのもあったけど
ただ数値のデフォルト化の警告?ってのがよく分からん
警告なんだから良くないコードなんだろうけど
書く環境はやっぱりemacsが多いのか
今まであまり使ってなくて不慣れだけど頑張ってみるよ
0420デフォルトの名無しさん
2011/11/09(水) 08:05:42.63強がろうが俺をバカにしようが
このウンコ言語が大失敗超不人気のLL以下の汚物
だって事実は変わらないの
わかった?負けず嫌いの小学生みたいな負け惜しみ見てると滑稽だよwwww
可哀想になってくるわほんとに
まあお前らも最初は被害者だったんだよな、妄想と大風呂敷に踊らされてよ
でもな、もっと早くに気づいたたゆらはいっぱいいるだろ?
いまでもこんな酔っ払いが吐き戻したゲロみたいな言語を一生懸命庇ってさ
本当の事を指摘している俺がおかしいみたいな感覚になってるんだぞお前ら?www
粋がっちゃったけど結果大失敗でものすごい負け犬感味わってるんだろうから気持ちは解るけどよ
いいかげん現実見つめろや?wwwwな?wwww
実際、今どうなのか言ってみろよ?wwwおい?wwwwww
このゲロみたいなくっせえHaskellっていう言語は使われてるの?
流行ってるの?ヒットしてるの?
発表時みたいな状況になってんのかよ?wwwwwwwww
俺Haskellやってるんだぜ!って人前で言えんのお前ら?wwwwああん?wwwwwwwww
Haskellやってます とかいってやってることはコマンドラインのへなちょこゴミコードwww
0421デフォルトの名無しさん
2011/11/09(水) 08:57:34.07Haskellでプロトタイプ書く人でも最後は結局c++だし・・・
0422デフォルトの名無しさん
2011/11/09(水) 12:41:11.57関数型というパラダイムに酔っ払った人間が自己満足のために腹の中身そのまま捻り出した言語だよなこれ。
大学の自由演習で使ったがただの自己満足コードにしかならない。
0423デフォルトの名無しさん
2011/11/09(水) 12:48:49.57Twitter にでも書いとけ
0424デフォルトの名無しさん
2011/11/09(水) 12:56:40.73なぜ次に使う言語が関数型でまずいのか
http://d.hatena.ne.jp/ymotongpoo/20111105/1320506449
0425デフォルトの名無しさん
2011/11/09(水) 12:58:41.97中の人から批判が一番こたえる
0426デフォルトの名無しさん
2011/11/09(水) 13:02:05.300427デフォルトの名無しさん
2011/11/09(水) 13:24:57.110428デフォルトの名無しさん
2011/11/09(水) 19:31:37.01所詮は烏合の衆だな(w
0429デフォルトの名無しさん
2011/11/09(水) 20:05:25.66(一応、私も含む)
0430デフォルトの名無しさん
2011/11/09(水) 20:13:01.58無視してると言いながら、書いちゃったらダメだよ。次からは何も言わないようにね♪
0431デフォルトの名無しさん
2011/11/09(水) 20:16:28.69と言いつつも書いてるヤシ
0432デフォルトの名無しさん
2011/11/09(水) 20:17:49.21にならないかなってね。
0433デフォルトの名無しさん
2011/11/09(水) 20:28:11.17-Wallは要らないんじゃね?うざいし
型のデフォルト化ってのは
http://www.kotha.net/ghcguide_ja/latest/interactive-evaluation.html
の最後に書いてあるやつ
ただなんでこれで警告対象なのかは分からない、誰か詳しい人居る?
型のデフォルト化は標準で警告出すほどではないけどオススメできないことなんだろうか
0434デフォルトの名無しさん
2011/11/09(水) 20:43:09.66みたいなのを回避したいんじゃね、知らんけど
0435デフォルトの名無しさん
2011/11/09(水) 21:55:59.53(ラベルでなくともアクセス関数を自作しても本質的には同じ事です)
例えばの話でブロック崩しを作ってるとして、
ボールの状態を表すための情報が要りますよね
まぁざっと、位置ベクトル、速度ベクトル、あとはボールの半径を盛り込むとしましょう
data Ball = Ball
{ ballPos :: Vector2
, ballVel :: Vector2
, ballRad :: Double }
私はこうやって、位置を表す Pos や速度を表す Vel などに、接頭辞として
必ずそのデータ型の型構築子(値構築子ではなく)の名前を付けるようにしています
と言うのも、ではボールの他にバーやブロックの情報はどうなるかと言えば、
こちらも位置を表す情報は必要で、他にも重なる部分がいくつか出てきます
同じ pos という関数名を使い回すことが文法上できないので、
上記の方法でやるなら名前の中で何らかの区別をしなければならず、
であるなら変に省略文字で区別するよりは、もうフルネームで区別した方がマシだろ
という判断です
このように、複数のデータ型で同じ意味の情報を扱う場合のラベル名(アクセス関数名)は、
みなさんどうしてるのでしょうか
共通の情報は型クラスに追いやって、インスタンス化してるのでしょうか
その場合は、その関数の引数として対象のデータ型の値が要りますね
0436デフォルトの名無しさん
2011/11/09(水) 22:01:28.320437デフォルトの名無しさん
2011/11/09(水) 22:54:34.310438デフォルトの名無しさん
2011/11/09(水) 22:57:12.57http://www.kotha.net/ghcguide_ja/latest/options-sanity.html に
-fwarn-type-defaults:
数値型に対するデフォルト化機構が発動したときに警告・通知する。
これは、あるデフォルトを前提としたコードを別のデフォルトの下のコードに変換するときに便利である。
例えば、1という値に特に制約がないとき、Haskell 1.4の「デフォルトのデフォルト」は型Intを与えるが、
Haskell 98以降ではこれはIntegerである。
これは実行時性能と挙動に影響を与える可能性があるので、通知されると便利である。
って書いてあるからまさにその通りだと思う
パフォーマンスをカリカリに追求する場合にはこの警告が必要なんだろう
俺はそんなコード書いたこと無いけど
0439デフォルトの名無しさん
2011/11/09(水) 23:04:27.78> その場合は、その関数の引数として対象のデータ型の値が要りますね
これはデータ型に直接ラベルを定義しても同じ事でした、すいません
>>436
やはり、そうしますか
>>437
サブモジュールをどのように作って、どのようにアクセスさせているのでしょうか
モジュールを分けても、データ型のその情報にアクセスする為には関数が必要で、
当然その関数は各モジュールからエクスポートさせるのですよね
ボールの位置、バーの位置、ブロックの位置などの情報に対するアクセス関数の
名前のバッティングはどうしてるのでしょうか
もしかして、各モジュールをインポートする時に as で別名を与えてるのでしょうか
0440デフォルトの名無しさん
2011/11/09(水) 23:15:13.56うん。asで適当に別名付けてる。
0441デフォルトの名無しさん
2011/11/10(木) 17:18:49.29重いIntegerの(^)が呼ばれるのは嫌なことがある(aはDoubleとして)
0442デフォルトの名無しさん
2011/11/10(木) 17:40:52.380443デフォルトの名無しさん
2011/11/10(木) 17:48:18.08役に立ちます
0444デフォルトの名無しさん
2011/11/10(木) 18:08:46.39コードを書いてない段階でどうやって(a^2)の2に型を指定するんだ
0445デフォルトの名無しさん
2011/11/10(木) 18:27:39.40え、どう言う型を受け取って、どう言う型を返したいか、を考えて指定すれば良いだけだよ?
0446デフォルトの名無しさん
2011/11/10(木) 19:47:03.85Yampa 関連のドキュメントは論文も含めてけっこう多いので、
どれがオリジナルなのかもさっぱりなんですが、
どれも個々の特徴を割り下げてたり、活用したり、
さもなければ全体を長々と解説してる感じのものばかり
もっと、全体の構造をスパッと語ってくれると、
それだけでもありがたいのですが、無いですね
reactive も勉強してみたんです
シンクの仕組みがなかなか独特で面白かったんですけど、
結局これは「今はまだ」使えんと思いました
挙動が予測と噛み合わない部分や、予測し難い部分がちょくちょくあるんですよね
例えば integral 関数を使ってると、タイムリークを起こすと言うのかな、
間に合わなかった計算処理がどんどん積み上がっていって次第に処理が遅くなりました
この辺り Yampa なら react 関数を呼ぶ(呼ばれる)タイミングを
そのタイミングの処理の重さに合わせてリアルタイムに調整することは楽にできるんですが、
reactive ではその辺りどうやればいいのかよく分からない
0447デフォルトの名無しさん
2011/11/10(木) 19:53:02.29(^) :: (Num a, Integral b) => a -> b -> a
だから、(a^2)の2の型が何になっても、式全体の型には関わってこない
0448デフォルトの名無しさん
2011/11/10(木) 20:31:23.29こうすりゃいいじゃん
(^(2::Int))
0449デフォルトの名無しさん
2011/11/10(木) 21:08:18.64それ>>442の話と関係なくね?
0450デフォルトの名無しさん
2011/11/10(木) 21:24:40.76自作の関数作るときとかは、型推論に任せるより自分で決めた方が速かったり、逆に遅い代わりに大きな数を扱えたりする
length関数と同じ機能の関数mylength作るとき、
mylength [] = 0
mylength (_:ns) = 1 + mylength ns
の型は[a]->aだが、
mylength::[a]->Int
mylength [] = 0
mylength (_:ns) = 1 + mylength ns
とすれば、当然ながら型は[a]->Intになる
0451デフォルトの名無しさん
2011/11/10(木) 21:26:17.73x [a]->a
o [t]->a
0452デフォルトの名無しさん
2011/11/10(木) 22:01:08.03だからそれは(a^2)のケースでは関係ないよね
0453デフォルトの名無しさん
2011/11/10(木) 22:06:04.65自分で作る関数なら自分で型を決めればいいし、すでにある関数なら、引数に渡す値の方の型を決める他あるまい
0454デフォルトの名無しさん
2011/11/10(木) 22:16:47.46大抵の場合は、自分で作る関数の型さえ決めれば型推論で自動的に全ての型が決まるんだよ
それだけで決まらないこともときどきあって、(^)はそれを発生させる例の筆頭
0455デフォルトの名無しさん
2011/11/10(木) 22:33:42.23そういう話だっけ?
速い型を使いたいけど、型を明示した方が良いのか?って話だった気が・・・
単なる数字(例えば5とか)は、通常Num a。定数として宣言すると、Integralにデフォルトでなるから、数字をInt型にしたいなら、5::Intって具合に宣言しないとダメ
>>441への回答としては(^(2::Int))と書け。が、妥当だと思うんだが・・・
*Main> :t 5
5 :: Num a => a
*Main> let a = 5
*Main> :t a
a :: Integer
*Main> :t 5::Int
5::Int :: Int
0456デフォルトの名無しさん
2011/11/10(木) 22:48:37.04俺は>>442に対する>>443の回答に反論してるだけだよ
0457デフォルトの名無しさん
2011/11/10(木) 23:17:35.61ん、んんん?
だったら、>>450の通り、先に型を書けば防げてるだろ?
(^(2::Int))は併用すればいい話じゃね?
ごちゃ混ぜに話すなよ
0458デフォルトの名無しさん
2011/11/10(木) 23:20:16.100459デフォルトの名無しさん
2011/11/10(木) 23:32:16.57遅いIntegerやNum aを使うのを防げてるだろ
だあ、もう
beki1 a = a ^ 2
beki2 :: Int -> Int
beki2 a = a ^ 2
beki3::Int -> Int
beki3 a = a ^ 2::Int
下に行くほど、遅い型を使うの防げてる
以上
0460デフォルトの名無しさん
2011/11/10(木) 23:40:30.360461デフォルトの名無しさん
2011/11/10(木) 23:54:39.66そうだな
ただ、一般的には自分で型を書いた方が速い型を選べる
(^(2::Int))も出してるのに、そこに拘るってのもどうなのよ?
併用すればいいじゃないかって書いたよな?
そこは認めるのか?
0462デフォルトの名無しさん
2011/11/11(金) 00:20:31.17だけど>>442に>>443の回答は誤り。
0463デフォルトの名無しさん
2011/11/11(金) 00:32:29.31絡むんじゃなくて、こうだから、間違いって指摘しろよ
時間の無駄
0464デフォルトの名無しさん
2011/11/11(金) 00:42:49.60beki n = beki' n 2
0465デフォルトの名無しさん
2011/11/11(金) 00:47:17.39それこそ
beki n = beki' n 2
where
beki'::double->Int->double
beki' n m = n^m
なら、ちゃんとn^2そのものを書く前に2の型も決められるしな
(さすがに、こんな反論もどうかと思うが)
0466デフォルトの名無しさん
2011/11/11(金) 00:49:18.12先に書くか後で書くかは無関係ですな。
0467デフォルトの名無しさん
2011/11/11(金) 03:36:49.91* = Pointer, [] = Array4, int = Intと置き換えて、
Pointer (Array4 Int Int Int Int)とでも書けるんだろうけれど、
int (*)[100]型とかになってくるととても書いていられない。
何か上手い方法はないだろうか。
用途ねーだろって突込みは無しで。
0468デフォルトの名無しさん
2011/11/11(金) 08:48:39.45コード生成じゃ駄目?
0469デフォルトの名無しさん
2011/11/11(金) 08:49:33.540470デフォルトの名無しさん
2011/11/12(土) 01:01:56.40out of dateなパッケージかどうかすぐに分かる手段ってあるのかな。
0471デフォルトの名無しさん
2011/11/12(土) 08:11:04.130472デフォルトの名無しさん
2011/11/12(土) 12:18:07.24引っ越したとして、代わりに何を標準ライブラリに入れるの?
今までの List と互換が無ければ今まで作ってきた資産が死ぬし、
さもなければ互換性を捨ててでも入れる大きなメリットがあるものじゃないと
0473デフォルトの名無しさん
2011/11/12(土) 15:32:33.200474デフォルトの名無しさん
2011/11/12(土) 15:49:26.84こういう総合的使い勝手に関して
関数型言語は時の洗礼を十分に勝ち抜いてはいないと思う
当面C#からF#を操作すればいいと思うしまだまだ本格使用はしない
0475デフォルトの名無しさん
2011/11/12(土) 15:49:41.43そこで挙げられてる事に関しては俺もそうだと思う。
回避策はあるにはあるけど、いつも使える訳じゃないし。
0476デフォルトの名無しさん
2011/11/12(土) 15:57:09.17名前空間の問題はasでimportすれば解決するんじゃ?
module が抽象化の単位だから module毎に名前空間を設定できればいいわけだし
操作とデータ型の分離はいわゆるexpression problemによくあるトレードオフそのもので
どっちがいいとかじゃないと思う
分離してmoduleで管理でいいと思うけど
class前提の人には受け付けないのか
0477デフォルトの名無しさん
2011/11/12(土) 15:59:22.58SMLならモジュールで名前空間を実現しているから
uri.schemeやuri.pathみたいに書けて、Rubyと遜色ない
Haskellって大規模開発には適していないのかな?
0478デフォルトの名無しさん
2011/11/12(土) 16:07:36.780479デフォルトの名無しさん
2011/11/12(土) 16:19:42.77qualifiedでインポートしても結局修飾しなきゃいけなくて、.fooで済むオブジェクト指向言語には負ける
それ以外の点は的外れだと思った
関数の部分適用とsetterはまるで別物だし、パターンマッチはかっこいいifじゃないし、
高階関数の「固まり」を苦労して扱わなくて済むのはそれだけで利点だし
0480デフォルトの名無しさん
2011/11/12(土) 16:23:39.76そのuri.schemeのuriってモジュール名?そうならRubyと遜色ないとは言えないだろ
Ruby(や他のオブジェクト指向言語)はモジュールで修飾する必要がないのが自慢なんだから
0481デフォルトの名無しさん
2011/11/12(土) 16:24:46.65バイナリ互換性が糞だからな
それが一番大問題だと思う
名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い
0482デフォルトの名無しさん
2011/11/12(土) 16:27:49.150483デフォルトの名無しさん
2011/11/12(土) 16:28:53.90これがあれば短い名前を使って衝突しても解決してくれるという触れ込みだけどどうなんだろう
個人的には曖昧エラーの山になりそうだと思うんだが
SPJは使いものになると考えてるらしい
0484デフォルトの名無しさん
2011/11/12(土) 17:07:16.80SMLなら、open uri と宣言すれば、Rubyと同じように修飾を省略できるよ
Haskellはできないの?
0485デフォルトの名無しさん
2011/11/12(土) 17:09:09.99>名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い
まるでイソップ童話の「酸っぱいブドウ」みたいだ....
0486デフォルトの名無しさん
2011/11/12(土) 17:11:25.72できるけど、名前が衝突しない場合に限る。これはSMLも同じだよな?
Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、けっきょく修飾インポートするはめになる
Rubyだとメソッド名はグローバルじゃないので衝突を気にする必要すらない
0487デフォルトの名無しさん
2011/11/12(土) 17:16:42.29>これはSMLも同じだよな?
いや、ゼンゼン(理由は下記を参照)
>Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、
ナゼこんなことが起きるの?
SMLなら名前空間は(Rubyと同じように)階層化されているから、
適切にモジュール設計していれば、衝突なんて全く気にならないんだけど....
もしかしてHaskellの(モジュールに関する)名前空間というのは
フラット(平坦)なの?
0488デフォルトの名無しさん
2011/11/12(土) 17:21:06.02>>481は関数名しか補完してくれないテキストエディタしか使ったことが無いのかもしれない。
型を認識するIDEを使ったことがあれば、こんな発想にはならないだろ。
0489デフォルトの名無しさん
2011/11/12(土) 17:23:06.27Haskellの名前空間はフラットだよ
階層化されているから名前が衝突しないってのが良く分からん
実例かポインタある?
>SMLなら名前空間は(Rubyと同じように)階層化されているから、
Rubyで衝突を気にしなくていいのはメソッド名の解決に型情報を使う
(正確にはレシーバがメソッド名を実行時に解釈する)からであって、
階層化うんぬんは関係なくね?
0490デフォルトの名無しさん
2011/11/12(土) 17:25:14.72> もしかしてHaskellの(モジュールに関する)名前空間というのは
> フラット(平坦)なの?
どういうのをフラットと言うのか分からんが、
俺が Haskell のモジュール関係で不満なのは次のことができない事
AAA.BBB.CCC.DDD というモジュールがあったとして、
モジュール AAA.BBB をインポートして CCC.DDD.fff で関数 fff を使う事
関数 fff を使いたかったらモジュール AAA.BBB.CCC.DDD をインポートしないといけない
0491デフォルトの名無しさん
2011/11/12(土) 17:36:29.05オライリーのプログラミング言語Haskellを買ってきたのです
プログラムをかきながら本を進めていくと
後半からimportできないモジュールばかりになるのですが…
環境はWindowsでGHC6.4.1ですが、CentOSでGHC6.10.4でもダメなので
単純に環境問題ではない気がするのですが…
0492デフォルトの名無しさん
2011/11/12(土) 17:42:05.24>実例かポインタある?
階層化されたディレクトリの無いファイルシステム(CP/Mや初期のMS-DOS)
過去の階層化されていないWindows Network(NetBIOS)
名前の衝突回避と階層化との関連はコンピュータ科学の知識があれば常識だよ
>階層化うんぬんは関係なくね?
Rubyのインスタンスメソッドについては、その通りだね。
ただし、Rubyにはクラスメソッドあるいはモジュール関数という概念がある。
これらのメソッドは(実際の実行は動的であっても、)構文上は静的に解釈できる。
ここで、M::N::O.func と M::N.func は同じモジュール関数名 func を使っているけど、
それぞれ名前空間が M::N::O と M::N とで異なっているから静的に区別できる。
0493デフォルトの名無しさん
2011/11/12(土) 17:49:31.51いやプログラミングの文脈ではぜんぜん常識じゃないと思うんだが
あるモジュールMを書いているとする
別のモジュールA.B.Cの関数fと、A.D.Eの関数fを使いたくなったので、両方ともインポートする
すると、単にfと書くだけではどちらを意味しているか決まらないので、なんらかの修飾が必要になる
これは名前空間が階層化されていようがいまいが関係ない
という理解だけど
0494デフォルトの名無しさん
2011/11/12(土) 17:52:01.51たしかに変なこと言っちゃったな
大規模開発云々で名前空間のrubyとhaskellでの差なんて大した問題じゃないってことが言いたかった
0495デフォルトの名無しさん
2011/11/12(土) 18:05:45.44修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ
>>493の例の場合、RubyやSMLならばモジュール空間Aだけをインポートして
B.C.f と D.E.f と書くことができる。あるいは、X=A.B.CおよびY=A.D.Eという
局所的なモジュール空間を宣言してX.f および Y.f という短い別名での参照が可能。
HaskellではAだけをインポートするとか、
あるいは局所的なモジュール空間を宣言するとかできないの?
RubyやSMLなら「普通に」できるんだけど....
>修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ
Rubyのインスタンスメソッドについてはそれができるんだよ。ずっとその話をしていたと思ったんだが
>HaskellではAだけをインポートするとか、
>あるいは局所的なモジュール空間を宣言するとかできないの?
できません
これについては同様のことができるな。局所的なモジュール空間を宣言するわけじゃなくて
単なる別名の導入だけど
import qualified A.B.C as X
import qualified A.D.E as Y
0498デフォルトの名無しさん
2011/11/12(土) 18:15:51.80>Rubyのインスタンスメソッドについてはそれができるんだよ。
Rubyのインスタンスメソッドもレシーバで修飾しなければ区別できないよ。
たとえば
c = A::B::C.new; e = A::D::E.new
という文脈の下で、レシーバで修飾された
c.f および e.f
という式は正しく評価できるけど、単なる
f
ではRuby処理形は式を評価できない。(当たり前の話だよね?)
もちろん。でもHaskellにはその能力がない
Rubyでuri.schemeと書くときにメソッド名schemeが他と衝突するのを心配する必要はないけど、
Haskellで(scheme uri)と書くならそうはいかない
これを指して>>486で「けっこう頻繁に衝突」と言った
>>487で否定されたのでSMLにもRubyみたいなレシーバ依存の名前lookupがあるのかと思ったけど、
そういう訳でもないってことで良いかな
0500デフォルトの名無しさん
2011/11/12(土) 18:23:49.380501デフォルトの名無しさん
2011/11/12(土) 18:36:14.30感情に走らずに、もっと落ち着いて議論して
0502デフォルトの名無しさん
2011/11/12(土) 18:39:16.82>そういう訳でもないってことで良いかな
SMLはオブジェクト指向では無いし静的型付け言語だから、
Rubyのようなレシーバ(インスタンス)依存の名前参照は存在しない
ただし、SMLでは uri.scheme と書く時に、uri以外の他のモジュールで
schemeというアクセサ名が使われているかどうかを心配する必要はない
つまりHaskellのような urlScheme という冗長な命名は不要
こういう事で理解してもらえるかな?
>つまりHaskellのような urlScheme という冗長な命名は不要
Haskellでもこれは原理的には不要なんだよ
衝突が発生したら修飾した名前に切り替えればいいだけ
uriSchemeのような命名がされるのは修飾を面倒だと思っているから
これに関してHaskellでできないことをSMLができる訳じゃないと理解した
もちろん名前空間が階層化されてるのは良いことだけど、この話題には関係ない
レシーバ(に相当するもの)の型に依存して名前解決を行えるようにしようという提案があって、
それが>>483
0505デフォルトの名無しさん
2011/11/12(土) 18:57:39.73Rubyは普通のOOPをやってる
新しい話題は無いわけね
0506デフォルトの名無しさん
2011/11/12(土) 18:58:06.930507デフォルトの名無しさん
2011/11/12(土) 19:06:28.43コンパイル時に実装が選択できれば十分で
OOPの動的束縛を持ち出すのは道具が大きすぎな気がした
0508デフォルトの名無しさん
2011/11/12(土) 22:08:46.750509デフォルトの名無しさん
2011/11/12(土) 22:23:45.34多相レコードを使え…あったっけ?
0510デフォルトの名無しさん
2011/11/12(土) 23:01:33.64どういうのをOOPと言ってるの?
何がどうできたらOOPと言っていいの?
0511デフォルトの名無しさん
2011/11/13(日) 00:47:50.770512デフォルトの名無しさん
2011/11/13(日) 00:53:06.55http://ja.m.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
- カプセル化 (振る舞いの隠蔽とデータ隠蔽)
- インヘリタンス (継承) --クラスベースの言語
- ポリモフィズム (多態性、多相性) --型付きの言語
- ダイナミックバインディング (動的束縛) --インタープリタの言語 この機能
これらの機能のうち、オブジェクト指向の考え方で不可欠なのは「カプセル化」の機能だけである
0513デフォルトの名無しさん
2011/11/13(日) 00:58:52.92PythonとかOOPLでなくなってしまう
なんでこう日本語版のWikipediaは(略
0514デフォルトの名無しさん
2011/11/13(日) 01:03:23.86http://en.wikipedia.org/wiki/Object_Oriented_Programming
0515デフォルトの名無しさん
2011/11/13(日) 01:16:28.24http://www.sampou.org/haskell/tutorial-j/classes.html
Haskell vs OOP
http://d.hatena.ne.jp/kazu-yamamoto/touch/20080828/1219888005
OOP vs type class
http://www.haskell.org/haskellwiki/OOP_vs_type_classes
↓こういう考えかたも、分かりやすいと思うんだけどな。
Clojureは、皆さんがオブジェクト指向から望む多くのものを提供 *して* います。
http://www.infoq.com/jp/news/2009/02/clojure-interview-halloway
0516デフォルトの名無しさん
2011/11/13(日) 01:18:40.31これ dynamic dispatch のことだよね
インタープリタの言語じゃなくてもあると思うんだけど
0517デフォルトの名無しさん
2011/11/13(日) 01:20:07.80Perl5's Moose ロールベース?のオブジェクト指向
http://perldoc.perlassociation.org/pod/Moose-Doc-JA/Moose/Manual.html
0518デフォルトの名無しさん
2011/11/13(日) 01:36:57.23そういえば、動的型付け言語も動的ディスパッチする部分を型推論したり、
宣言する方向で高速化してるな。
0519デフォルトの名無しさん
2011/11/13(日) 01:45:46.50(subtype) polymorphismとADTの組み合わせだと言ってる
データ隠匿やデータ抽象だけならADTで可能だけど、これだけではOOPじゃない
0520デフォルトの名無しさん
2011/11/13(日) 02:46:52.160521デフォルトの名無しさん
2011/11/13(日) 03:05:26.23OOPの用語と重なっているからまぎらわしい
もちろんHaskellの型クラスがOOPのクラスとは全く異なる概念であることは
調べればすぐに理解できることだけど、
いざHaskellのFPとOOPを対比させた説明を始めようとすると、
いちいち「Haskellのクラスは...」と「OOPのクラスは...」というように修飾が必要
0522デフォルトの名無しさん
2011/11/13(日) 03:10:45.95オブジェクト指向プログラミング:筋悪だったのか?
http://www.infoq.com/jp/news/2010/07/objects-smalltalk-erlang
0523デフォルトの名無しさん
2011/11/13(日) 08:17:08.75Haskellの人でRubyに興味がある人はあんまりいない。
両方使えるならHaskell使うだろ。
つまりそういうことだ。
ちなみにRubyはListをmapしたらArrayになる。こんなのをほったらかし
たままで新しい構文がどうのこうの言っている。Rubyはオワコン
0524デフォルトの名無しさん
2011/11/13(日) 08:42:40.27は?京大なんて傲慢レポート何位だと思ってんだよ?
0525デフォルトの名無しさん
2011/11/13(日) 09:05:28.47> ちなみにRubyはListをmapしたらArrayになる。
どゆこと?
0526デフォルトの名無しさん
2011/11/13(日) 09:15:34.660527デフォルトの名無しさん
2011/11/13(日) 09:26:08.75Listと同じように扱えてmapを呼べるArrayはmapしてもArrayを返す
rb> a1 = [1, 2, 3]
=> [1, 2, 3]
rb> a1.class
=> Array
rb> a2 = a1.map{|e| e * 2 }
=> [2, 4, 6]
rb> a2.class
=> Array
なのでもう少し説明が欲しい
0528デフォルトの名無しさん
2011/11/13(日) 09:26:50.550529デフォルトの名無しさん
2011/11/13(日) 09:45:49.750530デフォルトの名無しさん
2011/11/13(日) 10:27:18.52そもそもRubyは関数型言語ではないんだよね
関数風の(=関数型言語スタイルの)プログラミングも可能だというだけで....
厳しく言えば、Rubyでは関数(メソッド)はファーストクラスじゃないし、
末尾再帰も最適化されないからすぐにスタックオーバーフローする
自分達の優位な土俵で下位レベルの言語をつかまえて、
自身の優越感に浸るとは、なんともはや心の狭い発想じゃないのかと思われ
そんなにもHaskellという言語に対して自信が無いの?
もっと胸を張ってもいいと思うんだけどなあ....
0531デフォルトの名無しさん
2011/11/13(日) 10:33:02.71末尾までちゃんとチョコが再帰してる
0532デフォルトの名無しさん
2011/11/14(月) 04:23:49.84>>473のどこから優越感が云々という話になるのか分からんのだが
Rubyは言語仕様を読むとけっこう滅茶苦茶、細部をつつくと大変な事になる言語だが
一方で、言語仕様の「良さ」で支持されてきた言語でもある
悪い意味じゃなくてHaskellとは対照的な感覚があると思うけど
0533デフォルトの名無しさん
2011/11/14(月) 08:04:23.97どこから473が出てきたのか分からんのだが
523は俺が読んでも酷いレスに思える
0534デフォルトの名無しさん
2011/11/14(月) 16:30:43.08Lisp対Haskell並に不毛な議論
最強を決めたいなら、とりあえずラムダ計算にしとけばいいよ
0535デフォルトの名無しさん
2011/11/14(月) 16:46:43.110536デフォルトの名無しさん
2011/11/14(月) 16:54:16.830537デフォルトの名無しさん
2011/11/14(月) 18:34:22.140538デフォルトの名無しさん
2011/11/14(月) 18:43:45.63何でHaskellやるの?教えて???
0539デフォルトの名無しさん
2011/11/14(月) 18:56:08.830540やんやん ◆yanyan72E.
2011/11/14(月) 21:07:35.07粋がって数学用語を多用するのがなんか鼻に付く。
0541デフォルトの名無しさん
2011/11/14(月) 21:10:21.000542デフォルトの名無しさん
2011/11/14(月) 21:18:39.79単純に楽しいから・・・かな
なぜか組み込み関数と同じもの自分で定義したり、+演算子と同じ機能定義しようとして数学の世界に片っぽ足を突っ込んで「おお!!これ、数学スレやLispスレで見たぞ!!大学数学を高卒なのに解いてる!!」とか、そんなことに興奮してるけど…
0543デフォルトの名無しさん
2011/11/14(月) 21:34:31.550544デフォルトの名無しさん
2011/11/14(月) 21:40:08.83証明するつもりなかったんだけどね…
単に+演算子と同じもの作りたかっただけだったのに、自然数から定義しなおす羽目になって、それがHaskellで動くもんだから、興奮しちゃうという…
0545デフォルトの名無しさん
2011/11/14(月) 22:04:22.81dpSwitch 関数が第1引数として適用する関数
forall sf . (a -> col sf -> col (b, sf))
これの sf はこの関数においてどのような役割を果たすのでしょうか
0546デフォルトの名無しさん
2011/11/14(月) 22:09:25.280547545
2011/11/14(月) 22:23:14.00質問がやや曖昧でした
> これの sf はこの関数においてどのような役割を果たすのでしょうか
これの sf は dpSwitch 関数おいてどのような役割を果たすのでしょうか
0548デフォルトの名無しさん
2011/11/14(月) 22:51:01.97楽しいとか病気かよ
数学やればいいじゃん
なんか モナドとか国論とかまじ意味不明
>>540 の言うとおり、花につくんですが
0549デフォルトの名無しさん
2011/11/14(月) 22:52:14.130550デフォルトの名無しさん
2011/11/14(月) 22:56:10.39”普通”のやつがなんか 数学とか知的ぶったりしてて気持ち悪い
花につく
本当に気持ち悪いよ
エジソンとか気取ってるのかな?
知的遊戯好きアピール ”パズル、知恵の輪、囲碁、将棋、Haskell、数学”
インテリジェンス気取りたいだけ
0551デフォルトの名無しさん
2011/11/14(月) 22:56:44.70まじ気持ち悪い
花につきます
以上
0552デフォルトの名無しさん
2011/11/14(月) 22:58:13.53窓ガラスぶち壊してくれてありがとう
汚れたスレになったから書き込みやすくなったよ
またよろしく
0553デフォルトの名無しさん
2011/11/14(月) 23:06:23.65ttp://www.haskell.org/haskellwiki/Rank-N_types
こことか型変数の全称量化について簡潔に書いてあるよ。
0554デフォルトの名無しさん
2011/11/14(月) 23:09:20.69>インテリジェンス気取りたいだけ
インテリゲンチャだろwwwwwwwwww
これでよろしい?
0555545
2011/11/14(月) 23:16:31.05forall sf . (a -> col sf -> col (b, sf))
これが返す値 col (b, sf) の sf は何に使われるのでしょうか
b は分かります
dpSwitch 関数が管理するシグナル関数の入力に使われるのですよね
でも dpSwitch 関数の残りの引数には sf 型は無いです
論文「The Yampa Arcade」を読むと、
そこでは dpSwitch 関数の第1引数として自作の route 関数を敵用させていますが、
この route 関数を見てもやはり sf の意味が分からないです
0556553
2011/11/15(火) 00:06:14.72ソースは見た?
今見てきたんだけど、内部での使われ方はそんな複雑じゃなかったよ。
sfはdpSwitchの第3引数として渡した関数に与える値を生成する為に使用されるSF a b型の値。
Yampaを知らんから適切な説明ができん。
0557デフォルトの名無しさん
2011/11/15(火) 01:16:49.61いや、自分、基本バカだから
数学やりたかったんじゃなくて、+演算子を自分で作りたかっただけだから
0558545
2011/11/15(火) 07:37:16.66私も一応ソースは見ましたが、私にはけっこう複雑でまだ計算を正しく追えていません
> sfはdpSwitchの第3引数として渡した関数に与える値を生成する為に使用されるSF a b型の値
ということは、SF a b型の値ではなくて SF b c 型の値ではないでしょうか
どちらにしても、それなら dpSwitch 関数が第1引数として適用する関数は
次のような型で良いはずです
a -> col (SF a b) -> col (b, (SF a b))
あるいは(もし私の認識の方が正しければ)、
a -> col (SF b c) -> col (b, (SF b c))
そうではなく、わざわざ forall を付けて汎用の sf 型としているからには、
シグナル関数以外のどのような型でも受け付けるという事ではないでしょうか
そう考えると、ではこの sf とはどのような意味を持つものなのか、疑問が沸きます
0559デフォルトの名無しさん
2011/11/15(火) 17:07:08.020560デフォルトの名無しさん
2011/11/15(火) 18:08:13.680561デフォルトの名無しさん
2011/11/15(火) 18:11:08.310562デフォルトの名無しさん
2011/11/15(火) 20:23:31.93扁桃体が直接口を利いてるようなものだな
0563デフォルトの名無しさん
2011/11/15(火) 21:36:19.06その前は大学には行かさんか。
0564デフォルトの名無しさん
2011/11/15(火) 22:53:30.310565デフォルトの名無しさん
2011/11/17(木) 10:46:12.880566デフォルトの名無しさん
2011/11/17(木) 16:27:25.00や め ろ
0567デフォルトの名無しさん
2011/11/17(木) 16:36:41.92天才でも馬鹿でもない=Haskell使ってるやつら
不良でもギャルでもヤクザでもない=パギャル、つっぱり、チンピラ ウザがられる
赤ちゃんでもない大人でもない=不細工な小学3年生 ポケモンでいうフシギソウ、カメール、リザード バッタでいう幼虫
Matzでもない小飼弾でもない=コガイよりつまらなくて、Matzより頭悪いHaskelやってるやつら
お前ら中途半端
中途半端は悪
なぜ悪か?悪いか答えてみてください 早く答えろ
ジャップ技術者=英語ができない、技術力も欧米以下、WEBサービスも微妙=中途半端
0568デフォルトの名無しさん
2011/11/17(木) 17:12:12.26じゃあ、俺の代わりにhaskellやってくれ
0569デフォルトの名無しさん
2011/11/17(木) 18:07:51.060570デフォルトの名無しさん
2011/11/17(木) 19:07:23.43おら、返事は?
お前も中途半端なのか?
中途半端を見下すってことは、お前は中途半端じゃないんだろ?
0571デフォルトの名無しさん
2011/11/17(木) 20:03:23.41>>567はツンデレだろ?
>>天才でも馬鹿でもない=Haskell使ってるやつら
「天才でも馬鹿でもない」のが世間の大半なんだから、567はHaskellerが実はメジャーだと言いたいんだよ。
シャイな奴だ。
0572デフォルトの名無しさん
2011/11/17(木) 21:00:04.720573デフォルトの名無しさん
2011/11/17(木) 21:07:59.170574デフォルトの名無しさん
2011/11/18(金) 07:38:08.92f x = x - 1
これをポイントフリーの無名関数で表現するのってどうやるんだっけ?
((-)1) これだと 1 - x になっちゃう
Enum クラスの関数 pred を使うしかない?
別にいいんだけど、マイナス演算子を使ってできなかったかなと思って
0575デフォルトの名無しさん
2011/11/18(金) 07:46:39.630576デフォルトの名無しさん
2011/11/18(金) 08:20:48.17がPreludeに定義されてる
f = subtract 1
0577デフォルトの名無しさん
2011/11/18(金) 10:27:44.65ねえ?なんでHaskellやるの?!!!?!?!?!
int a(x)
{
return x-1;
}
ねえ?!!?!!?!?!?これでできるじゃん
あほかよ
何でHaskell使ってそんなくだらない低レベルなことやってるの?
早く死ね中途半端
天才Haskell研究者でもないゴミ お前はただのヘラクレス本あがめてるニワカ
社内でHaskell Haskell!とかほざいて共感意識あげてる 底辺の馴れ合い
国論やってろよゴミ
お前がやってることはただの低レベルな意味がないこと
ただHaskellを触って 「本物のプログラマはHaskellを使う」という記事に自分を当てはめて優越感
にひたってるごみ?!?!?!?!?!
0578デフォルトの名無しさん
2011/11/18(金) 10:33:56.69なぜ返り値を int にしたの?
0579デフォルトの名無しさん
2011/11/18(金) 11:04:47.64あなたの発言は傾聴に値する.是非これからは鳥あるいはコテハンをつけて発言して欲しい.
0580デフォルトの名無しさん
2011/11/18(金) 12:02:18.38http://www.sampou.org/haskell/ipsj/のデモを動かしたくて
Haskell Platform 2011.2.0.1-x86_64.pkg
をインストール、.zshrcにexport PATH="~/Library/Haskell/bin:$PATH"追記
しかし、importを使ったプログラムが動きません。
$ ghci -v
Using binary package database: /Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d/package.cache
wired-in package ghc-prim mapped to ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba
wired-in package integer-gmp mapped to integer-gmp-0.2.0.3-298c59ba68b7aaa7e76ae5b1fe5e876e
wired-in package base mapped to base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76
wired-in package rts mapped to builtin_rts
wired-in package template-haskell mapped to template-haskell-2.5.0.0-b46cde34bfee890dc536d5be377e906f
wired-in package dph-seq not found.
wired-in package dph-par not found.
Hsc static flags: -static
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> :show packages
active package flags: none
$ghc-pkg check
$ghc-pkg recache
環境は10.6 Xcode 3.26 です。どなたかご教授お願いします。
0581デフォルトの名無しさん
2011/11/18(金) 12:24:03.450582デフォルトの名無しさん
2011/11/18(金) 12:29:56.15四角形をぐるぐるまわすを
$cat > main.hs
-- コピペ
$ghc -package GLUT main.hs
main.hs:11:9:
The last statement in a 'do' construct must be an expression:
rot <- newIORef 0.0 initialDisplayMode
$=
[RGBAMode, DoubleBuffered] initialWindowSize
$=
Size 640 480 createWindow "guruGuru" displayCallback
$=
display rot reshapeCallback
$=
Just reshape addTimerCallback timerInterval
$ timerProc (display rot) mainLoop display rot
ほかのものは
Failed, modules loaded:ほにゃらら
となってしまいます
0583デフォルトの名無しさん
2011/11/18(金) 12:42:38.02アドバイスありがと
なんかか昔、関数の中置化とかいろいろこねくり回してたら
いつのまにか減算関数が (-) を使って綺麗に作れたような気がしてたけど、
気のせいだったかも知れん
Prelude に定義されているということで、subtract を使うことにする
>>577
Yampa でゲーム作ってて、敵の体力を1減らす処理が必要だったんだ
べつに >>577 のような方法でも全く問題ないんだけど、
なんかもっとスマートに書ける方法があったような記憶があって、
でもどうしても思い出せないから質問してみた
こういう事、時々ある
教えてもった後で、なんでこんな事思い出せなかったんだろ、
分からなかったんだろって思うんだけどね
0584デフォルトの名無しさん
2011/11/18(金) 12:51:48.46GLUT必須みたいだけど、入ってる?
HaskellじゃなくてOS側に。
0585デフォルトの名無しさん
2011/11/18(金) 12:58:16.17入れてません
GLUTによる「手抜き」OpenGL入門
をみてXcodeに入ってると思っていました
(引文)
シンボリックリンクを張っておく必要があります.〜
この最後のシンボリックリンクを作成しない場合は, 以下のソースプログラムにおいて GL/glut.h ではなく GLUT/glut.h を #include するようにしてください (Mac OS X ではそうするのがスジでしょう).
が原因でしょうか
もっと調べてみます!
0586デフォルトの名無しさん
2011/11/18(金) 13:00:44.76すまない。実はMacはよくわからないが答えてるんだ。
.soがHaskell側で読み込まれてないのか?と思った。
そのシンボリックリンクは必須だと思うよ。
0587デフォルトの名無しさん
2011/11/18(金) 13:09:14.19手抜きってつけた理由は、指摘されたり 批判されたとき
「手抜き」って書いてあるだろwww
っていうため
言い訳なんだよ
0588デフォルトの名無しさん
2011/11/18(金) 13:10:07.41セコイヤチョコレート
0589デフォルトの名無しさん
2011/11/18(金) 13:49:38.06なんでって、haskellスレだからに決まってるだろ。
0590デフォルトの名無しさん
2011/11/18(金) 15:12:59.98コマンドライン引数から盤面の大きさやコマの数のパラメータを渡せるようにしてやろうしています。
http://haskell.org/ghc/docs/7.0-latest/html/libraries/index.html
のそれらしい所をあたったりggったりして色々調べているのですが
取り合えずSystem.Environment.getArgsというものがつかえそうだ
と言う所がわかったまででとまっています
皆さん必要なライブラリ関数を探すときはどうやって探しているんですか?
0591デフォルトの名無しさん
2011/11/18(金) 15:24:22.14とりあえずググり、それからhackageとかで探してる。
標準ライブラリは何回も見てるうちに勘が働くようになる。
0592デフォルトの名無しさん
2011/11/18(金) 15:49:14.030593デフォルトの名無しさん
2011/11/18(金) 16:09:01.37Environment とか Args とかは色々な意味で使うから検索しにくい。
System に属しているからわかるっちゃわかるけど、
getArgs は getCommandLine とかの方が探しやすいんじゃないかと思った。
まぁ、それも慣れか。
0594デフォルトの名無しさん
2011/11/19(土) 02:16:47.63getContentsってのはどうかと思うの。
0595デフォルトの名無しさん
2011/11/19(土) 02:25:51.090596デフォルトの名無しさん
2011/11/19(土) 10:36:20.00tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけどWEB業界で有名らしいね
動画ありませんか?
0597増田
2011/11/19(土) 17:53:33.65ハッカーの大会 CTF Defconで優勝したチーム
知らないなら帰っていい
malaなら勝てるかもしれない
君たちじゃ無理
君たちは本当に生産性のないことしてるね
なにが + を自作したいだよ
君たち本当に脳みそ使い方間違えてるね
Haskellとか言ってる連中よりセキュリティストのほうがマジすげーわ
じゃなあカーーーーーーーーース
お前らでてみろよw Haskellがいかにクズで役にたたねーかわかるからw
ボコボコだぜお前らなんて
真のインテリゲンチャの集いだから
0598デフォルトの名無しさん
2011/11/19(土) 18:49:27.300599デフォルトの名無しさん
2011/11/19(土) 19:25:01.74これ?
マスコミが書かない「DEFCON CTF」
http://blog.f-secure.jp/archives/50623876.html
通りで日本人が知らないわけだな。
とりあえず、コテつけてください。
0600デフォルトの名無しさん
2011/11/19(土) 19:32:00.090601デフォルトの名無しさん
2011/11/19(土) 19:56:33.30あなたの発言は傾聴に値する.是非これからは鳥あるいはコテハンをつけて発言して欲しい.
0602デフォルトの名無しさん
2011/11/19(土) 21:40:31.390603デフォルトの名無しさん
2011/11/20(日) 20:34:07.68Hack In The Box
HITBなw
0604デフォルトの名無しさん
2011/11/22(火) 12:56:10.350605デフォルトの名無しさん
2011/11/22(火) 13:35:30.96>>586
解決しました
インデントとwindow初期化に問題があったようです
0606デフォルトの名無しさん
2011/11/26(土) 00:31:01.410607デフォルトの名無しさん
2011/11/26(土) 08:17:29.420608デフォルトの名無しさん
2011/11/26(土) 08:54:38.72爽やかな土曜の朝に一曲どうぞ
http://www.youtube.com/watch?v=HTN6Du3MCgI
0609デフォルトの名無しさん
2011/11/27(日) 03:51:58.410610デフォルトの名無しさん
2011/11/28(月) 19:21:31.130611デフォルトの名無しさん
2011/11/28(月) 19:51:34.45具体的にどういう処理をするのが型検査なの?
0612デフォルトの名無しさん
2011/11/28(月) 20:35:18.62有限時間内に終わることを期待しないならば同じものだと思う
0613デフォルトの名無しさん
2011/11/28(月) 23:57:50.74同じというような話しを又聞きした
0614デフォルトの名無しさん
2011/11/29(火) 18:40:40.43「……それって、女の子だけなのか?」
「え?」
「お前、可愛いな」
「何の話だ」
「とぼけるお前も可愛い」
「だから何の話だ」
「マジで可愛い……」
「やめろ……」
「嫌がる姿も可愛いなあ……」
「やめろ!」
0615デフォルトの名無しさん
2011/11/29(火) 21:11:17.76http://img.pics.livedoor.com/011/7/b/7b93db5444cf92f7cc91-LL.JPG
http://img.pics.livedoor.com/011/3/7/37af7e092c96cad7b14f-LL.JPG
http://img.pics.livedoor.com/012/5/1/51bc3004b6b4ec99063a-LL.JPG
http://img.pics.livedoor.com/012/a/6/a6cf04c9fe815ad28228-LL.JPG
0616デフォルトの名無しさん
2011/11/29(火) 21:24:53.090617デフォルトの名無しさん
2011/11/29(火) 22:07:28.890618デフォルトの名無しさん
2011/11/29(火) 23:01:30.60行列とスカラーの積ってどうやるのでしょうか
0619デフォルトの名無しさん
2011/11/29(火) 23:11:22.90* 演算子を使ってできましたけど、なんか変です
ghci 上で
(3><3) [1.0 ..] * 3.0
これだとエラーです
3.0 の所で No instance for (Num (Vector a0)) と
No instance for (Container Vector a0)
でも
let m = (3><3) [1.0 ..]
m * 3.0
これだと問題なく意図通りの計算がされます
なんで?
0620デフォルトの名無しさん
2011/11/29(火) 23:13:02.310621デフォルトの名無しさん
2011/11/29(火) 23:25:20.10それでも同じエラーですね
というか、* 演算子よりも、関数 (3><3) を [1.0 ..] に適用する方が
優先順位が高いので、その括弧は計算順の指定としては意味が無いです
今気づきましたが、
Matrix Double や Matrix Float などの型を特定しないとダメでした
(3><3) [1.0 ..] * 3.0 :: Matrix Double
これ、出力されたエラーからは原因が分かりにくいですね
0622デフォルトの名無しさん
2011/11/29(火) 23:58:26.420623デフォルトの名無しさん
2011/11/30(水) 07:20:54.93そちらの方は括弧が必要ですよ
mapMatrix (3*) ((3><3) [1.0..])
あるいは $ 演算子
mapMatrix (3*) $ (3><3) [1.0..]
いずれにしても、問題は解決しました
0624デフォルトの名無しさん
2011/11/30(水) 07:33:42.39Matrix DoubleはNumでもFractionalでもねぇよって言われる
0625デフォルトの名無しさん
2011/11/30(水) 08:54:00.530626デフォルトの名無しさん
2011/11/30(水) 12:36:35.36そうなんですか
バージョンの違いですかね
私のは GHC 7.2.1、hmatrix 0.12.0.1 です
この環境において、ghci 上で >>621 ので通りました
(ちなみに、Numeric.LinearAlgebra モジュールをロードしておきました)
0627デフォルトの名無しさん
2011/12/01(木) 08:12:41.140628デフォルトの名無しさん
2011/12/01(木) 12:28:37.86(><) 3 3とかみてるとネットの暗号か何かに見える。
0629デフォルトの名無しさん
2011/12/01(木) 18:46:34.310630デフォルトの名無しさん
2011/12/01(木) 19:16:22.95今までアプリ作ってて Data.Bits のお世話になったことがない
0631デフォルトの名無しさん
2011/12/01(木) 19:34:11.240632デフォルトの名無しさん
2011/12/01(木) 21:16:47.24代数的データ型だと遅すぎるから手動でIntのビットフィールドに押し込めるとか
0633デフォルトの名無しさん
2011/12/01(木) 22:37:10.20遺伝アルゴリズムとか
0634デフォルトの名無しさん
2011/12/01(木) 22:48:12.00勉強以外で、専用ライブラリを使わずに自作する理由が特に見つからない
0635日系アメリカ人 ◆japYJPNx6A
2011/12/02(金) 00:05:27.78つまらないやつばっかり
0636デフォルトの名無しさん
2011/12/02(金) 08:37:29.940637デフォルトの名無しさん
2011/12/02(金) 11:30:31.05専用ライブラリが遅かったら?
0638デフォルトの名無しさん
2011/12/02(金) 12:34:38.78許容できる速度に達していないライブラリしか存在せず、
かつ、絶対に遺伝的アルゴリズムが必要なら何らかの方法で自作するしかない
しかし、FFI によって C のライブラリも使える中で、
専用ライブラリが問題になるほど遅い状況が考えにくいのだが、
そんな状況があったの?
0639デフォルトの名無しさん
2011/12/02(金) 12:59:59.60結果が出るのに何時間もかかるような大規模演算が必要な状況なら
ピンポイントでそういう部分がボトルネックになることが多いんだよ。
0640デフォルトの名無しさん
2011/12/02(金) 15:24:14.88救世主キタ━━(゚∀゚)━━!!!
0641デフォルトの名無しさん
2011/12/02(金) 17:55:57.58じゃあ、そういう部分だけ C 用の高速ライブラリを使えば良いのではないか?
探したことないから知らんが、商用とかではいくらでもあると思う
Data.Bits を使う理由がないな
0642デフォルトの名無しさん
2011/12/02(金) 18:01:00.24ああ、Data.Bitsの話だったか。
0643デフォルトの名無しさん
2011/12/02(金) 18:01:55.830644デフォルトの名無しさん
2011/12/02(金) 18:11:55.42大抵Haskell内部でもチューニングしやすいと思う
「ボトルネックだけCで書いて最適化」って良く言われるけど成功したことがない
コードの大部分を最適化のためにC++で書き直したことならあるけど
0645デフォルトの名無しさん
2011/12/02(金) 19:01:57.22初めは処理は遅いわ、メモリは食うわでとてもシミュできなかった
ボトルネックを探したら、行列演算の部分がヤバイ感じだったから、
その部分だけ hmatrix(つまり LPACK)に変えた
そしたら、笑っちゃうほど速くなって、メモリ使用量も適正になった
知識が増えた今なら、All Haskell の行列演算ももう少し速くできそうだが、
それでも、やはりそういう部分は素直に他言語用ライブラリを使った方が良い
特に、Haskell(関数型)らしい適切なラッパーが用意されているのなら、
迷わず使うべきだよ
0646デフォルトの名無しさん
2011/12/02(金) 19:09:51.600647日系アメリカ人 ◆japYJPNx6A
2011/12/02(金) 21:04:22.550648デフォルトの名無しさん
2011/12/02(金) 21:09:26.580649デフォルトの名無しさん
2011/12/03(土) 02:51:07.16とhaskell初心者 orz...
0650日系アメリカ人 ◆japYJPNx6A
2011/12/03(土) 09:23:15.48自分で動作チェックする程度のプログラムだから別にいい
意味がわからない
なぜHaskellをやるのか
早く死ねよ??・!?!お願い死んで
0651デフォルトの名無しさん
2011/12/03(土) 09:27:23.33ttp://www.nisseikyo.or.jp/ 最寄りのところを探して検診してきたほうがいいよ。
こっちでいろいろ煽ってくださいよー
http://hibari.2ch.net/test/read.cgi/tech/1322562648/
0653日系アメリカ人 ◆japuuq4c3Y
2011/12/03(土) 19:42:53.36Haskellやっても天才数学者とかがいるわけでもない
ゴミ
カスに等しい国=Japan
0654デフォルトの名無しさん
2011/12/03(土) 21:42:14.87>>652
0655デフォルトの名無しさん
2011/12/04(日) 00:30:55.46早朝からそれしか書くことないのか
0656デフォルトの名無しさん
2011/12/04(日) 23:51:53.72英語でもOK
ここ以外で(ここが良くないという意味ではなくて、他にもないかという意味)
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
0657デフォルトの名無しさん
2011/12/07(水) 19:40:29.44大丈夫!ハードウェアが進化していくからo(^-^)o
0658デフォルトの名無しさん
2011/12/08(木) 01:41:47.780659デフォルトの名無しさん
2011/12/08(木) 18:55:56.10http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
更新は毎月第1水曜日(1月のみ第2水曜日)は消しても良いと思う
0660デフォルトの名無しさん
2011/12/08(木) 21:32:34.36http://blog.livedoor.jp/dankogai/archives/51733482.html
北畠徹也氏が代表の「テラ・インターナショナル」がPerlを勝手に商標登録
>>この北畠って人は、ツイッターとかでも自殺するって言って話題になったり
よく分からないNPOか何かに募金をしてくれってメールを数万人規模のMLに流したり
それらは実はチョットした技術的ミスだって釈明してたりする人らしいね
Tetsuya_K 北畠徹也
@dankogai の家に電話したら、「小飼弾は死にました」らしい。ざまみろ。ざまみろ。というか、死んだ方が社会にとって幸せ。以上。# どうでもいいが、jcode.plなんて簡単につくれるじゃろ。あんなので調子に乗るアホもどうかしてるぜ。
Tetsuya_K 北畠徹也
I compared my @klout with @dankogai, how does your @klout compare? klout.com/user/dankogai/… @Tetsuya_K に比べたら全く大したことねーな。大口叩く愚か者が。
コメントの一覧
「みんなおもしろいおもしろいいってるけど北畠さん完全にかわいそうな精神病の患者ですよね」
「コメント欄が病的で怖い。人格が分裂してる?」
「本当に何がしたかったんだろう・・・」
「無事取り消されたそうで。本当によかった。」
0661デフォルトの名無しさん
2011/12/08(木) 21:42:23.600662デフォルトの名無しさん
2011/12/08(木) 21:49:10.680663デフォルトの名無しさん
2011/12/09(金) 01:49:11.82純粋にHaskellの話してよ
0664デフォルトの名無しさん
2011/12/09(金) 13:41:34.980665デフォルトの名無しさん
2011/12/09(金) 17:02:50.08[1, 2, 3, 4, 5, ...] のようなリストを受け取って、
先頭から各要素までの総和のリスト [1, 3, 6, 10, 15, ...] を返す関数の上手い書き方ありますか?
0666デフォルトの名無しさん
2011/12/09(金) 17:10:54.870668デフォルトの名無しさん
2011/12/09(金) 17:51:36.87いいえ、ここで良いです
そのような下等な質問に文句があるというのなら
Haskell初心者質問スレを立てていない彼らにこそ非があります
堂々とここで質問なさい
0669デフォルトの名無しさん
2011/12/09(金) 18:27:59.930670デフォルトの名無しさん
2011/12/09(金) 18:31:27.74[3,1,4, ...] のような任意の整数のリストを受け取って、
各要素の階乗のリストを、同じ階乗の計算を繰り返さずに計算する方法はありますか?
つまり、3!を計算した後で4!を計算する場合では
前回計算した3!の答えを使って4*3!=4*6=24
と計算するコード。
0671デフォルトの名無しさん
2011/12/09(金) 18:33:46.88欲しい機能から検察出来れば良いんだけど、皆さんはどうやってますか?
主な関数は覚えちゃってるのかな?
0672デフォルトの名無しさん
2011/12/09(金) 18:35:16.11factorials = scanl (*) 1 [1..]
f :: [Int] -> [Integer]
f = map (factorials!!)
(!!)でO(n)掛かるのが嫌ならリストじゃなくて木で持っておく必要がある
0673デフォルトの名無しさん
2011/12/09(金) 18:36:28.60Hoogleなら型から検索できる
しかしPreludeとData.Listくらいは使ってれば大部分覚えることになると思うけど
0675デフォルトの名無しさん
2011/12/09(金) 20:56:28.53階乗特有の性質を利用するのではなく、一般的に解決する方法のひとつとして
メモ化 memoization という方法もある
関数の一度計算した戻り値とその引数とを紐付けして記憶させておき、
次回同じ引数に同じ関数を適用した時、再計算する代わりに、
記憶しておいた戻り値を即座に返すメカニズム
正格的な方法、非正格的な方法、いろいろある
もし興味があるなら調べてみると良い
0676デフォルトの名無しさん
2011/12/09(金) 21:05:38.920677デフォルトの名無しさん
2011/12/09(金) 21:06:48.74レスありがとうございます。
Hoogle便利ですね。
自分で実装した機能が、ライブラリ関数数個の組み合わせで出来る事もあるので、
やっぱり主な関数は覚えちゃった方が良さそうですね。
0678デフォルトの名無しさん
2011/12/10(土) 13:46:56.31http://www.haskell.org/haskellwiki/Category:Tutorials
単なるチュートリアルページへのリンク集だが、数が豊富で結構使える
0679デフォルトの名無しさん
2011/12/10(土) 14:33:34.03「ソースへのリンクも付いたドキュメント」を生成して登録するには
どうすればいいのでしょうか
Cabal のコンフィグファイルに documentation:True を指定しただけでは、
ドキュメントはインストールされますが、ソースへのリンクは付きませんでした
0680デフォルトの名無しさん
2011/12/10(土) 14:34:00.51を繰り返してるわいはどれを見ればいいかな。HuttonのプログラミングHaskell本もあるからこれの方がいいかな
0681デフォルトの名無しさん
2011/12/10(土) 14:44:54.32それだけの情報では貴方が今Haskellで何ができるレベルなのか分からない
0682デフォルトの名無しさん
2011/12/10(土) 16:38:39.58でももう忘れかけてるから、また見て思い出して、あーこれこれ、はいはい、これね、って感じ。
表面的なことは理解したけど、浅いと思う。
0683デフォルトの名無しさん
2011/12/10(土) 16:44:52.76RWHを1章ずつ
0684デフォルトの名無しさん
2011/12/10(土) 16:55:27.75モナドも、学ばなければ先に進めない、理解しなければ問題が解決しない、
という時になるまで覚えようとする必要はない
使わなきゃどうせ忘れる
使ってるライブラリがやや古いが「Real World Haskell」見てアプリを作りながら、
内容がやや難しいが「Algorithms A Functional Programming Approach」や
「Pearls of Functional Algorithm Design」見て
関数型らしいアルゴリズムを体験するのが良いと思う
とにかく、表面的なことを理解したのなら、
後はもういっぱいいっぱいアプリを作れ(小粒でも大粒でも、トイでも本格的なものでも)
IOが必要になったら、それからIOを学べばいいし、
GUIが必要になったら、それからGUIを学べば良い
モナドについては、Haskellプログラミング的には
「ある演算ができる箱」でしかないことは自然に分かる
0685680
2011/12/10(土) 18:04:11.70今↓見てざっと思い出した。
http://d.hatena.ne.jp/ruicc/20100131/1264905896
じゃあここから何をしようか、いつまでも素数がどうのとか、リストを並べ替えて、とかじゃつまらないよ、って時のRWHかなあ。
あの本もあるんだけどw、話が無駄に長いのが難ですわ。
本当はリスティッシュな週末を過ごして、もっと身に染み込ませるべきなのかも知れませんが。
0686デフォルトの名無しさん
2011/12/10(土) 18:52:14.74ブロック崩しを作れ
0687デフォルトの名無しさん
2011/12/11(日) 01:53:45.51イテレーティ?
0688デフォルトの名無しさん
2011/12/11(日) 12:29:56.39だったらいいなあ。
仕方ないのでscalaをつかってるけど。
0689デフォルトの名無しさん
2011/12/11(日) 16:36:41.13cabal install の --package-db オプションで指定するパスの先には、
どのようなファイルが存在していればpackaheDBとして認識されるのでしょうか
0690日系アメリカ人 ◆japYJPNx6A
2011/12/11(日) 22:21:02.870691デフォルトの名無しさん
2011/12/12(月) 10:04:13.720692デフォルトの名無しさん
2011/12/12(月) 10:09:09.980693デフォルトの名無しさん
2011/12/12(月) 12:43:25.93例えば Conal Elliott のブログにあるトライ木を使ったメモ化
http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries
彼のブログには他にもメモ化に関するトピックが色々ある
http://conal.net/blog/tag/memoization
Haskell Wiki の解説
http://www.haskell.org/haskellwiki/Memoization
"haskell メモ化" や "haskell memoization" などで検索すればまだまだたくさんあるだろう
0694デフォルトの名無しさん
2011/12/12(月) 21:50:46.000695デフォルトの名無しさん
2011/12/12(月) 22:01:44.28>>693の一番上のリンクとか
0696デフォルトの名無しさん
2011/12/12(月) 22:02:39.89トップレベルにメモを置けば、ね
0697デフォルトの名無しさん
2011/12/12(月) 22:19:05.480698デフォルトの名無しさん
2011/12/12(月) 23:11:05.85そうやってモナドの階層がどんどん深くならない?
0699デフォルトの名無しさん
2011/12/12(月) 23:12:38.560700デフォルトの名無しさん
2011/12/12(月) 23:13:32.73関数的と手続き的の真ん中で、どっちつかずの中途半端な感じがする
Data.StateVar の方がまだ潔いし、見た目綺麗だし、使いやすい
手続き的だけど OpenGL のラッパなど広く使われてて、
もうほとんどデファクトスタンダードでしょ・・・ そこまでは普及してないか
0701デフォルトの名無しさん
2011/12/13(火) 00:04:26.95IORefやらReader/Writerやらで持ちまわるの
どっちが美しいのだろうか。
0702デフォルトの名無しさん
2011/12/13(火) 19:25:07.49純粋なメモ表はトップレベルに置いとけば素直だし簡単
0703デフォルトの名無しさん
2011/12/13(火) 21:51:02.26無限リストを使うとしても、どんな順序で関数を評価してもいいとか、どんな魔法なんだ。
0704デフォルトの名無しさん
2011/12/17(土) 04:42:28.690705デフォルトの名無しさん
2011/12/18(日) 00:06:43.11Haskell使いと違って
何がHaskellだよ
小さい黒い画面に計算結果表示させて俺ハッカーってドヤ顔してるレベル
ゲームとHaskellプログラムじゃ驚きも違う
見てビジュアル的
Haskellは何がすごいの? 意味がわからない 素人には見てて苦痛にしか思えない
どう凄いか素人たちにも教えてくれ!!
アホじゃん
ゲーム会社のやつは凄いと思う
あんな人間離れした
3Dグラフィック+C++プログラミング+サウンド
すべてを束ねるコンピューター技術者最強
最強だよ
そうおもわないかい?
0706デフォルトの名無しさん
2011/12/18(日) 00:09:00.06Haskell使いと違って
何がHaskellだよ
小さい黒い画面に計算結果表示させて俺ハッカーってドヤ顔してるレベル
ゲームとHaskellプログラムじゃ驚きも違う
見てビジュアル的
Haskellは何がぱねぇの? 意味がわからない 素人には見てて苦痛にしか思えない
どう凄いか素人たちにも教えてくれ!!
ぱねすぎる
何であんなにぱねぇんだろう
ぱねぇ
ぱねぇよ!?!?!?!!!!!!!!!!!!!!!!!!!!!!!!!
ぱねぇい!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ゲーム会社のやつはぱねぇと思う
あんな人間離れした
3Dグラフィック+C++プログラミング+サウンド
すべてを束ねるコンピューター技術者最強
最強だよ
そうおもわないかい?
「ゲーム」の作成技術がいくら高かろうと、最終目的が「ゲーム」にしか過ぎない点で、以下略
0708デフォルトの名無しさん
2011/12/18(日) 00:11:16.73Haskelha??マジ意味不明
0709デフォルトの名無しさん
2011/12/18(日) 00:13:35.520710デフォルトの名無しさん
2011/12/18(日) 00:45:37.22「自分の漠然とした感情は正しく、その合理的な理由は必ずどこかにあるはずだ」
「情報や知識は口を開けて待っていれば勝手に入ってくる」
この3つが揃うと、出所不明のデマは信じるわりに他人の話を聞かなくなる感じ。
0711デフォルトの名無しさん
2011/12/18(日) 01:10:36.930712デフォルトの名無しさん
2011/12/18(日) 01:52:22.20コンソールの文字コードを cp65001 (UTF-8) に変えて、
フォントも UTF-8 が表示できる [MS ゴシック] を使ってます
Haskell 関係無しに、コンソール上で type "ファイル名" とコマンドを打てば、
UTF-8 エンコードされた日本語テキストファイルは問題なく表示されます
この状態で ghci を立ち上げて、
s = "テスト" と記述された hs ファイルをロードし、
putStrLn s とすると、「テ・・ス・・ト・・」と表示されます
どうして余計な文字まで表示されるのでしょうか
ちなみに、実際のところ余計な文字は全角中点「・」ではなく「�」です
MSゴシックだとたまたま全角中点に見えるだけで、何か別の文字みたいです
[環境]
Windows 7
GHC 7.2.2
0713712
2011/12/18(日) 01:55:56.12> MSゴシックだとたまたま全角中点に見えるだけで、
すいません
コンソールの表示をよく見たら、全角ではなく「半角中点」に見えます
つまり 「テ・・ス・・ト・・」 と表示されているように見えます
0714デフォルトの名無しさん
2011/12/18(日) 06:36:54.72GUIも含めたアプリを作るのに、C++やJavaよりも生産性が高いの?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
0715デフォルトの名無しさん
2011/12/18(日) 07:54:03.360716デフォルトの名無しさん
2011/12/18(日) 07:56:42.82ドカタ乙
0717デフォルトの名無しさん
2011/12/18(日) 08:00:51.61HaskellでまともにGUIのガワが作れるようになるのはC++11がまともに使えるようになるよか遅いだろうね
0718デフォルトの名無しさん
2011/12/18(日) 10:49:28.17「自分の漠然とした感情は正しく、その合理的な理由は必ずどこかにあるはずだ」
「情報や知識は口を開けて待っていれば勝手に入ってくる」
この3つが揃うと、出所不明のデマは信じるわりに他人の話を聞かなくなる感じ。
「わからないことをわからないままにしたくないが、勉強も調べ物も一切したくない」
「自分の漠然とした感情は正しく、その合理的な理由は必ずどこかにあるはずだ」
「情報や知識は口を開けて待っていれば勝手に入ってくる」
この3つが揃うと、出所不明のデマは信じるわりに他人の話を聞かなくなる感じ。
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
0719デフォルトの名無しさん
2011/12/18(日) 11:01:23.60あとはIDEサポートがJava並になれば最強(typesafeが開発中らしい
0720デフォルトの名無しさん
2011/12/18(日) 17:07:32.03ゲームプログラミング界の巨人、Tim Sweeneyが「未来のゲーム開発テクノロジー」を語る
超並列処理、次世代のゲームグラフィックスはソフトウェアレンダリングに回帰する
http://game.watch.impress.co.jp/docs/20080911/epic.htm
抜粋
Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。
Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
0721デフォルトの名無しさん
2011/12/18(日) 17:15:56.340722デフォルトの名無しさん
2011/12/18(日) 17:37:09.59> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
まだまだドヤ顔するには早すぎるってことだなw
0723デフォルトの名無しさん
2011/12/18(日) 17:43:54.42顔真っ赤にするのはいいけどさ、GUI全盛のこの時代に、
Haskellプログラムのほとんどが文字列入出力だという
現実を直視しろ。
0724デフォルトの名無しさん
2011/12/18(日) 17:52:27.23底辺すぎる
0725デフォルトの名無しさん
2011/12/18(日) 18:03:04.05実際あのポトペタ環境の出来の良さだけは他に比肩するものがない
0726デフォルトの名無しさん
2011/12/18(日) 18:09:43.96議論に戻りたまえ
0727デフォルトの名無しさん
2011/12/18(日) 18:24:30.320728デフォルトの名無しさん
2011/12/18(日) 18:36:55.57関数型じゃなくても、大抵の言語はGUIに関してはVBやC#、Delphi・C++(Bilder)に劣る
MS(または円馬鹿出ろ)に気に入られるかどうかの問題
0729デフォルトの名無しさん
2011/12/18(日) 18:54:57.93VBにも劣るハスケルドカタは年収100万円を切っちゃうの?
かわいそう…
0730712
2011/12/18(日) 19:04:38.590731712
2011/12/18(日) 19:08:03.37一応あれから色々やってみて、wtiteFile など使えば、
UTF-8 でファイルに保存できることは確認しましたが、
それで済ますならコンソールをわざわざ UTF-8 に切り換えなくても良いわけで、
なんとかコンソールに普通に表示させたいです
0732デフォルトの名無しさん
2011/12/18(日) 19:13:52.020733デフォルトの名無しさん
2011/12/18(日) 19:20:21.47>>720の記事に載ってるとおり、今Haskell覚えるのは趣味や投資目的の意味合いが大きいしね
RubyやC#、Javaとかも、今でこそ仕事有るけど、出た当初は個人の趣味でしか無かった
記事抜粋
それにプラスして、Sweeney氏は現在のゲームプラットフォームハードウェアが複雑すぎることも指摘した。
もし、Sweeney氏のいう純粋関数型言語によるゲーム開発が実現したとして、それを基準とするならば、C++によるプログラム開発コストは、マルチスレッド版で2倍、
プレイステーション 3版において5倍、シェーダー言語で記述するGPGPU版において10倍かそれ以上にもなるという。2倍以上のコストはゲーム会社のビジネスにとって合理的とは言えない。
従って、6コア、8コアどころでは済まないメニーコア世代のプラットフォームに備えて、ゲーム会社は開発基盤を備える必要がある。このような議論を踏まえた上で
、Sweeney氏は最後にこう述べた。「『Unreal Engine 3.0』の開発には3年の期間を要しました。そして、次世代のエンジンを開発するには5年くらいはかかるでしょう。
つまり、今年開発をはじめたなら、出荷可能になるのは2013年です。だから、今はじめるべきなのです。我々は既に、次世代への投資をはじめています」。
0734デフォルトの名無しさん
2011/12/18(日) 19:34:16.49本当にいそがしいな
0735デフォルトの名無しさん
2011/12/18(日) 20:12:01.15>>706見て、たまたま記事を思い出しただけだよ
もともと、自分がHaskellに興味持ったのもマルチスレッドプログラミングに向いてるってのが取っ掛かりだったしね
0736デフォルトの名無しさん
2011/12/18(日) 20:27:25.38もっと詳細を書いてくれないと、同じ環境で同じ問題にぶち当たった人しかアドバイスできないよ。
0737デフォルトの名無しさん
2011/12/18(日) 21:30:46.50こういうスクリプトもHaskellで書けるのだろうか。
javascript版をHaskellで書き直したというなら最高の釣りだなw
0738712
2011/12/18(日) 21:56:10.45すいません
まず最終的にやりたいことは、PostgreSQL に作ったテーブル内のデータが UTF-8 の日本語で、
その文字列データを取得してコマンドプロンプトに表示するプログラムをHaskellで作る
ということ
Haskell コード内でその文字列データ([Char] 型)を変数に束縛するとことは問題なくできた
というのも、その変数に System.IO.writeFile 関数を適用して得られたファイルを見ると、
正しく UTF-8 エンコードの日本語になっていたから
(当然だけど、writeFile の前に hSetEncoding 関数を utf8 に適用している)
コマンドプロンプトの方は、cmd.exe へのショートカットファイルのプロパティで
[オプション タブ]-[現在のコードページ] を "932" に、
[フォント タブ]-[フォント] を "MS ゴシック" に、
[ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe "/K chcp 65001" に設定
このプロパティでコマンドプロンプトを起動し、その上で ghci を立ち上げ、
自作の *.hs ファイルをロードして、関数を評価しているが、
先ほどの [Char] 型の変数を ghci 上で評価すると utf-8 文字がエスケープされる
( ascii 文字以外は \ マークと数字数桁で表示される)
同じ [Char] 型の変数に putStrLn 関数を適用すると、
>>712(正確には >>713)のように日本語部分だけ各日本語文字1字に対して
余計な文字が2つずつ後に付随してくる(まぁエスケープに比べて読めなくはない)
どうすれば、コマンドプロンプト(コンソール)に UTF-8 日本語を正しく表示できるのだろうか
上記の現象はデータベース処理とは関係なく、UTF-8 エンコードされた
Haskell プログラムが書かれたファイル内に直接 s="テスト" と書いて、
それを ghci 上で同じように評価したりしても再現できるため、
>>712 では現象再現のための最低限の情報だけで質問しました
0739712
2011/12/18(日) 21:58:27.43訂正
> [ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe "/K chcp 65001" に設定
[ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe /K chcp 65001" に設定
0740デフォルトの名無しさん
2011/12/19(月) 03:22:15.55他の言語でも似たようなことになった記憶が
申し訳ないがhaskellでの解決法は知らない
0741デフォルトの名無しさん
2011/12/19(月) 07:05:30.63自動でテンプレとかはHaskellだけじゃなく、関数型全体として得意分野だから、>>720の記事の企業が作ってても全く不思議じゃないな
0742デフォルトの名無しさん
2011/12/19(月) 14:54:36.00コマンドプロンプト開いて計算結果みせてみろよw
ガキ「なにこれ 意味不明」
大人「なんですかこれ DOS窓っていうやつですか? ハッカーですか?」
ゲーム開発者のほうが驚きや感動がすごいね
まじ君たち意味ないじゃん
なんかすげーでかいシステムとか 最適化 ノーベル賞とかもらってるわけじゃない
クソ研究しちゃって
頭大丈夫かよ病気かよ
0743デフォルトの名無しさん
2011/12/19(月) 15:00:20.08それ使ってインテリゲンチャ気取ってる天才でもないお前らはマジゴミのきわみ
お前らがHaskell使っても アルバイト以下の賃金量だろWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
ヘラクレス本片手に持って くそみてーな計算式
足し算とかモナドとかほざいちゃって
Macbook片手に持って 作ってもくだらねえ 計算式やHaskell GUI
そんなのVBでできますよ レベルの
まじごみなんじゃないんですかね ぱねえっす ぱねえ まじぱねえ
頭おかしい印ですか??
ぱねぇまじぱねぇ
0744デフォルトの名無しさん
2011/12/19(月) 15:05:56.650745デフォルトの名無しさん
2011/12/19(月) 15:12:24.76プログラミングの話をしないなら板違いなのでマ板行ってください
0746デフォルトの名無しさん
2011/12/19(月) 15:35:36.000747デフォルトの名無しさん
2011/12/19(月) 17:29:25.730748デフォルトの名無しさん
2011/12/19(月) 17:36:58.300749デフォルトの名無しさん
2011/12/19(月) 17:57:20.010750デフォルトの名無しさん
2011/12/19(月) 18:02:47.670751デフォルトの名無しさん
2011/12/19(月) 18:24:53.120752デフォルトの名無しさん
2011/12/19(月) 18:25:14.030753デフォルトの名無しさん
2011/12/19(月) 18:36:53.90作ってる奴いるか?
0755712
2011/12/19(月) 18:51:02.49そうですか
私も心が挫けそうで、もう諦め気味です
Windows 標準搭載のコマンドプロンプト以外のコンソールでもダメだったら諦めます
0756デフォルトの名無しさん
2011/12/19(月) 18:53:56.67「オレ的に、これだけはっていうコダワリがあるわけよ」というようなことを口走り、
「なめんじゃねーぞ、コノヤロ」とすぐに青筋を立て、「こんな日本に誰がした」というような他責的な文型でしか
ものごとを論じられない人は、ご本人はそれを「個性」だと思っているのであろうが、実は「よくある病気」なのである。
統合失調症の特徴はその「定型性」にある。
0757デフォルトの名無しさん
2011/12/19(月) 19:14:50.98あなたの発言は傾聴に値する.是非これからは鳥あるいはコテハンをつけて発言して欲しい.
0758yuitest
2011/12/19(月) 20:00:59.47742は主体
0759デフォルトの名無しさん
2011/12/20(火) 11:32:27.13ghc 7.0.4 で 7.2 ぢゃないんですね。
0760712
2011/12/20(火) 12:36:53.70base のバージョンとかコンパイル仕様の変更とか
0762やんやん ◆yanyan72E.
2011/12/20(火) 12:56:27.76陽性症状、陰性症状、人によって症状は様々。
精神医学の専門書の一つでも読んでからそういうこと言えよ。
大雑把にいえば、心の中の自分と他人の境界に穴が開く病気だ。
だから、自分が思っていることが人の声として幻聴で聞こえたりする。
0763デフォルトの名無しさん
2011/12/20(火) 13:35:49.93あれがそうだったのか・・・
0764デフォルトの名無しさん
2011/12/20(火) 13:50:48.26まだunicodeに対応できていないのでしょうか?
0765デフォルトの名無しさん
2011/12/20(火) 15:03:12.990766デフォルトの名無しさん
2011/12/20(火) 16:29:36.210767デフォルトの名無しさん
2011/12/20(火) 21:54:07.97listBは空でなく、順序は不明だがlistAの要素の連続になっている。
listAの要素であるxを渡された時、それがlistBと比較して前方にあるか
後方にあるか、それともlistBに含まれるかを判定したい。
例で書くと
listA = ["A","B","C","D","E",...]
listB = ["C","D","B"]
xが"E"なら、listBに含まれるB,C,Dに対して「後方」ということになる。
このとき、haskellらしい考え方だとどういうアプローチになる?
俺の手続き脳だと
1. xがlistBにあるかどうかを判別
2. xとlistBそれぞれの要素のlistA内での位置を調べる
3. 調べた位置を比較して「前方」「後方」を判定する
と考えたんだけど、ザ・手続きっぽくてダサいよなぁ、と思って。
0768デフォルトの名無しさん
2011/12/20(火) 22:49:41.06filter (flip all listB . (/=)) listA
0769デフォルトの名無しさん
2011/12/20(火) 22:52:12.320770デフォルトの名無しさん
2011/12/20(火) 22:55:42.52めっさ力技
data Pos = F | M | E deriving Show
getPos :: Eq a => [a] -> [a] -> a -> (Maybe Pos)
getPos listA listB = fmap f . (`lookup`listE) where
listC = map (`elem` listB) listA
listE = zip listA $ zip listC $ scanl1 (||) listC
f (True,_) = M
f (False,False) = F
f (False,True) = E
listA = [0,1,2,3,4]
listB = [2,3,1]
x=0
main = do
let g = getPos listA listB
print $ g 0
print $ g 1
print $ g 2
print $ g 3
print $ g 4
0771デフォルトの名無しさん
2011/12/20(火) 23:35:56.811. listAをlistA1 ++ [x] ++ listA2にわける
2. listA1とlistBのintersectionを取って判定
f listA listB x =
if y == 0 then 1 else if y == length listB then -1 else 0
where y = length $ takeWhile (/= x) listA `intersect` listB
0772デフォルトの名無しさん
2011/12/21(水) 01:20:13.13f listA listB x = (elem x as, elem x listB) where as = takeWhile (not.flip elem listB) listA
0773デフォルトの名無しさん
2011/12/21(水) 08:25:55.14(y == 0)のあとに(elem x listB)でもう一回場合分けが必要でない?
0774デフォルトの名無しさん
2011/12/21(水) 12:32:22.50元々4月の予定だったよな……
0775デフォルトの名無しさん
2011/12/21(水) 12:43:01.28たとえば1ヶ月後とかに自分が読んでも、あるいは他人が読んでも、
どんな計算をして答えを求めているのか簡単に分かるもんなの?
0776デフォルトの名無しさん
2011/12/21(水) 16:52:03.130777デフォルトの名無しさん
2011/12/21(水) 17:20:50.310778デフォルトの名無しさん
2011/12/21(水) 19:40:34.62data Where = Before | Here | After
whereIncluded :: (Eq a) => [a] -> [a] -> a -> Where
whereIncluded _ [] _ = After
whereIncluded (a:as) (b:bs) x
| x == b = Here
| x == a = if elem x bs then Here else Before
| otherwise = whereIncluded as bs x
[説明]
・listA と listB それぞれの head と x を比較する
・listB の head と x が同じなら、x は listB に含まれる
・そうではなく listA の head と x が同じ場合、
x が listB に含まれていなければ、x は後方にある
・どちらの head とも異なっていれば、両者の tail に対して同計算を繰り返す
・計算を繰り返した結果 listB の tail が空なら、x は後方にある
提示された条件を全て完全に満たすものとして式を書いたので、
エラー処理は省いてある
0779767
2011/12/21(水) 21:02:56.56まさかこんなに素早く返事があるとは思ってなくて
反応遅れました。すみません。
具体的なコード例までわざわざありがとうございます。
見事に誰一人としてelemIndexなんて使ってないですね……。
順序を調べる、という発想自体を捨てないと駄目だということが
よくわかりました。
>>775
個人的には770さんの例以外は見て何をしているかは
すぐ把握できました。
>>776
777さんが返してくれていますが、listAは整列とは限らないです。
listAの位置に基づいてlistBをソートすれば、listBは確かに連続
部分列になります。
というわけで、どうも皆さんありがとうございました。
0780デフォルトの名無しさん
2011/12/22(木) 05:28:49.45whereIncluded [1..6] [5] 4 = whereIncluded [2..6] [] 4 = After
0781デフォルトの名無しさん
2011/12/22(木) 07:22:14.40あぁなるほど、そうか
ちょっと修正案を考えてみる
0782778
2011/12/22(木) 07:52:15.94全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)
listA から x の位置を探す
x の位置の直後から
0783778
2011/12/22(木) 07:55:25.77>>780 に指摘されて修正案を考えてる時に、
全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)
listA から x の位置を探す
x の位置の直後から listB の要素数分の要素をリストとして取り出す listC
x が listB に無い場合、head listB が listC に有れば「前」
head listB が listC に無ければ「後ろ」
0784778
2011/12/22(木) 08:55:12.79訂正
> x の位置の直後から listB の要素数分の要素をリストとして取り出す listC
x の位置の直後から末端までをリストとして取り出す listC
0785778
2011/12/22(木) 12:54:37.61式にするとこんな感じ
whereIncluded :: (Eq a) => [a] -> [a] -> a -> Where
whereIncluded as bs@(b:_) x
| elem x bs = Here
| elem b as' = After
| otherwise = Before
where as' = takeWhile (/=x) as
ダサいかな
0786デフォルトの名無しさん
2011/12/22(木) 20:08:59.62random パッケージってデフォルトでは入ってないんだね
地味に驚いた
0787デフォルトの名無しさん
2011/12/22(木) 21:36:01.61http://www.haskell.org/haskellwiki/Introduction_to_QuickCheck
リファクタリング前は(インデントに全角スペースを入れた)、
getList = find 5 where
find 0 = return []
find n = do
ch <- getChar
if ch `elem` ['a'..'e'] then do
tl <- find (n-1)
return (ch : tl) else
find n
というコードなんだが、副作用がある処理と無い式とが混ざっててテストし難い
(また、全体の処理もぱっと見分かりにくい)
これがリファクタリングで次のようになる
getList :: IO [Char]
getList = fmap take5 getContents
take5 :: [Char] -> [Char]
take5 = take 5 . filter (`elem` ['a'..'e'])
ちょっと感動した
こういうことがサラっとできるようになりたいもんだ
0788デフォルトの名無しさん
2011/12/22(木) 21:56:17.350789デフォルトの名無しさん
2011/12/22(木) 22:55:08.110790デフォルトの名無しさん
2011/12/22(木) 22:59:36.720791デフォルトの名無しさん
2011/12/23(金) 10:28:44.71なんかいい例希望
モナドはものごと全部を抽象化するんじゃないよね?
0792デフォルトの名無しさん
2011/12/23(金) 10:30:00.160793デフォルトの名無しさん
2011/12/23(金) 12:02:29.11そうだな。なんでも抽象化できるんならこれまた意味不明になるし。
だいたい、何なんだよ抽象化って。
0794デフォルトの名無しさん
2011/12/23(金) 17:44:45.43具体例はControl.Monadとか見れば
0795デフォルトの名無しさん
2011/12/23(金) 17:52:14.34モナドで抽象する前と後とで何が変わるの?
0796デフォルトの名無しさん
2011/12/23(金) 18:06:55.650797デフォルトの名無しさん
2011/12/23(金) 18:16:45.13Control.Monadにあるようなものは抽象化できるし、
(Monad m) =>で書けなさそうなものは抽象化できない
言葉で言われて分かる類の問題じゃないから具体例を見たり書いたりして慣れるしかないよ
>モナドで抽象する前と後とで何が変わるの?
関数の型が変わって任意のモナドに対して使えるようになる。たとえば、
foreach :: [a] -> (a -> IO ()) -> IO () -- foreach xs f はxsの各要素に対してfを実行
をモナドに関して抽象化すれば、
forM_ :: (Monad m) => [a] -> (a -> m b) -> m ()
になって、IO以外でも使えるようになる
0798デフォルトの名無しさん
2011/12/23(金) 18:19:11.210799デフォルトの名無しさん
2011/12/23(金) 18:22:51.88http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
http://www.haskell.org/haskellwiki/Monads_as_containers
http://www.haskell.org/haskellwiki/Monads_as_computation
0800デフォルトの名無しさん
2011/12/23(金) 18:24:52.490801デフォルトの名無しさん
2011/12/23(金) 18:26:57.57サンクス
0802デフォルトの名無しさん
2011/12/23(金) 18:32:22.82それってオブジェクト指向でメソッドの引数の型を
IO型からObject型にするのと、どう違うの?
0803デフォルトの名無しさん
2011/12/23(金) 18:47:13.75bindとかreturnというメソッドを持ったIO型を一般化して、
Monadという抽象クラスから派生するようにしたら便利なのと一緒。
0804デフォルトの名無しさん
2011/12/23(金) 18:53:48.59色んなものの「共通する性質」や「共通する関係」を抜き出し、
具体的な実態では無くその性質や関係のみで以て語るのが「抽象化」だから、
抽象化するという意味は同じ
どう抽象化するかという点で、IO型からObject型へとMonadへとで違いがでる
Haskell のモナドは (m を Monad クラスのインスタンスとして)
forall a b. m a -> (a -> m b) -> m b
forall a b. m a -> m b -> m b
a -> m a
String -> m a
という4つの「演算で抽象化」してる(うち2つだけで十分だが)
特にモナド同士の演算がまたモナドになるという性質と、
モナドの外からはモナドの具体的な実態は見えないという性質が特徴的だから、
そういう性質が活かせるところでもてはやされる
オブジェクト指向のObject型がどういう性質の抽象化なのかは忘れた
0805デフォルトの名無しさん
2011/12/23(金) 18:59:26.870806デフォルトの名無しさん
2011/12/23(金) 19:27:53.45ありがとう。読んでみる。
0807デフォルトの名無しさん
2011/12/23(金) 19:37:49.40その例だと、内部でやってることもだいたい同じ
実際の型に応じて実装が選ばれる
実装を選ぶタイミングがコンパイル時か実行時かは違う
型クラスは ad-hoc polymorphism を使いやすくしたものでオーバーロードの親戚
OOPのほうはsubtype polymorphismといって、部分かなり違う部分がある
例えばsubtype relationが推移律をみたすみたいな強い性質がある
subtypeがあるとどうなるかは、Scalaが壮大な社会実験中
0808デフォルトの名無しさん
2011/12/23(金) 20:08:50.39interface Monadみたいの定義しないと
0809デフォルトの名無しさん
2011/12/23(金) 21:29:18.890810デフォルトの名無しさん
2011/12/23(金) 21:51:15.900811デフォルトの名無しさん
2011/12/23(金) 21:51:38.330812デフォルトの名無しさん
2011/12/23(金) 21:52:28.95ラムダ抽象の抽象?
0813デフォルトの名無しさん
2011/12/23(金) 21:58:23.43モナドの方が抽象度高いけど似たようなもん(だと思ってる)
0814デフォルトの名無しさん
2011/12/23(金) 21:59:35.27単なる抽象化とは違うだろ。
0815デフォルトの名無しさん
2011/12/23(金) 22:03:10.730816デフォルトの名無しさん
2011/12/23(金) 22:04:44.75【抽象化】対象から注目すべき要素を重点的に抜き出して他は無視すること。
0817デフォルトの名無しさん
2011/12/23(金) 22:14:01.930818デフォルトの名無しさん
2011/12/23(金) 22:21:35.790819デフォルトの名無しさん
2011/12/23(金) 22:31:42.28あのGoFのデザインパターンがその代表だが。
>>813
そうか。そうならデザインパターンと同じくつまらんものだ。
長くは続かん。
>>816 >>818
もっと乾いた理解をしないといかんのじゃないか?
0820デフォルトの名無しさん
2011/12/23(金) 22:43:16.57> そうか。そうならデザインパターンと同じくつまらんものだ。
> 長くは続かん。
2ch で質問して、たった1個のレスでそんなに早く結論を得た気になるなんて
ほんと馬鹿としか言いようがない
このまま行くと、お前は一生その考えなんだろうなぁ
0821デフォルトの名無しさん
2011/12/23(金) 22:45:15.160822デフォルトの名無しさん
2011/12/23(金) 23:03:06.920823デフォルトの名無しさん
2011/12/23(金) 23:04:36.282ch
0824デフォルトの名無しさん
2011/12/24(土) 00:21:37.64そうすれば理解する努力しなくていいから
0825デフォルトの名無しさん
2011/12/24(土) 00:50:28.050826デフォルトの名無しさん
2011/12/24(土) 05:44:34.49ありがとう。
でも、その理屈でIO()をモナドに抽象できるのだとすると、
「IO()で提供されていた種々の関数は全て、
モナドで提供されている演算子に置き換え可能である」
という前提条件が存在すると思うのだけど、どうだろう?
この条件が成立しないと、結局forallはIO()型の値を必要とするよね。
IO()をMonad m=>mで置き換え可能であるためには、forallを使っている
コードも含めて、IO()型に関連する「全ての関数」のモナド版を
用意してあげなくちゃいけないと思うのだけど。
0827デフォルトの名無しさん
2011/12/24(土) 08:41:32.68それが型クラスとそのインスタンス宣言の意味するところで、
この前提条件の表明がMonad m =>みたいな型シグニチャのコンテキスト。
0828デフォルトの名無しさん
2011/12/24(土) 08:55:33.85一般にその前提条件は成立しない。
0829デフォルトの名無しさん
2011/12/24(土) 11:15:48.48なんかタイムアウトしてしまうんだが。
取り急ぎ対応したいんだけど、ミラーとか指定できる?
0830デフォルトの名無しさん
2011/12/24(土) 11:20:48.100831デフォルトの名無しさん
2011/12/24(土) 11:24:36.08pingも帰ってこない。
0833デフォルトの名無しさん
2011/12/24(土) 13:24:10.630834デフォルトの名無しさん
2011/12/25(日) 03:51:05.99DNSサーバーをgoogle提供の8.8.8.8にしてみるとかどうだい。
/etc/hostsとかでipアドレス指定してもいいけど。
ほかの要因だったら、proxyかますとか。
0835デフォルトの名無しさん
2011/12/25(日) 10:41:23.310836デフォルトの名無しさん
2011/12/25(日) 11:41:56.880837デフォルトの名無しさん
2011/12/25(日) 12:07:45.950838デフォルトの名無しさん
2011/12/25(日) 18:07:33.55IO Monadをかぶせて副作用なし。
0839デフォルトの名無しさん
2011/12/25(日) 18:31:48.82なんか純粋な関数型言語にふつうのプログラミング言語ならふつうにできることを
組み込みたいという空気かなと思うが、あまりそう強調されてもいないようだし、
まず目的がようわからんわ。
抽象化とか言うけど、それはモナドに限らん関数型の特徴だと思うし。
だれかこういうのちょっと教えてくれんかなスマンが。
0840デフォルトの名無しさん
2011/12/25(日) 18:41:00.60具体的に訊いてくれ
純粋さを保ったまま入出力をする仕組みがHaskellにはあって、IOという名前の型が使われる
モナドというのはある種の型を抽象的に扱う枠組み
(どういう型をどうやって扱うのかは一言では説明できない)
で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)
で、モナドが知りたいの?IOが知りたいの?
0842デフォルトの名無しさん
2011/12/25(日) 18:51:02.480843デフォルトの名無しさん
2011/12/25(日) 19:00:41.020844デフォルトの名無しさん
2011/12/25(日) 19:03:59.38>>840
モナドでやりたいことは何なの?ってことなんだが。
関数型にどうのこうのって書いたんだが、そういう「目的」っていうの?
そういうのが知りたいんだが。
いろんなモナドがあるようなんで、それがわかいにくいんだが。
>>841
IOモナドはモナドのひとつじゃないん?
その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ?
純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの?
知りたいのはモナド。IOがその代表ならそれも知りたい。
>>842
それは型指定を工夫したらできるんじゃないん?
こんな質問じゃったんじゃが、みなスマンのう
0845デフォルトの名無しさん
2011/12/25(日) 19:04:09.30「A History of Haskell」の Section 7 に詳しく書かれている
http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/
0846デフォルトの名無しさん
2011/12/25(日) 19:05:37.16> で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)
なるほど。
いつまでもIOモナドは難しいと言われ続ける理由がわかったよ。
本当にIOモナドは「たまたま」モナドの枠組みに適合してるの?
わざわざモナドとしての宣言をしているのを「たまたま」というの?
わざわざ色々なIOをモナド則にあわせて整理して宣言しているのを
「たまたま」とか言って誤魔化しているわけでしょ。
学ぶ人達の能力を信用していないから、そうやって誤魔化すわけだ。
そうやって学ぶ人達を信用せずに、ありのままを伝えず、
取って着けたようなすぐバレるデッチアゲばかり言うから、
学ぶ人達はどの言葉を信用すればいいかわからなくなって、
「Haskellは難しい」という結論になっているんじゃないの?
>IOモナドはモナドのひとつじゃないん?
そうだよ
>その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ?
IOモナドがその仕組み。それ以外のモナドは全然別のことをする(構文解析とか)
>純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの?
副作用のある関数を一切使わずに入出力のあるプログラムが書ける
0848デフォルトの名無しさん
2011/12/25(日) 19:10:45.98{
nop
foo
bar
baz
nop
}
みたいなのを正しく扱うのに都合がいいということはわかる
0849デフォルトの名無しさん
2011/12/25(日) 19:12:41.64> 副作用のある関数を一切使わずに
ダウト。Haskell上の値としては副作用はないが、
裏でランタイムがちゃんと副作用を起こしている。
0850デフォルトの名無しさん
2011/12/25(日) 19:16:51.65モナドは副作用を保証してくれないから、
モナドだけではI/Oは不可能。
副作用をうまく取り扱うための枠組みを、
モナドは提供できているというだけの関係。
0851デフォルトの名無しさん
2011/12/25(日) 19:16:52.65「Haskell上の値としては副作用はない」というのを副作用が無いと認識している
Haskell プログラマは多いし、暗黙の了解になっていたりもする
なんか誤解してるような気がする
1. IOは、純粋さを保ったまま入出力するための型である
2. IOはMonadのインスタンスである
この二つの事実が両方成り立つのは別に必然ではないという意味で「たまたま」と言った
モナドにならない型で入出力を表現することはできる(ストリームIOとか)し、
入出力と関係ないモナドももちろんある
つまりHaskellの入出力を理解するのにモナドを知っている必要はないし、(助けにはなるが)
モナドを理解するのにIOを知っている必要もない(助けにはなるが)
0853デフォルトの名無しさん
2011/12/25(日) 19:16:55.59OCamlで実装されたHaskellインタプリタだったらそのHaskellは純粋ではないことになるのか?
0854デフォルトの名無しさん
2011/12/25(日) 19:17:44.83そこを気にするなら、「副作用のある関数」を
「呼ばれて評価されたときに副作用を起こす関数」と読み替えてくれ
0856デフォルトの名無しさん
2011/12/25(日) 19:21:55.56ありがと。ちょっと見てみるけどおれにはわからんだろな
>>846
怒らんで
>>847
>それ以外のモナドは全然別のことをする
うん。そのときの共通性っていうの?それが知りたいんやが
>副作用のある関数を一切使わずに入出力のあるプログラムが書ける
ほんま?そんなことできるわけないやろ。なんかトリックなんやろ?
0857デフォルトの名無しさん
2011/12/25(日) 19:25:40.76わ。レスポンスしたら他の兄さんらの難しい議論が始まって付いていけへん。
しばらく勉強や。
>うん。そのときの共通性っていうの?それが知りたいんやが
モナドの具体例(2〜3個)を知らない人に説明するのは難しい。俺にはできない
>ほんま?そんなことできるわけないやろ。なんかトリックなんやろ?
うん。おおさっぱに言うと、入出力をする関数がない代わりに、入出力をする変なもの(アクション)がある
関数とアクションは型が違うから、関数を見たらそれが入出力をしないことは保証されてる
0859デフォルトの名無しさん
2011/12/25(日) 19:32:00.64>副作用をうまく取り扱うための枠組みを、モナドは提供できている
どこで、なんで、それができてるんや?ちゅうのが知りたいんやな
0860デフォルトの名無しさん
2011/12/25(日) 19:39:14.42「俺は潔白だ」
というようなものだな。
MLのように自分が手を下した範囲をちゃんと自供するほうが
ずっと罪は軽い。
0861デフォルトの名無しさん
2011/12/25(日) 19:41:31.09∀ x :: IO a, ∃s.s' :: RealWorld. x s /= x s'について解釈することで参照透明性をもう少し厳密に言えないのかな
0862デフォルトの名無しさん
2011/12/25(日) 19:45:03.85IO a型の値をプリミティブにしたって良いし
実際にコードを読んだり(自動でも手動でも)最適化する場合に
直接手を下しているかどうかが重要になるんだから仕方ない
0864デフォルトの名無しさん
2011/12/25(日) 19:48:09.17使われている技法に共通構造を見出した。
それがどんな構造かってのは、数学分からない人には、絶対に演繹的に理解できないです。
数々のMonadを体得することで帰納的に理解してください。
帰納的な理解だから身体動かさないと無理です。
頑張ってMonad入門を読みこなして、さらにプログラムを書いてください。
0865デフォルトの名無しさん
2011/12/25(日) 20:02:04.020866デフォルトの名無しさん
2011/12/25(日) 20:21:29.09モナドを使ったIOの表現の方がシンプルで、処理を追いやすい
IOモナドが作られた理由はこれに尽きるだろ
0867デフォルトの名無しさん
2011/12/25(日) 20:21:39.10ああ、また見捨てられてしもた。いっつもこうや。わしに学がないばっかりに。
ふつうのプログラムはやってるから、あのIOやエラーは知ってるし、
Maybeなんちゅうのがあるらしいのも知ってるけど、そんなんじゃ
話がわからんちゅうこっちゃろな。
Monad入門ってどこにあるんですか?
今日は冷えるわ。
0868デフォルトの名無しさん
2011/12/25(日) 20:27:46.78問題意識がおもしろそう。
参照透明性が厳密に表現できると、モナドも厳密に表現できるのでは
という動機?
0869デフォルトの名無しさん
2011/12/25(日) 20:36:19.03特にボトムアップで理解したい人。実装について触れられてる。
http://haskell.org/haskellwiki/IO_inside
0870デフォルトの名無しさん
2011/12/25(日) 20:50:43.45俺も学の無い人間だけど、モナドはOOPでいうインターフェースに当たる型クラスって機能を使って構築されてるって言えば何をしたいものか大体わかる?
0871デフォルトの名無しさん
2011/12/25(日) 21:58:46.160872デフォルトの名無しさん
2011/12/25(日) 22:04:17.400874デフォルトの名無しさん
2011/12/25(日) 23:04:12.41Haskell でも MVC や Doc-View アーキテクチャが基本なの?
Model あるいは Doc の部分ってどうやって実装してる?
やっぱり IORef のようなミュータブルな IO モナドになっちゃうのかな
0876デフォルトの名無しさん
2011/12/25(日) 23:39:17.99>>867
Schemeになるが、Semantic Lego
http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.2885
0877デフォルトの名無しさん
2011/12/25(日) 23:46:03.80インストールする前に訊きたいんだが、
以前 windows 上で wxHaskell を使ってた時は、
ghci では動かせず、動作を試すのにいちいちコンパイルしてたんだ
今(ghc 7.2.2、wx-0.12.1.6)でもそうなの?
0878デフォルトの名無しさん
2011/12/26(月) 01:50:40.57モナドとモナド変換子を使ってプログラミング言語の意味を表現しておけば
そこからその言語のインタプリタを自動生成してくれるのか
0879デフォルトの名無しさん
2011/12/26(月) 10:20:49.85>モナドとモナド変換子を使ってプログラミング言語の意味を表現しておけば
>そこからその言語のインタプリタを自動生成してくれる
そりゃできるに決まってるよ、と思うのだが、そう思うのってあまりにdetailに
鈍感ってことかなあ?
ところで、このときモナドが本質的(モナドだからできる)ってことでもない
と思うのだが、どうですか?
0880デフォルトの名無しさん
2011/12/26(月) 10:31:03.06構文と意味を分離するのだから、モナドが相当本質的ではないの?
0881デフォルトの名無しさん
2011/12/26(月) 15:45:22.21面白かった。純粋な関数型のデータ構造を扱うための入門にも向いてるよ。
特に最後の2つの章がね。
ただの入門かと思ったけど、そうでもなかった感じがした。
もちろん、ちょっと話題になってるモナド変換子のことは現実世界Haskell
になってくる。でも、Learn you a Haskell~を2,3度読むと基礎は十分
じゃないかと思った。
ええ本ですわ。
0882デフォルトの名無しさん
2011/12/26(月) 15:51:58.71なにもかも他とは異質という印象があった。LispやSmalltalk,Prologと
は違うまた異質な世界。
でも、オブジェクト指向でやったほうが良いようなシミュレーションの問題
などは向いてないなと思った。Haskellでもできないことはないというのは、
ライブラリを探して、サンプルを見てたら分かるんだけど、無理矢理感が
拭えないな。
簡単なところを学んだあとに改めてHaskellというのを考えたけど、学んで
有益だったのか明確な答えがでなかった。
ここのベテランさん達はHaskellを学んで、そして実用的?に利用して何が良
かったと感じてますか?
0883デフォルトの名無しさん
2011/12/26(月) 15:52:52.020884デフォルトの名無しさん
2011/12/26(月) 15:54:03.410885デフォルトの名無しさん
2011/12/26(月) 20:04:36.55・便利な機能(というより、無いと苦痛な機能)が揃ってる
代数的データ型、型クラス、型推論、…
・構文が簡潔なので書いていて苦痛が少ない(括弧を閉じなくて良いのは大きい)
・静的な型
もっと地味に良いところはたくさん挙げれられる
GC、生ポインタ操作、パーサコンビネータ、ユーザレベルスレッド、並列処理、
do構文、where構文、純粋であること、末尾再帰の最適化、…
でも個人的な感覚としては、他の言語に比べて大きな欠点が少ないから使ってる
0886デフォルトの名無しさん
2011/12/26(月) 20:04:44.07問1. HaskellのタプルとLispのconsの共通点は何?
問2. その共通点は本質的なものか?
0887デフォルトの名無しさん
2011/12/26(月) 21:40:09.832時間たらずでそこまで理解できたなら大したもんだ。
自動生成というか、各プログラミング言語の概念(環境、ストア、継続)をモジュール化することで、
レゴのブロックのように意味の組み合わせが可能になる言語の枠組みとして使えるという内容。
いろんな先入観を払拭するのに最適だし。
残念ながら入出力については実装があたえられていないので、言語SLは実践的にはまったく使い物にならない。
逆に言えば、入出力をちゃんと理解して組み込めるようにすれば、実用的にも結構すごいことだと思う。
0888デフォルトの名無しさん
2011/12/26(月) 23:00:19.710889デフォルトの名無しさん
2011/12/26(月) 23:25:08.69そうですか。更に学べば面白いところありそうですね。:-)
>>886
自分が感じたのは、便利な小物扱いしてるところ。consを使ったもので
associate listというものがあるんだけど、その扱いと特に似てると感じた。
tupleは無名構造体という言い方をするとどこかで読んだことがあるけど、
もちろんtupleでリストを作るわけではないので違いは歩けd.
0890878
2011/12/26(月) 23:55:02.17俺がモナドをよく知らないから新鮮に思えるだけかも
>>887
説明ありがとう
Haskellerがモナドモナドうるさい理由がちょっと解ってきたよ
0891デフォルトの名無しさん
2011/12/27(火) 00:02:02.110892デフォルトの名無しさん
2011/12/27(火) 04:33:07.770893デフォルトの名無しさん
2011/12/27(火) 09:38:15.070894デフォルトの名無しさん
2011/12/27(火) 12:44:32.22>>884ではないけど、横レスしてみる
Lispのような動的型付け言語の場合、2つの要素から構成されるタプルと
リスト構成子である cons は同一であり、互いに置き換えることができる
Haskellのような静的型付け言語の場合、
タプルは直積構造であるから各要素のデータ型は互いに異なっていてもかまわないが、
リストにおいては各要素のデータ型は同一でなければならない
したがって、2要素のタプルとリスト構成子との間に互換性はない
0895デフォルトの名無しさん
2011/12/27(火) 13:38:57.620896デフォルトの名無しさん
2011/12/27(火) 19:54:07.22Control\Concurrent\STM.hs:0:4: lexical error (UTF-8 decoding error)
というエラーで止まってしまい、インストールできません
そもそも cabal の lexical error というのはどういう時に起こるのでしょうか
[環境]
GHC 7.2.2
cabal-install 0.10.2
Cabal library 1.10.2.0
0897896
2011/12/27(火) 23:18:53.79{-# LANGUAGE CPP #-}
たったこれだけ書かれた Test.hs ファイルを ghci 上でロードすると、
Test.hs:0:4: lexical error (UTF-8 decoding error)
Failed, modules loaded: none.
と表示されエラーとなりますが、エラーの意味が分かりません
{-# LANGUAGE Arrows #-}
例えばこれだけ書かれた Test.hs ファイルなら、普通にロードできます
これ GHC 7.2.2 のバグでしょうか
それとも意図された振る舞いなのでしょうか
後者なら、このエラーはどのような意味なのでしょうか
0898829
2011/12/28(水) 03:00:47.10原因はIPv6周りだったらしく、Ubuntuの設定をしたら直りました。
自分の対処法としては。参考にしたサイトとは若干違い。
/etc/ufw/ufw.conf にIPV6の記述がなかったので
IPV6=yesに。
/etc/NetworkManager/system-connections/Auto eth0の[ipv6]のmethodがignoreになっていたのを、
method=autoにそれぞれ変更し直りました。
参考にしたサイト
hackage.haskell.org に繋がるようになりました。 - sirocco の書いてもすぐに忘れるメモ
http://d.hatena.ne.jp/sirocco/20110905/1315255573
0899829
2011/12/28(水) 03:12:45.40ipv6の設定を変えてみてくれという返事が帰ってきました。なんか検索したらそういうものが見つかったとのこと。
ipv6の問題とか自分の身に降りかかってくるとは思ってなかったのでパニクリました。
向こう側がググったサイトは教えてくれない感じで、Windowsでの設定方法を教えますって言われたので、うは、逆にUbuntuでの設定方法を教えてくれwと思いながらWinじゃないので、と言ってとりあえず引き下がって自分で対処しようとすることに。
うわー、面倒くさそうと思って、プロバイダ側で何が引っかかったのだろうとぐぐってみたら1番上が思いっ切りUbuntuの人のページでしたw
ちなみにAndroidケータイがXperiaなんですが、それでもhackageのサイトに通じなかったので、ipv6の設定がどうかなってるんですかね。
Windowsでipv6とかgoogleのグローバル版で調べてみてもあまりipv6と関連した情報みたいなのは出てきませんが。
外人さんは困ったりしないんだろうか。全くよくわからないところです。日本人・日本語だと困ってる人が少し出てきましたね。
で、結局Ubuntuでipv6の設定しなおしたらなんで繋がるようになったのかは理解してません。w
どうしてなんでしょうか?
この方のところも参考にしました。
UbuntuでIPv6 - とある技術屋の戯言
http://www.sonorilo.net/2010/05/10/2730
0900デフォルトの名無しさん
2011/12/28(水) 07:16:43.530901896
2011/12/28(水) 07:35:30.95賢い人でしたら >>897 の問題分かるでしょうか
ちなみに、ghci -XCPP というオプションで ghci を起動させれば、
たとえ何も書かれていない空白の hs ファイルをロードしても、
全く同じ lexical error になります
0902デフォルトの名無しさん
2011/12/28(水) 07:47:55.90cpp -traditional Test.hs
の出力を見てみるとか
0903デフォルトの名無しさん
2011/12/28(水) 07:49:15.11ありがとうございます
0904896
2011/12/28(水) 07:54:57.28ありがとうございます
色々な ghc のバージョンで試す環境が作れたので、
丁度今試していたのですが、どうも 6.12.3 なら OK で
7.0.0 以上なら NG みたいなんです
もう仕事に向うので、帰宅したら cpp -traditional Test.hs の方を試してみます
0905896
2011/12/28(水) 19:09:32.91cpp -traditional Test.hs の結果が以下のように出力されました
-------------------------------
# 1 "Test.hs"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "Test.hs"
{-# LANGUAGE CPP #-}
-------------------------------
何か問題あるでしょうか
0906デフォルトの名無しさん
2011/12/28(水) 19:25:33.17わからん。念のためghci -v Test.hsをやってみて、
そこで出てきたプリプロセスコマンドをそのまま打ち込んでみたら出力はどうなる?
カレントディレクトリかテンポラリディレクトリのパスに日本語が入ってるとか
0907896
2011/12/28(水) 19:58:14.00*** C pre-processor: でプリプロセスコマンドが表示され、
その直後に次のように表示されて処理が止まります
ghc.exe: fd:5: hGetContents: invalid argument (invalid UTF-8 byte sequence)
ここで、[Ctrl+C] キーで処理を止めると Interrupted. と表示されてから、
いつもの ghci のプロンプトになります
Arrows 言語オプションだけを記述した Test.hs ファイルの場合は、
全く問題なく(処理は止まらず)いつもの ghci のプロンプトになります
*** C pre-processor: で表示されたプリプロセスコマンドは以下の通りです
(見やすさの為適当に改行を入れ、パスに本名がローマ字で入っているので伏せました
また、最後の -o の出力パスはテンポラリファイルなので適当に変えました)
-------------------------------
"Haskell Platform2011.4.0.0のフォルダ\lib\..\mingw\bin\gcc"
-E -undef -traditional -v
-I "Haskell Platform2011.4.0.0のフォルダ\lib\base-4.3.1.0\include"
-I "Haskell Platform2011.4.0.0のフォルダ\lib/include"
-D__GLASGOW_HASKELL__=700 -Dmingw32_BUILD_OS=1 -Di386_BUILD_ARCH=1
-Dmingw32_HOST_OS=1 -Di386_HOST_ARCH=1 -x c Test.hs -o out.hscpp
-------------------------------
このプリプロセスコマンドを実行してみたところ、
こちらは止まらず、また特にエラー報告もなく out.hscpp が出力されました
このファイルの内容は >>905 の結果の出力と同一です
どうも、この現象は私だけみたいですね
0909デフォルトの名無しさん
2011/12/28(水) 20:16:52.26暇だったからLANGUAGE CPPの方やってみたけど、問題なかった。当たり前か。ghciはversion 7.0.4でした。
変な制御文字でも埋まってるんじゃない?od -x -c Test.hsで見てみたら?
0910896
2011/12/28(水) 20:44:13.27od コマンドが無いんで(Windows 7 環境)適当なバイナリエディタで見てみた
-------------------------------
{-# LANGUAGE CPP #-}
-------------------------------
7B 2D 23 20 4C 41 4E 47 55 41 47 45 20 43 50 50 20 23 2D 7D
-------------------------------
全く問題ないですよね
とりあえず、問題の stm パッケージさえインストールできれば作業は進むから、
#ifdef __GLASGOW_HASKELL__ などのマクロを外して自力でプリプロセスしようと思います
ですが、ひとつ問題が
#if ! (MIN_VERSION_base(4,2,0))
これは今使ってる base のバージョンが例えば 4.3.1.0 の場合、
これと #endif で挟まれている部分のコードは生きるんですよね
0911896
2011/12/28(水) 21:41:55.67たとえ stm パッケージが無事インストールできても、
他の必要なパッケージで同じ問題が起きることに気づいた
もう OS 再インストールしか方法はないのかも知れん
0912896
2011/12/28(水) 21:59:15.96mingw-get-inst-20111118.exe をインストールしていたんだが、
これをアンインストールして、そのインストール先の mingw フォルダも全て削除したら、
何事も問題なく C のプリプロセッサ(CPP オプション)が使えるようになった
環境変数に mingw フォルダ内のどこかへのパスがあったわけでもないんだが、
なんでこれで解決するのか意味が分からない
GHC 内の mingw と干渉していたのではないかと思うが、
今まで普通に GHC と外部の mingw は共存できてたと思うんだが・・・
まぁいいや
お騒がせしました
0913デフォルトの名無しさん
2011/12/30(金) 15:54:38.200914デフォルトの名無しさん
2011/12/30(金) 17:05:32.280915デフォルトの名無しさん
2011/12/30(金) 17:09:47.040916デフォルトの名無しさん
2011/12/30(金) 17:30:27.490917896
2011/12/31(土) 11:39:52.12(dc は paint イベントのハンドラの第1引数 DC () 型)
drawText dc "abc" (Point 0 0)
[ textColor := green
, textBgcolor := blue
]
俺の予想だと、青色の背景に緑色の文字が表示されると思ってたんだ
でも実際は、透明の背景に青色の文字が表示される
これは正しい挙動なのか、それともバグなのか?
[環境]
OS : Windows7
GHC : 7.2.2
wxPack : 2.8.12.01
wx : 0.12.1.6
wxCore : 0.12.1.7
0918デフォルトの名無しさん
2011/12/31(土) 11:48:50.85wx的にはwxDC::setBackgroundMode()で挙動が変化したような?
0919デフォルトの名無しさん
2011/12/31(土) 13:36:42.19ありがと
ただ、残念なことに、今の wxHaskell では
DC の BackgroundMode を設定できないみたいだ
それらしい関数やプロパティが見当たらない
0920デフォルトの名無しさん
2011/12/31(土) 16:32:13.81http://hackage.haskell.org/packages/archive/wxcore/0.12.1.7/doc/html/Graphics-UI-WXCore-WxcClassesAL.html#v:dcSetBackgroundMode
0921デフォルトの名無しさん
2011/12/31(土) 18:43:32.49あ、なるほど dcSetBackgroundMode か
頭文字 s とか b で探してた
(部分一致とかで検索できないと不便だなぁ)
ありがと
0922デフォルトの名無しさん
2011/12/31(土) 19:26:08.59dcSetBackgroundMode 関数に 100(wxSOLID)を設定してみたところ、
文字の背景に色が付きました
しかし、これだけでは背景の色は真っ白でした
そこで、次の様にしてみたところ、意図通りの結果
背景が黒で文字が赤色になりました
withBrushStyle (brushSolid black) $ \b -> do
dcSetBackground dc b
dcSetBackgroundMode dc 100
dcSetTextForeground dc red
dcSetTextBackground dc black
drawText dc "abc" (Point 0 0) []
どうも、drawText 関数とか set 関数で設定する textColor や textBgcolor は
正しく反映されないみたいです
(textBgcolor が文字の色になり、textColor が反映されない?)
おかげさまで目的は達成できました、ありがとうございました
時間がとれたらバグ報告してみようと思います(英文作るのにかなり時間がかかるんで)
0923デフォルトの名無しさん
2011/12/31(土) 23:24:55.57来Haskellは更に良いHaskellになるよう祈ってます。
0924デフォルトの名無しさん
2012/01/01(日) 00:00:43.170925デフォルトの名無しさん
2012/01/01(日) 21:54:51.56と思ってちょっと調べていたんだが、もうとっくの前に情報処理上で和田英一
さんが喝破しているじゃないか。やっぱりモナドなんて騒ぐほどのものじゃねえよ!
「関数プログラミングの泣き所は入出力を含む副作用である。...Haskellは
シリアルに計算を進めるメカニズムのmonadを考案し、これを解決したと言っ
ているが、関数型を一部手放したと言うべきであろう。Lispにも最初からprog
があった。」
0926デフォルトの名無しさん
2012/01/01(日) 22:18:00.730927デフォルトの名無しさん
2012/01/01(日) 22:30:27.00「関数型を手放した」というのは意味不明だし、
モナドとIOを区別してないのは(言いたいことは分からんでもないが)雑な議論
0928デフォルトの名無しさん
2012/01/01(日) 22:36:12.24モナドとIOなんて同じようなもんなのだろう
達観してる
0929デフォルトの名無しさん
2012/01/01(日) 22:39:50.46やみくもに理解・学習しようとするだけでなく、理解・学習に値する事か
どうかも時々気にしておいた方がいいよ。
0930デフォルトの名無しさん
2012/01/01(日) 22:40:05.36キーボードは良いけど発言はいただけないな
0931デフォルトの名無しさん
2012/01/01(日) 22:45:22.74お前、自分の考えは言わないのな
0932デフォルトの名無しさん
2012/01/01(日) 22:49:34.63できる。いずれ時がたつと後者に収斂する。
0933デフォルトの名無しさん
2012/01/01(日) 22:55:26.90あなたはモナドを発明した人かそれとも学習しつつある人か
0934デフォルトの名無しさん
2012/01/01(日) 22:56:07.140935デフォルトの名無しさん
2012/01/01(日) 23:00:33.34若い凡百のHaskellプログラマーの見解を聞くより、ずっと傾聴に
値する。
0936デフォルトの名無しさん
2012/01/01(日) 23:01:16.44モナドを発明した人ではないよ
学習しつつあるとは言えなくもない。別に積極的には学習してないが
0937デフォルトの名無しさん
2012/01/01(日) 23:16:32.98微分積分などの計算方法と違って、
モナドって発明というよりは発見なんじゃないか?
誰かは忘れたが、圏論の中でモナドの構造を見抜いた
違うか、ある共通の構造を見抜いて、それにモナドと名前を付けた
まぁその応用は発明に近いかも知れんが
Moggi氏が、言語の表示的意味論の構造を要素分解するのに、
そのモナドという眼鏡(見方・枠組み)が使えることを見いだした
で、Wadler氏が、表示的意味論に使えるのなら、
ある意味それに近い関数型言語にも利用できると閃いた
0938デフォルトの名無しさん
2012/01/02(月) 00:49:38.34発作起こしてないで読め>>925
0939デフォルトの名無しさん
2012/01/02(月) 02:01:59.64C言語で構造体と、それを引数として受ける関数などを作りました(*.h、*.c)
*.hsc ファイル内でそのヘッダファイルを include し、
C言語で定義したのと同じ構造のデータ型を定義しました
そして、Storable 型のインスタンス宣言の中で、
#size や #alignment マクロを使って
Storable.sizeOf や Storable.alignment を定義しました
(#alignment マクロは下記のサイトのものをそのまま使いました
http://stackoverflow.com/questions/8350706/how-do-i-find-the-alignment-value-when-defining-a-storable-instance
ghc 7.2.2 ですけど、まだ組み込みマクロではないようですね)
そのあと、ghc2hs コマンドで *.hsc から *.hs を生成し、
また *.c をコンパイルして *.o を生成し、
それらを一緒に ghc でビルドしようと思います
(まぁ実際は、*.c のまま ghc に一緒に放り込んでも良いわけですが)
そこで質問なのですが、この場合、
*.c は ghc 付属の gcc、あるいは別に用意した同Var.の gcc でコンパイルしないと、
構造体のメモリマップが ghc2hs の解釈と(理論上は)合わないと思うのですが、
この認識は間違ってないでしょうか
正確に言えば、ghc の -pgmc オプションで指定したC言語コンパイラ、
hsc2hs の --cc オプションで指定したC言語コンパイラ、
そして *.c をコンパイルしたC言語コンパイラ、
この3つのコンパイラが同じ物でないと危険なのではないでしょうか
(たまたま、VC++ のコンパイラなどとその辺りの仕様が同じ場合もあるでしょうが)
0940デフォルトの名無しさん
2012/01/02(月) 04:39:12.66そいつらも現場で役立たずであることには変わりない
0941デフォルトの名無しさん
2012/01/02(月) 04:47:38.34本当に良いのかどうか、今から考えた方が将来の為になると思われ。
0942デフォルトの名無しさん
2012/01/02(月) 04:55:48.51ただそれを楽しむだけ
ただ、それだけなのさ
0943デフォルトの名無しさん
2012/01/02(月) 08:20:03.67解けるときはどういう形で解けるんだ?
モナドはどこまでそれを解いたんだ?
0944デフォルトの名無しさん
2012/01/02(月) 08:36:01.55そっからだろ
0945デフォルトの名無しさん
2012/01/02(月) 08:54:08.83ListとIOとMaybeは大体同じだということがモナドによって示された
つまりListが問題ないなら副作用も問題ないしnullポインタも問題ないと思われる
0946デフォルトの名無しさん
2012/01/02(月) 09:33:13.900947デフォルトの名無しさん
2012/01/02(月) 10:49:17.93構造体のレイアウトは、コンパイラが違えば異なる可能性があるし
同じコンパイラでも、コンパイルオプションによっても変わる可能性がある
構造体のサイズやレイアウトに依存したコードは、比較的大きな危険をおかしている、と思っている
実際に問題が起ることは少ないと思うけど
0948デフォルトの名無しさん
2012/01/02(月) 11:36:03.29どう考えてもモグリだわw
0949デフォルトの名無しさん
2012/01/02(月) 11:37:17.46それ、MonadどころかLISPのS式の時点で示されてるじゃんw
0950デフォルトの名無しさん
2012/01/02(月) 11:54:20.89京都の先生にSICPの訳をdisられた疑惑が浮上して以来2chでの権威はストップ安です
0951デフォルトの名無しさん
2012/01/02(月) 12:19:02.82disられたってどういうこと?
0952デフォルトの名無しさん
2012/01/02(月) 12:26:28.49特にdoを使って書いてると手続き型とほとんど変わらんし、似たようなスパゲティ化もしやすいし。
0953デフォルトの名無しさん
2012/01/02(月) 12:30:08.48和田(笑)
0954デフォルトの名無しさん
2012/01/02(月) 12:54:56.37http://togetter.com/li/215803
ここにまとめられてる湯浅先生の発言を、
キチガイが拡大解釈して必死に広めてるだけ。
キチガイ死ねよ。
0955デフォルトの名無しさん
2012/01/02(月) 13:02:10.78こういう人は具体的に何故モグリなのか全然説明してくれないから説得力が全くない
権威主義の人って大体そんな感じ
0956デフォルトの名無しさん
2012/01/02(月) 13:29:14.03なんで自分で噂に根拠与えちゃってるの?
そのままほっとけば単なる噂ですんだのに。
0957デフォルトの名無しさん
2012/01/02(月) 13:43:07.49最近の関数型はだらだら引き伸ばしているだけ。
0958デフォルトの名無しさん
2012/01/02(月) 13:44:07.71根拠のない噂を広める罪がわからないゴミカスのようなキチガイは死ねよ。
0959デフォルトの名無しさん
2012/01/02(月) 14:06:34.63つまり、プログラマが式をどう考えるかや、コンパイラが式をどう扱うかではなく、
式をどう書くかによって関数型かそうでないかを判断しているのか、お前は
じゃあ、お前の言う関数型を捨てた書き方である
do {x <- getLine; putStr $ "> " ++ x}
これを
getLine >>= putStr . ("> " ++)
こう書いたら、関数型に戻るのか?
あともう一つ、本当にdo表記で似たようなスパゲティ化が起きやすいのか?
お前はdo表記で頻繁にスパゲティ化してしまっているのか?
スパゲティ化という事は、実行順序、Haskellなら計算順序が複雑に絡まるんだよな
それはdo表記だから絡まるのか? むしろdo表記の方が絡みにくくないか?
0960デフォルトの名無しさん
2012/01/02(月) 14:14:42.26前者に関しては、俺の感覚ではイエス。
後者に関しては俺の書き方が悪かった。
手続き的なコードが縦にダラダラ長くなるとぐちゃぐちゃに見えてキモいってだけなんだ。
0961デフォルトの名無しさん
2012/01/02(月) 14:27:45.340962デフォルトの名無しさん
2012/01/02(月) 14:33:23.75どんなもの達をもってきても、それらが「大体同じである」と見る視点はいくら
でも作れるわけだが、ListとIOとMaybeは大体同じだというモナドの視点はそんな
ナンセンスな視点ではないのだね?
0963デフォルトの名無しさん
2012/01/02(月) 15:05:16.12> そんなナンセンスな視点ではないのだね?
「そんな」がどんなのを指しているのか曖昧だな
もっとはっきりと言ってくれ
大体同じであるという視点はどのような集合に対しても適用できるけど、
「どう同じなのかが論理的に説明できる」ことと、
その視点が応用する上で「役に立つ」こと、
この2点が無いとせっかくの発見も後の時代まで残らない
モナドはとりあえず今のところ残ってる
0964デフォルトの名無しさん
2012/01/02(月) 15:12:39.30お前の手続き的なコードが縦に「ダラダラ長くなる」原因は何だ?
それはdo表記のせいなのか?
お前はもしかして、自分のコードがdo表記で縦にダラダラ長くなったら、
その原因がdo表記にあると考えて、getLine >>= putStr . ("> " ++)
みたいな表記に直すのか?
それとも、キモいって言うだけで、後が続かず終わってるのか?
もし本当にそうなら、関数型や手続き型うんぬんの前に、
プログラムそのもの構造を学んだ方が良いぞ(SICP なんか読みやすくてお勧め)
0965デフォルトの名無しさん
2012/01/02(月) 15:26:49.59縦に長くならなくても、
do {x <- getLine; putStr $ "> " ++ x}
のxも、関数型からすれば嫌だろ。
0966デフォルトの名無しさん
2012/01/02(月) 15:37:53.22では構文的な構造が似ている
let x = 3 in f x
これも「関数型からすれば嫌」なのか?
0967デフォルトの名無しさん
2012/01/02(月) 15:53:19.26最初からモナドと言わずにリストと言えば通じやすかったと思うが。
0968デフォルトの名無しさん
2012/01/02(月) 16:15:00.92すまん、言わんとしていることがよく分からん
俺の発言の何に対する意見なんだ?
通じやすかったというのは世間にか? それともここ一連の会話の誰かにか?
前者なら最初から委員会の連中はリストはリストと言っている(モナドは後付け)
後者なら誰だよそんな事言ったの
俺は >>962 の
ListとIOとMaybeは大体同じだというモナドの視点はナンセンスかどうか、に対して、
モナドはどう同じなのかが論理的に説明できており、かつ役に立つ視点である、
だからナンセンスではない、という自分の考えを謂わば逆説的に述べただけだよ
0969デフォルトの名無しさん
2012/01/02(月) 16:34:00.46それはスーフリの方。
>>959
do表記は手続きっぽくなるから、スパゲティーメイカーになりやすいかも。
スパゲティーにするならせめてカルボナーラかミートソースにしてくれよ。
0970デフォルトの名無しさん
2012/01/02(月) 16:36:45.39ちゃんと自分の言葉で説明できるか?
0971デフォルトの名無しさん
2012/01/02(月) 16:39:56.99俺の方が曖昧な言い方ですまんかった。
まず通じやすかったというのは世間に対してという意味だった。
「ListとIOとMaybeは大体同じだ」というときの共通性が、言ってしまえばリスト化
(多元化)にあるのだとすれば、モナドなどというよりリストと言った方が
伝わり易いと思ったわけだ。また曖昧なこと言ったかな。
(ナンセンスうんぬんの方はもういいよ)
0972デフォルトの名無しさん
2012/01/02(月) 16:57:05.72あぁ、なるほどな
> 「ListとIOとMaybeは大体同じだ」というときの共通性が、
> 言ってしまえばリスト化(多元化)にあるのだとすれば、
そう解釈してしまったのなら、
> モナドなどというよりリストと言った方が伝わり易いと思ったわけだ。
と言うのも十分に分かる、というか当然の反応だ
ただ残念ながら、少なくとも「それらに見いだした共通性はリスト化だ」
という解釈に関しては間違っている(多元化の意味は分からんが)
Wadler氏が List、IO、Maybeなどにどのような共通性を感じたのかは
Monad型クラスの関数に間接的に表れてはいるが、俺の力ではとても一言で言えない
それこそちゃんと知るには彼の論文や基になったMoggi氏の論文を読まないといけない
ただ、一般的なプログラマには「Monad型クラスの関数がモナドに共通する構造だ」
と言いうだけで応用上は十分だと思う
その共通構造をモナドが応用される前のListやIOに見いだしたと言っていい
0973デフォルトの名無しさん
2012/01/02(月) 18:16:38.74よくわかってないが、非決定計算、副作用、継続についてはMoggiの最初の論文の中で定式化されてる。
共通性といいたいところは多分普遍的性質のことだろうと思う。
普遍性の構造が共通している、というかそれぞれモナドで整理可能だからモナドなんだろう。
0974デフォルトの名無しさん
2012/01/02(月) 18:20:45.89デバッグが困難になる。
0975デフォルトの名無しさん
2012/01/02(月) 18:25:00.71普遍的性質って具体的には?
0976デフォルトの名無しさん
2012/01/02(月) 18:27:24.820977デフォルトの名無しさん
2012/01/02(月) 18:33:35.46ある一つの性質から全体の性質が定まることで、
モナドの場合はそれが入れ子状になっている、ようだ。
正直そんな説明できるほどわかってない。
0978デフォルトの名無しさん
2012/01/02(月) 18:46:14.03それは全く説明になっていないと思うぞ
>>970 が訊いているのは手続きっぽくなるとスパゲティになる理由だ
[1] 手続きっぽくなる --> [2] スパゲティになる
原因 [1] によって結果 [2] になることを筋道を立てて説明してほしいのだろう
しかし、デバッグが困難になるというのは、さらにその先の結果だ
[2] スパゲティになる --> [3] デバッグが困難になる
デバッグが困難になるからスパゲティになるのではない([3]-->[2])
スパゲティだからデバッグが困難になる([2]-->[3])
0979デフォルトの名無しさん
2012/01/02(月) 19:24:23.52フラクタル?
0980デフォルトの名無しさん
2012/01/02(月) 19:36:37.35飛躍してるように見えるがそれが結論だ。
0981デフォルトの名無しさん
2012/01/02(月) 19:49:15.510982デフォルトの名無しさん
2012/01/02(月) 19:52:21.42そういう方向には関与しないほうがいい。梯子はずしてくる人ばかりで構成されているから。
何事も普通の日常の出来事に置き換えて考えてみるべき。
日常の出来事として絶対おかしいと思うことなら、どのように脚色してもおかしい。
0983デフォルトの名無しさん
2012/01/02(月) 20:03:55.420984デフォルトの名無しさん
2012/01/02(月) 20:05:53.170985デフォルトの名無しさん
2012/01/02(月) 20:11:31.78もっと語ってくれないか。
そういう方向?梯子はずす?日常の出来事?
0986デフォルトの名無しさん
2012/01/02(月) 20:20:36.64勧誘系詐欺の大部分は友人や家族に自分が勧誘された内容を説明すると
途中で詐欺にあっていることに気づくそうだ。
閉じた環境でそれっぽくみえても実際まわりに説明して中身が無い、実効性がない
違和感が出るというか詐欺だと感じたらほぼ詐欺。
0987デフォルトの名無しさん
2012/01/02(月) 20:36:23.140988デフォルトの名無しさん
2012/01/02(月) 20:50:27.04詐欺?閉じた環境?
もう少し。
0989デフォルトの名無しさん
2012/01/02(月) 21:01:55.91これ以上はない、というか努力はわかるが聞き下手だな。
0990デフォルトの名無しさん
2012/01/02(月) 21:21:18.74きみが日常の出来事に照らして 0.999.... と 1 が同じではおかしいと感じるなら、
きみの解釈の世界ではそれが正しいのだろう
ただ残念ながら、一般に 0.999.... というのは
そういう数値そのものをダイレクトに表した記法ではない
0.999.... と続いて目指している目標となる数値を表している記法である
単に極限 lim を使った記法の構文糖衣(シンタックスシュガー)だ
ちなみに、0.999.... が目指している先はなんと 1 だったりする
0991デフォルトの名無しさん
2012/01/02(月) 21:30:57.750992デフォルトの名無しさん
2012/01/02(月) 21:47:58.61わかった、ことにするわ。
0993デフォルトの名無しさん
2012/01/02(月) 21:53:45.460994デフォルトの名無しさん
2012/01/02(月) 22:00:24.520995デフォルトの名無しさん
2012/01/02(月) 22:18:23.810996デフォルトの名無しさん
2012/01/02(月) 22:21:00.43http://toro.2ch.net/test/read.cgi/tech/1325510368/
馬鹿のゴミが入っちゃったけど、どうぞ
0997デフォルトの名無しさん
2012/01/03(火) 03:59:10.100998デフォルトの名無しさん
2012/01/03(火) 04:29:40.98え?原典辿らずにエラソー言ってドヤ顔してたわけ?馬鹿だろ。
0999デフォルトの名無しさん
2012/01/03(火) 04:33:37.91やっぱそうだよな。
関数型言語って、スパゲティになりやすい。
宣言的で1つ1つ完結しているから理解しやすいとか馬鹿が言うけど、
実際には宣言的だからこそスパゲッティコードになる。
1000デフォルトの名無しさん
2012/01/03(火) 04:34:20.3210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。