関数型プログラミング言語Haskell Part12
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/04/29(木) 19:15:28ttp://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/
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0002デフォルトの名無しさん
2010/04/29(木) 19:19:18・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
0003デフォルトの名無しさん
2010/04/29(木) 19:20:530004デフォルトの名無しさん
2010/04/29(木) 19:24:23・関数型言語Part5
ttp://pc12.2ch.net/test/read.cgi/tech/1252470706/
・【数学者】Haskellはクソ言語【オナニー】
ttp://pc11.2ch.net/test/read.cgi/tech/1128011645/
・純粋関数型言語Concurent Clean
ttp://pc11.2ch.net/test/read.cgi/tech/1075629340/
・関数型言語ML (SML, OCaml, etc.), Part 6
ttp://pc11.2ch.net/test/read.cgi/tech/1245017721/
・Lisp Scheme Part30
ttp://pc12.2ch.net/test/read.cgi/tech/1270897776/
・【入門】Common Lisp その7【質問よろず】
ttp://pc12.2ch.net/test/read.cgi/tech/1270370267/
・Emacs Lisp 3
ttp://pc11.2ch.net/test/read.cgi/tech/1191875993/
・【Lisp】プログラミング言語 Clojure【JVM】
ttp://pc12.2ch.net/test/read.cgi/tech/1255533519/
0005デフォルトの名無しさん
2010/04/29(木) 19:25:57ttp://pc12.2ch.net/test/read.cgi/tech/1186030985/
0006デフォルトの名無しさん
2010/04/29(木) 21:31:28Haskell: The Craft of Functional Programming
The Haskell School of Expression: Learning Functional Programming through Multimedia
The Haskell Road To Logic, Maths And Programming
洋書で分かりやすいのってどれですか?
0007デフォルトの名無しさん
2010/04/29(木) 21:35:360008デフォルトの名無しさん
2010/04/29(木) 21:41:11http://www.haskell.org/haskellwiki/Tutorials
この辺ですね? ↓とか楽しそう
http://learnyouahaskell.com/
0009デフォルトの名無しさん
2010/04/29(木) 21:55:18こここんなに人いたんだな
0010デフォルトの名無しさん
2010/04/29(木) 22:06:380011デフォルトの名無しさん
2010/04/29(木) 22:11:08あれはわかりやすいから普及したんだよ。
0012デフォルトの名無しさん
2010/04/29(木) 22:21:02まだやんのかw
>>7-8
ビデオも良いね
http://www.haskell.org/haskellwiki/Video_presentations
0013デフォルトの名無しさん
2010/04/29(木) 22:45:51分かりやすいの意味が分かりにくいが・・・
Craft の方は王道というか、全く持って普通の Haskell 本。
比較的広いトピックを丁寧に解説している。
教科書的で基礎がしっかり学べるから入門に良いと思う。
School は(ほぼ)グラフィックス処理を題材に
関数プログラミングのテクニックを解説している感じ。
だいたい、奇数章でテクニックの本質みたいなのを解説して、
偶数章でそれをグラフィックス処理に応用するみたいな。
ストリーミングの解説辺りから FRP が題材に出てきて面白い。
最後の方にロボット制御や音楽などが題材に出てくる。
Road は知らん。
PDF で読めるヤツとは違うものなんかな
0014デフォルトの名無しさん
2010/04/29(木) 23:24:36おっと、肝心の質問に答えてなかったな。
私にとっては Craft と School は理解し難くはなかった。
School の方が説明を端折ってる感は若干あった。
0015デフォルトの名無しさん
2010/04/29(木) 23:30:030016デフォルトの名無しさん
2010/04/29(木) 23:35:09> Haskellより
意味が分かりません。
明瞭な言葉で語ってください。
0017デフォルトの名無しさん
2010/04/29(木) 23:56:23Haskell でのプログラミング中に起きた問題の解決よりも、とか、
Haskell でプログラミングすることよりも、
という様な感じの意味だろ。
それくらい文脈を考慮して察してやれよ。
0018デフォルトの名無しさん
2010/04/30(金) 00:04:03THX
Craftかなとも思いますが、>>7のいうようにネット上のチュートリアルとか
リファレンスをまず漁ってみます
0019デフォルトの名無しさん
2010/04/30(金) 00:59:54もちろん練習も必要だが、その前にインプットだろ
0020デフォルトの名無しさん
2010/04/30(金) 01:01:46Craftは来年に新版が出る、かもしれない
0021デフォルトの名無しさん
2010/04/30(金) 01:08:03推薦図書スレへ帰れ
0022デフォルトの名無しさん
2010/04/30(金) 01:10:060023デフォルトの名無しさん
2010/04/30(金) 01:24:340024デフォルトの名無しさん
2010/04/30(金) 02:18:23どの人?
0025デフォルトの名無しさん
2010/04/30(金) 02:30:28知りたい項目を目次で調べてそのページを開いても、その章の始めの方の分かりづらい例題を理解して、さらに章をまたいで読まないといけない。
例えば「Doc」を調べようとして目次を開いたら267ページが出るけど、Docの説明があるのは結局117〜127ページで、JSONの例題の説明とPrettifyの説明も読まなければならない。
個人的には、この本じゃなくHaskellについてのことだけど、CやJavaから入った人には、やっぱり変数と関数がごっちゃになってるのは分かりにくい。
229ページの最後の行の liftP q f k w x y z とかシグネチャとの対応がどうなってるのか本を何分かにらまないと理解できない。
本が悪いというより、ただ単に、本をさくさく読みたい人向けの本じゃないってだけの話。
0026デフォルトの名無しさん
2010/04/30(金) 04:00:36・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
・問題を解くのが好きなだけで、プログラミングは大嫌いです。
・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
・パーザを書くのは苦手です。本当にダメなんです。今でもね。
・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。
0027デフォルトの名無しさん
2010/04/30(金) 05:40:06同意できるな
Haskellプログラマは最適化なんて興味ないだろ
仕様を記述できればいい
0028デフォルトの名無しさん
2010/04/30(金) 05:47:16GHCを作ったのも多数の開発者だな。
>・問題を解くのが好きなだけで、プログラミングは大嫌いです。
まさしくHaskellだな。
>・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
Haskellは再利用性が高いな
>・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
Haskellの本は少ないな
>・パーザを書くのは苦手です。本当にダメなんです。今でもね。
Parsecか
>・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
Haskellにはプログラミング言語の研究者が重要だという奴は何でもあるな。
>・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
理解できないな
>・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
俺の書いたHaskellプログラムもやっつけ仕事だな。スペースリークだらけだがnが小さいので問題ない
>・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
同意だな
>・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
俺もHaskellがあれば作る必要はないと思う
>・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。
まあ、Javaしかできない人よりはましだな
0029デフォルトの名無しさん
2010/04/30(金) 06:42:050030デフォルトの名無しさん
2010/05/01(土) 22:51:000031デフォルトの名無しさん
2010/05/01(土) 23:09:190032デフォルトの名無しさん
2010/05/02(日) 10:56:37余データ==プログラム
という意味合い?
0033デフォルトの名無しさん
2010/05/02(日) 12:03:280034デフォルトの名無しさん
2010/05/02(日) 12:33:18興味ある
0035デフォルトの名無しさん
2010/05/02(日) 14:05:03なんでそれがリストモナドとかと関係するのか全くわからなかったけど。
0036デフォルトの名無しさん
2010/05/02(日) 14:28:43データの双対
0037デフォルトの名無しさん
2010/05/02(日) 14:58:55ごめん、まだ分かんない・・・
ググってもなかなかそれらしい記事に当たらないし(キーワードがまずいのか)。
codata が class に相当するのだとしたら、data は何に相当するの?
そしてそれらは、どのような事柄に関して双対関係があるの?
0038デフォルトの名無しさん
2010/05/02(日) 15:14:27>そしてそれらは、どのような事柄に関して双対関係があるの?
それこそ自然な同型になるようにするためだろう。
じゃないと取り扱いづらいし双対関係作る意味がないと思う。
0039デフォルトの名無しさん
2010/05/02(日) 15:16:130040デフォルトの名無しさん
2010/05/02(日) 15:47:45質問の仕方が悪かったかも。
Wikipedia によると、双対は
2つの対象がある意味で互いに「裏返し」の関係にあるというようなニュアンスがあるという。
これを踏まえて2つ質問があります。
・今回の件(Haskell)において、2つの対象の一方は class ではないかと意見が出た。
ではもう一方は何に相当するのか。
・ある意味で互いに裏返しの「ある意味」というのは、
今回の件(Haskell)では何に当たるのか。
0041デフォルトの名無しさん
2010/05/02(日) 18:41:05その矢印が反対のものはADTからinstanceの型への射
ならdataはinstance宣言になるのか?なんかしっくりくるようでこない
0042デフォルトの名無しさん
2010/05/02(日) 23:31:11無い場合がありますよね?
これってputStrLnの引数が文字列リテラルだけの時は要らなくて、文字列++変数
みたいな時には要るということなのでしょうか?
よろしくお願いします。
0043デフォルトの名無しさん
2010/05/02(日) 23:36:33初学者の方ですね。
($)演算子(関数)は、第一引数を第二引数に適用する関数です。
($)がなくても括弧を駆使すれば関数は書けますが、
($)を使うと綺麗に書ける場合が多いのです。
0044デフォルトの名無しさん
2010/05/02(日) 23:45:09ありがとうございます。
"($)演算子"でググればよかったんですね。
f1(f2(f3(arg))) → f1 $ f2 $ f3 $ arg
ttp://blog.livedoor.jp/kikwai/archives/51588251.html
分かりましたー
0045デフォルトの名無しさん
2010/05/02(日) 23:46:36みたいな時には要るということなのでしょうか?
結果としてはそうなのだが、演算子の結合の問題。
0046デフォルトの名無しさん
2010/05/02(日) 23:51:06putStrLn "foo"
の場合、[Char]型の値に、[Char]->IO ()型の関数([Char]を引数に取る関数)が適用されているので型エラーは起きない。
putStrLn "foo" ++ "bar"
の場合、関数適用は演算子の適用よりも優先度が低いので
(putStrLn "foo") ++ "bar"
と解釈されてしまって、まぁ、直感的にもおかしい。正確にいうと、IO ()型の値と"bar"型の値にリスト連結演算子(++)::[a]->[a]->[a]が適用されているので型エラーになる。
この型エラーを回避するためには、
putStrLn ("foo" ++ "bar")
と書いて、"foo"と"bar"に先に(++)を適用するようにすれば良い。
演算子($)は、
f $ x = f x
と定義されている演算子で、他のどの演算子よりも優先度は低いが、関数適用よりは高い優先度を持っている。
だから、
putStrLn $ "foo" ++ "bar"
と書くと、
putStrLn $ ("foo" ++ "bar")
と解釈され($は++より優先度が低いから)
putStrLn ("foo" ++ "bar")
と解釈される($の定義より)。よって、これでも問題は解決される。
この程度だと括弧()を使って優先度を操作するのと$を使うのとで大した違いはないけど、
sortBy f5 (map f4 (groupBy f3 (filter f2 (map f1 list))))
みたいな式を書きたいときとか、括弧()の代わりに$を使うと読みやすくなる。
004746
2010/05/02(日) 23:51:500048デフォルトの名無しさん
2010/05/02(日) 23:58:19いえいえ凄く分かりやすいです。ありがとうございます。
0049デフォルトの名無しさん
2010/05/03(月) 00:08:140050デフォルトの名無しさん
2010/05/03(月) 01:57:07g x y = f1 . f2 . f3 $ x * y
0051デフォルトの名無しさん
2010/05/03(月) 09:43:50>>46
> 演算子($)は、
> f $ x = f x
> と定義されている演算子で、他のどの演算子よりも優先度は低いが、関数適用よりは高い優先度を持っている。
関数適用は何よりも優先順位が高い(最高位)ですよ。
関数適用以上の優先順位のものは Haskell プログラマは定義できないです。
0052デフォルトの名無しさん
2010/05/03(月) 12:47:45否。遅延評価(左最外簡約)なhakellは関数適用が最後。
4 * (3 + 2)とかは
=>4 * 3 + 4 * 2
=>12 + 8
=>20
となる。infixで指定する数値は高ければ高いほど後に回される。
f x y = x * y
g y = 2 * y
としてf x $ g yを評価するとき、$が最初に評価されないといけない。
じゃないとエラーになるでしょ?
0053デフォルトの名無しさん
2010/05/03(月) 12:53:110054デフォルトの名無しさん
2010/05/03(月) 13:34:14そっか、>>46 は「先に評価される=優先度が高い」という話をしてたのか。
それを俺の方が結合度の話をしていると勘違いして、
>>51 で間違った指摘をしてしまったのか。
すまんかった、申し訳ない。
ちなみに >>49 も俺、本当に悪い
0055デフォルトの名無しさん
2010/05/03(月) 22:59:42Prelude> :module +Text.Regex.Posix
ってやったんですが、
Could not find module `Text.Regex.Posix':
Use -v to see a list of the files searched for.
と出てモジュールをロードできません。
OSはDebian lennyです(WinXP上のVMPlayer上で動かしています)
これはモジュールがインストールされていないということでしょうか?
対処方法を教えてください。お願いします。
0056デフォルトの名無しさん
2010/05/03(月) 23:16:40とりあえず、モジュールがインストールされているかどうかを調べてみたらどうだ?
0057デフォルトの名無しさん
2010/05/03(月) 23:21:48すいません 本来どこに入ってるんですか?
/usr/lib/ghc-6.8.2 下とか /usr/lib/haskell-utils あたりを今探している
んですが・・・
該当するライブラリは見つけたっぽいんですけど↓
http://hackage.haskell.org/package/regex-posix
どこにインストールすればいいのか分かりません。
0058デフォルトの名無しさん
2010/05/03(月) 23:37:33でインストール済みパッケージの一覧
005955
2010/05/03(月) 23:54:42/usr/lib/ghc-6.8.2/package.conf:
Cabal-1.2.3.0, array-0.1.0.0, base-3.0.1.0, bytestring-0.9.0.1,
containers-0.1.0.1, directory-1.0.0.0, filepath-1.1.0.0,
(ghc-6.8.2), haskell98-1.0.1.0, hpc-0.5.0.0, old-locale-1.0.0.0,
old-time-1.0.0.0, packedstring-0.1.0.0, pretty-1.0.0.0,
process-1.0.0.0, random-1.0.0.0, readline-1.0.1.0, rts-1.0,
template-haskell-2.2.0.0, unix-2.3.0.0
一覧には無いっぽいですね。
0060デフォルトの名無しさん
2010/05/03(月) 23:56:49正規表現ライブラリはいくつもあるので、Hackageで探してインストール。
0061デフォルトの名無しさん
2010/05/03(月) 23:58:22訂正。ライブラリは見つけたようなので、cabalでインストール。cabal-installがインストールされていなければ、まずそれをインストール(ぐぐればダウンロード元が見つかる)。
0062デフォルトの名無しさん
2010/05/04(火) 13:10:02aptとかで探せば出てくるはず
0063デフォルトの名無しさん
2010/05/04(火) 13:28:39ディストロのパッケージだと何故か上手くいかない、
という相性の問題が以前からたびたび出てるよ。
Debian 系の報告が比較的多い感じ。
Cabal 使っておけば安全だし、他の OS でも知識が生きると思う。
0064デフォルトの名無しさん
2010/05/04(火) 13:35:360065デフォルトの名無しさん
2010/05/04(火) 18:07:52バージョンのチェックが怪しいかもしれんね。
Deb系のパッケージシステムのことはよく知らんが、Cabalみたいに上限バージョンのチェックまでしてくれるのだろうか?
それにDebianのレポジトリに入っているパッケージは全体的に古い
006655
2010/05/04(火) 18:47:03timeを入れようとしたら、baseライブラリが古いと言われ、baseを
アップデートしようと調べたらGHC自体をアップしないと無理と
書いてあったので、最新のGHCをソースからインストールしたら、
Text.Regex.Posixも一緒に入り、最初の問題が解決しました。
0067デフォルトの名無しさん
2010/05/04(火) 19:49:24面倒なことにはなってなかったはず
0068デフォルトの名無しさん
2010/05/04(火) 23:51:230069デフォルトの名無しさん
2010/05/05(水) 00:18:06破壊更新・削除はできません。
0070デフォルトの名無しさん
2010/05/05(水) 00:38:55ていうか、Cabalはbuild architectureだから。
パッケージ管理システムではなく、makeの置き換えだと考えるべき。
パッケージ管理はghc-pkgがやっている。
0071デフォルトの名無しさん
2010/05/05(水) 00:40:59プログラミングHaskell (ISBN-10: 4274067815)で良い気がした。
RWHは長いからタイトル通り実用例題集くらいに思って、これと両方持ってると良さそうですな。
0072デフォルトの名無しさん
2010/05/05(水) 03:08:320073デフォルトの名無しさん
2010/05/05(水) 07:38:52ghc-pkg unregisterではだめか?
0074デフォルトの名無しさん
2010/05/05(水) 11:45:39依存性を考慮するのがメンドイ
ライブラリAが、ライブラリBをインストールした時に同時にインストールされたものか、
それともライブラリBをインストールする前からインストールされてたのか、
すぐに忘れる。
あと、ライブラリやドキュメント、実行ファイルを消すのがメンドイ
まぁ、これはインストールされてる場所は決まってるから、作業は簡単なんだが。
0075デフォルトの名無しさん
2010/05/05(水) 13:40:14-----
(略)
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
-----
なので指示通り "cabal install cabal-install" をした。
しかしこのコマンドはエラーメッセージも表示されず完了したのに、
"cabal info cabal-install" をすると、次のように表示される。
-----
(略)
Latest version available: 0.8.2
Latest version installed: [ Unknown ]
(略)
-----
何故?
[環境]
Windows7
Haskel Platform 2010.1.0.0
0076デフォルトの名無しさん
2010/05/05(水) 14:39:380077デフォルトの名無しさん
2010/05/05(水) 17:59:08cabal-install version 0.8.1
using version 1.8.0.2 of the Cabal library
です。
0078デフォルトの名無しさん
2010/05/05(水) 18:33:390079デフォルトの名無しさん
2010/05/05(水) 19:34:46手動で入れても相変わらず同じ結果だった。
ではビルドされた cabal.exe はどこに行ったのかと思って検索してみたら、
"C:\Users\...\AppData\Roaming\cabal\bin" にあった。
"cabal --global install cabal-install" でインストールしてみたところ、
"C:\Program Files\Haskell\bin" にインストールされた。
以前のバージョンの Haskell Platform についてきた Cabal では、
--global を指定しなくても Program Files の方にインストールされてたんだけど、
仕様が変わったのでしょうか。
それとも、うちだけ?
あと、これでも "cabal info cabal-install" をすると、
相変わらず Latest version installed: [ Unknown ] と表示される。
何が何だか分かんなくなってきた。
もう少し調べても分からなかったら、Haskell Platform を再インストールしてみる。
0080デフォルトの名無しさん
2010/05/05(水) 19:58:54その現象には私も直面した。
globalとuserの両方にcabalがあり、userのほうが新しいcabalのはずなのだが、
参照されているcabalは古いバージョンのようだ。
私はHaskellのライブラリを全部削除してからGHCを再インストールした。
もっとうまい方法はないだろうか。
0081デフォルトの名無しさん
2010/05/06(木) 06:48:090082デフォルトの名無しさん
2010/05/06(木) 12:07:330083デフォルトの名無しさん
2010/05/07(金) 20:58:39他のライブラリは "cabal install" でインストールしたら
ちゃんと "cabal info" に反映されるのに、
cabal-install だけは反映されない。
こういうモンだと思って、もう諦めた。
0084デフォルトの名無しさん
2010/05/07(金) 22:33:07モジュールの依存関係を正しく理解してないことがしばしばある
しかも、出来上がったパッケージが稀に壊れてたりもする
cleanしてからビルドするとちゃんとしたものが出来るけど、それってどうなのよ
0085デフォルトの名無しさん
2010/05/07(金) 23:28:400086デフォルトの名無しさん
2010/05/08(土) 01:41:52パッケージごとに管理しているせいではないか。
このパッケージごとの名前空間分離は、ファイル名ベースの管理と違って、
重複を避けやすい反面失敗しやすい、許容範囲の狭い方法だろう。
実験的なソフトウェアが多いHaskellにおいては、予想外の動作をするよりは
動作しないほうが安全であり、Cabalは望ましい設計だということができるだろう。
一方で、Haskellをプロダクションに使うには、ビルドを確実に処理するための
特別なサポートが必要だろう。
0087デフォルトの名無しさん
2010/05/08(土) 11:48:44ttp://openpdf.com/ebook/replicate-haskell-pdf.html
0088デフォルトの名無しさん
2010/05/09(日) 00:02:15型Bと型Cを、型Aへ変換する関数を持つクラスのインスタンスにするしかないでしょうか。
0089デフォルトの名無しさん
2010/05/09(日) 00:35:53モジュールを分けて修飾インポート。
しかしそもそも同じ名前にすべき理由は何?
0090デフォルトの名無しさん
2010/05/09(日) 00:37:11let a = B.toA b
a' = C.toA c
0091デフォルトの名無しさん
2010/05/09(日) 18:06:43True
> or []
False
GHCでこんな結果がでるんですが、これは意図してこのように定義されて
いるのでしょうか? どっちも False か、どっちもエラーかの方が妥当な
気がするのです。
0092デフォルトの名無しさん
2010/05/09(日) 18:26:48and (x:xs) = x && and xs
or (x:xs) = x || or xs
その2つとこれ見て実際に手を動かしてみたら分かると思うな。
0093デフォルトの名無しさん
2010/05/09(日) 19:53:22http://feather.perl6.nl/~audreyt/osdc/haskell.xul
を読もうとしていますが唯一、Firefox/Linuxでのみ読めました。
他のブラウザは、拡張子がわからない(IE、Chrome)とか、
ソースがそのまま表示されるとか(Firefox/Win)です。
Linuxで読めればいいかというと、レイアウトが乱れて読めない場所があったりします。
どうしたらいいでしょうか?
009493
2010/05/09(日) 20:12:20> ソースがそのまま表示されるとか(Firefox/Win)です。
Mac (Safari, Firefox)でも似たようなものです。
0095デフォルトの名無しさん
2010/05/09(日) 21:28:24ありがとうございます。
いや、今のところ特にそれで困っているという状況ではないです。
単に C/C++ などのようなオーバーロードはできるかなと思っただけです。
0096デフォルトの名無しさん
2010/05/09(日) 22:49:26プログラミングHaskel 6章の課題をやっていて、and'という名前で、
まさにそのように定義しました。でも、この定義は and' [] の場合
を決めていませんし、実際にやってみたら、エラーになりました。
ライブラリ関数 and もそうなんだろうと思って試してみたら、>>91
の結果が返ってきました。
それで質問をさせてもらったのでした。
0097デフォルトの名無しさん
2010/05/09(日) 23:23:27GHC ライブラリ リファレンスの Prelude.and 関数や or 関数の説明からは、
次のように定義されているっぽいと推測できる。
and 関数は有限リスト、無限リストを問わず、
どこかにひとつでも False があると分かれば False を返す。
それ以外は True を返す(が、そのためには有限リストで無ければならない)。
or 関数は有限リスト、無限リストを問わず、
どこかにひとつでも True があると分かれば True を返す。
それ以外は False を返す(が、そのためには有限リストで無ければならない)。
なので、and [] は「それ以外」の条件に当てはまり True となる。
or [] も「それ以外」の条件に当てはまり False となる。
0098デフォルトの名無しさん
2010/05/09(日) 23:34:52さすがにhaskellではhead [] /= []かつtail [] /= []だけど
0099デフォルトの名無しさん
2010/05/09(日) 23:45:530!(0の階乗)を 1と定義するのと同じ.
010091
2010/05/09(日) 23:57:03いただいた回答を参考に、もうちょっと考えてみたいと思います。
回答してくださったみなさんありがとうございます!
0101デフォルトの名無しさん
2010/05/10(月) 16:38:550102デフォルトの名無しさん
2010/05/10(月) 18:14:050103デフォルトの名無しさん
2010/05/10(月) 19:00:59case n of
0 -> f ....
1 -> f ...
_ -> ...
where f = ...
なんてことができればいいなと
0104デフォルトの名無しさん
2010/05/10(月) 19:26:24case 以外からも見えていいなら普通にできるが
f x = case x of
Just a -> g $ show a
Nothing -> g "nothing"
where g s = print s
0105デフォルトの名無しさん
2010/05/10(月) 19:58:17caseの各パターンマッチのwhere節
↑
この間がほしい
↓
関数のwhere節
let f = .. in case exp of ..的なスコープってこと
expの部分では見えてなくてもいいけど
0106デフォルトの名無しさん
2010/05/10(月) 20:11:00f x = h
where h = case x of
Just a -> g $ show a
Nothing -> g "nothing"
where g s = print s
h の外からは g は見えない。
と言うことを別関数を作らずともできるように文法に組み込んでくれよ、
って事だよね
0107デフォルトの名無しさん
2010/05/10(月) 20:21:27まあパターンマッチング部でwhere節が使えるってことは
case縛りのwhereはシンタックス的に追加は不可能なんだろうけど
0108デフォルトの名無しさん
2010/05/11(火) 16:42:40http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=978-4-274-06805-8
7年前の本か
使い物になんのかな?
0109デフォルトの名無しさん
2010/05/11(火) 19:20:39目次に見覚えがあると思ったら、これの和訳か。
「the fun of programming」
いろんな事に関心を持って何とか応用できないかと常に考えてる人にとっては、
7年前のものとか関係なくしっかり使い物になる本だよ。
「Real World Haskell」よりももう少し抽象度の高い実践という感じ。
各章でひとつの応用トピックを取り上げ、その中で色々なテクニックや方法論を学べる。
トピックの幅がかなり広いから、章のタイトルだけ見て
興味あるトピックだけを拾い読みするような人は、読める所が少ないかも。
また、「Real World Haskell」以上に入門書から遠い本だとは思った。
中置データ構築子などを含む基本文法は当然として、
式の置き換えによる評価の追跡とか、構造的帰納法による解析(証明)とか、
その手の基本テクニックも慣れてること前提っぽい。
0110デフォルトの名無しさん
2010/05/11(火) 21:37:28そう思っていた時にふと本屋で「プログラミングHaskell」を手にしてあっさりしている事が新鮮だったよ。
実用(利用)例は文字通りRWHがいろいろあるので、両者を手にして往復しながら理解を進めていくのが正解かもね
0111デフォルトの名無しさん
2010/05/12(水) 00:17:25高い上に難しそう・・・
フフフ 買いかな?
0112デフォルトの名無しさん
2010/05/12(水) 20:58:410113デフォルトの名無しさん
2010/05/12(水) 21:56:12sumを+,
productを*
と読み替えたときに環になっているから?
まあデータ型なんてどれでも代数的にみることはできると思うけど。
0114デフォルトの名無しさん
2010/05/13(木) 00:23:420115デフォルトの名無しさん
2010/05/13(木) 00:58:51整数,実数,文字,すべて代数的だ
0116デフォルトの名無しさん
2010/05/13(木) 01:04:09これがいいだろ
http://ja.wikipedia.org/wiki/%E4%BB%A3%E6%95%B0%E7%9A%84%E6%A7%8B%E9%80%A0
0117デフォルトの名無しさん
2010/05/13(木) 14:58:21いや、だとしたらdataで作るデータ型にわざわざ「代数」という単語をくっつけた理由を知りたいです
0118デフォルトの名無しさん
2010/05/13(木) 22:24:46すまん、>>109 は脅すつもりはなかったんだ。
買っとけ。
読んでいるそばから応用したくなる衝動を抑えるのに苦労する。
「Real World Haskell」が楽しめた人ならこれも楽しめるし、
関数型プログラマとして絶対にパワーアップできる。
扱うテクニックは「Real World Haskell」よりもより関数型らしさが出てる。
そのため高度だが、解説はこちらの方が筋道が立ってて、むしろ分かりやすい。
ただ、日本語がどうなってるか知らんがな。
0119デフォルトの名無しさん
2010/05/14(金) 17:12:28Network.Socket.SockAddrInet :: PortNumber -> HostAddress -> SockAddr
PortNumberの方はWord16のnewtypeでfromIntegralにエンディアン変換が仕込んである
HostAddressの方は単なるWord32のtype-synonymなので自分で変換する必要がある
どっちかに統一してくれ
0120デフォルトの名無しさん
2010/05/15(土) 14:01:34上手に作るとIOがついてない関数で置き換えられるってこと?
0121デフォルトの名無しさん
2010/05/15(土) 16:07:53処理対象がファイルなら必然的に IO ばかりになる。
ファイルは Haskell の知らないところで変わったり消えたりするんだから。
処理対象がファイル名やメタデータ(作成日時など)、コンテンツなどなら、
外部との出入り口だけ IO で処理して、あとは IO 無しでいける。
前者と後者を上手く「切り分ける」ことが大事。
>>120 だけの情報だと、こういう至極当たり前な事しか言えない。
0122デフォルトの名無しさん
2010/05/15(土) 19:51:511
/\
3 2
| |
4 5
に「6だけ」の木を追加する次の段階って、何故2-5の枝の方にくっ付けたんでしょうか?3-4の方に付けちゃ駄目?
joinの定義式のaa bb ccに該当するものを考えてそうなるのかと思ったのだけど、そうすると上段では
左側に2・右側に3の枝になっているのが、下段に行くと左右逆転して左が3の枝になってるのも分からない。
0123デフォルトの名無しさん
2010/05/15(土) 22:41:321 から 7 まで順に insert すると図のようになる理由は、
4ページ目と5ページ目にある定義に従って簡約を追いかけていれば必ず分かる。
insert 1 Null
=> merge (Fork 1 1 Null Null) Null
=> (Fork 1 1 Null Null)
insert 2 (Fork 1 1 Null Null)
=> merge (Fork 1 2 Null Null) (Fork 1 1 Null Null)
=> join (Fork 1 1 Null Null) (Fork 1 2 Null Null)
=> Fork 2 1 (Fork 1 2 Null Null) (merge Null Null)
=> Fork 2 1 (Fork 1 2 Null Null) Null
insert 3 (Fork 2 1 (Fork 1 2 Null Null) Null)
=> ...
0124デフォルトの名無しさん
2010/05/15(土) 23:01:540125デフォルトの名無しさん
2010/05/15(土) 23:08:51初心者卒業レベルまではそれほどでもないのだが、そこから製品開発に使えるレベルまでいくのが大変
- 要求性能が出ないとき
- 結果が変なとき
に、短時間で原因を突き止め修正できるようになるには、相当の練習が必要
0126デフォルトの名無しさん
2010/05/15(土) 23:10:50HOpenCVのマニュアルってどこにあるでしょうか?
http://hackage.haskell.org/package/HOpenCV
に、
http://www.ee.bgu.ac.il/~noamle/
ここ↑にオンラインドキュメントがあるみたいなことが書いてあるんですが見当たりません
0127デフォルトの名無しさん
2010/05/16(日) 00:02:150128デフォルトの名無しさん
2010/05/16(日) 18:28:59それがこれ
:-)
0129デフォルトの名無しさん
2010/05/16(日) 18:48:290130デフォルトの名無しさん
2010/05/16(日) 19:09:080131デフォルトの名無しさん
2010/05/16(日) 19:24:100132デフォルトの名無しさん
2010/05/16(日) 19:47:24これがぱっと見で演算子に見えたのか
まだ Haskell に慣れていないんだな
0133デフォルトの名無しさん
2010/05/16(日) 20:03:140134デフォルトの名無しさん
2010/05/16(日) 21:43:480135デフォルトの名無しさん
2010/05/16(日) 21:56:310136デフォルトの名無しさん
2010/05/16(日) 22:07:08は比較的良く使うよね
0137デフォルトの名無しさん
2010/05/16(日) 23:33:10最後に改行を入力しない限り関数から処理が抜けないと思うんだけど、
そうすると最初の一文字だけ取得して残りはバッファに残ってしまう。
なので次に getChar するとユーザーのキー入力を待たずに、
バッファに残っている先頭の文字を直ちに取得してしまう。
最後の改行も含めた複数のキー入力のうちで
最初の文字を取得するだけなら getLine と head でいいんだけど、
ユーザーに改行を入力させずに、一文字のキーを入力したら
直ちに関数から抜けてその文字を取得できるような関数は
標準ライブラリには無いですか?
0138デフォルトの名無しさん
2010/05/16(日) 23:45:37hSetBuffering stdin NoBuffering
0139137
2010/05/17(月) 07:20:53次のようにやっても効果ありません。
main = do
hSetBuffering stdin NoBuffering
a <- getChar
b <- getChar
print a
print b
main を実行すると入力待ちになり、[a] キーを押すとコンソールに a と表示され、
さらに入力待ち状態になります。
次に [Enter] キーを押すと、下記のように表示されてプログラム終了です。
'a'
'\n'
0140デフォルトの名無しさん
2010/05/17(月) 09:11:08正しい動作じゃない?
getCharを2回繰り替えしてからprintしてるんだから
0141デフォルトの名無しさん
2010/05/17(月) 09:53:090142デフォルトの名無しさん
2010/05/17(月) 10:04:33a <- getChar -- 'a'
b <- getChar -- '\n'
print a
print b
0143デフォルトの名無しさん
2010/05/17(月) 10:42:490144137
2010/05/17(月) 12:49:39hSetBuffering stdin NoBuffering
a <- getChar
print a
b <- getChar
print b
としても結果は同じでした。
つまり、最初の入力待ちで [a] + [Enter] を押さないと処理が進まず、
次の getChar は入力待ちされずにすぐに処理が戻り、b には '\n' が入ります。
>>142
言いたいことが分からない。
きつくてもいいので、はっきり言葉で言って欲しい。
>>141,143
ということは、Windows7 のコンソールが悪いのか。
であれば諦めるしかないですね。
0145デフォルトの名無しさん
2010/05/17(月) 13:02:326.12.3で直る"かも"
0146デフォルトの名無しさん
2010/05/17(月) 13:05:31私の環境では、>>144のプログラムは期待通りに動作しました。
a'a'
b'b'
Linux, runghc 6.12.2, xtermです。
0147デフォルトの名無しさん
2010/05/17(月) 13:48:27これでもしコンパイル時間も短くなったら最高なんだけどなあ…
0148デフォルトの名無しさん
2010/05/17(月) 14:13:56ldにmlにあったパッチ当てたけどまだ遅い
0149137
2010/05/17(月) 18:16:32なんと GHC 側の問題でしたか。
それならば気長に待つことにします。
Haskell Platform に反映されるのはいつになることやら分からんが。
0150デフォルトの名無しさん
2010/05/18(火) 06:48:450151デフォルトの名無しさん
2010/05/18(火) 14:04:02この見方を教えてください。
$ T07t_r 5000000 +RTS -sstderr -K800M
c:\G\check\Haskell\ex\test\T07t_r.exe 5000000 +RTS -sstderr -K800M
12500002500001
892,941,300 bytes allocated in the heap --- @
330,061,040 bytes copied during GC
167,842,072 bytes maximum residency (10 sample(s)) --- A
117,910,940 bytes maximum slop
327 MB total memory in use (2 MB lost due to fragmentation) --- B
@ , A , Bの表す意味の違い
スタックの使用量はここには現れていない?
0152デフォルトの名無しさん
2010/05/18(火) 14:24:59>892,941,300 bytes allocated in the heap
確保された領域の延べサイズ
たとえば「1MBの領域を確保→直後にGCで回収」を100回繰り返したなら、延べ確保量は100MBになる
>167,842,072 bytes maximum residency (10 sample(s))
ある瞬間におけるresidencyというのは、その時点で生存しているヒープオブジェクトの大きさの合計
maximum residencyはこれが最大になる瞬間の値
実際にはこの例だと10回だけresidencyを調査して、その最大値を報告してる
>327 MB total memory in use (2 MB lost due to fragmentation)
OSから確保して使っているメモリ量の瞬間最大値
maximum residencyの約二倍の値になってるのは、コピーGCだから
スタックはヒープの一部として確保されるんじゃなかったっけ
0153デフォルトの名無しさん
2010/05/18(火) 19:46:16>スタックはヒープの一部として確保されるんじゃなかったっけ
C言語の感覚で別々にアロケートされると思い込んでいましたが、
ヒープ、スタックともGHCのランタイムが割り付けたメモリの
合計の量をいっているのでしょうか?
foldl と foldr の比較で、RWHには「foldr、あるいはfoldl'を使うのなら
スペースリークに悩まされることはないでしょう」とありますが、foldr でも
foldl の70%〜程度の統計が得られるます。これはスペースリークとは呼ばない
のでしょうか?
0154デフォルトの名無しさん
2010/05/18(火) 20:07:21未評価の値が無駄に蓄積されてヒープを圧迫することをスペースリークと呼ぶなら、
foldr自体がスペースリークを引き起すことはないね
ただし、foldrは末尾再帰じゃないので、そもそもの空間効率が悪いことが多い
0155デフォルトの名無しさん
2010/05/18(火) 22:21:20↓
Real World Haskell
↓
ふつうのHaskell
と読んだが、順序がまったく逆だったような気がするw
0156デフォルトの名無しさん
2010/05/18(火) 23:26:02↓
Real World Haskell
ときて、次の「ふつうのHaskell」に何を期待してたんだ?
0157デフォルトの名無しさん
2010/05/19(水) 00:31:38次は何を読んだが良いだろうか
以下候補
Real World Haskell
関数プログラミング
関数プログラミングの楽しみ(2010/06発刊)
目標としては「関数型言語らしいプログラミング」が行いたい
0158デフォルトの名無しさん
2010/05/19(水) 00:38:37本読むより実際にコーディングしたり人のソース読んだ方がいいよ
0159デフォルトの名無しさん
2010/05/19(水) 00:50:37その目標とその候補であれば「関数プログラミングの楽しみ」を薦める。
>>158
本には人のソースが載ってるし、
なぜそのソースになったのかの解説もついてるんだがな。
練習問題も載ってるし。
何か問題があるのか?
さすがに完成されたソースが丸ごと一式載っていることはまずないが、
「関数型言語らしいプログラミング」を学ぶのにソース丸ごと一式は要らないだろ。
そもそも、何が関数型言語らしさを作っているのかを知らないまま、
実際にコーディングしたり人のソース読んでも、分からないままだと思う。
0160デフォルトの名無しさん
2010/05/19(水) 01:18:02そういうレスがあるとは思っていた。尼のギフトカードの残高で丁度中古の
「ふつうの〜」が1冊買えたんだよね。だから一層のこと揃えてみただけ。
ただ最初の2冊で分かりにくかったことが、サラっと「ふつうの〜」に説明して
あったりして、最初に読んどけば良かったなと。
0161デフォルトの名無しさん
2010/05/19(水) 01:19:12人のソースはともかく、自分でコーディングしてみないと結局伸びない
0162デフォルトの名無しさん
2010/05/19(水) 07:24:30> ただ最初の2冊で分かりにくかったことが、サラっと「ふつうの〜」に説明して
> あったりして、最初に読んどけば良かったなと。
そういう読み方のタイプも普通にあるし、推奨している読書テクニック本もある。
難解な本を読んで、ある部分が難しかったら、別の一段レベルが低い本を読んで、
それから先の本に再チャレンジする。
0163デフォルトの名無しさん
2010/05/19(水) 07:49:47コードをただ書くだけで伸びるってものでもないけどな
インプット(読む)とアウトプット(書く)は両方あった方がいい
0164デフォルトの名無しさん
2010/05/19(水) 08:17:380165デフォルトの名無しさん
2010/05/19(水) 08:34:400166デフォルトの名無しさん
2010/05/19(水) 08:45:55それが本の役割だと思う。
0167デフォルトの名無しさん
2010/05/19(水) 14:28:500168デフォルトの名無しさん
2010/05/19(水) 15:57:330169デフォルトの名無しさん
2010/05/19(水) 16:00:58おいおいって感じw
0170デフォルトの名無しさん
2010/05/19(水) 16:29:15nobsunって誰?と思ってググってみたらツイッターやってて
しかもHaskell公式のマークを上下ミラーリングして(λ→y)
自分のマークにしちゃっててワロタ
0171デフォルトの名無しさん
2010/05/19(水) 16:33:31笑っちゃうぜ
0172デフォルトの名無しさん
2010/05/19(水) 16:40:550173デフォルトの名無しさん
2010/05/19(水) 16:44:21まぁ、プログラミングの分野は論文がすべてじゃないからね。
ソフトウェア論文がいかに評価されないか、研究者ならみんな知ってるはず。
0174デフォルトの名無しさん
2010/05/19(水) 16:49:50日本でのエバンジェリストとしての第一人者だね。
0175デフォルトの名無しさん
2010/05/19(水) 16:53:34開発手法を編み出したとか
斬新なソフトを書いたとか
ツールを開発したとか
Haskellコンパイラのすごい最適化エンジンを実装したとか、
なにか無いの?
0176デフォルトの名無しさん
2010/05/19(水) 16:54:13ふつうのHaskellプログラミングの監修もしていますね。
どう見ても日本のHaskellプログラミングの第一人者です。
笑っちゃった人は自分の無知を自覚すべきだと思います。
0177デフォルトの名無しさん
2010/05/19(水) 16:55:27俺の答えは、日本にはマトモなHaskellerはいない、って事だよ。
0178デフォルトの名無しさん
2010/05/19(水) 17:34:060179デフォルトの名無しさん
2010/05/19(水) 17:47:32白石さんはHaskellに人生食われちゃってる人
0180デフォルトの名無しさん
2010/05/19(水) 20:32:16評価が早計だな
もっと評価を遅延すべき
0181デフォルトの名無しさん
2010/05/19(水) 20:42:40つまり、宇宙の終りの時に初めて評価されるんですね
0182デフォルトの名無しさん
2010/05/19(水) 20:42:45その中の第一人者ってことでいいだろ
所詮相対評価だ
0183デフォルトの名無しさん
2010/05/19(水) 20:43:15新しいことをしなくても、技のレベルが高ければ評価は高くなると思う。
Haskellの技とは? とかnobsunはレベルが高いのか? はおいといて。
0184デフォルトの名無しさん
2010/05/19(水) 20:56:470185デフォルトの名無しさん
2010/05/19(水) 20:58:10Lispの方言を別の言語として数えればそうかもね
0186デフォルトの名無しさん
2010/05/19(水) 21:05:09んなわけあるかいw
と言ってしまえばその記事と同じなので
ちゃんと調査が必要ですね。
0187デフォルトの名無しさん
2010/05/19(水) 21:05:460188デフォルトの名無しさん
2010/05/19(水) 21:52:17純粋関数型言語では一番多いんじゃね?
0189デフォルトの名無しさん
2010/05/19(水) 21:59:200190デフォルトの名無しさん
2010/05/19(水) 22:14:500191デフォルトの名無しさん
2010/05/19(水) 22:35:30もう1つって何?
Concurrent Clean?
Lazy K?
0192デフォルトの名無しさん
2010/05/19(水) 22:59:01λ
0193デフォルトの名無しさん
2010/05/19(水) 23:03:52関数型言語を始めるなら純粋な言語がいいという理由でHaskellを勉強する人が一番多い
みたいなことがSoftwareDesignに書いてあった気がする
0194デフォルトの名無しさん
2010/05/19(水) 23:22:130195デフォルトの名無しさん
2010/05/19(水) 23:45:10前方参照できる
let/let recの区別が不要
deriving (Eq, Show)がある
インタプリタが使いやすい
方言がない
構文がCに似ている
--makeで万事よろしくやってくれる
0196デフォルトの名無しさん
2010/05/19(水) 23:46:25JavaのTomcatみたいに、サーバ部分とは独立して作ったアプリケーションを追加していくようなサーバコンテナってないでしょうか
それとも、関数型言語だから、Mighttpdみたいなサーバでも、TomcatみたいなWEBサーバコンテナになるのでしょうか
0197デフォルトの名無しさん
2010/05/20(木) 06:31:10Tomcatがどんなものか知らないが、お遊びのウェブアプリケーションを書くならhackがおすすめ。
リクエストをレスポンスに変換する関数を書くだけでウェブアプリケーションを実装できる。
バックエンドのサーバはFastCGIやhappstackなどアダプタさえあれば何でもいい。
本格的なウェブサービスを構築するにはそもそもHaskellを使うべきかどうかが問題。
0198デフォルトの名無しさん
2010/05/21(金) 10:38:060199デフォルトの名無しさん
2010/05/21(金) 21:12:530200デフォルトの名無しさん
2010/05/21(金) 21:20:07実用にならないというか、production-qualityでないプログラム。
具体的には、Haskellに多い実験的なライブラリや、
品質上の理由でミッションクリティカルな用途に耐えないインターナルなソフトウェアなどが含まれる。
0201デフォルトの名無しさん
2010/05/21(金) 21:35:371ステップ = WHNFの1-stepリダクションで。
0202デフォルトの名無しさん
2010/05/21(金) 21:36:47ソフトウェアアーキテクチャの文脈で定義される品質属性すべて。
製品に使われた実績の少ないプラットフォームは一般にエコシステムが弱いので、
製品に使うには不適当。
0203デフォルトの名無しさん
2010/05/21(金) 21:40:47LLVMというのは本格的なシステムの運用に使えるようなものなのか?
0204デフォルトの名無しさん
2010/05/21(金) 21:44:34一応 ghci でブレークポイント張ったりステップ実行できるけど、
ステップ単位は望んでるものではないな。
0205デフォルトの名無しさん
2010/05/21(金) 22:10:12と思ったけど、改めて使ってみたら結構ステップ単位が細かい。
もしかしたら望んでるものに近いかも知れんぞ。
「1ステップ = WHNFの1-stepリダクション」が具体的に
どういうステップ単位かよく分かんないけど。
0206デフォルトの名無しさん
2010/05/22(土) 08:04:200207デフォルトの名無しさん
2010/05/22(土) 13:46:27文脈から察するにデバッガのことか。
自分ではちゃんと動作するはずだと思い込んでて、
紙と鉛筆で簡約のステップを書いて確かめた(証明した)はずなのに、
何故か上手く動かない(実際には証明されていない)時なんかに役立つ。
IO 以外のモナドで do 表記をしている時とか、例外が発生する時とか。
そもそも紙と鉛筆による簡約が面倒な時。
特にGUIを使ってる時は面倒だ。
外部入力の値を確かめる時。
print や GUI で確認表示するコードをいちいち挿入して、後で取り除くよりも、
デバッガで確かめた方が早くて安全な場合もある。
ただ、ghci のデバッガは無いよりマシ程度のものなので、
願わくばもっと使いやすい本格的な Haskell デバッガが欲しいな。
できればビジュアルなもので。
0208デフォルトの名無しさん
2010/05/22(土) 15:59:19なるほど 解説サンクス
0209デフォルトの名無しさん
2010/05/22(土) 16:00:310210デフォルトの名無しさん
2010/05/22(土) 16:02:30手のほうが楽でいいよ。
0211デフォルトの名無しさん
2010/05/22(土) 16:08:000212デフォルトの名無しさん
2010/05/22(土) 16:12:530213デフォルトの名無しさん
2010/05/22(土) 16:13:36見た目だけ知的w
0214デフォルトの名無しさん
2010/05/22(土) 16:33:04近所回って回収してくりゃあっという間に段ボール10箱分ぐらい集まるし
0215デフォルトの名無しさん
2010/05/22(土) 16:44:25secion系。
私はあまりたくさんのノートを書かず、そしてグラフィックの割合が高いからだ。
0216デフォルトの名無しさん
2010/05/22(土) 17:16:53Haskellプログラミングに使うノートの話をしているんだが。
0217デフォルトの名無しさん
2010/05/22(土) 18:04:360218デフォルトの名無しさん
2010/05/22(土) 18:56:24つ http://www.amazon.co.jp/dp/B001NDOO8C
0219デフォルトの名無しさん
2010/05/23(日) 02:58:48http://news.ycombinator.com/item?id=1369852
0220デフォルトの名無しさん
2010/05/23(日) 07:03:16> A fast HTTP server library with an optional high-concurrency backend using the libev event loop library.
これは期待できそうだな
0221デフォルトの名無しさん
2010/05/29(土) 03:28:11Intel さんって色んな事やってるのね…
0222デフォルトの名無しさん
2010/05/29(土) 08:44:51Haskellはじめての人が理解しにくいところってなんだろう?
自分の場合、ラムダ計算やPCFを先にやってたから入りやすかったが、
この辺を知らない人がいきなりHaskellに接したときにつまづくところ
があったりするのかな?
0223デフォルトの名無しさん
2010/05/29(土) 09:30:14どんな人を対象に話すのかで変わると思うよ。
相手が計算機科学の人なのか? プログラミング言語をひとつくらい習得している
人なのか?まったくの素人なのか?
とかね。
0224デフォルトの名無しさん
2010/05/29(土) 09:33:28やっぱモナドじゃね
0225デフォルトの名無しさん
2010/05/29(土) 09:51:06どうしても多変数脳から脱却出来ん。
0226デフォルトの名無しさん
2010/05/29(土) 10:15:51C, Javaについて一通り習った人が相手です。
>>224
モナドですか…さすがに初回からはきついかも。
>>225
なるほど。
その辺、可換図式でも使って説明しますかね。
0227デフォルトの名無しさん
2010/05/29(土) 11:44:57これらがいくつか組み合わさったコードを見ると途端に混乱するということがあった
それぞれ単独でみれば難しくないし、再帰は既に知ってるだろうし、他も教えられればすぐに理解できるだろうけど、
自在に読み書きできるようになるには時間が必要で、最初のうちはfoldrの定義なんかすごく難しく見えると思う
0228デフォルトの名無しさん
2010/05/29(土) 11:59:01c,java系の人なら関数型特有にみえることはわかりにくいかも。
30分で話すとか10分で話すとかなら簡単なことしか話せないだろうしね。
でも高階関数あたりは欲しいかもね。
0229デフォルトの名無しさん
2010/05/29(土) 12:00:140230デフォルトの名無しさん
2010/05/29(土) 12:02:57IO も、こう書くものだ、で済ませるか、対話環境だけ使うことにするとか。
個人的には、いちばん理解しにくいのは関数適用だけでプログラムを書くということだと思う。
ループしながら変数に代入、みたいなのから
map して filter して fold になかなか切り替えられない。
0231デフォルトの名無しさん
2010/05/29(土) 12:06:53入力ができないのがプログラムの題材的にちょっと辛いけど。
0232デフォルトの名無しさん
2010/05/29(土) 12:07:11一番高い壁はクリアじゃね?
0233デフォルトの名無しさん
2010/05/29(土) 12:15:44> ループしながら変数に代入、みたいなのから
> map して filter して fold になかなか切り替えられない。
リストの長さを出すのに「各要素を1に変えて合計」ってのは受けるぞ
0234デフォルトの名無しさん
2010/05/29(土) 12:25:52その前にsumをfoldで定義することが関数型特有じゃないか?
0235デフォルトの名無しさん
2010/05/29(土) 12:36:29実例を見せると納得してくれる
0236デフォルトの名無しさん
2010/05/29(土) 13:12:18一番惹かれそうなものは何かというアプローチはどうだ?
そこに、一番分かりにくいものを絡めていくとか。
0237デフォルトの名無しさん
2010/05/29(土) 13:50:070238デフォルトの名無しさん
2010/05/29(土) 14:35:07quick sortちゃう?
0239デフォルトの名無しさん
2010/05/29(土) 14:53:310240デフォルトの名無しさん
2010/05/29(土) 15:19:22とりあえずトランザクション制御とか
0241デフォルトの名無しさん
2010/05/29(土) 15:27:540242デフォルトの名無しさん
2010/05/29(土) 15:43:400243デフォルトの名無しさん
2010/05/29(土) 16:01:14フォンノイマンの死に様
0244デフォルトの名無しさん
2010/05/29(土) 16:04:12人物を語るのが一番良い印象を与えやすいんだよね。
関数がどうのこうのと技術的な話なんて興味を持つ動機には成り得ないよ。
0245デフォルトの名無しさん
2010/05/29(土) 16:16:09人物について語るのって専門の話を回避するテクニックであって、
専門的な事を話す目的があったらそれじゃダメじゃん。
0246デフォルトの名無しさん
2010/05/29(土) 16:16:28何に対しての「逆」を想定してるんだ?
>>222,226 の逆であれば、Haskell を一通り習った人が
CやJavaの素人に入門的な話をするという事だと思うが、
それなら Hello, World も、人物の話も、
それほど適切ではないような気がするが。
0247デフォルトの名無しさん
2010/05/29(土) 17:43:23データ構造にしても、可変の方がはるかに蓄積が多いから、まず不変を学習してから可変に移るというのは異常。
0248デフォルトの名無しさん
2010/05/29(土) 20:46:07あれから、つまるところ関数型言語の本質はなんだろう、などと考え始めて
1日つぶれてしまいました。
余り大上段に構えず、こんな便利なことができる、程度の紹介にとどめておいた方がいいですね。
とりあえず高階関数だけはおさえておこうと思います。
0249デフォルトの名無しさん
2010/05/29(土) 20:48:030250デフォルトの名無しさん
2010/05/29(土) 20:49:15あれはあんまり参考にならんぞw
考え方が偏りすぎている
0251デフォルトの名無しさん
2010/05/29(土) 21:15:120252デフォルトの名無しさん
2010/05/29(土) 21:21:09だってその人自身が社会を構成する人間の一人なんだから。
0253デフォルトの名無しさん
2010/05/29(土) 21:37:21高階関数と再帰の具体例を挙げて関心を持ってもらうストーリーがよさそうですね。
あとは「変」数じゃなくって…って話かな。
C言語の人は関数ポインタを使うのとどう違うの?とか聞いてくるかもしれませんね。
え?そんなビギナーの聴衆はいないって?w
0254デフォルトの名無しさん
2010/05/29(土) 21:40:35関数型言語の本質はラムダ計算にある。
0255デフォルトの名無しさん
2010/05/29(土) 21:42:04遅延評価なんだから無限リストも。
0256デフォルトの名無しさん
2010/05/29(土) 22:02:370257デフォルトの名無しさん
2010/05/29(土) 22:03:53俺は A Gentle Introduction to Haskell の fibs の例はなかなか理解できなかった。
>>247
既存のアルゴリズム本を参考にして
リストに (!!) でアクセスしまくるコードを書いて来た人を思い出した
0258デフォルトの名無しさん
2010/05/29(土) 22:39:43server と client のプログラムを理解するのに時間がかかったな。
紙に鉛筆で簡約ステップを書き下して正しいと頭では分かっていても、
初めは問題なく動くのがなんか不思議な感じだった。
ああいうのをスラスラと例示できるようになりたいな。
0259デフォルトの名無しさん
2010/05/29(土) 22:42:210260デフォルトの名無しさん
2010/05/29(土) 22:58:56ないよ
値としての関数は、ローカル変数の値を記録したオブジェクトと生の関数ポインタの組み合わせ(クロージャ)で表現できる
実際GHCなんかはコンパイル時に似たような変換してるはず
0261デフォルトの名無しさん
2010/05/29(土) 23:12:020262デフォルトの名無しさん
2010/05/29(土) 23:44:050263デフォルトの名無しさん
2010/05/30(日) 01:04:03Java の人なら、環境をフィールドとして持つ
call メソッドだけが定義されたオブジェクトみたいなものと言えば通じるんだろうか
0264デフォルトの名無しさん
2010/05/30(日) 15:17:580265デフォルトの名無しさん
2010/05/30(日) 15:22:530266デフォルトの名無しさん
2010/05/30(日) 16:54:04LLの王様で超実用言語のperl6がhaskellで作られた、つまり、haskellは超超実用言語だ。
0267デフォルトの名無しさん
2010/05/30(日) 17:07:280268デフォルトの名無しさん
2010/05/30(日) 17:29:030269デフォルトの名無しさん
2010/05/31(月) 01:51:430270デフォルトの名無しさん
2010/05/31(月) 03:07:22実行ファイルの保存先を./binにしたいのですが、
どのように書けば良いでしょうか?
0271デフォルトの名無しさん
2010/05/31(月) 06:24:16CabalのBuild-type: Simpleは典型的なケースを「シンプル」に記述できるようにデザインされている。
Executableのパスを明示的に指定するのは典型的なケースではないので、他のBuild-type、たとえばCustomなどを調べてみてはどうだろうか。
0272デフォルトの名無しさん
2010/05/31(月) 12:59:23そもそも汎用プログラミング言語はすべてチューリング等価なんだから、
できることは同じ。
生産性と実行効率を改善するための努力が延々と続いている。
0273デフォルトの名無しさん
2010/05/31(月) 13:25:29思考にとって無駄が多すぎる^^; そのてん 生産性の向上はあるわな。
0274デフォルトの名無しさん
2010/05/31(月) 13:41:37なにを生産するかによるな
OSを生産させたら関数型のほうが冗長かもしれないし
関数型のキラーアプリである「あれ」を生産させたらもちろんCのほうが冗長だよね
0275デフォルトの名無しさん
2010/05/31(月) 13:43:450276デフォルトの名無しさん
2010/05/31(月) 15:17:33http://news.ycombinator.com/item?id=1390889
0277デフォルトの名無しさん
2010/05/31(月) 17:53:03「あれ」って何? もうさっきから気になって気になって、仕事が手に付きません
0278デフォルトの名無しさん
2010/05/31(月) 17:55:01どんな種類のソフトウェアを書くにしても関数型がCより冗長にしか書けないということはありえない。
OSがCで書かれているのは、抽象レベルの高すぎる言語はportableでないからだ。
少なくとも昔は、lispなどでは十分に速い実行コードを生成することができなかった。
0279デフォルトの名無しさん
2010/05/31(月) 18:43:060280デフォルトの名無しさん
2010/05/31(月) 18:54:130281デフォルトの名無しさん
2010/05/31(月) 18:56:45>>278 は『ありえない。』って言い切っちゃってるから。
0282デフォルトの名無しさん
2010/05/31(月) 19:05:530283デフォルトの名無しさん
2010/05/31(月) 19:07:15C言語で書かれたプログラムのエミュレーションにはC言語が最適だろう。
0284デフォルトの名無しさん
2010/05/31(月) 19:11:09短くなるよ。その辺のことを冗長で思考を止めやすいといってる。
ちがう?
関数型って思考に素直な印象が強いんだけどな。手続き型って思考する前
の前準備というのか余計な操作が多いという印象なんだな。
手続き型になれちゃってる人には関数型は面倒なんだろうね。
0285デフォルトの名無しさん
2010/05/31(月) 19:11:53プラグインを書きたいとか、Haskell では到底簡潔に書けない様な『種類』のソフトウェアも
沢山あるよね。
0286デフォルトの名無しさん
2010/05/31(月) 19:22:18その関数が実行される環境を無視するならね。
本来考慮すべきかもしれない事を無視していいなら、それは思考に素直にもなるでしょう。
0287デフォルトの名無しさん
2010/05/31(月) 19:24:11Haskellは、記号的な問題を解くのに強い。
そういう問題は関数に落とし込めるようにあらかじめ抽象化されているから。
> 特定のアプリケーションのプラグインを書きたい
Lispでマクロを使うといい。
0288デフォルトの名無しさん
2010/05/31(月) 19:30:20>> 特定のアプリケーションのプラグインを書きたい
>Lispでマクロを使うといい。
これってどういう意味だか誰か分かる?
Lisp って CL の事で良いのかな?
マクロはリーダーマクロ?
それとも defmacro の話?
それでどうやってプラグインが書けるの?
ちょっと話が見えないな。
0289デフォルトの名無しさん
2010/05/31(月) 19:38:320290デフォルトの名無しさん
2010/05/31(月) 19:45:31記号的というと
・variantがあればLisp風のデータ構造 (括弧は少なめ) を作れる
・concatMapがあればPrologみたいなのを作れる
ただし、クロージャと同じく、関数型ではない言語に取り入れられるかもしれない。
0291デフォルトの名無しさん
2010/05/31(月) 19:47:33アンカー間違ってない?
0292デフォルトの名無しさん
2010/05/31(月) 20:11:51フィボナッチのように数学の問題ということではないかと
0293デフォルトの名無しさん
2010/05/31(月) 20:14:460294デフォルトの名無しさん
2010/05/31(月) 20:55:11なにを指して無視といってるのかがよくわからない。
0295デフォルトの名無しさん
2010/05/31(月) 21:07:19>>292
0296デフォルトの名無しさん
2010/05/31(月) 21:46:00結果はまだ先なのかな。どんな反応があったか、よかったらレポートして下さい。
0297デフォルトの名無しさん
2010/05/31(月) 23:01:042ちゃん規制されていたから、亀レスだけど、「こんな便利なことができる」っていう紹介で良いと思います。
例えば、(都道府県名, 市長村名, 人口, 面積)みたいなリストを作っておいて、それをmap、filter、sortBy、groupByで操作して、都道府県を人口順に並べるとか、ある県の人口密度を出すとかを、ghciでやると面白いのではないでしょうか。
0298デフォルトの名無しさん
2010/06/01(火) 06:51:44そうですね。
Haskellの素晴らしさを示すには、オーディエンスが慣れ親しんだ問題を
エレガントに解く方法を示すのがいいと思います。
彼らが使っている手続き型言語による解法との比較もしてはどうでしょうか。
でもただエレガントというだけでは、感情的な反発を引き起こしたり、
マニアックな奴だと思われるかもしれませんから、
人気度やパフォーマンスなどの客観的(統計的)なデータを示し、
長所と短所の両面も伝えてはどうでしょうか。
0299デフォルトの名無しさん
2010/06/01(火) 08:54:35それは話してるレイヤが違うだろ
CにもHaskellにも「関数」と呼ばれるものがある。Cの関数は実行時に作れないがHaskellのは作れる
ではCの関数だけを使ってHaskellの関数の真似をすることができるか?みたいな問題
ここでいう「真似」というのは関数に渡せるとか変数に入れられるとかそういう言語の「内部」での性質を真似するということ
チューリング完全性の議論はプログラムが全体としてどういう振る舞いをするかしか問題にしていないので、別の話
0300デフォルトの名無しさん
2010/06/01(火) 09:53:01Haskellは実行時にCの関数を作れないが、Cは実行時にHaskellの関数を作れる
Cの関数だけを使ってHaskellの関数の実装をすることができる
「実装」というのはHaskellの「内部」を実装するということ
0301デフォルトの名無しさん
2010/06/01(火) 11:43:16他の言語は、金融工学を駆使した電子マネーを目指しているようだ
0302デフォルトの名無しさん
2010/06/01(火) 11:57:13Cはどこでも動くが、金塊はどこでも貨幣として使えるわけじゃない
0303デフォルトの名無しさん
2010/06/01(火) 12:10:14というか電子マネーと金融工学ってあまり関係ないんじゃないか
0304デフォルトの名無しさん
2010/06/01(火) 14:45:590305デフォルトの名無しさん
2010/06/01(火) 14:53:26電子マネー → 具体的なものと機能は同じだけど、実体ははきりせず抽象的なもの
金融工学は、その抽象的なものから成り立つのを助け、利益を出そうとするもの。
C → 具体的にメモリをいじくったするもの
JavaとかPHPとか → 具体的なものと、機能は同じだけど、にラップをかけて抽象的に扱う。動作は遅い。
金融工学 → ガーベージコレクション
0306デフォルトの名無しさん
2010/06/01(火) 16:37:44ポインタ演算はあるがメモリ割り当てまでコントロールするわけではない。
JavaのHotSpotみたいな最適化技術は金融工学みたいなものといえなくもない。
0307デフォルトの名無しさん
2010/06/01(火) 19:03:18Haskellを C言語にコンパイルする言語をHaskellで作ればいいんじゃね?
0308デフォルトの名無しさん
2010/06/01(火) 19:11:10C のソースを吐いても GC 前提だったりランタイムライブラリが必須だったら使えないでしょ。
0309デフォルトの名無しさん
2010/06/01(火) 19:37:53これ何に使うんだろうって思ったけど、iPhone や iPad で Haskell を動かしたい時に良いかも。
0310デフォルトの名無しさん
2010/06/01(火) 19:39:250311デフォルトの名無しさん
2010/06/01(火) 20:03:10その昔、JavaOSというOSが勝手にGCしちゃう変なモノがありましてね…
0312デフォルトの名無しさん
2010/06/01(火) 20:11:34クロージャは「定義された場所のほかに、生成された時刻を持つ」。
(時刻とか言ったら怒られそうだが)
一方、Cの関数はコードの場所だけで特定される。
コードを変更して再コンパイルとかしないと、新たな関数を作ることはできない。
0313デフォルトの名無しさん
2010/06/01(火) 20:11:35OS レベルで一括してメモリを回収するのは別に良いと思いますよ?
今はそういう話はしていないですけどね…
0314デフォルトの名無しさん
2010/06/01(火) 20:25:590315デフォルトの名無しさん
2010/06/01(火) 21:51:480316デフォルトの名無しさん
2010/06/01(火) 21:59:390317デフォルトの名無しさん
2010/06/01(火) 22:34:13そういう場合は、強硬に主張している相手を値踏みして、
切っても問題なさそうな感じだったら無理矢理切ればいい。
真実がどうであろうと、どっちみち現時点では時間の浪費に
しかならないという算段がつくならその話は結局無駄。
0318デフォルトの名無しさん
2010/06/01(火) 23:10:25ということは、lex+yaccは「関数を実行時に作れる」言語ということになりますな
0319デフォルトの名無しさん
2010/06/01(火) 23:17:11Haskellが実行時にリストを作れないっていうのと同じくらい馬鹿げてる
foreign import "wrapper"は実行時にコード生成するし
0320デフォルトの名無しさん
2010/06/01(火) 23:18:39高根社長のSM趣味サイトMaskRと
副業のSMクラブ銀座プレジス・動画配信専門リアルミストレスばかり語られるが
高根社長の本業コムラッドについても語ろう
銀座プレジス
http://www.prezis.jp/top.htm
MaskR
http://maskr.com/
プレジスを語ろう
http://set.bbspink.com/test/read.cgi/sm/1246009466/
動画配信専門リアルミストレスってどうよ?
http://set.bbspink.com/test/read.cgi/sm/1249183350/
9 :名無しさん@どっと混む:2010/01/03(日) 18:27:00 ID:RSEbBiG0O
高値はもう大麻やめたの?
10 :名無しさん@どっと混む:2010/01/04(月) 05:15:29 ID:A3l1qdv+O
タカネ社長ってどうやってばれないように脱税してんだろ?
億単位で脱税して億ション暮らしなんて凄いよな
監査役の奥さんもグルなのか?
12 :名無しさん@どっと混む:2010/01/05(火) 01:47:06 ID:KAHwqMrBO
株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade
株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade
13 :名無しさん@どっと混む:2010/01/05(火) 01:47:47 ID:KAHwqMrBO
高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉
0321デフォルトの名無しさん
2010/06/01(火) 23:19:21高根はMASKRでレイプ仲間募集するのやめたんだね
mixiで募集中か
21 :名無しさん@どっと混む:2010/01/10(日) 19:36:45 ID:FdRwgXUTO
風俗店やってるってことは高根社長は暴力団と繋がってるんだね
どこの組にいくらみかじめ料払ってるんだかw
23 :名無しさん@どっと混む:2010/01/23(土) 03:43:12 ID:Pdcv8aq0O
タカネ社長未成年に酒飲ませてレイプ
24 :名無しさん@どっと混む:2010/01/29(金) 18:16:06 ID:zMwtdkIsO
高根社長のレイプ趣味は病気だから治らない
25 :名無しさん@どっと混む:2010/02/01(月) 01:39:32 ID:uaH5mo2nO
前科者
26 :名無しさん@どっと混む:2010/02/09(火) 00:52:46 ID:JwGmN2cG0
>>25
容疑はレイプ?買春?管理売春?公然猥褻?薬物?脱税?詐欺?傷害?
28 :名無しさん@どっと混む:2010/02/14(日) 22:56:30 ID:lykq8x1VO
どこかのスレで人を死に追いやったと書いてあった
33 :名無しさん@どっと混む:2010/03/04(木) 12:49:19 ID:J8YxaRGO0
金がないって脱税がばれて追徴課税でも来たか?
せっかく脱税の隠れ蓑にプレジス営業してるのに残念だったなw
38 :名無しさん@どっと混む:2010/03/12(金) 21:09:53 ID:L0W4+sivO
首吊り首絞めプレイ大好き高根英哉
0322デフォルトの名無しさん
2010/06/01(火) 23:20:03>>18
高根英哉blogでレイプ仲間募集中
私とともにマスクの女どもを弄ぶ仲間を募集する
急に思いついたら連絡をして、集まれるような仲間だ
だから、複数名募集するし、いついつという日時があるわけでもない
条件は以下のとおりだ
・SMを実践している、または興味がある
・マスクを用意できる
・都内でイベント参加できる
・イベント内容およびこの仲間を通じて知りえた情報を口外しない
・成人男子である
・携帯電話および携帯メールアドレスを私に公開できる
・酒が好きである
希望者は私宛にメールを送ってほしい
全員が参加できるわけでもないので、こちらの選択に任せてもらう
なるべく想いを書いてもらうほうがわかりやすいし
経験や顔写真も歓迎。
r[email protected]
[email protected]
[email protected]
0323デフォルトの名無しさん
2010/06/01(火) 23:29:040324デフォルトの名無しさん
2010/06/01(火) 23:37:41Haskellは型安全な言語だと思っていたのに…
0325デフォルトの名無しさん
2010/06/01(火) 23:49:51純粋でなくてもいい部分は限りなく自由なのも、Haskellの魅力だと思うね
0326デフォルトの名無しさん
2010/06/02(水) 00:22:25ちなみにmapする関数をユーザに入力させるプログラムはどうやって書けばよいでしょうか?
getLine >>= \s -> map (??? s) xs
0327デフォルトの名無しさん
2010/06/02(水) 00:46:080328デフォルトの名無しさん
2010/06/02(水) 01:46:44お望みのものと違うかもしれないけど。
ghc --make -package ghc Main.hs
module Main where
import GHC
import GHC.Paths ( libdir )
import DynFlags ( defaultDynFlags )
main = do {
; s <- getLine
; defaultErrorHandler defaultDynFlags $ do {
; runGhc (Just libdir) $ do {
; dflags <- getSessionDynFlags
; setSessionDynFlags dflags
; pm <- findModule (mkModuleName "Prelude") Nothing
; setContext [] [pm]
; runStmt ("map (" ++ s ++ ") [0..10]") RunAndLogSteps
}
}
}
0329デフォルトの名無しさん
2010/06/02(水) 08:51:270330デフォルトの名無しさん
2010/06/02(水) 20:09:00ありがとう。
なるほど、関数をHaskellの世界に持ってくるわけではなく、
引数を向こうの世界に渡して実行させるわけですか。
確かにこれなら、Haskell側は汚染されずにすみますね。
0331デフォルトの名無しさん
2010/06/02(水) 20:10:21>>327
これは、ユーザが文字列として与えた関数をHaskellの関数にできるということでしょうか?
0332デフォルトの名無しさん
2010/06/02(水) 20:11:290333デフォルトの名無しさん
2010/06/02(水) 20:32:48「ユーザが文字列として与えた関数をHaskellの関数に」することも当然できる
0334デフォルトの名無しさん
2010/06/02(水) 20:38:480335デフォルトの名無しさん
2010/06/02(水) 20:47:270336デフォルトの名無しさん
2010/06/02(水) 20:48:400337デフォルトの名無しさん
2010/06/02(水) 20:58:280338デフォルトの名無しさん
2010/06/02(水) 21:05:20自分一人で使うならHaskellで直接書けばいいし、
そうでなければなぜそんな局所的なインタプリタが必要なのか。
もっとマクロなレベルでデザインが間違っているのではないか。
0339デフォルトの名無しさん
2010/06/02(水) 21:22:19チューリング完全である必要がある事は理解できるよな
それをふまえて、他の言語をマネできる自由な言語が勝ち組みたいな雰囲気になった
0340デフォルトの名無しさん
2010/06/02(水) 23:01:15C言語も同じようなことできるよね
昔、ウィンドウを操作するプログラムを作ってたときに、アセンブリコードを文字列で与えて実行時に関数を組み立ててた
0341デフォルトの名無しさん
2010/06/02(水) 23:02:36ちなみに、printfみたいに引数の数が可変の関数
0342デフォルトの名無しさん
2010/06/02(水) 23:06:47できるね
相当手間がかかるのと、機械語に依存することがHaskellとの違いだな
0343デフォルトの名無しさん
2010/06/03(木) 01:22:43{-# OPTIONS_GHC -XFlexibleInstances #-}
module Main where
import GHC
import GHC.Paths ( libdir )
import DynFlags ( defaultDynFlags )
import Data.Dynamic
import System.IO.Unsafe
main = getLine >>= \s -> print (map (eval s) [0..10])
eval :: String -> (Int -> Int)
eval s = flip fromDyn (error "Error") $ unsafePerformIO $
defaultErrorHandler defaultDynFlags $ do {
; runGhc (Just libdir) $ do {
; dflags <- getSessionDynFlags
; setSessionDynFlags dflags
; pm <- findModule (mkModuleName "Prelude") Nothing
; setContext [] [pm]
; dynCompileExpr ("(" ++ s ++ ") :: Int -> Int")
}
}
GHCなら、こういうこともできるよ。
ただ、多相型を扱えない/扱いにくい関係で、>>328みたいな方法で押し切った方が簡単だし、応用しやすいと思う。
Haskell的にはスマートじゃない感じだけど、そもそもLispのevalにしてもPythonやRubyの似たような関数にしてもインタプリタだからできることであって、インタプリタと連携させる前提で比較しないと不公平という気もする。
0344デフォルトの名無しさん
2010/06/03(木) 10:37:50この変態どもめ
0345デフォルトの名無しさん
2010/06/03(木) 10:46:430346デフォルトの名無しさん
2010/06/03(木) 16:36:19対処するの?どっちがはやいん?
foo (x,y) = x+y
Data point X Y
type X = Int
type Y = Int
foo (Data x y) = x+y
みたいなの違い。
0347デフォルトの名無しさん
2010/06/03(木) 16:43:54data Foo a b c = X a b c
deriving (Eq,Ord,Show,Read)
aho (X x y z) = X (x*y) (y*z) (z*x)
baka (x,y,z) = (x*y,y*z,z*x)
*Main> aho (X 1 2 3)
X 2 6 3
*Main> baka (1,2,3)
(2,6,3)
こんなのについてのこと。
0348デフォルトの名無しさん
2010/06/03(木) 21:22:35抽象度の高いプログラミングはHaskellが最先端だし、
実用目的でもClojureよりScalaのほうが有望だろ
もうlispは必修言語とはいえないんじゃないか
0349デフォルトの名無しさん
2010/06/03(木) 21:29:00これがある限り、one of them にしかならんだろう
0350デフォルトの名無しさん
2010/06/03(木) 21:47:09Lisp の最大の利点はコード=データである事。
Lisp は Haskell とは全く別の世界を持った言語だから、比べてどうと言うモンじゃない。
0351デフォルトの名無しさん
2010/06/03(木) 22:00:06>インタプリタだからできることであって、インタプリタと連携させる前提で
インタプリタではなくいきなりコンパイルする実装もあるよ。
それと、別に連携している訳じゃなくてコンパイラが組み込まれているのが当然というだけ。
0352デフォルトの名無しさん
2010/06/03(木) 22:00:42Haskellでもデータをコードとして扱えるよ
0353デフォルトの名無しさん
2010/06/03(木) 22:09:20コードをデータとして扱えるの?
マクロは無いんでしょ?
0354デフォルトの名無しさん
2010/06/03(木) 22:17:55lispがcobolとかみたいに消えると大きな声をだしてるのは昔からじゃない?
消えると叫ぶ人ほどlispがまだ残ってる理由がわからないんだと思うよ。
0355デフォルトの名無しさん
2010/06/03(木) 22:23:26それに伴って、思考を邪魔しない言語なんだよ。それに気がついた人ほど病みつき
になりやすいし、他の言語を触りたがらない人になりやすい。なんでかっていうと
特に手続き型なら雑務的なプログラミングでいらいらさせられるから。それ故に
使い続ける人がいるってことさ。
haskellも面白いし、好きだよ。
0356デフォルトの名無しさん
2010/06/03(木) 22:25:19COBOLとは生息している(いた)領域が違う
0357デフォルトの名無しさん
2010/06/03(木) 22:29:27http://lispjobs.wordpress.com/
0358デフォルトの名無しさん
2010/06/03(木) 22:30:57言語設計のせいでは無いような気がする。
0359デフォルトの名無しさん
2010/06/03(木) 22:32:16Haskellって これから需要がありそうな気がするんだけどな。
時代は関数型なのに、多くの人は手続き型をやってる印象が強い。
0360デフォルトの名無しさん
2010/06/03(木) 22:35:08違わない
0361デフォルトの名無しさん
2010/06/03(木) 22:38:290362デフォルトの名無しさん
2010/06/03(木) 22:42:09言語単体で需要が増えることはまずない
新しい環境とかプラットフォームが出てきてそこで最適な言語であれば需要が出てくる
UNIXでC、WindowsでVB、Webで最初Perl後Java&JavaScriptのように
0363デフォルトの名無しさん
2010/06/03(木) 22:43:45多少は変わる気もするけど、もしかしてもうあるのかな?
0364デフォルトの名無しさん
2010/06/03(木) 22:45:360365デフォルトの名無しさん
2010/06/03(木) 23:05:43emacsでlispもあるな
0366デフォルトの名無しさん
2010/06/03(木) 23:14:310367デフォルトの名無しさん
2010/06/03(木) 23:14:520368デフォルトの名無しさん
2010/06/03(木) 23:17:020369デフォルトの名無しさん
2010/06/03(木) 23:23:05Symbolics全盛時でも流行るとこまでいってないだろ
0370デフォルトの名無しさん
2010/06/03(木) 23:48:19結局、既存のライブラリはそのまま使えなくて意味ないのかな?
0371デフォルトの名無しさん
2010/06/04(金) 00:11:41ScalaやClojureも際物で終わる
iPhoneとかAndroidのアプリがHaskellでしか書けないとかそういう環境が必要
0372デフォルトの名無しさん
2010/06/04(金) 00:28:24企業とかに使ってもらうことが普及というなら、
いまだに30年前のアセンブラとかCOBOLとかがメインで動いてるから
Javaですらまだ普及していないと言える
0373デフォルトの名無しさん
2010/06/04(金) 00:31:22同時に成立するんじゃないの。
0374デフォルトの名無しさん
2010/06/04(金) 00:31:28保守的にならなきゃならんところほど 動きが鈍いからね。
日本って国を考えても国民性を考えても保守的過ぎるところがあるし
あたらしい動きに合わせられないからね。たしかに人がいないものは
保守ができないという問題はあるけどね。
日本でHaskellをというならば、
アメリカでは〜 とか ヨーロッパでは〜 とかのほうが頭の硬い連中
を説得できるかもな。笑
キラーアプリ次第とはいえるよね。railが出てきたときにRubyとなった
みたいに。
0375デフォルトの名無しさん
2010/06/04(金) 00:33:12みんなの〜 ってあったけど
結局みんな ってのがキーワードだからね。金太郎飴人間みたいで嫌な話だがね。
0376デフォルトの名無しさん
2010/06/04(金) 00:46:34個人で勝手に使うかどうかが基準ならHaskellはすでに十分に普及している
0377デフォルトの名無しさん
2010/06/04(金) 00:47:42それどこの統計?
0378デフォルトの名無しさん
2010/06/04(金) 00:51:550379デフォルトの名無しさん
2010/06/04(金) 00:54:44プログラマが他の業種より優れている点は、ツール次第で他人の1000倍以上の生産能力が手に入ること
こんなのは他の業種じゃありえない
これこそがプログラミングの醍醐味
カタルシス
よい言語は普及させずに知ってる人だけでコソコソ共有するべき
0380デフォルトの名無しさん
2010/06/04(金) 01:09:470381デフォルトの名無しさん
2010/06/04(金) 01:20:460382デフォルトの名無しさん
2010/06/04(金) 01:23:27中小向けじゃバックオフィス(銀行の勘定系相当)もJavaになってきてるし
もちろんHaskellの仕事はない
0383デフォルトの名無しさん
2010/06/04(金) 01:29:47当然Haskellの出番はない
0384デフォルトの名無しさん
2010/06/04(金) 01:39:540385デフォルトの名無しさん
2010/06/04(金) 06:48:42push/popのようなスタックのデータ構造の操作って、ピンとこない。
なんとなく副作用のない操作と合わないというのかメモリを多く食いそうな
感じがしちゃってます。実際はどうなんだろう?
という疑問があります。どうなんでしょうか?
>>360
コメントありがとうございます。
0386デフォルトの名無しさん
2010/06/04(金) 06:54:480387デフォルトの名無しさん
2010/06/04(金) 06:56:30ST monad
0388デフォルトの名無しさん
2010/06/04(金) 07:10:04ありがとうございます。ググッてみます!
0389デフォルトの名無しさん
2010/06/04(金) 09:47:51例えば状態としてスタックがある場合
push :: forall n, a -> State (Stack (n :+: 1)) ()
pop :: forall n m, n :+: 1 :==: m => State (Stack n) a
みたいに型の制約付きでpush,popが定義されていて、
空スタックを表現する型付きの値をpopすると型システムに弾かれるようなやつです
0390デフォルトの名無しさん
2010/06/04(金) 18:29:48xとxsを引数にとって結合する関数ってpushしてるとは言えない?
(x:xs)からxとxsを返す関数ってpopしてるとは言えない?
副作用があるように実装している言語が多いだけのように思えるんだが。
0391デフォルトの名無しさん
2010/06/04(金) 18:47:340392デフォルトの名無しさん
2010/06/04(金) 19:03:04抽象データ型はデータのインタフェースを定義するだけだからな
consリストでスタックを実装することもできる
0393デフォルトの名無しさん
2010/06/04(金) 20:16:23空popを制限するだけなら自然数を数える必要はなくて、
http://en.wikibooks.org/wiki/Haskell/GADT
ここのsafelistを参考
{-# LANGUAGE EmptyDataDecls, GADTs #-}
data Empty
data NotEmpty
data Stack a b where
EmptyS :: Stack a Empty
PushS :: a -> Stack a b -> Stack a NotEmpty
pop :: Stack a NotEmpty -> a
pop (PushS x _) = x
push = PushS
pop (push 1 EmptyS) ---> 1
pop EmptyS ---> 型検査ではじかれる Couldn't match expected type `NotEmpty' (略
0394デフォルトの名無しさん
2010/06/04(金) 23:01:22そういう手もあるんですなー
普通のファンクタにフラグが付いたものみたいで
何らかのイディオムとしてありそうです
0395デフォルトの名無しさん
2010/06/04(金) 23:30:43{-# LANGUAGE EmptyDataDecls, GADTs #-}
data Z
data S a
data List a n where
Nil :: List a Z
Cons :: a -> List a n -> List a (S n)
なんてすれば長さつきのリスト型ができますー
0396デフォルトの名無しさん
2010/06/04(金) 23:32:06pop EmptySの場合にはじかれるのは分かったけど、
それ以外だと、どのような場合にはじかれるの?
はじかれるかどうか試すテストを書けばいいの?
0397デフォルトの名無しさん
2010/06/05(土) 07:36:35型推論器が、NotEmptyと推論できない場合のすべて、じゃない?
関数引数で、型がスタック一般の場合とか。
0398デフォルトの名無しさん
2010/06/05(土) 09:16:31だとすると凄いな
0399デフォルトの名無しさん
2010/06/05(土) 09:51:47コンパイル時に検査できるかということなら無理
一般には長さの部分が抽象化された型になる
0400デフォルトの名無しさん
2010/06/05(土) 10:45:12型推論器ってなんなの?
(疎な条件分岐を考慮した) 定数伝播でpopが失敗するとかなら分かるんだが・・・
定数ではない何かが伝播するの?
0401デフォルトの名無しさん
2010/06/05(土) 11:20:35定数伝播を型でやってるようなもの…かな
型推論器はコンパイル時に走って、型指示のついていない
式に型をつけ、型が食い違っていればエラーを出す。
popはStack a NotEmpty型をとるため、
popにEmptyS (Stack a Empty型)を食わせるような式があると
コンパイル時にわかる。
0402393
2010/06/05(土) 11:23:16rest (PushS _ s) = x
に型がつかなくて、スタックとして使えないことに気付いた。
395の長さつきリストならスタックとしても使える。
0403393
2010/06/05(土) 11:24:00rest (PushS _ s) = s
0404デフォルトの名無しさん
2010/06/05(土) 12:07:39例えば実行するのにスタックをm消費する関数fがあると
f :: ((LestLen s) :<: m, n' ~ n - m ,s ~ Stack n a) => Stack n a -> Stack n' a
みたいな感じで制約付きの関数が定義できるといいかもなーとか考えてるんだけど
できそうにないのか残念
0405デフォルトの名無しさん
2010/06/05(土) 12:28:54Agdaがあなたが求めているものかもしれない。
0406デフォルトの名無しさん
2010/06/05(土) 14:38:55http://ideone.com/foQDB
こういう感じ?
0407デフォルトの名無しさん
2010/06/05(土) 15:27:03できるんですか!
ありがとうございます、参考にさせてもらいます
0408デフォルトの名無しさん
2010/06/05(土) 15:36:250409デフォルトの名無しさん
2010/06/06(日) 21:13:020410デフォルトの名無しさん
2010/06/06(日) 21:25:570411409
2010/06/06(日) 22:46:11ハクスムルじゃ大風呂敷なんでしょうか?
0412デフォルトの名無しさん
2010/06/06(日) 22:49:460413デフォルトの名無しさん
2010/06/07(月) 11:07:30お勧めとか、それぞれの特徴とか教えてもらえませんか?
あと、haskell.org の停止、長すぎる。
0414デフォルトの名無しさん
2010/06/07(月) 12:06:35私はPhooeyのドキュメンテーションを読んでみて使いやすそうだと思ったのだが、
残念ながら今のghcではビルドできない。
というわけでおすすめはQtだ。
0415デフォルトの名無しさん
2010/06/07(月) 15:13:38キャバル死ね
0416デフォルトの名無しさん
2010/06/08(火) 22:36:16GHC のライブラリにある Graphics.Win32 以下のものって、
Windows 用の GHC にしか入ってないの?
たとえば Linux 用の GHC なら、
なにか別のものが Graphics.*** として用意されてるの?
というのも、ここにあるライブラリと Yampa とか使って
GUI ライブラリを自作してみたいのだが、
Windows でしか使えない物になってしまうのか訊きたい。
0417デフォルトの名無しさん
2010/06/08(火) 23:58:28wxHaskellやGtk2HsはLinuxでも使える
0418デフォルトの名無しさん
2010/06/09(水) 07:25:26ありがと、やはりか。
0419デフォルトの名無しさん
2010/06/09(水) 17:44:18ごく少数のIOを注入するのがHaskellの理想だろ
理想が高くなると「本音と建前は別だよね」って奴も増えるから困る
0420デフォルトの名無しさん
2010/06/09(水) 17:52:41実際に書くスクリプトはliftIOでモナドにIOを入れまくりってものばかりですが…
0421デフォルトの名無しさん
2010/06/09(水) 18:20:03型安全なDSLを簡単に定義することができることだからな
あとは型に応じて自動補完するIDEがあればいいんだが
0422デフォルトの名無しさん
2010/06/09(水) 18:35:01本音と建前のバランスは実際のパフォーマンスを考慮して取られるべきだが、
そもそもHaskellは実用性を目的としていないのだから、困るのは逆ギレみたいなもんだ
0423デフォルトの名無しさん
2010/06/09(水) 18:39:11>そもそもHaskellは実用性を目的としていないのだから
Perl6はHaskell製
0424デフォルトの名無しさん
2010/06/09(水) 19:10:53そうだったか?
Perl 6の実装には2つあって、Haskellで書かれたPugsのほうは
もうテストにしか使われていないと聞いたが。
それにしても後付けの応用でしかない。
0425デフォルトの名無しさん
2010/06/09(水) 19:31:04http://www.perlfoundation.org/perl6/index.cgi?download_perl_6
>Most activ is Rakudo, second largest but bit sleeping is Pugs.
0426デフォルトの名無しさん
2010/06/09(水) 19:51:17ソースは?
0427デフォルトの名無しさん
2010/06/09(水) 20:28:21http://www.haskell.org/haskellwiki/History_of_Haskell
0428デフォルトの名無しさん
2010/06/09(水) 20:34:290429デフォルトの名無しさん
2010/06/09(水) 20:35:55Cなんかでチマチマやるより遥かに早いスパンで成果物が出来上がる。
0430デフォルトの名無しさん
2010/06/09(水) 20:44:43どこにもそんなことは書いてなくね?
むしろ逆じゃないか
たとえば3.6節
...On the other hand, we also really
wanted Haskell to be a useful language, for both teaching and real
applications.
0431デフォルトの名無しさん
2010/06/09(水) 21:53:52lispかhaskellかどっちがはやいだろうな。これはなんともいえん。
0432デフォルトの名無しさん
2010/06/09(水) 22:37:12有り物のライブラリを使って楽をしたかったり、長期間稼働する必要があったり、
ハードウェアに近い処理を実装する場合だったり、リソースの限られた機械で
動作させる必要があったり、誰かに使ってもらう為のライブラリを作る時や、
コンパイラのバグはコンパイラベンダーに丸投げしたい場合なんかは Haskell は
あんまり向いてないかもね。
0433デフォルトの名無しさん
2010/06/09(水) 23:03:23まあ一長一短で全体としてはどちらが良いともいえないと思うが。
0434デフォルトの名無しさん
2010/06/09(水) 23:33:410435デフォルトの名無しさん
2010/06/09(水) 23:35:320436デフォルトの名無しさん
2010/06/10(木) 06:33:33lispよりはましだろう。lispこそ独善的なプログラマの言語。
0437デフォルトの名無しさん
2010/06/10(木) 07:52:20抽象データ型とかをつかってインターフェースをしっかりと定義しておけば、
C++ や Java と同程度に複数人で開発できる。
したがって、自分以外の人間が保守することも普通にできる。
汎用的に使える応用度の高いライブラリも多く公開されてるから、
有り物のライブラリを使って楽をすることも問題ない。
ハードウェアに近い処理を直接実装するのはたしかに向かんかも。
ただ、ハードウェアに近い処理を抽象的に書く能力自体はあるし、むしろ向いてる。
それを実際のハードウェアに対して実行できるものに変換できればいい。
誰かに使ってもらう為のライブラリを作るのに
Haskell が向かない理由が思いつかない、説明してくれ。
残りは、Haskell の言語としての特徴が招く問題ではなく、
全て純粋に現在のコンパイラの問題だ。
0438デフォルトの名無しさん
2010/06/10(木) 08:57:47>コンパイラのバグはコンパイラベンダーに丸投げしたい場合なんかは Haskell はあんまり向いてない
かといって、素人でもメンテナンスを続けられる軽量なコンパイラもない
手も足も出ない
0439デフォルトの名無しさん
2010/06/10(木) 09:06:39>C++ や Java と同程度に複数人で開発できる。
>したがって、自分以外の人間が保守することも普通にできる。
Haskell プログラマの人数が圧倒的に少ない
共同開発者や保守要因の確保が困難(もしくは高コスト)
>汎用的に使える応用度の高いライブラリも多く公開されてるから、
>有り物のライブラリを使って楽をすることも問題ない。
当然、C/C++/Java のライブラリの数に比べたら圧倒的に少ない
>誰かに使ってもらう為のライブラリを作るのに
>Haskell が向かない理由が思いつかない、説明してくれ。
C でライブラリを作れば、殆どの言語から呼び出せる
Haskell でライブラリを作っても Haskell でしか使えない
>残りは、Haskell の言語としての特徴が招く問題ではなく、
>全て純粋に現在のコンパイラの問題だ。
現実的な視点では、コンパイラの問題も言語の問題。
0440デフォルトの名無しさん
2010/06/10(木) 10:06:130441デフォルトの名無しさん
2010/06/10(木) 12:53:14そうか、すまんな。
全員が普通に Haskell プログラマーであること前提の話だと思ってたよ。
全員が普通に Java プログラマーの開発環境の様に。
共同開発者や保守要因の確保が困難ほど Haskell プログラマーが不足しているという話なら、
おまえの言っていることは当たり前であり、全くの正論で議論の余地はない。
0442デフォルトの名無しさん
2010/06/10(木) 16:17:28Haskellプログラマの数が少ないというより、Haskellプログラマ自身を開発するコストがバカ高いと思われ
0443デフォルトの名無しさん
2010/06/10(木) 16:20:380444デフォルトの名無しさん
2010/06/10(木) 16:24:270445デフォルトの名無しさん
2010/06/10(木) 16:33:460446デフォルトの名無しさん
2010/06/10(木) 16:41:43それは頭悪そう
0447デフォルトの名無しさん
2010/06/10(木) 16:46:220448デフォルトの名無しさん
2010/06/10(木) 16:51:540449デフォルトの名無しさん
2010/06/10(木) 17:08:50近代物理学の自然単位系では、時間と距離とを区別しない
約30万km = 1秒
1光年 = 1年
0450デフォルトの名無しさん
2010/06/10(木) 22:35:560451デフォルトの名無しさん
2010/06/10(木) 23:33:560452デフォルトの名無しさん
2010/06/10(木) 23:54:190453デフォルトの名無しさん
2010/06/11(金) 00:32:38Cの利点:
* ポインタを使って、関数を関数の引数にできる
* 関数ポインタに自由に四則演算をすることができる
* 型キャストが容易。関数型をlong型にすることもできる
Haskellの欠点:
* ポインタがないので、関数を特別なファーストクラスオブジェクトにしなくてはならない
* 関数に自由に四則演算をすることはできない
* 型キャストはない
0454デフォルトの名無しさん
2010/06/11(金) 00:36:120455デフォルトの名無しさん
2010/06/11(金) 00:44:27おい、初心者の就職活動みたいな事すんなよ
0456デフォルトの名無しさん
2010/06/11(金) 12:43:340457デフォルトの名無しさん
2010/06/11(金) 12:46:560458デフォルトの名無しさん
2010/06/11(金) 12:52:370459デフォルトの名無しさん
2010/06/11(金) 13:04:370460デフォルトの名無しさん
2010/06/11(金) 14:25:17積 f *** f
差と商はどう定義しよう
0461デフォルトの名無しさん
2010/06/11(金) 15:23:21和 f+++g = \x-> Nothing `mplus` f x `mplus` g x
0462デフォルトの名無しさん
2010/06/11(金) 15:55:160463デフォルトの名無しさん
2010/06/11(金) 16:00:51というか、MonadPlusが「和」を定義するクラスなんだが
0464デフォルトの名無しさん
2010/06/11(金) 16:07:56fが成功かつgが失敗のときf-gが成功
0465デフォルトの名無しさん
2010/06/11(金) 18:49:390466デフォルトの名無しさん
2010/06/11(金) 18:56:15色々と制約を追加してModuleを構成できるArrowってのを考えるのが楽か
Arrowそのものが抽象だから具体例を考えなくてもいいし
0467デフォルトの名無しさん
2010/06/11(金) 19:14:51* :: (S1 -> T1) -> (S2 -> T2) -> (S1,S2) -> (T1,T2)
(f * g) (x1,x2) = (f x1, g x2)
+ :: (S1 -> T) -> (S2 -> T) -> (S -> T)
where data S = Inl S1 | Inr S2
(f + g) x = case x of { Inl y -> f y; Inr y -> g y }
和がHaskellの構文でうまく書けないけど
0468デフォルトの名無しさん
2010/06/11(金) 19:20:010469デフォルトの名無しさん
2010/06/11(金) 19:30:340470デフォルトの名無しさん
2010/06/11(金) 19:50:14それは命題論理に対応するっていう話で、代数系じゃないでしょ
0471デフォルトの名無しさん
2010/06/11(金) 20:14:040472デフォルトの名無しさん
2010/06/11(金) 20:19:25Haskellはそもそも論理型じゃないし
0473デフォルトの名無しさん
2010/06/11(金) 20:33:31CCC+直和が代数系でない?
0474デフォルトの名無しさん
2010/06/11(金) 20:33:38でtype of typeができないから二階じゃない
0475デフォルトの名無しさん
2010/06/11(金) 20:50:44RankNTypes拡張を有効にしたら
高階論理なんじゃないの?
0476デフォルトの名無しさん
2010/06/11(金) 21:43:140477デフォルトの名無しさん
2010/06/11(金) 22:14:430478デフォルトの名無しさん
2010/06/11(金) 22:21:307年前の本なんですよね?
絶版したんでしょうか?
0479デフォルトの名無しさん
2010/06/12(土) 00:15:57近日発売中?
0480デフォルトの名無しさん
2010/06/12(土) 00:45:08お前の中では論理っていうと二値論理のことなのか?
0481デフォルトの名無しさん
2010/06/12(土) 01:14:02この本ずっと待ってんだけど6月下旬らしいね
0482デフォルトの名無しさん
2010/06/12(土) 10:09:42大学を思想的に侵略して関数型言語以外はクズという主義を学生に叩き込もうぜ
0483デフォルトの名無しさん
2010/06/12(土) 10:27:190484デフォルトの名無しさん
2010/06/12(土) 12:21:480485デフォルトの名無しさん
2010/06/12(土) 12:24:410486デフォルトの名無しさん
2010/06/12(土) 12:32:160487デフォルトの名無しさん
2010/06/12(土) 13:42:090488デフォルトの名無しさん
2010/06/12(土) 14:03:070489デフォルトの名無しさん
2010/06/12(土) 16:11:17枠にはめて考えること自体合わないんだと思うよ。
今じゃマルチパラダイムになってるからね。
型にハメる系統と対照的だといえるよ。
0490デフォルトの名無しさん
2010/06/12(土) 16:26:08関数型言語はラムダ計算の応用だからLISPは関数型言語
0491デフォルトの名無しさん
2010/06/12(土) 16:34:34嘘ですね
> 関数型言語はラムダ計算の応用だからLISPは関数型言語
前件が意味不明です
0492デフォルトの名無しさん
2010/06/12(土) 17:58:43LISPマシン専用言語だ
0493デフォルトの名無しさん
2010/06/12(土) 18:33:42あなたがウソですね
0494デフォルトの名無しさん
2010/06/12(土) 20:19:19自転車や自動車、それに八つ橋などの例をみても、元祖が子孫と違うのは珍しくない。
関数型言語でも同様のパターンがあると考えるのはごく自然な発想だ。
0495デフォルトの名無しさん
2010/06/12(土) 20:23:06>型にハメる系統と対照的だといえるよ。
Haskellのことを言っているのであれば、これは少々不適切な表現だ。
Haskellはデータを既存の型にはめるだけではない。
プログラマが型を積極的に定義することを許しているのだから、型を使う言語と言ってほしい。
0496デフォルトの名無しさん
2010/06/12(土) 20:25:290497デフォルトの名無しさん
2010/06/12(土) 20:27:34初心者にありがちな失敗コースです。
0498デフォルトの名無しさん
2010/06/12(土) 20:32:39http://obiekt.hp.infoseek.co.jp/t72/genesis1.html
0499デフォルトの名無しさん
2010/06/12(土) 20:39:46Lisp はパラダイム非依存のパラダイス言語です
0500デフォルトの名無しさん
2010/06/12(土) 20:42:250501デフォルトの名無しさん
2010/06/12(土) 20:48:41というか、lispのパラダイムにはsyntactic abstraction(構文抽象)という名前があるんだよ
0502デフォルトの名無しさん
2010/06/12(土) 20:55:54具体的なものから抽象的な概念に進歩していくのか
0503デフォルトの名無しさん
2010/06/12(土) 21:06:510504デフォルトの名無しさん
2010/06/12(土) 21:18:080505デフォルトの名無しさん
2010/06/12(土) 21:20:010506デフォルトの名無しさん
2010/06/12(土) 21:24:410507物理っぽく言ってみた
2010/06/12(土) 21:31:18現代関数型言語(より良い理解のために)=
0508J. M.
2010/06/12(土) 21:46:05「ただ、リストの再帰処理が書ける言語が欲しかっただけ」
といい出せない雰囲気…
0509デフォルトの名無しさん
2010/06/12(土) 21:56:270510デフォルトの名無しさん
2010/06/13(日) 02:39:41と書いてあるのをどこかで見た気がします。
これは本当でしょうか?
0511デフォルトの名無しさん
2010/06/13(日) 02:46:340512デフォルトの名無しさん
2010/06/13(日) 06:29:39まあ、Haskellに詳しくない人は、シミュレーションをどうやってモデリングすべきか見当もつかないかもしれないね
0513デフォルトの名無しさん
2010/06/13(日) 07:27:25副作用がないってのがメモリは食うし遅いという印象があるのかも
0514デフォルトの名無しさん
2010/06/13(日) 07:46:20きれいなやり方が見当たらないときは、きたないやり方も許されます
詳しい人はそれを知っているので、数値計算もシミュレーションもこわくない
0515デフォルトの名無しさん
2010/06/13(日) 09:11:150516デフォルトの名無しさん
2010/06/13(日) 10:01:07SoftwareDesignでnobsunが書いた記事でしょ。
Haskellはクソ遅いからシミュレーションみたいなパワーがいる処理には向いてないよw
0517デフォルトの名無しさん
2010/06/13(日) 13:26:570518デフォルトの名無しさん
2010/06/13(日) 13:47:06nobsunが言っているのは、我々が感じているのと同様に
reactiveなプログラミングをするのが非常に煩雑になってしまうというところ。
シミュレーションは物によるけど、決まったタイミングで処理をするもの、
例えばアニメーションとかは書きにくいね。
現在YampaなどFRPライブラリが作られてはおり、
reactiveなプログラミングを支援しようという動きはあるが、
あまりわかりやすくプログラミングできるとはとても言い難い。
そしてさらに誰がいおうと、HaskellはCと比べて明らかに遅い。
0519デフォルトの名無しさん
2010/06/13(日) 14:01:160520デフォルトの名無しさん
2010/06/13(日) 14:08:09を置き換える事が可能だと思う。
だからオブジェクト指向で有利なreactiveなプログラミングも関数型言語で簡単にできるようになると思う。
0521デフォルトの名無しさん
2010/06/13(日) 16:22:15記述量もCと同等以上かつ大抵の人には読めない…
やっぱC++でHaskellっぽく書くというところで妥協するしかないのか
0522デフォルトの名無しさん
2010/06/13(日) 17:46:29勝手にアルゴリズムを推論して書き換えちゃうくらいじゃないとどうにもならないんじゃないの。
0523デフォルトの名無しさん
2010/06/13(日) 18:00:22何言ってるんだ?
0524デフォルトの名無しさん
2010/06/13(日) 18:02:540525デフォルトの名無しさん
2010/06/13(日) 18:07:460526デフォルトの名無しさん
2010/06/13(日) 18:20:49いや、CPUアーキテクチャの違いを吸収してくれるのは大きい。
小さなパフォーマンスコストでポータブルなコードを書けるんだからな。
0527デフォルトの名無しさん
2010/06/13(日) 18:40:100528デフォルトの名無しさん
2010/06/13(日) 19:07:06高級言語がアーキテクチャの違いを吸収してくれると言っているんだから。
0529デフォルトの名無しさん
2010/06/13(日) 19:24:02必要な計算ならhaskellは得意だと思うんだけど。
0530デフォルトの名無しさん
2010/06/13(日) 20:55:39Javaに勝てれば十分。
0531デフォルトの名無しさん
2010/06/13(日) 21:04:33しかし遅延評価だからスペースリークが怖いな
0532デフォルトの名無しさん
2010/06/13(日) 21:45:35たとえばスペースリークが出ないようにソースを調整したのに、
べつのコンパイラでコンパイルしたら出ちゃったとか。
それとも、共通したテクニックで防げるものなの?
0533デフォルトの名無しさん
2010/06/13(日) 22:04:45馬鹿な例だけど例えば必ずリークするコンパイラ作ってそれでコンパイルすればリークするし。
0534デフォルトの名無しさん
2010/06/13(日) 22:06:29程度の差はあるだろうが、基本的な考え方は同じでいけるはず。
Haskell でのスペースリークってのは要は遅延させた仕事がたまっていっぱいいっぱいってことだから。
それがないように注意深く調整すればいいって話。
0535デフォルトの名無しさん
2010/06/13(日) 22:06:40call by need簡約だけ想定してスペースリークを潰せば実用上問題ない
0536デフォルトの名無しさん
2010/06/13(日) 22:36:10「Haskellで書くより速いプログラムをCで書くなんて非現実的な苦行」と言われるようになるかもしれない。
というか、なってほしい。
0537デフォルトの名無しさん
2010/06/13(日) 22:41:55純粋関数型言語だから自動並列化が簡単になるわけではない
0538デフォルトの名無しさん
2010/06/13(日) 22:48:02単調増加的に刻一刻と変化する「現在時刻」の列を無限リストで表現する方法があるよね。
[t0, t1, t2, t3, .....] みたいな。
ああいう無限リストで表現された現在時刻をつかってアニメーションなんかさせる場合、
リストの既に消費した部分(先頭の方)はちゃんと GC で回収されるものなの?
そのようなリストの要素は一度参照されればもう二度と参照されないことは
プログラムソースの全体をちゃんと見れば分かることだけど、
そういう事をコンパイラに期待しても良いものなのか、ちょっと心配になる。
0539デフォルトの名無しさん
2010/06/13(日) 22:54:120540デフォルトの名無しさん
2010/06/13(日) 23:06:000541デフォルトの名無しさん
2010/06/13(日) 23:10:01けっこう賢いんだな
0542デフォルトの名無しさん
2010/06/13(日) 23:17:070543デフォルトの名無しさん
2010/06/14(月) 00:11:450544デフォルトの名無しさん
2010/06/14(月) 00:13:58どのコンパイラでも、中間コードを生成するオプションを使ってコードを追えば、明らかにヤバい部分は回避できる
0545デフォルトの名無しさん
2010/06/14(月) 00:26:55なんで?
この ts' ってのはたぶん最後に取得した時刻の事だよね。
head ts は捨てられないけど、それ以降から ts' までは要らないから、
GC で回収されるんじゃないの?
つまり ts = [t0, t1, t2, t3, ... tn-1, tn] で処理が完了したなら、
tn - head ts としても t1 や t2 などは明らかに要らないよね(参照されないから)。
それでも回収できないの?
0546デフォルトの名無しさん
2010/06/14(月) 00:38:45tsが参照されたままなんだよ
0547デフォルトの名無しさん
2010/06/14(月) 07:31:33てっきり途中の t1 や t2 などは一度しか参照されないという事を
ソースを見て解析しているのかと思ってた。
あくまで実行時に ts が保持されているかどうかで、
リスト全体が保持されてしまうのかが決まるのか。
ずっと勘違いしてた、ありがと。
0548デフォルトの名無しさん
2010/06/14(月) 09:29:410549デフォルトの名無しさん
2010/06/15(火) 12:16:51と正格適用すると回収されるのを期待できますか?
0550デフォルトの名無しさん
2010/06/15(火) 18:32:50headはもともと正格な関数なので、それでは何も変わらない
やるなら、リストを辿り初める前にあらかじめseqしておく
let h = head ts in seq h {- ここで処理。最後にhを使う -}
0551デフォルトの名無しさん
2010/06/16(水) 10:59:47ここで id は正格であると書かれています。
ghciだと
Prelude> (length . (:[]) . id) undefined
1
Prelude> (length . (:[]) . id $!) undefined
*** Exception: Prelude.undefined
となります。idが正格ならどちらも例外になる気がするのですが、なぜそうならないのでしょう?
0552デフォルトの名無しさん
2010/06/16(水) 11:15:35idは正格だけどlength . (:[]) . idは非正格
0553デフォルトの名無しさん
2010/06/16(水) 11:40:06(length . (:[]) . (id $!)) undefined
のつもりで書いたんですが、式はそうなってなかったですね。
結局この場合、idを評価する前に終わってしまってるってことか。
例外になるタイミングが理解できないです。「タイミング」なんというものを
考えていること自体が間違ってるのかなぁ…
id undefined は id が返す undefined が例外を生成する
id $! undefined は idに適用する式 undefined を評価したときに例外を生成する
と考えてしまうのですが(なのでidが正格という意味がわからない)、
違うんですよね、きっと…
0554デフォルトの名無しさん
2010/06/16(水) 11:45:450555デフォルトの名無しさん
2010/06/16(水) 12:45:20>id undefined は id が返す undefined が例外を生成する
>id $! undefined は idに適用する式 undefined を評価したときに例外を生成する
別にそう考えて問題ない
重要なのは、その二つの式の違いが外部からまったく区別できないということ
どちらの式も、評価されれば例外を生成するし、評価されなければ何もおこらない
0556デフォルトの名無しさん
2010/06/16(水) 13:17:29undefinedが例外を生成する
評価が例外を生成する
0557デフォルトの名無しさん
2010/06/16(水) 17:36:40例外はundefinedが評価されたときに発生する,と考えればよい.
ポイントは以下の2点.
・式の評価はその式がwhnfという形式になるまで評価を繰り返すことで行われる.
・undefinedはwhnfではない.
id undefinedという式を評価すると,idの定義からundefinedに変換されるが,
undefinedはwhnfでないため,再び評価が行われ、例外が発生する(有難いことに).
id $! undefinedという式を評価すると、$!の定義から引数であるundefinedが評価され、
例外が発生する.
例外発生までの過程は違うが、結果は同じになる.
正格関数では常にこうなるので、この現象を「idが正格だから〜」と説明しているのだろう.
0558デフォルトの名無しさん
2010/06/16(水) 22:02:34http://satashi.tumblr.com/post/704197618/via-www-pornodl-com
0559デフォルトの名無しさん
2010/06/17(木) 03:42:430560デフォルトの名無しさん
2010/06/17(木) 10:59:07Qi使ってる人居る?
HaskellとLispのいいとこ取りみたいで、個人的には重宝してるんだが。
0561デフォルトの名無しさん
2010/06/17(木) 11:12:51そういう話は次世代技術にはありがちなんだよ。
0562デフォルトの名無しさん
2010/06/17(木) 17:27:31恥ずかしながら、その言語をはじめて知りました。
ちょっとgoogleってみたけど、たしかに面白そう。
型定義のやり方が独特そうで、ちょっと戸惑っているけど。
0563デフォルトの名無しさん
2010/06/19(土) 02:45:23common lispの場合は型宣言とかやるよ。マクロ使って三重バエはすっきり
できる。
そんなTIPSってあまりないの?
しらべたら
http://en.wikibooks.org/wiki/Haskell/Performance_Examples
http://www.randomhacks.net/articles/2007/01/22/high-performance-haskell
この辺のストリングや入出力がらみのところでの工夫はみっけたくらい。
泥臭く汚くなるhaskellちゃんになるんだろうが、はやいって汚くなりがちやからね。
>>558 のおっぱいが遅延評価されて干からびたようなものか? 意味不明
0564デフォルトの名無しさん
2010/06/19(土) 07:09:17Shootoutでは速いほうだよ。
まあ、速くなるように書かれているだからだが
一体誰が遅いといっているのか知らないが、普通に書いてもRubyなどの動的言語よりは速い
Haskellはそもそも静的型なので、型宣言してもパフォーマンスは変わらない
0565デフォルトの名無しさん
2010/06/19(土) 11:11:190566デフォルトの名無しさん
2010/06/19(土) 11:37:330567デフォルトの名無しさん
2010/06/19(土) 15:22:040568デフォルトの名無しさん
2010/06/19(土) 15:32:49実際には10倍も遅くはないが。
0569デフォルトの名無しさん
2010/06/19(土) 15:50:530570デフォルトの名無しさん
2010/06/19(土) 16:44:050571デフォルトの名無しさん
2010/06/19(土) 17:39:30ld のメモリ食いは安い VPS だと死ねる
0572デフォルトの名無しさん
2010/06/19(土) 18:20:48あとリンカはgnu goldがこなれてくればある程度KAIZENできそう
0573デフォルトの名無しさん
2010/06/23(水) 20:12:58$ ghc -o test test.hs
<command line>: unknown package: haskell98
ghc -v で気になっているのがこのあたりです。
(略)
package haskell98-1.0.1.1-64d0d2445dbab2ae6f4c0ef4dd5acffb is shadowed by package haskell98-1.0.1.1-672bbe87e44bc3d3a6893d91fa352541
package haskell98-1.0.1.1-672bbe87e44bc3d3a6893d91fa352541 is unusable due to missing or recursive dependencies:
random-1.0.0.2-53cbb8e9db87dab393d00e96a9805bcd
(略)
package random-1.0.0.2-53cbb8e9db87dab393d00e96a9805bcd is shadowed by package random-1.0.0.2-f4208c3677aeaaaf41e4d36309c0b4ff
(略)
wired-in package haskell98 not found.
(略)
haskell98の 672bbe.. は~/.cabalに入っているもの、64d0d2.. はGHC-6.12.2の一部です。
randomの 53cbb8.. は~/.cabalに入っているもの、f4208c3.. はGHC-6.12.2の一部です。
randomは~/.cabalのものよりGHC付属の方が優先されているようなんですが、これは問題ない
のでしょうか?
haskell98 が見つからない、というエラーはどうやったら解消できるでしょうか…
0574デフォルトの名無しさん
2010/06/23(水) 20:20:25ghc --make test.hs
としてもうまくいかない?
0575デフォルトの名無しさん
2010/06/23(水) 20:30:28うまくいきました…
ghc --help の先頭に書いてあるんじゃんねぇ orz
ありがとうございます、そしてお騒がせしました。
0576デフォルトの名無しさん
2010/06/23(水) 21:46:21わ け わ か ら ん
0577デフォルトの名無しさん
2010/06/23(水) 22:07:31どこが分からないのでしょうか?
0578デフォルトの名無しさん
2010/06/23(水) 22:08:000579デフォルトの名無しさん
2010/06/23(水) 22:09:34分からない言葉はひとつひとつ調べていきましょう。
0580デフォルトの名無しさん
2010/06/23(水) 22:43:300581デフォルトの名無しさん
2010/06/23(水) 22:57:15いろんなテーマについて関数プログラミングの話してるみたいなんだけど、そのテーマが分からん
この本は続編みたいなんだけど、詳しくは前の本参照、みたいな箇所がいきなり出てきてわけわからん
あと、コード(?)の断片は出てるけど、実行方法とかは載ってないので初心者お断り
0582デフォルトの名無しさん
2010/06/23(水) 22:59:450583デフォルトの名無しさん
2010/06/24(木) 00:24:27ttp://www.amazon.co.jp/%E9%96%A2%E6%95%B0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3
%E3%82%B0%E3%81%AE%E6%A5%BD%E3%81%97%E3%81%BF-%EF%BC%AA%EF%BD%85%EF%BD%92%EF%BD%85%EF%BD
%8D%EF%BD%99-%EF%BC%A7%EF%BD%89%EF%BD%82%EF%BD%82%EF%BD%8F%EF%BD%8E%EF%BD%93-%EF%BD%81
%EF%BD%8E%EF%BD%84-%EF%BC%AF%EF%BD%85%EF%BD%87%EF%BD%85-%EF%BD%84%EF%BD%85-%EF%BC%AD%EF
%BD%8F%EF%BD%8F%EF%BD%92/dp/4274068056/ref=sr_1_1?ie=UTF8&s=books&qid=1277306584&sr=1-1
0584デフォルトの名無しさん
2010/06/24(木) 00:25:340585デフォルトの名無しさん
2010/06/24(木) 00:31:500586デフォルトの名無しさん
2010/06/24(木) 01:21:190587デフォルトの名無しさん
2010/06/24(木) 07:18:41サポートサイト
http://fop.sampou.org/
正誤表
http://fop.sampou.org/static/errata.html
>>108-109を見ると実践派はReal World Haskell→関数プログラミングの楽しみ、
>>157-159を見ると理論派はプログラミングHaskell→関数プログラミングの楽しみ、
の順に読む方が挫折しにくそうですね。
0588デフォルトの名無しさん
2010/06/24(木) 07:28:08どのテーマにも興味が持てなかったのなら、
仕方がないのではないか?
よくあることだよ。
C/C++ や C# の文法を一通り覚えたら、
簡単なゲームから作り始める人もいれば、
テキストエディタから作り始める人もいる。
計算物理学入門とかの本を実践しながら遊ぶ人もいる。
同じ事だ。
0589デフォルトの名無しさん
2010/06/24(木) 10:38:380590デフォルトの名無しさん
2010/06/24(木) 19:49:050591デフォルトの名無しさん
2010/06/24(木) 19:50:11関数プログラミングの楽しみ
関数プログラミングの終焉
3部冊とか?
0592デフォルトの名無しさん
2010/06/24(木) 20:32:35確か、これですかね。英語版は2nd ed.あり(>>2の一つ目の本)。
http://www.amazon.co.jp/dp/4764901811
関数プログラミング
R. バード (著), P. ワドラー (著)
次スレではテンプレ再構成ですね。何時になるか分かりませんが
0593デフォルトの名無しさん
2010/06/25(金) 22:04:01https://dspace.jaist.ac.jp/dspace/bitstream/10119/908/3/1184paper.pdf
0594デフォルトの名無しさん
2010/06/26(土) 21:45:130595デフォルトの名無しさん
2010/07/05(月) 20:28:090596デフォルトの名無しさん
2010/07/05(月) 20:57:480597デフォルトの名無しさん
2010/07/09(金) 11:45:28そこではControl.OldExceptionモジュールが使われています。
例題プログラムであるGlob.hsではControl.Exceptionモジュールが用いられているのですが(211頁に記載)、それだと
Prelude> :m Control.Exception
Prelude Control.Exception> :t handle (const (return []))
<interactive>:1:0:
Ambiguous type variable `e' in the constraint:
`Exception e'
arising from a use of `handle' at <interactive>:1:0-25
Probable fix: add a type signature that fixes these type variable(s)
と怒られてしまいます。なして?
どう修正すれば良いのでしょうか…いきなり19章の例外までジャンプは無理っすw
0598デフォルトの名無しさん
2010/07/09(金) 14:03:420599597
2010/07/11(日) 10:56:27レスありがとうございます。ただ・・・
Illegal signature in pattern: SomeException
となってしまいました。
結局、元のGlob.hsソースのimportをControl.ExceptionからControl.OldExceptionに替えるとwarningが出るものの一応走りました。
0600デフォルトの名無しさん
2010/07/15(木) 12:42:05こんなエラーが出ます。6.12.2のソースでもやっぱりこのようになります。
(このコピペは6.12.2のソースをコンパイルしたときの物)
"/opt/ghc/bin/ghc" -H32m -O --make utils/ghc-pkg/Main.hs -o utils/ghc-pkg/dist/build/ghc-pkg \
-Wall -fno-warn-unused-imports \
-DCABAL_VERSION=1,8,0,4 \
-DBOOTSTRAPPING \
-odir bootstrapping \
-hidir bootstrapping \
-iutils/ghc-pkg \
-XCPP -XExistentialQuantification -XDeriveDataTypeable \
-ilibraries/Cabal \
-ilibraries/filepath \
-ilibraries/extensible-exceptions \
-ilibraries/hpc \
-ilibraries/ghc-binary/src \
-ilibraries/bin-package-db
utils/ghc-pkg/Main.hs:76:7:
Could not find module `IO':
Use -v to see a list of the files searched for.
$ HOME=~/tmp gmake だとコンパイルできるので、~/.ghc の中身が影響して
何か問題が起きているのかなと思うのですが、こういう場合はどうする
のがよいのでしょうか?
0601デフォルトの名無しさん
2010/07/17(土) 17:15:43再帰を繰り返して行った時の最後のidentity[]とはどう繋がるんでしょうか?
(b1:) <$> (b2:) <$> … <$> (identity []の結果(?))みたいな感じになると思うのですが、
この演算てどう行われるのでしょうか。
隣の頁のparseWhileVerboseを見ると、ifのTRUE節に対応した方はidentity (b:bs)と出てるから、
これが何故出てくるか分かれば理解できそうな気もするのですが…。
0602デフォルトの名無しさん
2010/07/18(日) 19:49:21自前のDLLをHaskellで読み込んで使用するのって、どのようにすればいいのでしょうか?
0603デフォルトの名無しさん
2010/07/18(日) 21:57:19ttp://www.kotha.net/ghcguide_ja/latest/win32-dlls.html
ここを参考にHaskellで作ったDLLを、Haskellで呼んでみた。インデント崩れるのはご愛敬。
++ 以下ソース ++
{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign
import System.Win32.DLL
-- ffitest.dllをロード.
ffiDLL = unsafePerformIO $ loadLibrary "ffitest"
-- ffitest.dllで定義されているadder@8をHaskellで定義.
adder = unsafePerformIO $ (getProcAddress ffiDLL "adder@8" >>= return . arg . castPtrToFunPtr)
-- dllで使う引数と戻り値を定義.
foreign import stdcall "dynamic" arg :: FunPtr (Int3) -> Int3
type Int3 = Int -> Int -> Int
main = do print $ adder 3 3
0604デフォルトの名無しさん
2010/07/20(火) 01:48:120605デフォルトの名無しさん
2010/07/20(火) 11:22:36入力を消費(parseByte)しつつ、Functor 型クラスのインスタンスの
Parseの値部分 [Word8]に
f <$> (== fmap f) の f (ここでは (b:) :: [a] -> [a]) を適用
act :: [a] -> [a]
act xs = case xs of -- fmap p <$> peekByte の結果
(b:bs) -> (b:) $ act bs -- Just True の間
[] -> [] -- Just True 以外になった時
ghci> act ['a','b','c']
"abc" -- ('a':) $ ('b':) $ ('c':) $ []
と同様ではないでしょうか
0606デフォルトの名無しさん
2010/07/21(水) 14:01:43きちんと動かしてないけど、こんな感じにパラフレーズできるんじゃね?
parseWhile p = do
mx <- peekByte
mp <- return $ fmap p $ mx
if mp == Just True
then (do
h <- parseByte
t <- parseWhile p
return (h:t))
else (return [])
0607601
2010/07/22(木) 00:39:56端的には>>605の終わりの方に書いてある意味ですね。
257頁のParse上のFunctorクラスのインスタンス化の意味を理解してませんでした…。
挫折を止まらせてくれたレス、thxです。
0608デフォルトの名無しさん
2010/07/22(木) 01:43:460609デフォルトの名無しさん
2010/07/22(木) 05:55:550610デフォルトの名無しさん
2010/07/22(木) 06:40:56モナドやクロージャで代替できる
0611デフォルトの名無しさん
2010/07/22(木) 08:08:51永遠の謎
0612デフォルトの名無しさん
2010/07/22(木) 08:11:580613デフォルトの名無しさん
2010/07/22(木) 12:43:260614デフォルトの名無しさん
2010/07/22(木) 16:43:420615デフォルトの名無しさん
2010/07/22(木) 16:55:240616デフォルトの名無しさん
2010/07/22(木) 18:04:03白モナドモドキ
0617デフォルトの名無しさん
2010/07/22(木) 18:34:070618デフォルトの名無しさん
2010/07/22(木) 20:03:42最近はアルコール度数が高い黒モナドの方が美味しそうに思えてきた
0619デフォルトの名無しさん
2010/07/22(木) 20:06:300620デフォルトの名無しさん
2010/07/22(木) 21:26:190621デフォルトの名無しさん
2010/07/22(木) 21:31:540622デフォルトの名無しさん
2010/07/22(木) 21:38:54よかったな
イレ食いだぞ
0623デフォルトの名無しさん
2010/07/22(木) 23:11:500624デフォルトの名無しさん
2010/07/22(木) 23:54:380625デフォルトの名無しさん
2010/07/23(金) 01:19:29わくわくしてスレを開いたらこれだよ!
0626デフォルトの名無しさん
2010/07/23(金) 12:44:430627デフォルトの名無しさん
2010/07/23(金) 17:05:140628デフォルトの名無しさん
2010/07/23(金) 18:13:030629デフォルトの名無しさん
2010/07/23(金) 22:20:320630デフォルトの名無しさん
2010/07/23(金) 22:23:26なにが起こるかはすべて実装依存。
0631デフォルトの名無しさん
2010/07/23(金) 23:15:00http://haskell.org/onlinereport/io-13.html
Haskellの 『関 数 は』 副作用を持たない、で良くね?
0632デフォルトの名無しさん
2010/07/23(金) 23:27:350633デフォルトの名無しさん
2010/07/23(金) 23:31:44ということでおk?
0634デフォルトの名無しさん
2010/07/24(土) 00:51:20Computationとは言語仕様のことじゃないか、ということ。
0635デフォルトの名無しさん
2010/07/24(土) 10:17:17誰かあれ+SDL/GLFWでテトリスとか作れるの?本当に??
0636デフォルトの名無しさん
2010/07/24(土) 12:14:080637デフォルトの名無しさん
2010/07/25(日) 21:50:000638デフォルトの名無しさん
2010/07/25(日) 21:56:130639デフォルトの名無しさん
2010/07/25(日) 22:10:280640デフォルトの名無しさん
2010/07/25(日) 23:03:55GCのある言語だから需要が少いんだと思う
もし良かったら、どういう用途で使うのか教えてくれないか
どうしても必要なら自分で作ればいいんだけど、C++と違ってコピーコンストラクタを定義できないので
不用意にコピーしないように注意深く扱わないといけない気がする
0641デフォルトの名無しさん
2010/07/29(木) 18:59:55haskellでリストの内包表記と再帰用いずに、ピタゴラス数を求められるソース書ける?
俺は無理だがなwwww
0642デフォルトの名無しさん
2010/07/29(木) 19:00:05haskellでリストの内包表記と再帰用いずに、ピタゴラス数を求められるソース書ける?
俺は無理だがなwwww
0643デフォルトの名無しさん
2010/07/29(木) 19:20:29→内包表記をdo式で書き直す
→再帰をYコンビネータで書き直す
0644宿敵はHaskell
2010/07/30(金) 01:05:59誰か書ける人いる?
0645デフォルトの名無しさん
2010/07/30(金) 01:09:340646デフォルトの名無しさん
2010/07/30(金) 01:21:42教えてください
0647デフォルトの名無しさん
2010/07/30(金) 02:47:48pythagoras = y f
data Rec a = In { out :: Rec a -> a }
y = \f -> (\x -> f (out x x)) (In (\x -> f (out x x)))
f g n = if n == 0 then 0 else n + g (n - 1)
0648デフォルトの名無しさん
2010/07/30(金) 07:56:37fib = \n -> round $ (((1 + sqrt 5)/2)^n + ((1 - sqrt 5)/2)^n)/(sqrt 5)
0649デフォルトの名無しさん
2010/07/30(金) 07:57:550650デフォルトの名無しさん
2010/07/30(金) 08:17:05こんなんでいいかな
f m n = (m^2-n^2, 2*m*n, m^2+n^2)
g m = [1..(m-1)]
p n = map (f n) (g n)
map p [2..10]
ただし gcd ≠ 1
0651デフォルトの名無しさん
2010/07/30(金) 12:44:40そんなのでよかったら、適当に再帰を隠したライブラリ自作しても同じだと思うが
0652宿敵はHaskell
2010/07/30(金) 17:59:18皆さんもありがとうございました
647さん650さんありがとうございます。
0653デフォルトの名無しさん
2010/07/30(金) 18:09:500654647
2010/07/31(土) 01:31:40ピタゴラス数を1からnまでの和と勘違いしてた
暑さのせいか…
pyth = [ (x,y,z) | x <- [1..], y <- [1..x], z <- [1..2*x*x], x^2 + y^2 == z^2 ]
を643の方法で書き直した。まったくの力技。
再帰型は使ってますが関数の再帰定義は一切ございません
http://codepad.org/aoVADy5Z
うちのパソコンだと、(120,119,169)から次がいくら待ってもでてこない…
0655デフォルトの名無しさん
2010/07/31(土) 01:41:59そんで、友達の解は何?
0656デフォルトの名無しさん
2010/07/31(土) 11:20:56Wadlerのrecursive types for freeでおk?
0657647
2010/08/01(日) 14:15:180658デフォルトの名無しさん
2010/08/01(日) 23:15:49ttp://www.amazon.co.jp/gp/product/0521513383/ref=sib_rdr_dp
胸熱
0659デフォルトの名無しさん
2010/08/02(月) 13:25:30誰かヒントだけでも教えてください。
0660デフォルトの名無しさん
2010/08/02(月) 17:47:41とりあえず関数型言語を使わないで考えてみなさい。
0661デフォルトの名無しさん
2010/08/02(月) 19:25:46> とりあえず関数型言語を使わないで考えてみなさい。
なるほど。関数型言語を使わない方が楽に解けるということですね。
というのは置いといて。C++では自分ならどう計算するか考えていけばそれほど
苦労せずにプログラムを書けるのだけど haskell ではどう書いたらいいのか想
像もつかない。
0662デフォルトの名無しさん
2010/08/02(月) 19:31:29とりあえず、逆行列を計算するプログラムを Haskell で書けばいいと思うが、
それが書けないということか?
0663デフォルトの名無しさん
2010/08/02(月) 19:52:400664デフォルトの名無しさん
2010/08/02(月) 20:47:56そういうこと。
>>663
"haslell 逆行列'でググったら
http://dev.ariel-networks.com/Members/ohyama/haskell-9006884c521730926c423081308b/view
があった。頭がクラクラするほど
0665デフォルトの名無しさん
2010/08/02(月) 21:09:13何でそういうドンピシャな方法を探そうとするかな
まず普通に LU 分解をベタにプログラムしてみればいいじゃん
より洗練された方法を探したり近づけたりするのは、その後でしょ
0666デフォルトの名無しさん
2010/08/02(月) 22:22:05例に連立方程式をだしたのは簡単で洗練された方法が探しにくいからで
C++では行列が与えられて解を求めるまで10行で書いている。
もう一つは配列の要素を次々に書き換えながら処理が進むのでそのあ
たりをどう書くのかのヒントでもと思ったのだが>>664のリンク先がドンピ
シャで洗練された方法ということであれば私には haskell を勉強する意
味は無い。
0667デフォルトの名無しさん
2010/08/02(月) 22:31:39「配列の要素を次々に書き換えながら処理が進む」ような計算ならそれが一番素直
0668デフォルトの名無しさん
2010/08/02(月) 22:54:00「現在の」自分のレベルではモノにできなさそうな、
そういう方法に君がいきなりかぶりつこうとしているように見えたから、
目標レベルを落とそうよと言いたかっただけ
配列じゃなくリストのリストで行列を表現して、
例えば次のリンク先の方法を愚直に Haskell に翻訳してみればいい。
http://www.akita-nct.jp/yamamoto/lecture/2004/5E/linear_equations/text/html/node4.html
で、やってみて何が気に入らないのか、何が汚いのか、言ってみてよ
> 配列の要素を次々に書き換えながら処理が進む
なら、新しいリスト(のリスト)を次々に作ればいい
0669デフォルトの名無しさん
2010/08/02(月) 23:18:29>>664 でなぜか肯定されてしまったが、
連立一次方程式を解くだけなら LR 分解だけで十分だったな。
すまんすまん。
0670デフォルトの名無しさん
2010/08/03(火) 15:52:08> 「配列の要素を次々に書き換えながら処理が進む」ような計算ならそれが一番素直
レスサンクスです。そういう書き方ができるということですね。
喧嘩腰のつもりはないけどそうとれたならすまない。
>>668
> >>664のリンク先がドンピシャで洗練された方法と言ってるわけじゃないよ
なるほど少しは安心した。
> 「現在の」自分のレベルではモノにできなさそうな、
これはそのとおり。にもかかわらず
http://www.akita-nct.jp/yamamoto/lecture/2004/5E/linear_equations/text/html/node3.html
こんな簡単な方法があるのにより複雑なLU分解とか逆行列を haskell でと言われ
たらたまらない。
> > 配列の要素を次々に書き換えながら処理が進む
> なら、新しいリスト(のリスト)を次々に作ればいい
これを知りたかったのだがいくらなんでもこんなことはしないだろうと思っていた。
>>667のレスからは関数型の売りを守ったまま変数の変更ができそうなのでこち
らでやってみたい。
0671デフォルトの名無しさん
2010/08/03(火) 16:37:02それ相当の実績を持っている人以外は書き込めないようにしてほしい。
0672デフォルトの名無しさん
2010/08/03(火) 16:40:51アメリカ社会みたいにすればいいと思う。
実態を知られることのない支配層と、エリート層と、その他の一般大衆
エリートに上がるには能力が必要
0673デフォルトの名無しさん
2010/08/03(火) 16:54:48体当たりで挑んだ皮肉なのだろうか
0674デフォルトの名無しさん
2010/08/03(火) 19:28:270675デフォルトの名無しさん
2010/08/03(火) 21:01:20博士課程で超能力は取得できんよ?
0676デフォルトの名無しさん
2010/08/03(火) 21:31:42どこから超能力の話が出てくるの?
0677デフォルトの名無しさん
2010/08/03(火) 22:21:10http://pc12.2ch.net/test/read.cgi/unix/1277168855/
0678デフォルトの名無しさん
2010/08/03(火) 22:23:21モサドのくだりから
0679デフォルトの名無しさん
2010/08/05(木) 10:03:11学生向けオナニー言語?
0680デフォルトの名無しさん
2010/08/05(木) 11:07:50それとも大多数の実務って要するにCOBOL仕事のこと?
0681デフォルトの名無しさん
2010/08/05(木) 11:08:080682デフォルトの名無しさん
2010/08/05(木) 11:46:420683デフォルトの名無しさん
2010/08/05(木) 12:29:110684デフォルトの名無しさん
2010/08/05(木) 12:30:460685デフォルトの名無しさん
2010/08/05(木) 12:40:33Haskell の例題で連立方程式なんて初めて聞いた
0686デフォルトの名無しさん
2010/08/05(木) 12:45:52Prologの様にすぐに廃れはしないだろうが、Haskellの重大な欠点は処理速度なんだよなぁ。
それさえ解決できれば次の選択肢として有望なんだがな。
0687デフォルトの名無しさん
2010/08/05(木) 12:47:20Haskellやっていみあるの?ww
仕事してるの?wwwなあ?wwwニート&ブログ技術ネタ公開ヲタしかこんなくそ言語やらねえよwwww
おめえら ずっと勉強の勉強オタで本番や作品作りによわいアホばっかだろ?wwww
Haskellやりながらクソブログにかきつづって 自己満足wwwwwwwwwwwwwwwwwwwwwwwww
仕事は?って聞かれると 何も言えないwwww
御前等クソ「研究してます」
一般ピーナッツ「え・・なんの?」
黒い画面に表示される
御前等クソ「方程式のプログラムです」
オレ「え・・・(苦笑) これだけ?」
くそすぎるこいつら生きてる価値ないよ(笑)
御前等ゴミはご自慢のブログ日記ちゃんのカテゴリに 「D言語 Haskell erlang」ってクソカテゴリつくって
そこにゴミみたいな車輪の再発明ネタでも永遠にかきこんでてくださいwwwww
ゴミみたいな言語やってどうするの?すぐ人の真似でしょ?wwwwww真似ばっかりwwwww
すぐ人の真似wwww真似しかやらないwwww御前等クズはごみhaskellやって日記に永遠とかきこんでてよwwwwww
つまらねえからwwwwww一番日記で読む気うせるのは、ただの技術ネタなんだよねwwwwww
モジュールの使い方とかツ使いやすいは紹介したりするのはいいけどwwwwごみみたいなちょっとひねった違うやりかたみたいなのやめてくれないかな?wwww
反省したらhaskellやめてしねよ^^;
0688デフォルトの名無しさん
2010/08/05(木) 12:48:28wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0689デフォルトの名無しさん
2010/08/05(木) 12:48:470690デフォルトの名無しさん
2010/08/05(木) 12:50:51クソHaskell「それぞれ人により、クソとかどうかは一概には言えない ってことでお前がクソ」
wwwwwwwwwwwwwwwww
wwwwwwwww
おめえがくそだよごみwwwwww
>>689
てめえみたいなゴミはhaskelやってろよwwwwwwwwwしねよごみ
今すぐ市んでくれない?うざいんだよ
0691デフォルトの名無しさん
2010/08/05(木) 12:52:04もうメガネどもに書くね^^;
ゴ ミ P H P 厨 よ り 許 さ れ な い 存 在 だ よ 君 た ち は(苦笑)
0692デフォルトの名無しさん
2010/08/05(木) 12:56:16はいはいわろすわろす
実務の大多数はゴミみたいなもんだろ
0693デフォルトの名無しさん
2010/08/05(木) 12:58:270694デフォルトの名無しさん
2010/08/05(木) 12:58:41Perlよりごみなのは確実ですか楽しいですか?(笑)
あとHaskellの本をブログなどに自慢げに載せてるバカいますがどんな心情なんですかね(笑)
将来の夢はゴミ研究者ですか そうですか アンケートありがとうございました^^;(苦笑)
0695デフォルトの名無しさん
2010/08/05(木) 13:04:29バカ「け、けけけけ、研究でつかうんででです」
私「はいそうですか(苦笑) Haskellを使ってなんか作った事はありますか?」
バカ「あ、あはい まままだないです 方程式のプログラムつくってます 卒論はhaskellでゲームです」
私「ゲームなら他の言語があるんですが 何故haskell?」
バカ「ゆゆゆゆ有名な人がブ、ブブブ、 はぁはぁ・・・ちょっと待ってください」
私「はい^^;」
バカ「ゆ、ゆ、有名な人がブログで使っていて あ、、あ、あとHaskellって名前がHacker(ハッカー)みたいだからかっこいいからは、はは、じめました」
私「鼻息あらいですよ?大丈夫ですか?」
バカ「ふんがーふんがー 初音ミクちゃんさいこう! ブログの自己紹介や壁紙では ケイオンとかつかってます」
私「そんなこと聞いてないんですが^^;」
私「これでアルファギークの質問は終わりです ありがとうございました^^;(苦笑)
バカ「フンガッ!はぁはぁ は、はははい! ありがとうごじました」
私「キモッ・・・」
0696デフォルトの名無しさん
2010/08/05(木) 13:46:29暑い日が続いているから大変なんだろうな
0697デフォルトの名無しさん
2010/08/05(木) 14:06:160698デフォルトの名無しさん
2010/08/05(木) 14:09:09http://hibari.2ch.net/test/read.cgi/tech/1272536128/671
671 名前: デフォルトの名無しさん Mail: sage 投稿日: 2010/08/03(火) 16:37:02
マジで思うんだけど、2chは博士号取得者か
それ相当の実績を持っている人以外は書き込めないようにしてほしい。
0699デフォルトの名無しさん
2010/08/05(木) 14:46:28博士号もっててそんなうれしい?wwwwwwwwwwww
俺はノーベル賞もってるけどなwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
低レベルすぎるよ君
0700デフォルトの名無しさん
2010/08/05(木) 15:26:14そうすれば>>699みたいなカスはレスできなくなってキレイな2chの出来上がり。
0701700
2010/08/05(木) 15:45:22そうすれば>>700みたいなカスはレスできなくなってキレイな2chの出来上がり。
0702PHPヲタ
2010/08/05(木) 15:49:231、手続き型言語しかやったことないやつは 一度でもいいから関数型言語やってみろよ
wwwwwwwwwwwwwwwwwバカ発症しちゃってるwwwwwww
職場にhaskellやってるばかがいるよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
たいしてプログラミングできねえのにブログにつづってて難しいことやってる自分がかっこいいとおもってるやつwwwwwwwww
0703デフォルトの名無しさん
2010/08/05(木) 15:51:020704デフォルトの名無しさん
2010/08/05(木) 15:52:050705PHPヲタ
2010/08/05(木) 16:04:30痛々しい発言だよねwwwwwwwwwwwwブログにも書いちゃってwwwwwwww
Haskellの白い本持ち歩いてる割に
クソだし、あんまり役に立ってない 下手の横好き
まじしんでいいとおもうよwwww
0706デフォルトの名無しさん
2010/08/05(木) 16:08:312chから博士号取得者かそれ相当の実績を持っている人以外を追い出すより
博士号取得者かそれ相当の実績を持っている人だけのBBSを作った方が早いだろボケ
0707デフォルトの名無しさん
2010/08/05(木) 16:24:24( ・ω・) んも〜
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)wvwwWWwvwwWwwvwwwwWWWwwWw
wWWWWWWwwwwWwwvwWWwWwwvwWWW
wvwwWWwWWWwvWwwwwWWwWWWwWWWWwWWWWWwWWWWWWwWWWWWWWwWwwwwwwwwwwwwWWWWwWWWWWWWwWWWW
WWWWWWWWWWwWWWWWWWWWWWwwWWWWWWWWWWwwWWWWWWWWWWWWwWWWWWWWWWWwwWWWWWWWWWWwwwwwwWWW
WWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWwwWWWWWW
WWWWWWWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWW
WWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwWWwwwwwwwWWWwwwwwwwWWWWwWWWWWwwwwwwww
WWWWWWwwwwwwwwwwwwwwwwWWWWWWWwwwwwwwwwwwwwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwWWWWWWWWWwwwwWWWWWWWWWWwwwwwwwwwwwWWWWWWWWWWWwwwwwwwWWWWWWWWWWWWwww
wwwwwwwwwwwwwwwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwww
0708デフォルトの名無しさん
2010/08/05(木) 16:42:21Haskellで掲示板でもつくるか
0709デフォルトの名無しさん
2010/08/05(木) 18:10:21もちろん適用領域にもよるんだろうけど
そんなに重大な問題かなあ?
0710デフォルトの名無しさん
2010/08/05(木) 18:18:54重大だよ。
C10Kパッケージはもっと最適化する余地はあるけど、
Haskellがもっと早ければもっと高パフォーマンスのWEBサーバを作れるよ。
0711デフォルトの名無しさん
2010/08/05(木) 18:33:420712デフォルトの名無しさん
2010/08/05(木) 18:41:29でかいレコードの一部のみ更新したいときに全体を再構築せざるを得ないこと
デフォルトの文字列型がCharのリストであること
0713デフォルトの名無しさん
2010/08/05(木) 18:48:41突き詰めたらポインタなんだけどねw
rubyとかで遅延評価を実装してみたらわかると思うけど。
0714デフォルトの名無しさん
2010/08/05(木) 18:59:01今のGHCはcase式で値を調べるとき、盲目的にクロージャを呼ばずに、
まずタグを調べて評価済みの場合は値を直接取り出すようになってる
たぶん行き先の決まってないジャンプのオーバーヘッドを嫌った実装だと思う
0715デフォルトの名無しさん
2010/08/05(木) 19:09:27もしHaskellが高速だったらHaskellによるPerl6の実装Pugsがデファクトスタンダードになったかもしれない。
0716デフォルトの名無しさん
2010/08/05(木) 19:54:230717デフォルトの名無しさん
2010/08/05(木) 21:27:58>でかいレコードの一部のみ更新したいときに全体を再構築せざるを得ないこと
レコードのフィールドは全部ポインタになってて、
一部を更新するとレコードのガワは新たに作られるけど、
変更されていないフィールドは前のレコードが指していたのと同じモノを指し、
変更されたフィールドだけ新たに作られてそこを指すようになってると思ってた。
巨大なレコードに色んな値を詰め込んで、
グローバル変数の様にころころ更新させて使うのは危険なのか。
勉強になった。
0718デフォルトの名無しさん
2010/08/05(木) 21:48:59>レコードのフィールドは全部ポインタになってて、
>一部を更新するとレコードのガワは新たに作られるけど、
>変更されていないフィールドは前のレコードが指していたのと同じモノを指し、
>変更されたフィールドだけ新たに作られてそこを指すようになってると思ってた。
いや、それで合ってる
>>712で言ったのは、一番外側のレコードを作り直すだけでもオーバーヘッドが無視できないってこと
フィールドが沢山あればそれだけ時間が掛かるし、メモリ確保も伴うからGCのコストにも寄与する
C言語なんかで x.a->b->c += 2; とかやるのと比べれば凄く重い処理
0719デフォルトの名無しさん
2010/08/05(木) 22:18:51Haksellスレがこんな流れになるのなんて最初で最期かもしれないんだから
0720デフォルトの名無しさん
2010/08/05(木) 22:37:330721デフォルトの名無しさん
2010/08/06(金) 00:38:20Cだと
s.f.g++;
ですむ処理が
s { f = f s { g = g (f s) + 1 } }
になる。
0722デフォルトの名無しさん
2010/08/06(金) 05:57:03f^.g ^: (+1) $ s
とか書けるけどそれでも効率はどうしようもない…
0723デフォルトの名無しさん
2010/08/06(金) 13:38:32痛すぎるよwwwwwwwwwwwwwwwwwwwwww本と御前等うんこいかだね!!
カスすぎるよwwwwwwwwwクソすぎてかわいそうwwwwwwww
無駄な努力wwwwwwwwwwwwww
0724PHPヲタ
2010/08/06(金) 15:40:13君たち頭良いんだろ?だったら教えてくれないか?
プログラミングおしえてくれwwwwwwwwwwwwwwなあああああ?wwwww
コツとかうんちくとか何でも良いから教えてくれよwwwwwwwwwwwwwwwwwwwww
0725デフォルトの名無しさん
2010/08/06(金) 19:06:140726デフォルトの名無しさん
2010/08/06(金) 19:11:32俺は御前なんて呼ばれるほど立派なやつじゃないぜ。」
うんこイカって何だよ? 臭いの?
0727デフォルトの名無しさん
2010/08/06(金) 19:24:050728デフォルトの名無しさん
2010/08/08(日) 00:25:37"cabal haddock" したらエラーが出た(適当に改行を入れた)。
haddock: internal Haddock or GHC error:
E:\Program Files (x86)\Haskell\haddock-2.7.2\html\haddock.css:
openFile: does not exist (No such file or directory)
haddock.css は本当はこんなパスには無く、
"C:\Program Files\Haskell\haddock-2.7.2\html\haddock.css" にある。
だから "cabal haddock --css="c:\..."" とパスを指定してやったら、
今度は別のエラーが出た。
haddock: internal Haddock or GHC error:
E:\Program Files (x86)\Haskell\haddock-2.7.2\html\haskell_icon.gif:
openFile: does not exist (No such file or directory)
何で検索パスが "E:\Program Files (x86)\..." になってるのか分からない。
どうすれば "C:\Program Files\..." に治せますか?
0729デフォルトの名無しさん
2010/08/08(日) 01:49:26haddokをa:\に置く
0730デフォルトの名無しさん
2010/08/08(日) 09:10:46Aドライブを新たに作り、haddock.exe をそこに置くという意味ですか?
申し訳ない、言い忘れました。
現在ドライブはC(メイン)とD(光メディア)しかありません。
どこかに haddock の設定ファイルなどがあり、
そこにEドライブへのパスが書かれているのではと思いましたが、
探しても見つかりませんでした。
また、cabal の設定ファイルも開いてみましたが、
haddock そのものの場所に関するパラメータは無かったようです。
0731デフォルトの名無しさん
2010/08/08(日) 13:37:22subst
0732デフォルトの名無しさん
2010/08/08(日) 15:46:04すいません、その場しのぎではなく、
意図しない動作の理由を知って解決を図りたいです。
具体的には "E:\Program Files (x86)\..." というパスが
何によって決定されたのかが知りたいです。
その上で、今のところその場しのぎでしか進めないのなら、
それはそれで仕方がありません。
0733デフォルトの名無しさん
2010/08/08(日) 16:38:230734デフォルトの名無しさん
2010/08/08(日) 17:53:10アップしておきました
http://www.dotup.org/uploda/www.dotup.org1079447.txt.html
0735デフォルトの名無しさん
2010/08/10(火) 00:47:10wxHaskell を使ったプログラムを ghc ではコンパイルできるけど、
今のところ ghci 上では実行できないよね。
これって、wxHaskell に必要な stdc++ ライブラリが静的なものしか無く、
ghc は静的ライブラリを埋め込んでコンパイルできるけど、
ghci は動的ライブラリしか使わないようになってるから、
stdc++ ライブラリが無いよと怒られるわけだよね。
これって、stdc++ の動的ライブラリ版を作って解決できないの?
0736デフォルトの名無しさん
2010/08/14(土) 23:28:22integral :: (VectorSpace v, Scalar v ~ TimeT) =>
Event () -> Behavior v -> Behavior v
そもそも、ライブラリのドキュメントには Euler integral とだけ書かれており、
引数の説明は全く書かれていないので、結果の値から想像するしかない。
おそらく、第2引数のビヘイビアに対して定積分した結果を
戻り値のビヘイビアとして返しているのだと思うが、
第1引数のイベントの役割が分からない。
例えば time ビヘイビアの TimeT による a から b までの定積分は、
(a^2)/2 - (b^2)/2 だと思う(下記の挙動を見ると自信が無くなる)。
そこで次のようにプログラムすると、v の 4 秒目以降の値は 16 だ。
v = atTimes [0, 4] `integral` time
イベントのタイミングが積分範囲になっていると予想していたが、
違っていたようだ(それなら 16 ではなく 8 になっているはず)。
次のだと、2 秒目から 4 秒目までが 4、4 秒目以降が 12 だ。
v = atTimes [0, 2, 4] `integral` time
意味が分からない。
この第1引数のイベントはどのように働いているのだろうか。
0737デフォルトの名無しさん
2010/08/14(土) 23:29:500738736
2010/08/14(土) 23:34:26しまった、書き間違えた。
> 例えば time ビヘイビアの TimeT による a から b までの定積分は、
> (a^2)/2 - (b^2)/2 だと思う
a と b が逆だった。正しくは
(b^2)/2 - (a^2)/2
0739デフォルトの名無しさん
2010/08/15(日) 00:12:50(前イベント時の積分値(初期値0))+(現イベント時の値)*(前イベントと現イベントの間の時間)
を出力してるように見える。
そうだとすれば、atTimesで与える時間を細かくたくさんにすると
解析的に求めた定積分に近づくかな。
0740736
2010/08/15(日) 01:05:47なるほど、短冊の面積を足してるのか。
たしかに atTimes [0.0, 0.5 ..] にすると 4 秒目は 7 になって、
解析的に求めた定積分に近く。
その計算であってると思う。
ありがと、納得した。
でも、イベントをたった 0.25 秒刻みに設定するだけで処理が重くなり、
時間通りにイベントを捌けず渋滞を起こすようだ。
実用には耐えられん、何だろこの機能。
0741デフォルトの名無しさん
2010/08/16(月) 22:56:59forkIO で分けた別スレッドから postRedisplay を呼ぶと、
何故かウィンドウ上をマウスが動いている間しか再描画されない。
(再描画 = displayCallback に設定した関数を呼ぶ)
普通に同じスレッドの、たとえば idleCallback に設定した関数内で呼べば、
ちゃんとそのタイミングで再描画される。
こういうもの?
実際にやりたいことは、yampa を使って計算した値を元に OpenGL で描画すること。
たとえば GLUT を使うと GLUT の mainLoop も、yampa の reactimate も、
どちらも制御が戻ってこないから、どちらかをサブ スレッドにしないといけない。
今は reactimate の第3引数に渡した関数内で postRedisplay を呼んでる。
どうすればいい?
0742741
2010/08/17(火) 00:25:50問題が解決した。
reactimate を使わず、代わりに reactInit と react を使ったら、
問題なく GLUT と共存できてた。
GLUT の初期化時に reactInit を呼んで、
GLUT の idleCallback に設定した関数内で react を呼ぶ。
reactInit の第2引数に渡す関数内で postRedisplay を呼べばいい。
http://www.cse.unsw.edu.au/~pls/thesis/munc-thesis.pdf
ここに載ってた(yampa + HOpenGL で FPS ゲームを作る)。
0743デフォルトの名無しさん
2010/08/18(水) 16:15:47上記は3つの集合の場合ですが
不定個の集合で同様の事をする関数はどう書けば良いですか?
0744デフォルトの名無しさん
2010/08/18(水) 16:40:37ごめんなさい
0745デフォルトの名無しさん
2010/08/18(水) 21:54:34次のがエラーが出る最小限のコードです。
import Graphics.Rendering.OpenGL as GL
import Graphics.UI.GLFW as GLFW
a = GLFW.openWindow (GL.Size 640 480)
ghci を立ち上げて、上記コードを書いたファイルをロードしたら、
次のエラーが出ました。
Couldn't match expected type `OpenGL-2.2.3.0:Graphics.Rendering.OpenGL.GL.CoordTrans.Size'
against inferred type `Size'
環境は次の通りです。
Windows7
Haskell Platform 2010.2.0.0 (GHC 6.12.3)
opengl-2.4.0.1
glfw-0.4.2
Haskell の OpenGL ライブラリのバージョンが新しすぎるのでしょうか。
0746デフォルトの名無しさん
2010/08/19(木) 07:53:070747デフォルトの名無しさん
2010/08/19(木) 10:38:23メモリ使用量は減りません。
強制カベッジコレクションはできますか?
0748デフォルトの名無しさん
2010/08/19(木) 11:14:06http://hackage.haskell.org/trac/ghc/ticket/698
0749デフォルトの名無しさん
2010/08/19(木) 19:19:04Thank you anyway.
0750デフォルトの名無しさん
2010/08/20(金) 02:24:14これ
preservingMatrix :: IO a -> IO a
渡したIO aの前後でpopとpushを自動的にやってくれる
preservingMatrix $ do
loadIdentity
....
みたいに使う
0751デフォルトの名無しさん
2010/08/20(金) 07:40:46そいつか、ありがと
今まで Graphics.Rendering.OpenGL.Raw から
glPushMatrix と glPopMatrix をわざわざインポートしてた
0752デフォルトの名無しさん
2010/08/20(金) 07:41:290753デフォルトの名無しさん
2010/08/20(金) 12:37:49状態変更関数による読み難さはそれほどでもない
それよりも GLfloat や GLint などへの型変換がうっとうしい
fromIntegral や realToFrac などの関数と :: GLfloat とか
:: Vector3 GLfloat などの明示的な型宣言をセットで書かないといけない
だから、結局のところ楽に記述できるように一枚ラップを自作することになる
0754忍者Perl ◆M5ZWRnXOj6
2010/08/21(土) 12:13:57シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0755デフォルトの名無しさん
2010/08/22(日) 22:50:36遅延パターンの説明で
-- ファイル: TT.hs
module Main where
reqs = client inits resps
resps = server reqs
client a (b:bs) = a : client (next b) bs -- @非遅延束縛とした場合
server (c:cs) = process c : server cs
inits = 0
next d = d
process e = e+1
main = print $ take 10 reqs
-- ファイル END
非遅延パターンで実行形式を ghc --make TT.hsで作成し、
$ ./TT
TT.exe: <<loop>>
と表示され
ghci では
$ ghci TT.hs
:main
(エラー表示なしで終了しない)
となります。
実行形式の場合の <<loop>> とは、stack overflow となることを
実行時の処理系が検知して表示しているのでしょうか?その場合
ghci が終了しないのは何故でしょうか?
stack overflow と関係ない場合の <<loop>> の意味は?
0756デフォルトの名無しさん
2010/08/22(日) 23:27:58式の評価が無限ループに陥ったことを検出してる
(技術的には、あるサンクの評価中にそのサンクの値が必要になったらNonTermination例外を投げる)
ある意味お節介機能だし、完全にやるのは無理なので、働かなくても文句は言えない
ghciで働かないのは何故だろう、俺は知らない
0757デフォルトの名無しさん
2010/08/23(月) 09:01:31ありがとうございます。
>あるサンクの評価中にそのサンクの値が必要になったらNonTermination例外を投げる)
サンク reqs の評価中に、client をサンク respsに適用しようとして
resps の評価に、server をサンク reqs に適用しようとして、
ループを検出する。ということですね
0758Perl忍者 ◆M5ZWRnXOj6
2010/08/24(火) 17:15:520759デフォルトの名無しさん
2010/08/24(火) 20:38:380760デフォルトの名無しさん
2010/08/24(火) 20:59:270761デフォルトの名無しさん
2010/08/24(火) 21:04:040762デフォルトの名無しさん
2010/08/24(火) 21:08:290763デフォルトの名無しさん
2010/08/27(金) 11:41:21let式が二つ連続してるし、inがないんだけど。。
[ x | y <- [1..99], z <- [y..99],
let x = y * z,
let s = show x,
s == reverse s ]
0764デフォルトの名無しさん
2010/08/27(金) 11:44:570765デフォルトの名無しさん
2010/08/27(金) 12:33:25do
y <- [1..99]
z <- [y..99]
let x = y * z
let s = show x
guard (s == reverse s)
return x
0766763
2010/08/29(日) 12:30:17あぁ、なるほどね!
リスト内包表現中は特殊なのね。
ありがとう!
0767デフォルトの名無しさん
2010/09/07(火) 13:13:53Cleanで申し訳ないけど
ttp://sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part2/Chap5.html#sc2
5.11にモナドの概念を使用することによって、組の構成と破壊を回避できると書いてあります
もしかして、これは、構文木を作る際に
バックトラックしてそこで作成した解析木が破棄されるのを
回避出来るというような意味でしょうか?
0768デフォルトの名無しさん
2010/09/07(火) 14:21:35「回避できる」というのは「記述を回避できる」という意味であって発生しないという意味ではないと思う。
雑多で定型的な操作をモナドに押し込めてしまえば、見かけ上は構文をそのまま書き下せるので綺麗だねっていう話。
0769デフォルトの名無しさん
2010/09/08(水) 21:09:540770デフォルトの名無しさん
2010/09/08(水) 23:37:20Haskell に限らず、大抵の言語は処理の単位をどう抽象化するかに注意を払って設計している。
例えば C なんかで極論すればループ構文は goto と if の組み合わせの構文糖衣だと言えるけど、
「分岐とジャンプ」で考えるのと「ループ」という概念で考えるのとではまるきり違うってのはわかると思う。
モナドも何だかんだの処理を纏めたもの、関数の束でしかなくて無くて、モナドが無ければ無いなりに使えるとは思うよ。
でも、「モナドという考え方」を導入したことでわかりやすくなる部分がある。
利点を短くまとめるのは難しいな。
強いてまとめるなら Haskell ではモナドを使うと簡潔に書けるケースが実際に多いってことだな。
0771デフォルトの名無しさん
2010/09/09(木) 10:45:06「System.Collections.Generic.IEnumerator<T>とLINQ」で考えるのと
「リストモナドと内包表記」で考えるのが、まるきり違うだろうか。
何らかの抽象化を施せば、両者は同じになるはずだ。
しかし現実には、抽象化よりも差別化が重要視されたのだと思う。
C#やSQLなどと差別化するための「関数型らしさ」を出すための構文糖だと思う。
0772デフォルトの名無しさん
2010/09/09(木) 11:36:11機械的にやれそうでよくわからない
という状況を見えやすくしてくれるのがモナド
ということにしたかったんだよ。成功しているかどうかはともかく。
0773デフォルトの名無しさん
2010/09/09(木) 19:18:33「人間は論理的ではない」ので Haskell が誰にとっても使い易いというわけにはいかないだろう。
わかる人にはわかる。 まるで禅問答のようだ。
0774デフォルトの名無しさん
2010/09/09(木) 20:12:01ZF記法のような構文糖や遅延評価前提は、できる限り数学の記法(いわゆる数式)に
近い表現を持ち込んだ言語設計のように見える
だから、数学者(あるいは数式表現に慣れた人)なら直感的に理解しやすいけど、
数式(数学的思考法)に不慣れな一般のプログラマには理解しづらいのでは?
などと、数学が苦手だたけど現在Haskellと格闘中の初心者が言ってみる
0775デフォルトの名無しさん
2010/09/09(木) 20:54:30直積=「安直に積んだもの」って標語を自分で作って覚えた。
0776デフォルトの名無しさん
2010/09/09(木) 20:59:510777デフォルトの名無しさん
2010/09/11(土) 22:15:51haskell 2010 に準拠して、
version 7.0とかになるんかな
0778デフォルトの名無しさん
2010/09/12(日) 02:16:46IOモナド等の一方向モナド(普通の値を取り出せないモナド?)は
例えばIOの場合、IOという型コンストラクタがないので、パターンマッチでIO x = ...
のようにかけないために、普通の値を取り出せないってことでいいのでしょうか?
もし合ってるならやっと眠れる...。
0779デフォルトの名無しさん
2010/09/12(日) 02:24:12ないのはデータコンストラクタ
0780778
2010/09/12(日) 02:26:44ですが少しわかりました。Haskellおもしろいですね。
0781778
2010/09/12(日) 02:29:55では、IOモナドのreturnはどうやってIOを作り出しているのでしょうか?
処理系に隠蔽されている?
0782デフォルトの名無しさん
2010/09/12(日) 02:42:16モナドをどのように扱っているかは処理系によるが、
mainの返り値がIOモナドになっている以外は、IOモナドも普通のモナドと何ら変わらない。
3つのモナド則に従う普通のモナドだよ。
0783デフォルトの名無しさん
2010/09/12(日) 02:48:53実行が開始されると中身が評価されるってわけ。
それが遅延評価。
0784デフォルトの名無しさん
2010/09/12(日) 02:50:05return :: a -> IO aが実装されていると思うのですが、IO aを作り出すデータコンストラクタ
がないので、どうやってreturnが定義されているのかわからないのです。
0785778
2010/09/12(日) 02:50:510786デフォルトの名無しさん
2010/09/12(日) 02:56:28IOのreturnはプリミティブだと思うよ。
実装によって違うだろうけど。
0788デフォルトの名無しさん
2010/09/16(木) 01:58:16ググってわかったのは
Text.Parsecに名前が変わった
ghc-pkg listで今入ってるリストがわかること
試したのは
ghc-pkg list | grep parsecの結果が0なこと
ghc -o hoge b.hs -package parsec
cannot satisfy -package parsec
これって「今インストールされて無い」ってことですよね
0789デフォルトの名無しさん
2010/09/16(木) 02:32:17最新版にparsecはないのですね
かわりにText.ParserCombinators.ReadPとかいうのがあるけど、これは別物?
0790デフォルトの名無しさん
2010/09/16(木) 02:39:57extralibsにparsec 2.1.0(Text.ParserCombinators.Parsec)が入ってるよ。
0791デフォルトの名無しさん
2010/09/16(木) 02:50:09たった今cabalとか言うのを知って、
pdf見てmtl -> parsecの順でconfigure,build,installしたけど
多分オプションまちがってたのか、失敗したところです。
0792デフォルトの名無しさん
2010/09/16(木) 03:06:030793デフォルトの名無しさん
2010/09/16(木) 21:50:34Windows 上の GHC で Haskell ソースをコンパイルして
Linux(CentOS 5.5)用の実行ファイルを作成する方法はありますか?
具体的にやりたいことは、Haskell で CGI を作ることです。
0794デフォルトの名無しさん
2010/09/16(木) 21:54:250795デフォルトの名無しさん
2010/09/16(木) 21:58:10Windowsのエディタで編集。TeraTermか何かでリモートログインして
Linuxでコンパイル、じゃダメなの?
0796デフォルトの名無しさん
2010/09/16(木) 22:07:23GHCでクロスコンパイルとかできないと思うから、
virtualboxとかで仮想PCにLiunx&GHC環境作ってコンパイルするのが良いと思う。
0797デフォルトの名無しさん
2010/09/16(木) 22:09:430798デフォルトの名無しさん
2010/09/16(木) 22:28:18やってみたわけではないのでサクッとできるかもしれないけど。
0799デフォルトの名無しさん
2010/09/17(金) 09:29:44すごく面倒だと思う
たぶん>>795-796が最短ルート
0800793
2010/09/17(金) 19:15:21サーバー側で Haskell ソースをコンパイルして CGI として公開することは成功しました。
クライアント側を Linux にして、
そこでコンパイルしたモノをサーバーにアップしてCGI として公開することも成功しました。
クライアント側を Windows にして、
そこでコンパイルしたものでやってみたいのですが、
どうも「できなくはないだろうが、そうとう面倒」みたいですね。
でも、いくつかヒントを戴けたので挑戦してみます。
0801793
2010/09/17(金) 19:56:50すいません、言い忘れてました。
インタープリタ形式でも CGI として動くことを確認できました。
処理速度を求めなければ、これが一番簡単ですね。
0802デフォルトの名無しさん
2010/09/18(土) 03:34:56all ((<=)10) [10,20,30] よりは
all (flip (>=) 10) [10,20,30] が直感的だけど
all (`>=` 10) [10,20,30] こうできれば良いのに
0803デフォルトの名無しさん
2010/09/18(土) 03:48:180804デフォルトの名無しさん
2010/09/18(土) 03:49:16落ち着け。
0805デフォルトの名無しさん
2010/09/18(土) 13:25:310806デフォルトの名無しさん
2010/09/18(土) 13:39:04対称的になってて見栄えがいいとは思う
さらに
(10 <=) `all` [10,20,30]
とかやると逆に`all`の存在で対称が崩れてるような感じになって見栄えが悪く感じる
直感って本当にわがままだな、わがままな俺にそっくりだ
0807デフォルトの名無しさん
2010/09/18(土) 20:49:51take 3 (reverse [1..1000000])
はちゃんと結果を返すけど
take 3 (reverse [1..1000000000])
を実行すると死んでしまうのは何故ですか?
0808デフォルトの名無しさん
2010/09/18(土) 21:18:59ヒープにリストが入りきらなくて死ぬ。
0809デフォルトの名無しさん
2010/09/18(土) 21:25:480810デフォルトの名無しさん
2010/09/18(土) 21:26:35それは何故?
遅延評価するなら、take 3 が必要な3つだけ要素を生成すればいい、
ってわけじゃないの?
それとも遅延評価させるには何か指令が必要だったり、
または Haskell は遅延評価をサポートしてないの?
0811デフォルトの名無しさん
2010/09/18(土) 21:28:23ちなみにOSは Win7 x64
0812デフォルトの名無しさん
2010/09/18(土) 21:31:13だって、双方向リストじゃないんだから一番後ろの3つを手に入れるためには
前から順番にたどっていかなきゃいけないでしょ?
0813デフォルトの名無しさん
2010/09/18(土) 22:01:10自分でreverseを書いてみればわかるよ
0814デフォルトの名無しさん
2010/09/18(土) 22:01:54でもそれって実装上の問題じゃないの?
0815デフォルトの名無しさん
2010/09/18(土) 22:02:58なるほど
0816デフォルトの名無しさん
2010/09/18(土) 23:18:20しかし双方向リストって凄いメモリ食うぞ
ただでさえHaskellはメモリ食いって言われてるのに・・・
0817デフォルトの名無しさん
2010/09/18(土) 23:24:020818デフォルトの名無しさん
2010/09/18(土) 23:28:172つあるファイルのうち、どちらを選べばいいのか分からない。
ghc-6.12.3-i386-unknown-linux-n.tar.bz2 (106 MB)
ghc-6.12.3-i386-unknown-linux-t.tar.bz2 (106 MB)
後者は libtinfo.so.5 が要るって書いてある。
これは端末非依存形式で TUI の API を提供するという
ncurses パッケージに入っている事までは調べられたけど、
これが GHC とどう関係するのか分からない(ghci で使う?)。
結局、何を基準にしてどちらを選べばいいの?
0819デフォルトの名無しさん
2010/09/18(土) 23:28:390820デフォルトの名無しさん
2010/09/18(土) 23:38:26実装では真面目な単方向リストとしては実装されていないよ。
GHCではlst!1もlst!100もかかる時間は同じだったような気がする。
別の実装ではまた違う結果が出るかも。
0821デフォルトの名無しさん
2010/09/18(土) 23:45:350822デフォルトの名無しさん
2010/09/19(日) 06:19:31diffLIst [] ys = ys
diffList (_:xs) (_:ys) = diffLIst xs ys
lastn n xs = diffList (drop n xs) xs
lastn 3 [1..1000000000]
は、コンパイルせずrunghcで七分半ほどで結果を出した。
ghc -O2 でコンパイルしたものは30秒ほどで返ってきた。
take 3 $ reverse [1..1000000000]
は30分待っても終わらない挙句、スワップファイルが増殖して
HDDの空き容量を食いつくしても終わらない。
2GHz Intel Core 2 Duo
メモリ 2GB
Mac OS X 10.6.4
ghc 6.12.3
でした。
0823デフォルトの名無しさん
2010/09/19(日) 07:39:59[1..1000000000] はリストを正格に生成せず、最初と最後のイテレータを生成し、
reverse でイテレータ順序を反転するアダプタを生成し、
それを take 3 に食べさせれば
結果は瞬時に求まって、事はすべてまるく収まると思うんだけど、違うのかな?
0824デフォルトの名無しさん
2010/09/19(日) 10:24:02data List a = Nil | Cons a (List a)
と同じ構造
>>823のようなことをやりたければ、リストじゃない別のデータ構造が必要
0825デフォルトの名無しさん
2010/09/19(日) 11:25:02> [1..1000000000] はリストを正格に生成せず、最初と最後のイテレータを生成し、
> reverse でイテレータ順序を反転するアダプタを生成し、
> それを take 3 に食べさせれば
それって双方向リストかもしくは配列にしないとできないのでは。
双方向リストはメモリの関係で嫌がられるしなぁ・・・
0826デフォルトの名無しさん
2010/09/19(日) 11:42:17馬鹿らしくね?
0827デフォルトの名無しさん
2010/09/19(日) 12:02:55リストの構造は二種類あって
[]
x:xs
この二者択一だから、最初の要素をxとおくことは簡単だが、最後の要素は難しい
0828デフォルトの名無しさん
2010/09/19(日) 12:04:25たぶんC++の双方向イテレータみたいなのを考えてるんだろう
Haskellだとこういう感じ?
http://ideone.com/bgI8P
>>826
どんな言語だろうが有限メモリの計算機で走らなきゃ無用の長物だろ
0829デフォルトの名無しさん
2010/09/19(日) 12:05:35>双方向リストはメモリの関係で嫌がられるしなぁ・・・
そんなあなたにマジックリスト
(多少アクセス速度が犠牲になるけどね。)
0830デフォルトの名無しさん
2010/09/19(日) 12:06:43> それって双方向リストかもしくは配列にしないとできないのでは。
> 双方向リストはメモリの関係で嫌がられるしなぁ・・・
いや、だから引数を評価(生成)せずイテレータを生成すればいいじゃん。
オブジェクトの生成は必要になるときまで遅延するのが関数型言語ってもんじゃないの?
0831デフォルトの名無しさん
2010/09/19(日) 12:08:08関数型言語を使う人がメモリアクセスの仕方を気にするのは変だよね。
言語を実装する人が気にする話。
0832デフォルトの名無しさん
2010/09/19(日) 12:09:20825じゃないけど、イテレータを生成するのはいいが、
実際には末尾の要素までどうやって到達するの?
0833デフォルトの名無しさん
2010/09/19(日) 12:11:45ちょっと誤解してると思う
「Haskellが計算を必要なときまで遅延する」ってのは、単にcall by needを採用しているという意味であって、
なにかすごく賢い方法で不要な計算を省いてる訳じゃない
そしてcall by needでreverseを計算すると、リストの最後まで辿るのは避けられない
もう一つ、関数型言語だからといって遅延評価とは限らないよ
0834デフォルトの名無しさん
2010/09/19(日) 12:37:16言いだしっぺの法則
〜すればいいじゃんって言ったやつが自己責任で〜すればいい
0835デフォルトの名無しさん
2010/09/19(日) 12:54:07take 3 (reverse [1..1000000000]) の場合であれば、
(最初の要素から)末尾の要素まで到達する必要は無いだろ
末尾の要素から前に向かって3つの要素を生成するだけ
take 3 (reverse [1..1000000000])
take 3 [1000000000..1]
[1000000000, 999999999, 999999998]
0836デフォルトの名無しさん
2010/09/19(日) 13:12:40[..a,b..]のときbはsucc aで定義されるんで
末尾の要素が必要になった時点でsucc.succ....というのが作られるから無理
succのかわりにpredを使うenumToFromとかあればそういうのもできるけど
reverseによりenumFromToと切り替えるみたいな機構が必要になるからもはや普通のリストとはいえない代物になる
0837デフォルトの名無しさん
2010/09/19(日) 13:14:23イテレータを生成できるかどうかはコンパイラに判断させる気?
それとも、プログラマが指示するの?
このリストはこのようにしてイテレータで表現できるぞ、とか。
後者なら、そういう型クラスとインスタンスを作るのと何ら変わらないよ。
前者なら、コンパイラはどうやってイテレータを作るわけ?
たとえば100万個の要素のフィボナッチ数列の後ろ3つ欲しい場合、
コンパイラはどうするの?
0838デフォルトの名無しさん
2010/09/19(日) 13:17:05普通のリストでないとダメなの?
0839デフォルトの名無しさん
2010/09/19(日) 13:21:44イテレータは常に生成されるが、それが指す要素が実際に生成されるのは
要素が参照された場合のみ。
> たとえば100万個の要素のフィボナッチ数列の後ろ3つ欲しい場合、
> コンパイラはどうするの?
この場合は前から順にイテレータの要素が参照されるので、順に値が生成される
0840デフォルトの名無しさん
2010/09/19(日) 13:25:42ちょっと待て、それなら [1..100] だって
結局前から順にイテレータの要素が参照されなければ
後ろ3つは計算できないだろ。
[1..100] は要するに [n1=1, n2=n1+1, n3=n2+1, ...] ではないのか?
0841デフォルトの名無しさん
2010/09/19(日) 13:27:52お前のいうようなイテレータ方式は可能だけど、Haskellのリストはそういう物じゃないんだよ
具体的には、
・同じリストを二回走査した場合、要素の値を計算しなおしてはいけない
・リストの先頭に要素を追加する演算(:)が定数時間で終らないといけない
みたいな要求があって、イテレータ方式とは相容れない
0842デフォルトの名無しさん
2010/09/19(日) 13:28:52[1..n]だと(1,n,succ)
inv succ = predだとして(predがpartial functionであることはとりあえずおいとく)
reverse (1,n,succ) = (n,1,pred)
takeはどう定義しよう、継続か?
take 3 xs = (n,1,pred,take 3)
でこれを普通のリストに変換する手段を使る
toList xs = take 3 (until (==1) pred n ++ [1])
仮にreverse (take 3 (reverse [1..n]))とかやったときに2回目のreverseも上の定義でいいのかな?
0843デフォルトの名無しさん
2010/09/19(日) 13:30:46Haskellは無限リストと有限リストを区別しないのが自慢だった
後ろの要素を取れるのは有限リストに限定されるからダメ
0844デフォルトの名無しさん
2010/09/19(日) 22:45:46tolist (Succ s e) = [s..e]
tolist (Pred s e) = [ s + (e - x) | x <- [s..e]]
reverse_ (Succ s e) = (Pred s e)
reverse_ (Pred s e) = (Succ s e)
take_ n (Succ s e) = Succ s (s + n)
take_ n (Pred s e) = Pred (e - n) e
tolist (reverse_ (take_ 3 (reverse_ (Pred 123 1000000000))))
[126,125,124,123]
haskellはよく解らないのですが、これでどうですか?
0845844
2010/09/19(日) 23:04:43take_ n (Succ s e) = Succ s (s + n - 1)
take_ n (Pred s e) = Pred (e - n + 1) e
0846デフォルトの名無しさん
2010/09/19(日) 23:40:45どうですかと言われても、そのコードを提示した目的が分からん。
何が言いたいんだい?
0847デフォルトの名無しさん
2010/09/19(日) 23:59:36両方に対応するためほとんど同じような関数を二度も書かされるという、
おかしな事態に陥っていました。
そこで、ふつうのリストと遅延リストを区別しない言語が開発されました。
ある日、reverseが非効率なことに不満を持ったプログラマーが
効率的にreverseできるリストを発明し、普通のリストと区別することにしました。
0848デフォルトの名無しさん
2010/09/20(月) 00:05:42正しい選択だね。現実世界のプログラミングでは、効率は重要な要素だから。
同様に、現実世界は入出力や状態遷移に代表される副作用に満ちあふれている。
それをモナドやアローといった回りくどいやりかたでしか表現できないとしたら、
それは「おかしな事態に陥っている」と言えるだろう。
0849デフォルトの名無しさん
2010/09/20(月) 02:28:42確かに、それがうまく解決されているとは言い難いが
0850デフォルトの名無しさん
2010/09/20(月) 02:48:51そんなことは分かっている。
もし「旧来の言語のおかしな事態を解決する為に(Haskellが)開発された」のだとしたら、
旧来の言語では自然に表現できた副作用を不自然な形式でしか表現できない
言語設計を決定した研究者達は、お馬鹿さんだらけだったのね、ということになる。
それは(本人は気付いていないけど)>>847のHaskellに対する無知と研究者達への侮辱であり、
だから>>847の詭弁に対して詭弁で混ぜ返した(反論した)わけ。分かるかな?
0851デフォルトの名無しさん
2010/09/20(月) 02:56:210852デフォルトの名無しさん
2010/09/20(月) 03:37:43仕様書にはないんだね
real world haskellを見て混乱した
0853デフォルトの名無しさん
2010/09/20(月) 08:24:11旧来の言語のおかしな事態を解決しようとしないなら、新しい言語を作る価値なんてない
IOについては、旧来の言語よりもHaskell方式の方が自然に扱えてると思うけどな
0854デフォルトの名無しさん
2010/09/20(月) 13:16:17> 旧来の言語のおかしな事態を解決しようとしないなら、新しい言語を作る価値なんてない
これがくせ者で、「おかしい、扱いにくい、直感的じゃない」
と感じるかどうか、感じる度合いは人によって千差万別。
ある人がそういう目的で新言語を開発してコミュニティができてきても、
それに共感できない人たちも大勢いる。
0856デフォルトの名無しさん
2010/09/20(月) 22:44:41↓
Haskell標準のリストは汎用性が低かったから別のを作ったって事だろ
↓
汎用性を高める事(だけ)が目的だったのではないから、汎用性を批判するのは詭弁だ
という流れですか
汎用性は、かなり微妙な高さだと俺は思います
もし十分に高かったら、言語の取っつきにくさとか多少の犠牲を払っても使う価値があるのが明白だったわけですが、そこまで高くはない
けど低いというわけでもない
0857デフォルトの名無しさん
2010/09/20(月) 23:33:11コードを提示した目的が分からんと発言したのは私だが、
その後のレスとは全く繋がってないんじゃないかな。
私には >>844 があのコードを提示した理由が本当に分からん。
どうですかと言うからには、本人にとっては前レスまでに提示された問題を
少しでも解決の方向へ導けると思ってコードを提示したのだろう。
しかし、前スレまでの何の問題に対する解なのか・・・
0858デフォルトの名無しさん
2010/09/20(月) 23:58:12「本当に分からん」のに、なんで「全く繋がってない」って確信してるの?
自分に都合の良いことだけ信じてるの?
0859デフォルトの名無しさん
2010/09/21(火) 00:22:04確信してたら理由を説明して断定してる
確信できないから「じゃないかな」と曖昧な表現にした
0860デフォルトの名無しさん
2010/09/21(火) 00:27:37data Nt = Succ | Pred
data Nrs s e li = Li Nt s (Ni e)
tolist (Li t s e) = case (t,e) of
(Succ,Limit l) -> [s..l]
(Succ,Infinity) -> [s..]
(Pred,Limit l) -> [ s + (l - x) | x <- [s..l]]
reverse_ (Li t s e) = case t of
Succ -> Li Pred s e
Pred -> Li Succ s e
take_ n (Li t s e) = case (t,e) of
(Succ,Limit l) -> Li t s (Limit (min (s + n - 1) l))
(Succ,Infinity) -> Li t s (Limit (s + n - 1))
(Pred,Limit l) -> Li t (max s (l - n + 1)) (Limit l)
tolist (reverse_ (take_ 3 (reverse_ (reverse_ (Li Succ 123 Infinity)))))
もういいよコードが読めないならわからなくていいよ。
0861デフォルトの名無しさん
2010/09/21(火) 00:29:32そうですか
でも「全く」は断定的な表現ですよ
0862デフォルトの名無しさん
2010/09/21(火) 00:32:00ちゃんと理解したいです
0863デフォルトの名無しさん
2010/09/21(火) 00:35:20少ししか繋がっていないんじゃないかな(曖昧、緩い)
少ししか繋がっていない(断定)
全く繋がっていないんじゃないかな(曖昧、緩い)
全く繋がっていない(断定)
0864デフォルトの名無しさん
2010/09/21(火) 09:23:41何の問題を解決したかと言われれば、
定数時間かつ定数空間でreverseできるような遅延リスト風データ構造の設計、じゃね
>>828も同じ
0865デフォルトの名無しさん
2010/09/21(火) 09:38:05そんなの何千人も同じこと考えてでたのが今の結論なんだからねぇ。
0866デフォルトの名無しさん
2010/09/21(火) 10:22:03今の結論って何?
少なくとも標準ライブラリには入ってないよ
0867デフォルトの名無しさん
2010/09/21(火) 11:11:37横だが
仕様と実装を分離して、実装のことは思考停止する、みたいな結論かもしれない。
効率とかは実装側の問題だから考えないと。
仕様と実装の話題は
Common LispとかSchemeとかECMAScriptとか色々あるみたいだね。
0868デフォルトの名無しさん
2010/09/21(火) 11:36:32結論は今のリスト実装だよ。
いろんな構造を考えたけど速度やメモリ容量やいろんな要素を考慮して結局今の実装になった。
0869デフォルトの名無しさん
2010/09/21(火) 11:54:46それに [0..100] みたいな書き方は言語のプリミティブじゃなくてシンタックスシュガーだ、
って認識しないと。
0870デフォルトの名無しさん
2010/09/21(火) 11:55:06リストの実装は決まってる
>>868
それは今のリスト以外の構造を非難する理由にはならない
リストが万能じゃないからこそ、ArrayやData.Sequenceなんかが必要になる
reverseが高速にできることが必要なら、また別のデータ構造が要る
で、それを提示したのが>>844だろ
0871デフォルトの名無しさん
2010/09/21(火) 11:56:39その点を誤解してる奴は多分いないから安心してくれ
0872デフォルトの名無しさん
2010/09/21(火) 12:11:29lazyが万能じゃないからこそ、lazyをデフォにしたらダメだろ?
lazyがデフォの言語は、lazyが万能だと主張し続けないと生きのこれないんだよ
0873デフォルトの名無しさん
2010/09/21(火) 12:25:120874デフォルトの名無しさん
2010/09/21(火) 12:54:05その提示された構造は [a .. b] あるいは [a ..] で表現できるリストに限定されていないか?
もしそうなら、遅延リスト風データ構造という名前はちょっと大げさな気がする。
リストがもつ能力の半分も表現されていないと思う。
0875デフォルトの名無しさん
2010/09/21(火) 13:23:22>>844の方はそうだね
>>828はもうちょっといろいろできる(配列からの変換とか)
0876デフォルトの名無しさん
2010/09/21(火) 15:12:52無いのなら意味ないよね。
これだけなら`take n [b,b-1..a]'とか`[b,b-1..b-n+1]'とでも書けば済む問題だし。
>>844や>>860はこれ以外の用法を提示してほしいな。
それとも、これだけでも十分有用だということなのか。
0877デフォルトの名無しさん
2010/09/21(火) 17:53:400878デフォルトの名無しさん
2010/09/21(火) 22:00:380879デフォルトの名無しさん
2010/09/21(火) 22:11:170880デフォルトの名無しさん
2010/09/21(火) 22:22:430881デフォルトの名無しさん
2010/09/21(火) 22:27:360882デフォルトの名無しさん
2010/09/21(火) 22:27:41ってのは初級プログラマにありがちなんだよね
きっと彼も(説明しないんじゃなくて)説明できないんだと思う
0883デフォルトの名無しさん
2010/09/21(火) 22:28:450884デフォルトの名無しさん
2010/09/21(火) 22:49:310885デフォルトの名無しさん
2010/09/23(木) 12:52:54全てにおいて完璧なデータ構造なんて無いんだから適切な構造をto/from用の関数と一緒に定義すればいいだけじゃないの?
話の肝を勘違いしてたらすみません。
0886デフォルトの名無しさん
2010/09/23(木) 13:23:48:load "/home/my/hoge.hs"
が動かず
:load "c:/cygwin/home/my/hoge.hs"
としなければいけなくなっていた件
emacs lispわからん
0887デフォルトの名無しさん
2010/09/23(木) 15:43:32haskell-mode のせいか?
cygwin 上で普通にビルドした実行ファイルはファイル操作関連のことをしようとすると cygwin1.dll がパス変換する仕組があり、
あたかも cygwin ディレクトリがルートディレクトリに見えるようになっている。
:load を処理しているのは haskell 処理系の方のはずだから haskell-mode と直接の関係はなさそうに思うんだけど。
0888デフォルトの名無しさん
2010/09/23(木) 16:19:28setqで設定してるhaskell-program-name(ghcii.shを指定)とか
add-hookのモードは全くさわって無くて
loadのhaskell-site-file.elだけを2.4から2.8.0に差し替えただけなんだけども
C-c C-l(inferior-haskell-load-file)でghciにパス名を渡す際の
cygwinパス⇔windowsパスの変換をサボってるんだろうと思って
実装を眺めては見たけど
elispはよくわからないので諦めて2.4に戻しちゃった
そもそもが、インデントに不満があったから変えようと思ったんだけども
タブを複数回押せばくるくる回るのがわかったので満足してしまった
0889デフォルトの名無しさん
2010/09/23(木) 18:38:200890デフォルトの名無しさん
2010/09/23(木) 18:49:540891デフォルトの名無しさん
2010/09/23(木) 18:51:010892デフォルトの名無しさん
2010/09/23(木) 19:12:27だとしたらHaskellプログラミングに適したエディタはタイピング機能よりも
リーディング機能のほうが重要だと思うんだ。
0893デフォルトの名無しさん
2010/09/23(木) 19:19:19ライブラリのドキュメント参照機能とか充実してるの?
0894デフォルトの名無しさん
2010/09/23(木) 19:25:57notepad++:マウス操作メインで背もたれ → 腰が痛まない
0895デフォルトの名無しさん
2010/09/23(木) 19:26:40納得
0896デフォルトの名無しさん
2010/09/23(木) 19:32:10長く込み入ったコードを書くことってまず無いのではないか?
字下げが強要されるという事も相まって、
適切な空白とコメントと型宣言があれば、
全体の見通しは解析が必要なほど悪くはならないと思う。
0897デフォルトの名無しさん
2010/09/23(木) 20:28:06俺は逆だなぁ
マウス操作メインの時は前かがみになってキーボード操作メインの時は背もたれ
0898デフォルトの名無しさん
2010/09/23(木) 21:36:04{-# LANGUAGE TypeSynonymInstances #-}
class My a where
t :: a -> String
instance My String where
t = id
このコードはコンパイル出来るんですが、1行目を外すと通りません
その状態で、instance宣言を
instance My [Char] where
t = id
こう記述してもコンパイル出来ないんですが、
pragma無しだとどう記述すれば良いのですか?
0899デフォルトの名無しさん
2010/09/23(木) 22:13:45{-# LANGUAGE FlexibleInstances #-}
0900デフォルトの名無しさん
2010/09/23(木) 23:29:56まっすぐな机使ってる?
俺は真ん中が凹んでて左右が手前に伸びてる形の机を使ってる。
机の形の違いかな。
0901デフォルトの名無しさん
2010/09/24(金) 21:41:380902デフォルトの名無しさん
2010/09/24(金) 21:46:260903デフォルトの名無しさん
2010/09/24(金) 23:06:050904デフォルトの名無しさん
2010/09/25(土) 00:42:590905デフォルトの名無しさん
2010/09/25(土) 09:34:240906デフォルトの名無しさん
2010/09/25(土) 19:12:330907デフォルトの名無しさん
2010/09/25(土) 19:37:48http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/
英語が聞き取れるのなら、同ページにビデオもある
0908デフォルトの名無しさん
2010/09/25(土) 22:01:54経済学といい世界から遅れるのが日本のデフォだよな
()笑
0909デフォルトの名無しさん
2010/09/25(土) 22:20:420910デフォルトの名無しさん
2010/09/25(土) 22:24:01で、日本のバブル崩壊を笑っていた欧米がどうなっているかというと....。
こいつらには学習能力がないのかって感じですねw
0911デフォルトの名無しさん
2010/09/25(土) 23:02:01部下 「はい、閣下!もはや崖っぷちに立っている状態であります!」
偉 「では、わがソビエト連邦の情勢はどうなっておるか?」
部 「はい!アメリカより常に一歩先んじております!」
0912デフォルトの名無しさん
2010/09/25(土) 23:25:30Googleに入れるような人がなんだかんだと最高なんだろうと思ってたけど、
全く別タイプのすごい業界がどっかにありそうな感じがする。
0913デフォルトの名無しさん
2010/09/25(土) 23:34:030914デフォルトの名無しさん
2010/09/26(日) 08:45:440915デフォルトの名無しさん
2010/09/26(日) 10:14:53Parsec も wxHaskell もあそこで生まれたんだな
長くお世話になってたが、最近初めて知った
あそこのサイトで Haskell をキーワードに検索をかけると、
いろいろ興味深い記事や論文が大量に出てくる
0916デフォルトの名無しさん
2010/09/26(日) 10:24:21チューリング賞やらノーベル賞やら取ってる人が一杯いるしMSっぽくない
0917デフォルトの名無しさん
2010/09/26(日) 13:11:240918デフォルトの名無しさん
2010/09/27(月) 00:33:38プラグインしらない?
文法にインデントの制約儲けるってアホだろ
0919デフォルトの名無しさん
2010/09/27(月) 01:11:48プログラマの意図を正確に推論できなければ実現不可能。
今のところ、そんな素晴らしい夢のようなプラグインは存在しないと思われ。
個人的には「インデントによる制約(いわゆるオフサイドルール)」は嫌いなんだよな。
プログラミングスタイルは自由でありたい。C言語風の中括弧 ('{' .. '}') でええやん。
0920デフォルトの名無しさん
2010/09/27(月) 01:19:43オフサイドルール使わなくっても、{}を使って書けるよ。
オレはオフサイドルール使うほうが好きだけど。
0921デフォルトの名無しさん
2010/09/27(月) 03:18:45マジで知らなかった
0922デフォルトの名無しさん
2010/09/27(月) 17:20:12こういうのを書いたけど、putStr ""のあたりがなんか汚い
もっと良い書き方はありますか?
strdump :: [String] -> IO ()
strdump = foldl (\a x -> a >> putStrLn x) (putStr "")
0923デフォルトの名無しさん
2010/09/27(月) 17:37:49IO () 型で何もしないことを表すのなら return () を使う
strdump = foldl (¥a x -> a >> putStrLn x) (return ())
ただ、この場合なら mapM_ 使ったほうが楽
strdump = mapM_ putStrLn
0924デフォルトの名無しさん
2010/09/27(月) 17:39:15動作確認してないけど
strdump = mapM_ putStrLn
でいけんじゃね?
0925924
2010/09/27(月) 17:39:560926デフォルトの名無しさん
2010/09/27(月) 18:02:47ありがとうございます。return ()は知らなかったです。
mapM_はmapに対するiterのような感じですね
0927デフォルトの名無しさん
2010/09/27(月) 20:38:15それを出力する方法も。
strdump = putStr . unlines
-- unlines [ "abc", "def" ] = "abc\ndef\n"
0928デフォルトの名無しさん
2010/09/27(月) 21:41:00俺はこっちの方が好き
0929デフォルトの名無しさん
2010/09/27(月) 21:49:54指定しないですむ方法が知りたいだけのような気がする
strdump = foldl1 (>>) . map putStrLn
ただ、これだと空リストを渡した時にエラーになってしまう
0930デフォルトの名無しさん
2010/09/27(月) 21:50:37mapM_ に最適化してくれたら最高だけど。
0931デフォルトの名無しさん
2010/09/27(月) 23:28:33map show [1..1000000]
を/dev/nullに書き捨ててみたら
mapM_ putStrLn より putStr . unlines のほうが早かった。
mapM_ に最適化ってどういうことだ?
0932デフォルトの名無しさん
2010/09/27(月) 23:37:25I/Oを1000k回実行するのとI/Oを1回実行するなら1回の方が早いに決まってる
0933デフォルトの名無しさん
2010/09/27(月) 23:39:12flushしなかったらI/Oが終了するまえにプログラムが終了するぞ。
0934デフォルトの名無しさん
2010/09/28(火) 00:55:03行ったからか、flushの有無は関係ないみたい。実行時間が変わらない。
haskell内部から書き出すときは注意したほうがいいんだろうな。
IOはまとめたほうが早い、でいいのか?場合による?
0935デフォルトの名無しさん
2010/09/28(火) 01:30:580936デフォルトの名無しさん
2010/09/28(火) 01:32:11てことは、ある程度の数の文字を評価した後、まとめてシステムコールを呼び出しているんだろうから、
どれくらいの文字をまとめれば効率が良いか考えて、最適化されているのではなかろうか。
0937デフォルトの名無しさん
2010/09/28(火) 20:56:54標準ライブラリの実装依存じゃない?
ライブラリのIO関数がまとめている場合、プログラムでまとめるのは二度手間になるし。
0938デフォルトの名無しさん
2010/09/29(水) 13:06:05つーか、入出力はフツウにバッファリング
されてるだけじゃないの?
0939デフォルトの名無しさん
2010/10/01(金) 08:12:25http://blogs.dion.ne.jp/keis/archives/5984552.html
「群論の四則演算と同じで、圏論のモナドも公理系の利便性を享受すればいいんだよ!」
という見方って合ってるのかな?
0940デフォルトの名無しさん
2010/10/01(金) 10:01:28繰り返しとは限らないけどイテレータ
ほとんどの言語が、独特の工夫を凝らしたイテレータをもっている
0941デフォルトの名無しさん
2010/10/01(金) 10:13:05合ってると思う
Haskellの学習という観点だったら、モナドについて圏論的な理解を深めるよりも
プログラミング上のテクニックとしてモナド変換子の使い方でも学んだ方が良い
0942デフォルトの名無しさん
2010/10/01(金) 10:48:09俺もこれ読んで少しモナドが理解できた。
Haskellのモナドって正確にはKleisliなんたらってやつなんでしょ?
0943デフォルトの名無しさん
2010/10/01(金) 13:24:35Haskellのモナド⊂圏論のモナド、になるんだな
該当のPDF,teeの定義ではあってるのに
巻末のまとめのfmapの型が間違ってる気がする
0944デフォルトの名無しさん
2010/10/01(金) 16:26:36なるほど。Haskellにおけるモナドの全体像が見えてきた気がする。
参考までにもう一つ聞きたいんだけど、圏論の道具がプログラミングに使えるっていうのは、
いちおう理論的な裏付けがあるんだよね? もし三行で説明できる内容なら教えて欲しい。
0945デフォルトの名無しさん
2010/10/01(金) 17:12:10色々な概念の整合性が理論的に保証できる事が圏論を使うことの利点の一つ。
0946デフォルトの名無しさん
2010/10/01(金) 19:01:013行じゃないけどこれ読んどけ
http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
0947デフォルトの名無しさん
2010/10/01(金) 19:20:431行で要約すると: IOは置いてconcatMapの話を聞け
0948Perl忍者 ◆M5ZWRnXOj6
2010/10/01(金) 22:00:04きもいですね
0949デフォルトの名無しさん
2010/10/01(金) 22:01:02君も立派にきもいよ!
0950デフォルトの名無しさん
2010/10/02(土) 07:18:37分かったような分からないような。。とりあえずそのエントリ読んでみます。
0951デフォルトの名無しさん
2010/10/02(土) 07:19:180952デフォルトの名無しさん
2010/10/02(土) 07:23:030953デフォルトの名無しさん
2010/10/02(土) 11:09:580954Perl忍者 ◆M5ZWRnXOj6
2010/10/05(火) 07:22:230955デフォルトの名無しさん
2010/10/05(火) 12:17:310956デフォルトの名無しさん
2010/10/05(火) 14:30:140957デフォルトの名無しさん
2010/10/05(火) 14:33:14こう言って欲しいんだろ
「perlも関数型言語だからHaskellの仲間だね」
0958デフォルトの名無しさん
2010/10/05(火) 14:58:350959Perl忍者 ◆M5ZWRnXOj6
2010/10/05(火) 19:14:55どうせハッカーみたいな名前してるからやってんでしょ
gnwとか意味わからない名前だったらやってないでしょ
haskell=hacker
みたいだからやってるだけのお前らはな
やめたほうがいいと思うよ
0960Perl忍者 ◆M5ZWRnXOj6
2010/10/05(火) 19:15:45happy hackingとかそういうキーボードつかってんでしょ
ハッキングとか名前ついてるから
まじうざいんだよね
0961デフォルトの名無しさん
2010/10/05(火) 19:50:210962デフォルトの名無しさん
2010/10/05(火) 19:56:50だよなー、キーボードなんて1000円もしないのを使ってるよ
0963デフォルトの名無しさん
2010/10/05(火) 20:03:200964デフォルトの名無しさん
2010/10/05(火) 20:51:190965デフォルトの名無しさん
2010/10/05(火) 21:08:41A の横が Contorl であるキーボードで 1000 円くらいのものがあるのなら教えてください。
0966デフォルトの名無しさん
2010/10/05(火) 21:15:400967デフォルトの名無しさん
2010/10/05(火) 21:19:41キーマップ変更したらいいのでは
0968デフォルトの名無しさん
2010/10/05(火) 21:21:430969デフォルトの名無しさん
2010/10/05(火) 21:21:45果ては足shiftとか足enterとか...
0970デフォルトの名無しさん
2010/10/05(火) 21:28:27キーボード内蔵のフラッシュメモリに書き込めたらいいのに
0971デフォルトの名無しさん
2010/10/05(火) 21:29:170972デフォルトの名無しさん
2010/10/05(火) 21:39:19驚いた、こんなのがあるのか
現物もさることながら、作り方も興味深い
フォーカス機能の実装に zipper データ構造をつかうとか、
ウィンドウマネージャの特性を QuickCheck で検査するとか、
なかなか勉強になる
ありがと
0973デフォルトの名無しさん
2010/10/05(火) 21:58:330974デフォルトの名無しさん
2010/10/05(火) 22:00:000975デフォルトの名無しさん
2010/10/08(金) 06:06:25Windowsはフリーソフトで出来ると思うし
Linuxもほとんどの環境でできると思うし
MacはApple標準キーボードがAの隣だからそのままでいいし、そうでなくてもOSX側に入れ替えあるし
0976Perl忍者 ◆M5ZWRnXOj6
2010/10/08(金) 12:03:01やっぱりHaskellでHSAIMとかしちゃうんでしょうか?・・・
そこらへん気になります
具体的にいうとHaskellやってればFPS強くなりますか?
Perler vs Haskell のFPSバトルしませんか?
0977デフォルトの名無しさん
2010/10/08(金) 20:11:53正しい
0978デフォルトの名無しさん
2010/10/09(土) 08:09:56総合政策学部の意。
0979デフォルトの名無しさん
2010/10/09(土) 08:22:450980Perl忍者 ◆M5ZWRnXOj6
2010/10/09(土) 13:01:29暴言をわざとうけねらいの方に狙うカス
死ねばいいよ
0981デフォルトの名無しさん
2010/10/09(土) 15:07:01ちと吹いたw
0982デフォルトの名無しさん
2010/10/09(土) 16:15:09いきなり死ねって、どういう事ですか?
君には社会の常識がないのですか?
普通は、『あのう、すいませんけれども死んでくれませんか?』とか
『あなたには、死ぬという選択肢もありますよ』とか言うものですよ、
あなたみたいに最初から喧嘩腰だと、
言われた方は『じゃあ死んでみようかな』とかいう気持ちがなくなるものです。
まずは、親切丁寧に人に死んでと頼むべきだと思いますよ。
そこから、人の輪と協調が生まれ、『よーし死んでみるか』
という気持ちが生まれるわけです。
0983デフォルトの名無しさん
2010/10/09(土) 17:03:43>>671
0984デフォルトの名無しさん
2010/10/10(日) 15:15:120985デフォルトの名無しさん
2010/10/10(日) 16:34:360986デフォルトの名無しさん
2010/10/10(日) 16:50:05外部からイベントを受け取った時だけ内部状態を更新するのがpush型
だと理解してる
0987デフォルトの名無しさん
2010/10/10(日) 17:12:46ありがと
ということは、Yampa は pull 型なのか。
普通は微少な差分時間を入力し続けないとまともに機能しない。
でも、微積する必要がなければ、
べつに正しい差分時間をしなくても良いんだよな。
それなら外部からイベントを受けたときだけ
内部状態を更新するようにすればいいから、
push 型としても使えるのか?
いまいち分からんな・・・
reavtive は論文読むと push 型と pull 型の
いいとこ取りみたいなことが書かれてるけど、それじゃダメ?
0988デフォルトの名無しさん
2010/10/10(日) 18:03:59mapM_ (\x -> putStr x >> putStr ",") ["a","b","c"]
これだと余分な,が一個つきます
最後1つの処理が余計で微妙なんですが
こんな時どう書くのが簡単でしょうか
0989デフォルトの名無しさん
2010/10/10(日) 18:08:40putStrLn $ concat $ intersperse "," ["a","b","c"]
0990デフォルトの名無しさん
2010/10/10(日) 18:08:56let str = ["a","b","c"] in putStr (head str) >> mapM_ (\x -> putChar ',' >> putStr x) (tail str)
0991デフォルトの名無しさん
2010/10/10(日) 18:12:060992デフォルトの名無しさん
2010/10/10(日) 18:26:09という関数があるから、
putStrLn $ intercalate "," ["a", "b", "c"]
でおk
0993デフォルトの名無しさん
2010/10/10(日) 18:41:39http://www.haskell.org/hoogle/?hoogle=[String]+->+String+->+String
0994デフォルトの名無しさん
2010/10/10(日) 18:51:18次スレを作るなら是非テンプレに入れて欲しい
てか次スレのことを忘れてた
0995デフォルトの名無しさん
2010/10/10(日) 18:54:490996デフォルトの名無しさん
2010/10/10(日) 19:07:210997デフォルトの名無しさん
2010/10/10(日) 19:13:570998デフォルトの名無しさん
2010/10/10(日) 19:26:59もうすぐ埋まっちゃうじゃん。
0999デフォルトの名無しさん
2010/10/10(日) 19:35:45ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
あと頼みますわ。あと>>1の全角スペースともう一個何か?が"?"になってしまったよorz
1000デフォルトの名無しさん
2010/10/10(日) 19:37:14乙
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。