トップページtech
1001コメント325KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2010/04/29(木) 19:15:28
haskell.org
ttp://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:53
これは乙じゃなくて乙なんだからねうんたらかんたら
0004デフォルトの名無しさん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:57
・【.NET】F#について語れ【OCAML】
ttp://pc12.2ch.net/test/read.cgi/tech/1186030985/
0006デフォルトの名無しさん2010/04/29(木) 21:31:28
前スレ >>999 おねがい

Haskell: 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:36
英語ができるならネットでチュートリアルをいくつか→RWHでいいよ
0008デフォルトの名無しさん2010/04/29(木) 21:41:11
>>7

http://www.haskell.org/haskellwiki/Tutorials

この辺ですね? ↓とか楽しそう

http://learnyouahaskell.com/
0009デフォルトの名無しさん2010/04/29(木) 21:55:18
なんか珍しく盛り上がってるな
こここんなに人いたんだな
0010デフォルトの名無しさん2010/04/29(木) 22:06:38
少人数が騒いでるだけ。
0011デフォルトの名無しさん2010/04/29(木) 22:11:08
しかもJSON分かり辛いって言われてもなあ。
あれはわかりやすいから普及したんだよ。
0012デフォルトの名無しさん2010/04/29(木) 22:21:02
>>11

まだやんのかw

>>7-8

ビデオも良いね

http://www.haskell.org/haskellwiki/Video_presentations
0013デフォルトの名無しさん2010/04/29(木) 22:45:51
>>6
分かりやすいの意味が分かりにくいが・・・

Craft の方は王道というか、全く持って普通の Haskell 本。
比較的広いトピックを丁寧に解説している。
教科書的で基礎がしっかり学べるから入門に良いと思う。

School は(ほぼ)グラフィックス処理を題材に
関数プログラミングのテクニックを解説している感じ。
だいたい、奇数章でテクニックの本質みたいなのを解説して、
偶数章でそれをグラフィックス処理に応用するみたいな。
ストリーミングの解説辺りから FRP が題材に出てきて面白い。
最後の方にロボット制御や音楽などが題材に出てくる。

Road は知らん。
PDF で読めるヤツとは違うものなんかな
0014デフォルトの名無しさん2010/04/29(木) 23:24:36
>>6
おっと、肝心の質問に答えてなかったな。

私にとっては Craft と School は理解し難くはなかった。
School の方が説明を端折ってる感は若干あった。
0015デフォルトの名無しさん2010/04/29(木) 23:30:03
Haskellよりも本を読むことが目的になってるように思えるんだが、みんなそんなに読みまくってるのw?
0016デフォルトの名無しさん2010/04/29(木) 23:35:09
>>15
> Haskellより

意味が分かりません。
明瞭な言葉で語ってください。
0017デフォルトの名無しさん2010/04/29(木) 23:56:23
>>16
Haskell でのプログラミング中に起きた問題の解決よりも、とか、
Haskell でプログラミングすることよりも、
という様な感じの意味だろ。
それくらい文脈を考慮して察してやれよ。
0018デフォルトの名無しさん2010/04/30(金) 00:04:03
>>13-14

THX

Craftかなとも思いますが、>>7のいうようにネット上のチュートリアルとか
リファレンスをまず漁ってみます
0019デフォルトの名無しさん2010/04/30(金) 00:59:54
本を読むのも悪くないと思うけどな
もちろん練習も必要だが、その前にインプットだろ
0020デフォルトの名無しさん2010/04/30(金) 01:01:46
>>18
Craftは来年に新版が出る、かもしれない
0021デフォルトの名無しさん2010/04/30(金) 01:08:03
そことそこ
推薦図書スレへ帰れ
0022デフォルトの名無しさん2010/04/30(金) 01:10:06
>>15>>19な。
0023デフォルトの名無しさん2010/04/30(金) 01:24:34
日本語が不得手な人が混ざってるね
0024デフォルトの名無しさん2010/04/30(金) 02:18:23
>>23
どの人?
0025デフォルトの名無しさん2010/04/30(金) 02:30:28
RWHは難しいというか、話題が章内で完結していないので入門書やハンドブックとして適切じゃない。
知りたい項目を目次で調べてそのページを開いても、その章の始めの方の分かりづらい例題を理解して、さらに章をまたいで読まないといけない。

例えば「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作者「Rasmus Lerdorf」名言集を聞くと嫌PHP厨がファビョる
・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
・問題を解くのが好きなだけで、プログラミングは大嫌いです。
・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
・パーザを書くのは苦手です。本当にダメなんです。今でもね。
・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。
0027デフォルトの名無しさん2010/04/30(金) 05:40:06
>>26
同意できるな
Haskellプログラマは最適化なんて興味ないだろ
仕様を記述できればいい
0028デフォルトの名無しさん2010/04/30(金) 05:47:16
>・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
GHCを作ったのも多数の開発者だな。
>・問題を解くのが好きなだけで、プログラミングは大嫌いです。
まさしくHaskellだな。
>・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
Haskellは再利用性が高いな
>・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
Haskellの本は少ないな
>・パーザを書くのは苦手です。本当にダメなんです。今でもね。
Parsecか
>・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
Haskellにはプログラミング言語の研究者が重要だという奴は何でもあるな。
>・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
理解できないな
>・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
俺の書いたHaskellプログラムもやっつけ仕事だな。スペースリークだらけだがnが小さいので問題ない
>・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
同意だな
>・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
俺もHaskellがあれば作る必要はないと思う
>・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。
まあ、Javaしかできない人よりはましだな
0029デフォルトの名無しさん2010/04/30(金) 06:42:05
あちこちにコピペ投下するようなバカを相手にしてはいけない
0030デフォルトの名無しさん2010/05/01(土) 22:51:00
code.haskell.org is down?
0031デフォルトの名無しさん2010/05/01(土) 23:09:19
yp
0032デフォルトの名無しさん2010/05/02(日) 10:56:37
脈略ないけど、Haskellでは
余データ==プログラム
という意味合い?
0033デフォルトの名無しさん2010/05/02(日) 12:03:28
Haskellではcodataはclassに相当するもんだと思う
0034デフォルトの名無しさん2010/05/02(日) 12:33:18
余データ(codata)って何?
興味ある
0035デフォルトの名無しさん2010/05/02(日) 14:05:03
モナドはたしかデータ、余データ(codata)に関する理論じゃなかったっけ。
なんでそれがリストモナドとかと関係するのか全くわからなかったけど。
0036デフォルトの名無しさん2010/05/02(日) 14:28:43
>>34
データの双対
0037デフォルトの名無しさん2010/05/02(日) 14:58:55
>>36
ごめん、まだ分かんない・・・
ググってもなかなかそれらしい記事に当たらないし(キーワードがまずいのか)。

codata が class に相当するのだとしたら、data は何に相当するの?
そしてそれらは、どのような事柄に関して双対関係があるの?
0038デフォルトの名無しさん2010/05/02(日) 15:14:27
>>37
>そしてそれらは、どのような事柄に関して双対関係があるの?
それこそ自然な同型になるようにするためだろう。
じゃないと取り扱いづらいし双対関係作る意味がないと思う。
0039デフォルトの名無しさん2010/05/02(日) 15:16:13
なんだか閃いた。>>37 thx!
0040デフォルトの名無しさん2010/05/02(日) 15:47:45
>>38
質問の仕方が悪かったかも。

Wikipedia によると、双対は
2つの対象がある意味で互いに「裏返し」の関係にあるというようなニュアンスがあるという。

これを踏まえて2つ質問があります。

・今回の件(Haskell)において、2つの対象の一方は class ではないかと意見が出た。
ではもう一方は何に相当するのか。

・ある意味で互いに裏返しの「ある意味」というのは、
今回の件(Haskell)では何に当たるのか。
0041デフォルトの名無しさん2010/05/02(日) 18:41:05
class宣言がinstanceの型からADTへの射だとしたら
その矢印が反対のものはADTからinstanceの型への射
ならdataはinstance宣言になるのか?なんかしっくりくるようでこない
0042デフォルトの名無しさん2010/05/02(日) 23:31:11
質問なんですが、今RWHを読んでいるのですが、putStrLnの後に $ がある場合と
無い場合がありますよね?
これってputStrLnの引数が文字列リテラルだけの時は要らなくて、文字列++変数
みたいな時には要るということなのでしょうか?

よろしくお願いします。
0043デフォルトの名無しさん2010/05/02(日) 23:36:33
>>42
初学者の方ですね。
($)演算子(関数)は、第一引数を第二引数に適用する関数です。
($)がなくても括弧を駆使すれば関数は書けますが、
($)を使うと綺麗に書ける場合が多いのです。
0044デフォルトの名無しさん2010/05/02(日) 23:45:09
>>43

ありがとうございます。

"($)演算子"でググればよかったんですね。

f1(f2(f3(arg))) → f1 $ f2 $ f3 $ arg

ttp://blog.livedoor.jp/kikwai/archives/51588251.html

分かりましたー
0045デフォルトの名無しさん2010/05/02(日) 23:46:36
> これってputStrLnの引数が文字列リテラルだけの時は要らなくて、文字列++変数
みたいな時には要るということなのでしょうか?
結果としてはそうなのだが、演算子の結合の問題。
0046デフォルトの名無しさん2010/05/02(日) 23:51:06
>>42

 putStrLn "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))))
みたいな式を書きたいときとか、括弧()の代わりに$を使うと読みやすくなる。
0047462010/05/02(日) 23:51:50
うわwww オレ、はずかし。
0048デフォルトの名無しさん2010/05/02(日) 23:58:19
>>46-47

いえいえ凄く分かりやすいです。ありがとうございます。
0049デフォルトの名無しさん2010/05/03(月) 00:08:14
たぶん、>>48>>46 の恥ずかしさが分かっていないと思う。
0050デフォルトの名無しさん2010/05/03(月) 01:57:07
一応、Haskellでは関数合成と適用を組み合わせるスタイルが推奨されているようだ。

g 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
>>51
否。遅延評価(左最外簡約)な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:11
結合則と評価順をごっちゃにしてはいけない
0054デフォルトの名無しさん2010/05/03(月) 13:34:14
>>53
そっか、>>46 は「先に評価される=優先度が高い」という話をしてたのか。

それを俺の方が結合度の話をしていると勘違いして、
>>51 で間違った指摘をしてしまったのか。

すまんかった、申し訳ない。
ちなみに >>49 も俺、本当に悪い
0055デフォルトの名無しさん2010/05/03(月) 22:59:42
GHCIで正規表現を使ってみたくて
Prelude> :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
>>55
とりあえず、モジュールがインストールされているかどうかを調べてみたらどうだ?
0057デフォルトの名無しさん2010/05/03(月) 23:21:48
>>56

すいません 本来どこに入ってるんですか?
/usr/lib/ghc-6.8.2 下とか /usr/lib/haskell-utils あたりを今探している
んですが・・・

該当するライブラリは見つけたっぽいんですけど↓
http://hackage.haskell.org/package/regex-posix
どこにインストールすればいいのか分かりません。
0058デフォルトの名無しさん2010/05/03(月) 23:37:33
ghc-pkg list
でインストール済みパッケージの一覧
0059552010/05/03(月) 23:54:42
$ ghc-pkg list
/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
>>59
正規表現ライブラリはいくつもあるので、Hackageで探してインストール。
0061デフォルトの名無しさん2010/05/03(月) 23:58:22
>>59
訂正。ライブラリは見つけたようなので、cabalでインストール。cabal-installがインストールされていなければ、まずそれをインストール(ぐぐればダウンロード元が見つかる)。
0062デフォルトの名無しさん2010/05/04(火) 13:10:02
Linuxならディストロのパッケージを入れる方がいい
aptとかで探せば出てくるはず
0063デフォルトの名無しさん2010/05/04(火) 13:28:39
>>62
ディストロのパッケージだと何故か上手くいかない、
という相性の問題が以前からたびたび出てるよ。
Debian 系の報告が比較的多い感じ。

Cabal 使っておけば安全だし、他の OS でも知識が生きると思う。
0064デフォルトの名無しさん2010/05/04(火) 13:35:36
そりゃあDebianにレポートすべきでは。
0065デフォルトの名無しさん2010/05/04(火) 18:07:52
ディストロ系のパッケージだとpure Haskellでないライブラリも確実に処理してくれる半面、
バージョンのチェックが怪しいかもしれんね。
Deb系のパッケージシステムのことはよく知らんが、Cabalみたいに上限バージョンのチェックまでしてくれるのだろうか?
それにDebianのレポジトリに入っているパッケージは全体的に古い
0066552010/05/04(火) 18:47:03
cabal-installを入れようとしたら、timeライブラリが無いと言われ
timeを入れようとしたら、baseライブラリが古いと言われ、baseを
アップデートしようと調べたらGHC自体をアップしないと無理と
書いてあったので、最新のGHCをソースからインストールしたら、
Text.Regex.Posixも一緒に入り、最初の問題が解決しました。
0067デフォルトの名無しさん2010/05/04(火) 19:49:24
最初からCabalでなくPortageでも採用してれば今こんなに
面倒なことにはなってなかったはず
0068デフォルトの名無しさん2010/05/04(火) 23:51:23
Cabal に削除コマンドが未だに無いのも不思議だ
0069デフォルトの名無しさん2010/05/05(水) 00:18:06
Cabalは参照透明性を維持します。
破壊更新・削除はできません。
0070デフォルトの名無しさん2010/05/05(水) 00:38:55
>>68
ていうか、Cabalはbuild architectureだから。
パッケージ管理システムではなく、makeの置き換えだと考えるべき。
パッケージ管理はghc-pkgがやっている。
0071デフォルトの名無しさん2010/05/05(水) 00:40:59
書店でざっと見て来ました。前スレだったかにハンドブックを求めていた人がいたと思うけど、
プログラミングHaskell (ISBN-10: 4274067815)で良い気がした。

RWHは長いからタイトル通り実用例題集くらいに思って、これと両方持ってると良さそうですな。
0072デフォルトの名無しさん2010/05/05(水) 03:08:32
makeはautomakeでuninstallルールの自動生成できるじゃん
0073デフォルトの名無しさん2010/05/05(水) 07:38:52
>>72
ghc-pkg unregisterではだめか?
0074デフォルトの名無しさん2010/05/05(水) 11:45:39
>>73
依存性を考慮するのがメンドイ

ライブラリAが、ライブラリBをインストールした時に同時にインストールされたものか、
それともライブラリBをインストールする前からインストールされてたのか、
すぐに忘れる。

あと、ライブラリやドキュメント、実行ファイルを消すのがメンドイ
まぁ、これはインストールされてる場所は決まってるから、作業は簡単なんだが。
0075デフォルトの名無しさん2010/05/05(水) 13:40:14
"cabal update" をしたら次のメッセージが表示された

-----
(略)
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:38
cabal --versionの結果は?
0077デフォルトの名無しさん2010/05/05(水) 17:59:08
>>76
cabal-install version 0.8.1
using version 1.8.0.2 of the Cabal library

です。
0078デフォルトの名無しさん2010/05/05(水) 18:33:39
とりあえずhackageからtarball落して解凍して手動で入れてみれば?
0079デフォルトの名無しさん2010/05/05(水) 19:34:46
>>78
手動で入れても相変わらず同じ結果だった。
ではビルドされた 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
>>75
その現象には私も直面した。
globalとuserの両方にcabalがあり、userのほうが新しいcabalのはずなのだが、
参照されているcabalは古いバージョンのようだ。
私はHaskellのライブラリを全部削除してからGHCを再インストールした。
もっとうまい方法はないだろうか。
0081デフォルトの名無しさん2010/05/06(木) 06:48:09
cabalには正しくアップグレードできないというバグがあるのかもしれない
0082デフォルトの名無しさん2010/05/06(木) 12:07:33
うちではtimeとconvertibleが百年戦争やってるよ
0083デフォルトの名無しさん2010/05/07(金) 20:58:39
Haskell Platform 2010.1.0.0 を再インストールしたけど、だめだった。
他のライブラリは "cabal install" でインストールしたら
ちゃんと "cabal info" に反映されるのに、
cabal-install だけは反映されない。

こういうモンだと思って、もう諦めた。
0084デフォルトの名無しさん2010/05/07(金) 22:33:07
cabalは変な動作をするね
モジュールの依存関係を正しく理解してないことがしばしばある
しかも、出来上がったパッケージが稀に壊れてたりもする
cleanしてからビルドするとちゃんとしたものが出来るけど、それってどうなのよ
0085デフォルトの名無しさん2010/05/07(金) 23:28:40
Haskellにはよくあること
0086デフォルトの名無しさん2010/05/08(土) 01:41:52
cabalでのビルドにおけるトラブルの主因は、依存ライブラリを
パッケージごとに管理しているせいではないか。

このパッケージごとの名前空間分離は、ファイル名ベースの管理と違って、
重複を避けやすい反面失敗しやすい、許容範囲の狭い方法だろう。
実験的なソフトウェアが多いHaskellにおいては、予想外の動作をするよりは
動作しないほうが安全であり、Cabalは望ましい設計だということができるだろう。

一方で、Haskellをプロダクションに使うには、ビルドを確実に処理するための
特別なサポートが必要だろう。
0087デフォルトの名無しさん2010/05/08(土) 11:48:44
PDFファイル所在のメモ
ttp://openpdf.com/ebook/replicate-haskell-pdf.html
0088デフォルトの名無しさん2010/05/09(日) 00:02:15
型Bを型Aへ変換する関数と、型Cを型Aへ変換する関数を同じ名前にしたいです。
型Bと型Cを、型Aへ変換する関数を持つクラスのインスタンスにするしかないでしょうか。
0089デフォルトの名無しさん2010/05/09(日) 00:35:53
>>88
モジュールを分けて修飾インポート。
しかしそもそも同じ名前にすべき理由は何?
0090デフォルトの名無しさん2010/05/09(日) 00:37:11
Example
let a = B.toA b
a' = C.toA c
0091デフォルトの名無しさん2010/05/09(日) 18:06:43
> and []
True
> or []
False

GHCでこんな結果がでるんですが、これは意図してこのように定義されて
いるのでしょうか? どっちも False か、どっちもエラーかの方が妥当な
気がするのです。
0092デフォルトの名無しさん2010/05/09(日) 18:26:48
それはどちらもそう定義してある。

and (x:xs) = x && and xs
or (x:xs) = x || or xs

その2つとこれ見て実際に手を動かしてみたら分かると思うな。
0093デフォルトの名無しさん2010/05/09(日) 19:53:22
鳳たんが書いたHaskellの紹介
http://feather.perl6.nl/~audreyt/osdc/haskell.xul
を読もうとしていますが唯一、Firefox/Linuxでのみ読めました。
他のブラウザは、拡張子がわからない(IE、Chrome)とか、
ソースがそのまま表示されるとか(Firefox/Win)です。

Linuxで読めればいいかというと、レイアウトが乱れて読めない場所があったりします。

どうしたらいいでしょうか?
0094932010/05/09(日) 20:12:20
> 他のブラウザは、拡張子がわからない(IE、Chrome)とか、
> ソースがそのまま表示されるとか(Firefox/Win)です。

Mac (Safari, Firefox)でも似たようなものです。
0095デフォルトの名無しさん2010/05/09(日) 21:28:24
>>89,90
ありがとうございます。

いや、今のところ特にそれで困っているという状況ではないです。
単に C/C++ などのようなオーバーロードはできるかなと思っただけです。


0096デフォルトの名無しさん2010/05/09(日) 22:49:26
>>92
プログラミングHaskel 6章の課題をやっていて、and'という名前で、
まさにそのように定義しました。でも、この定義は and' [] の場合
を決めていませんし、実際にやってみたら、エラーになりました。
ライブラリ関数 and もそうなんだろうと思って試してみたら、>>91
の結果が返ってきました。

それで質問をさせてもらったのでした。
0097デフォルトの名無しさん2010/05/09(日) 23:23:27
>>96
GHC ライブラリ リファレンスの Prelude.and 関数や or 関数の説明からは、
次のように定義されているっぽいと推測できる。

and 関数は有限リスト、無限リストを問わず、
どこかにひとつでも False があると分かれば False を返す。
それ以外は True を返す(が、そのためには有限リストで無ければならない)。

or 関数は有限リスト、無限リストを問わず、
どこかにひとつでも True があると分かれば True を返す。
それ以外は False を返す(が、そのためには有限リストで無ければならない)。

なので、and [] は「それ以外」の条件に当てはまり True となる。
or [] も「それ以外」の条件に当てはまり False となる。
0098デフォルトの名無しさん2010/05/09(日) 23:34:52
ここらは(代表的な)Lispのand/orとまったく同じ定義
さすがにhaskellではhead [] /= []かつtail [] /= []だけど
0099デフォルトの名無しさん2010/05/09(日) 23:45:53
0個の元の論理積の値を,論理積の単位元 True で定義しておくと,0個以上の元の論理積を再帰的に定義できる.
0!(0の階乗)を 1と定義するのと同じ.
0100912010/05/09(日) 23:57:03
ぼんやりと心がわかったような気がしました。
いただいた回答を参考に、もうちょっと考えてみたいと思います。

回答してくださったみなさんありがとうございます!
0101デフォルトの名無しさん2010/05/10(月) 16:38:55
case中全部から見えるwhere節が欲しい時がある
0102デフォルトの名無しさん2010/05/10(月) 18:14:05
その case 以外からは見えない where 節ということ?
0103デフォルトの名無しさん2010/05/10(月) 19:00:59
>>102
case n of
0 -> f ....
1 -> f ...
_ -> ...
where f = ...
なんてことができればいいなと
0104デフォルトの名無しさん2010/05/10(月) 19:26:24
>>103
case 以外からも見えていいなら普通にできるが

f x = case x of
    Just a -> g $ show a
    Nothing -> g "nothing"
  where g s = print s
0105デフォルトの名無しさん2010/05/10(月) 19:58:17
>>104
caseの各パターンマッチのwhere節

この間がほしい

関数のwhere節

let f = .. in case exp of ..的なスコープってこと
expの部分では見えてなくてもいいけど
0106デフォルトの名無しさん2010/05/10(月) 20:11:00
その case だけ別関数にしちゃえばいい。

f 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:40
関数プログラミングの楽しみ|Ohmsha
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=978-4-274-06805-8

7年前の本か
使い物になんのかな?
0109デフォルトの名無しさん2010/05/11(火) 19:20:39
>>108
目次に見覚えがあると思ったら、これの和訳か。
「the fun of programming」

いろんな事に関心を持って何とか応用できないかと常に考えてる人にとっては、
7年前のものとか関係なくしっかり使い物になる本だよ。
「Real World Haskell」よりももう少し抽象度の高い実践という感じ。
各章でひとつの応用トピックを取り上げ、その中で色々なテクニックや方法論を学べる。
トピックの幅がかなり広いから、章のタイトルだけ見て
興味あるトピックだけを拾い読みするような人は、読める所が少ないかも。

また、「Real World Haskell」以上に入門書から遠い本だとは思った。
中置データ構築子などを含む基本文法は当然として、
式の置き換えによる評価の追跡とか、構造的帰納法による解析(証明)とか、
その手の基本テクニックも慣れてること前提っぽい。
0110デフォルトの名無しさん2010/05/11(火) 21:37:28
Real World Haskell買って読んでるけど、いちいち話が長い。

そう思っていた時にふと本屋で「プログラミングHaskell」を手にしてあっさりしている事が新鮮だったよ。
実用(利用)例は文字通りRWHがいろいろあるので、両者を手にして往復しながら理解を進めていくのが正解かもね
0111デフォルトの名無しさん2010/05/12(水) 00:17:25
>>108

高い上に難しそう・・・

フフフ 買いかな?
0112デフォルトの名無しさん2010/05/12(水) 20:58:41
data でつくる代数データ型だけど、どの辺が「代数」なのでしょうか?
0113デフォルトの名無しさん2010/05/12(水) 21:56:12
代数データ型間の同型関係を=,
sumを+,
productを*
と読み替えたときに環になっているから?

まあデータ型なんてどれでも代数的にみることはできると思うけど。
0114デフォルトの名無しさん2010/05/13(木) 00:23:42
代数系でググれ
0115デフォルトの名無しさん2010/05/13(木) 00:58:51
代数データ型でないデータ型などない
整数,実数,文字,すべて代数的だ
0116デフォルトの名無しさん2010/05/13(木) 01:04:09
>>112
これがいいだろ
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
>>115
いや、だとしたらdataで作るデータ型にわざわざ「代数」という単語をくっつけた理由を知りたいです
0118デフォルトの名無しさん2010/05/13(木) 22:24:46
>>111
すまん、>>109 は脅すつもりはなかったんだ。
買っとけ。

読んでいるそばから応用したくなる衝動を抑えるのに苦労する。
「Real World Haskell」が楽しめた人ならこれも楽しめるし、
関数型プログラマとして絶対にパワーアップできる。

扱うテクニックは「Real World Haskell」よりもより関数型らしさが出てる。
そのため高度だが、解説はこちらの方が筋道が立ってて、むしろ分かりやすい。

ただ、日本語がどうなってるか知らんがな。
0119デフォルトの名無しさん2010/05/14(金) 17:12:28
罠なんだろうか

Network.Socket.SockAddrInet :: PortNumber -> HostAddress -> SockAddr
PortNumberの方はWord16のnewtypeでfromIntegralにエンディアン変換が仕込んである
HostAddressの方は単なるWord32のtype-synonymなので自分で変換する必要がある
どっちかに統一してくれ
0120デフォルトの名無しさん2010/05/15(土) 14:01:34
ファイル処理の関数を書いたら、シグネチャが String> IO String みたいにIOがつく関数がたくさんできるんだけど、これがRWHが言うところの「汚染される」ってこと?
上手に作るとIOがついてない関数で置き換えられるってこと?
0121デフォルトの名無しさん2010/05/15(土) 16:07:53
>>120
処理対象がファイルなら必然的に IO ばかりになる。
ファイルは Haskell の知らないところで変わったり消えたりするんだから。

処理対象がファイル名やメタデータ(作成日時など)、コンテンツなどなら、
外部との出入り口だけ IO で処理して、あとは IO 無しでいける。

前者と後者を上手く「切り分ける」ことが大事。

>>120 だけの情報だと、こういう至極当たり前な事しか言えない。
0122デフォルトの名無しさん2010/05/15(土) 19:51:51
The fun of programming持っている人に聞きたいんだけど、Fig. 1.2で

 1
/\
3  2
|  |
4  5
に「6だけ」の木を追加する次の段階って、何故2-5の枝の方にくっ付けたんでしょうか?3-4の方に付けちゃ駄目?

joinの定義式のaa bb ccに該当するものを考えてそうなるのかと思ったのだけど、そうすると上段では
左側に2・右側に3の枝になっているのが、下段に行くと左右逆転して左が3の枝になってるのも分からない。
0123デフォルトの名無しさん2010/05/15(土) 22:41:32
>>122
1 から 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:54
Haskellってひょっとして、言語の学習コストが、ソフトの保守コストよりも大きいんじゃね?
0125デフォルトの名無しさん2010/05/15(土) 23:08:51
>>124
初心者卒業レベルまではそれほどでもないのだが、そこから製品開発に使えるレベルまでいくのが大変
- 要求性能が出ないとき
- 結果が変なとき
に、短時間で原因を突き止め修正できるようになるには、相当の練習が必要
0126デフォルトの名無しさん2010/05/15(土) 23:10:50
すんません
HOpenCVのマニュアルってどこにあるでしょうか?

http://hackage.haskell.org/package/HOpenCV
に、
http://www.ee.bgu.ac.il/~noamle/
ここ↑にオンラインドキュメントがあるみたいなことが書いてあるんですが見当たりません
0127デフォルトの名無しさん2010/05/16(日) 00:02:15
言語に関する総コスト一定の法則
0128デフォルトの名無しさん2010/05/16(日) 18:28:59
コメント文に見たことのない演算子が書いてあったから、どういう意味なのか考え込んだ
それがこれ

:-)
0129デフォルトの名無しさん2010/05/16(日) 18:48:29
:-p
0130デフォルトの名無しさん2010/05/16(日) 19:09:08
><
0131デフォルトの名無しさん2010/05/16(日) 19:24:10
^^
0132デフォルトの名無しさん2010/05/16(日) 19:47:24
:-)
これがぱっと見で演算子に見えたのか
まだ Haskell に慣れていないんだな
0133デフォルトの名無しさん2010/05/16(日) 20:03:14
: D
0134デフォルトの名無しさん2010/05/16(日) 21:43:48
</>
0135デフォルトの名無しさん2010/05/16(日) 21:56:31
顔文字プログラミングとかできないだろうか
0136デフォルトの名無しさん2010/05/16(日) 22:07:08
(:[])
は比較的良く使うよね
0137デフォルトの名無しさん2010/05/16(日) 23:33:10
getChar ってキーボードから文字を何回入力しようとも、
最後に改行を入力しない限り関数から処理が抜けないと思うんだけど、
そうすると最初の一文字だけ取得して残りはバッファに残ってしまう。

なので次に getChar するとユーザーのキー入力を待たずに、
バッファに残っている先頭の文字を直ちに取得してしまう。

最後の改行も含めた複数のキー入力のうちで
最初の文字を取得するだけなら getLine と head でいいんだけど、
ユーザーに改行を入力させずに、一文字のキーを入力したら
直ちに関数から抜けてその文字を取得できるような関数は
標準ライブラリには無いですか?
0138デフォルトの名無しさん2010/05/16(日) 23:45:37
>>137
hSetBuffering stdin NoBuffering
01391372010/05/17(月) 07:20:53
>>138
次のようにやっても効果ありません。

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
>>139
正しい動作じゃない?
getCharを2回繰り替えしてからprintしてるんだから
0141デフォルトの名無しさん2010/05/17(月) 09:53:09
改行くるまでバッファリングしてるのは端末だお
0142デフォルトの名無しさん2010/05/17(月) 10:04:33
>>139
a <- getChar -- 'a'
b <- getChar -- '\n'
print a
print b
0143デフォルトの名無しさん2010/05/17(月) 10:42:49
いや、俺の環境(Linux, GHC 6.10.1)だとhSetBufferingだけで端末のバッファリングまで無効になるよ
01441372010/05/17(月) 12:49:39
>>140
hSetBuffering 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:32
ttp://hackage.haskell.org/trac/ghc/ticket/2189
6.12.3で直る"かも"
0146デフォルトの名無しさん2010/05/17(月) 13:05:31
>>144
私の環境では、>>144のプログラムは期待通りに動作しました。
a'a'
b'b'
Linux, runghc 6.12.2, xtermです。
0147デフォルトの名無しさん2010/05/17(月) 13:48:27
http://blog.llvm.org/2010/05/glasgow-haskell-compiler-and-llvm.html

これでもしコンパイル時間も短くなったら最高なんだけどなあ…
0148デフォルトの名無しさん2010/05/17(月) 14:13:56
コンパイル時間よりリンク時間(と空間)をどうにかしてほしい
ldにmlにあったパッチ当てたけどまだ遅い
01491372010/05/17(月) 18:16:32
>>145
なんと GHC 側の問題でしたか。

それならば気長に待つことにします。
Haskell Platform に反映されるのはいつになることやら分からんが。
0150デフォルトの名無しさん2010/05/18(火) 06:48:45
ldからgoldになればあるいは…
0151デフォルトの名無しさん2010/05/18(火) 14:04:02
foldr (+) 0 [1..5000000] の計算で以下のような実行時統計を得た
この見方を教えてください。

$ 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
>>151
>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
>>152 ありがとうございます。
>スタックはヒープの一部として確保されるんじゃなかったっけ
C言語の感覚で別々にアロケートされると思い込んでいましたが、
ヒープ、スタックともGHCのランタイムが割り付けたメモリの
合計の量をいっているのでしょうか?
foldl と foldr の比較で、RWHには「foldr、あるいはfoldl'を使うのなら
スペースリークに悩まされることはないでしょう」とありますが、foldr でも
foldl の70%〜程度の統計が得られるます。これはスペースリークとは呼ばない
のでしょうか?
0154デフォルトの名無しさん2010/05/18(火) 20:07:21
>>153
未評価の値が無駄に蓄積されてヒープを圧迫することをスペースリークと呼ぶなら、
foldr自体がスペースリークを引き起すことはないね
ただし、foldrは末尾再帰じゃないので、そもそもの空間効率が悪いことが多い
0155デフォルトの名無しさん2010/05/18(火) 22:21:20
プログラミングHaskell
 ↓
Real World Haskell
 ↓
ふつうのHaskell

と読んだが、順序がまったく逆だったような気がするw
0156デフォルトの名無しさん2010/05/18(火) 23:26:02
プログラミングHaskell
 ↓
Real World Haskell

ときて、次の「ふつうのHaskell」に何を期待してたんだ?
0157デフォルトの名無しさん2010/05/19(水) 00:31:38
プログラミングHaskellを読み終えて
次は何を読んだが良いだろうか

以下候補

Real World Haskell 
関数プログラミング
関数プログラミングの楽しみ(2010/06発刊)

目標としては「関数型言語らしいプログラミング」が行いたい
0158デフォルトの名無しさん2010/05/19(水) 00:38:37
>目標としては「関数型言語らしいプログラミング」が行いたい
本読むより実際にコーディングしたり人のソース読んだ方がいいよ
0159デフォルトの名無しさん2010/05/19(水) 00:50:37
>>157
その目標とその候補であれば「関数プログラミングの楽しみ」を薦める。

>>158
本には人のソースが載ってるし、
なぜそのソースになったのかの解説もついてるんだがな。
練習問題も載ってるし。
何か問題があるのか?

さすがに完成されたソースが丸ごと一式載っていることはまずないが、
「関数型言語らしいプログラミング」を学ぶのにソース丸ごと一式は要らないだろ。
そもそも、何が関数型言語らしさを作っているのかを知らないまま、
実際にコーディングしたり人のソース読んでも、分からないままだと思う。
0160デフォルトの名無しさん2010/05/19(水) 01:18:02
>>156
そういうレスがあるとは思っていた。尼のギフトカードの残高で丁度中古の
「ふつうの〜」が1冊買えたんだよね。だから一層のこと揃えてみただけ。

ただ最初の2冊で分かりにくかったことが、サラっと「ふつうの〜」に説明して
あったりして、最初に読んどけば良かったなと。
0161デフォルトの名無しさん2010/05/19(水) 01:19:12
>>159
人のソースはともかく、自分でコーディングしてみないと結局伸びない
0162デフォルトの名無しさん2010/05/19(水) 07:24:30
>>160
> ただ最初の2冊で分かりにくかったことが、サラっと「ふつうの〜」に説明して
> あったりして、最初に読んどけば良かったなと。

そういう読み方のタイプも普通にあるし、推奨している読書テクニック本もある。
難解な本を読んで、ある部分が難しかったら、別の一段レベルが低い本を読んで、
それから先の本に再チャレンジする。
0163デフォルトの名無しさん2010/05/19(水) 07:49:47
>>161
コードをただ書くだけで伸びるってものでもないけどな
インプット(読む)とアウトプット(書く)は両方あった方がいい
0164デフォルトの名無しさん2010/05/19(水) 08:17:38
学びて思わざれば則ち罔し。思いて学ばざれば則ち殆うし。
0165デフォルトの名無しさん2010/05/19(水) 08:34:40
他の言語だけどCoq'Artみたいな本だと書きながら読まないと意味不明になって挫折する
0166デフォルトの名無しさん2010/05/19(水) 08:45:55
伸ばす方向と方法が分かってないと、効率悪いよ。
それが本の役割だと思う。
0167デフォルトの名無しさん2010/05/19(水) 14:28:50
効率悪いよ。
0168デフォルトの名無しさん2010/05/19(水) 15:57:33
どう書く?.org http://ja.doukaku.org/ の問題を解いてみたり他人の解答読んだりするのはどう。
0169デフォルトの名無しさん2010/05/19(水) 16:00:58
Software Designの記事読んでたら、なぜかnobsunがHaskellプログラミングの第一人者って書かれてるw
おいおいって感じw
0170デフォルトの名無しさん2010/05/19(水) 16:29:15
>>169
nobsunって誰?と思ってググってみたらツイッターやってて
しかもHaskell公式のマークを上下ミラーリングして(λ→y)
自分のマークにしちゃっててワロタ
0171デフォルトの名無しさん2010/05/19(水) 16:33:31
nobsun、論文も書いた事ないような奴が第一人者気取りかよw
笑っちゃうぜ
0172デフォルトの名無しさん2010/05/19(水) 16:40:55
2ちゃんねるで吠えるだけの奴が「笑っちゃうぜ」ってのが一番笑えるなw
0173デフォルトの名無しさん2010/05/19(水) 16:44:21
>>171
まぁ、プログラミングの分野は論文がすべてじゃないからね。
ソフトウェア論文がいかに評価されないか、研究者ならみんな知ってるはず。
0174デフォルトの名無しさん2010/05/19(水) 16:49:50
nobsun は「RWH」と「関数プログラミングの楽しみ」の翻訳やってる。
日本でのエバンジェリストとしての第一人者だね。
0175デフォルトの名無しさん2010/05/19(水) 16:53:34
nobsunはHaskellで新規性ある何かをやったの?
開発手法を編み出したとか
斬新なソフトを書いたとか
ツールを開発したとか
Haskellコンパイラのすごい最適化エンジンを実装したとか、
なにか無いの?
0176デフォルトの名無しさん2010/05/19(水) 16:54:13
nobusunこと山下伸夫さんはsampou.orgの管理者で
ふつうのHaskellプログラミングの監修もしていますね。
どう見ても日本のHaskellプログラミングの第一人者です。
笑っちゃった人は自分の無知を自覚すべきだと思います。
0177デフォルトの名無しさん2010/05/19(水) 16:55:27
>>176
俺の答えは、日本にはマトモなHaskellerはいない、って事だよ。
0178デフォルトの名無しさん2010/05/19(水) 17:34:06
RT @_tad_: 懇親会終盤「この中でGCに興味のある方、ちょっと挙手お願いします」→「ありがとうございます。では片付けをよろしくお願いします」 #rubykaigi ※この物語はフィクションです
0179デフォルトの名無しさん2010/05/19(水) 17:47:32
nobsunはHaskellでうまいこと金儲けてる人
白石さんはHaskellに人生食われちゃってる人

0180デフォルトの名無しさん2010/05/19(水) 20:32:16
>>179
評価が早計だな
もっと評価を遅延すべき
0181デフォルトの名無しさん2010/05/19(水) 20:42:40
>>180
つまり、宇宙の終りの時に初めて評価されるんですね
0182デフォルトの名無しさん2010/05/19(水) 20:42:45
>>177
その中の第一人者ってことでいいだろ
所詮相対評価だ
0183デフォルトの名無しさん2010/05/19(水) 20:43:15
プログラマーというのは実践家で、スポーツ選手みたいなものだから、
新しいことをしなくても、技のレベルが高ければ評価は高くなると思う。

Haskellの技とは? とかnobsunはレベルが高いのか? はおいといて。
0184デフォルトの名無しさん2010/05/19(水) 20:56:47
Software Design に、関数型言語ではHaskellが一番ユーザーが多いと書いてあったんですが、本当でしょうか?
0185デフォルトの名無しさん2010/05/19(水) 20:58:10
>>184
Lispの方言を別の言語として数えればそうかもね
0186デフォルトの名無しさん2010/05/19(水) 21:05:09
>>184
んなわけあるかいw

と言ってしまえばその記事と同じなので
ちゃんと調査が必要ですね。
0187デフォルトの名無しさん2010/05/19(水) 21:05:46
そういう話をするとocamlの人が雪崩れ込んでくるから
0188デフォルトの名無しさん2010/05/19(水) 21:52:17
>>184
純粋関数型言語では一番多いんじゃね?
0189デフォルトの名無しさん2010/05/19(水) 21:59:20
選択肢はほぼ2択に絞られる・・・
0190デフォルトの名無しさん2010/05/19(水) 22:14:50
純粋で非正格な関数型言語では一番多いんじゃね?
0191デフォルトの名無しさん2010/05/19(水) 22:35:30
>>189
もう1つって何?
Concurrent Clean?
Lazy K?
0192デフォルトの名無しさん2010/05/19(水) 22:59:01
>>191
λ
0193デフォルトの名無しさん2010/05/19(水) 23:03:52
立ち読みしたけど、
関数型言語を始めるなら純粋な言語がいいという理由でHaskellを勉強する人が一番多い
みたいなことがSoftwareDesignに書いてあった気がする
0194デフォルトの名無しさん2010/05/19(水) 23:22:13
俺としては関数型言語初心者はML系の方がいいんじゃないかと思うけどなぁ
0195デフォルトの名無しさん2010/05/19(水) 23:45:10
実用レベルのプログラムを書くのでなければ、Haskellの方が楽だと思う。

前方参照できる
let/let recの区別が不要
deriving (Eq, Show)がある
インタプリタが使いやすい
方言がない
構文がCに似ている
--makeで万事よろしくやってくれる
0196デフォルトの名無しさん2010/05/19(水) 23:46:25
SoftwareDesignといえば、Haskellで書いたWEBサーバが紹介されてましたけど、
JavaのTomcatみたいに、サーバ部分とは独立して作ったアプリケーションを追加していくようなサーバコンテナってないでしょうか

それとも、関数型言語だから、Mighttpdみたいなサーバでも、TomcatみたいなWEBサーバコンテナになるのでしょうか
0197デフォルトの名無しさん2010/05/20(木) 06:31:10
>>196
Tomcatがどんなものか知らないが、お遊びのウェブアプリケーションを書くならhackがおすすめ。
リクエストをレスポンスに変換する関数を書くだけでウェブアプリケーションを実装できる。
バックエンドのサーバはFastCGIやhappstackなどアダプタさえあれば何でもいい。
本格的なウェブサービスを構築するにはそもそもHaskellを使うべきかどうかが問題。
0198デフォルトの名無しさん2010/05/21(金) 10:38:06
Hac ΦのΦって何だよと思ったらPhiladelphiaのphiか
0199デフォルトの名無しさん2010/05/21(金) 21:12:53
実用にならないプログラムって…
0200デフォルトの名無しさん2010/05/21(金) 21:20:07
>>199
実用にならないというか、production-qualityでないプログラム。
具体的には、Haskellに多い実験的なライブラリや、
品質上の理由でミッションクリティカルな用途に耐えないインターナルなソフトウェアなどが含まれる。
0201デフォルトの名無しさん2010/05/21(金) 21:35:37
Haskellにもブレークポイントを張ったりステップ実行できるデバッガが欲しいな。
1ステップ = WHNFの1-stepリダクションで。
0202デフォルトの名無しさん2010/05/21(金) 21:36:47
品質とは具体的にセキュリティや堅牢性など。
ソフトウェアアーキテクチャの文脈で定義される品質属性すべて。

製品に使われた実績の少ないプラットフォームは一般にエコシステムが弱いので、
製品に使うには不適当。
0203デフォルトの名無しさん2010/05/21(金) 21:40:47
ところでLLVMバックエンドが話題になっているが、
LLVMというのは本格的なシステムの運用に使えるようなものなのか?
0204デフォルトの名無しさん2010/05/21(金) 21:44:34
>>201
一応 ghci でブレークポイント張ったりステップ実行できるけど、
ステップ単位は望んでるものではないな。
0205デフォルトの名無しさん2010/05/21(金) 22:10:12
>>201
と思ったけど、改めて使ってみたら結構ステップ単位が細かい。
もしかしたら望んでるものに近いかも知れんぞ。

「1ステップ = WHNFの1-stepリダクション」が具体的に
どういうステップ単位かよく分かんないけど。
0206デフォルトの名無しさん2010/05/22(土) 08:04:20
どんなときに必要なの? 30行もいくような関数でもつくってるの?
0207デフォルトの名無しさん2010/05/22(土) 13:46:27
>>206
文脈から察するにデバッガのことか。

自分ではちゃんと動作するはずだと思い込んでて、
紙と鉛筆で簡約のステップを書いて確かめた(証明した)はずなのに、
何故か上手く動かない(実際には証明されていない)時なんかに役立つ。
IO 以外のモナドで do 表記をしている時とか、例外が発生する時とか。

そもそも紙と鉛筆による簡約が面倒な時。
特にGUIを使ってる時は面倒だ。

外部入力の値を確かめる時。
print や GUI で確認表示するコードをいちいち挿入して、後で取り除くよりも、
デバッガで確かめた方が早くて安全な場合もある。

ただ、ghci のデバッガは無いよりマシ程度のものなので、
願わくばもっと使いやすい本格的な Haskell デバッガが欲しいな。
できればビジュアルなもので。
0208デフォルトの名無しさん2010/05/22(土) 15:59:19
>>207
なるほど 解説サンクス
0209デフォルトの名無しさん2010/05/22(土) 16:00:31
ハスケラーさんたちも紙と鉛筆で練るのか。リスパーちゃんたちと同じだな。
0210デフォルトの名無しさん2010/05/22(土) 16:02:30
λ式ってPCで書くにはLaTeXがないと書きにくいもんねw
手のほうが楽でいいよ。
0211デフォルトの名無しさん2010/05/22(土) 16:08:00
ちなみに使ってるノートって 方眼系? ただの白紙? 罫線系?
0212デフォルトの名無しさん2010/05/22(土) 16:12:53
モールスキン
0213デフォルトの名無しさん2010/05/22(土) 16:13:36
やっぱ知的=モールスキンでしょ。
見た目だけ知的w
0214デフォルトの名無しさん2010/05/22(土) 16:33:04
ちら裏コピー裏をクリップでとめたもので十分だろ
近所回って回収してくりゃあっという間に段ボール10箱分ぐらい集まるし
0215デフォルトの名無しさん2010/05/22(土) 16:44:25
>>211
secion系。
私はあまりたくさんのノートを書かず、そしてグラフィックの割合が高いからだ。
0216デフォルトの名無しさん2010/05/22(土) 17:16:53
>>215
Haskellプログラミングに使うノートの話をしているんだが。
0217デフォルトの名無しさん2010/05/22(土) 18:04:36
今更ながらHaskell-Beginersに入ってみたんだけど色々話題が出てていいね。
0218デフォルトの名無しさん2010/05/22(土) 18:56:24
>>216
http://www.amazon.co.jp/dp/B001NDOO8C
0219デフォルトの名無しさん2010/05/23(日) 02:58:48
HN で新しいウェブフレームワークが話題になってた

http://news.ycombinator.com/item?id=1369852
0220デフォルトの名無しさん2010/05/23(日) 07:03:16
>>219
> A fast HTTP server library with an optional high-concurrency backend using the libev event loop library.
これは期待できそうだな
0221デフォルトの名無しさん2010/05/29(土) 03:28:11
http://hackage.haskell.org/package/haskell-cnc

Intel さんって色んな事やってるのね…
0222デフォルトの名無しさん2010/05/29(土) 08:44:51
今度Haskellの入門的な話をすることになったんだけど、
Haskellはじめての人が理解しにくいところってなんだろう?

自分の場合、ラムダ計算やPCFを先にやってたから入りやすかったが、
この辺を知らない人がいきなりHaskellに接したときにつまづくところ
があったりするのかな?

0223デフォルトの名無しさん2010/05/29(土) 09:30:14
>>222
どんな人を対象に話すのかで変わると思うよ。
相手が計算機科学の人なのか? プログラミング言語をひとつくらい習得している
人なのか?まったくの素人なのか?
とかね。
0224デフォルトの名無しさん2010/05/29(土) 09:33:28
>>222
やっぱモナドじゃね
0225デフォルトの名無しさん2010/05/29(土) 09:51:06
変数を一つだけしか受け取れないとかの原則論がわからんかった。
どうしても多変数脳から脱却出来ん。
0226デフォルトの名無しさん2010/05/29(土) 10:15:51
>>223
C, Javaについて一通り習った人が相手です。

>>224
モナドですか…さすがに初回からはきついかも。

>>225
なるほど。
その辺、可換図式でも使って説明しますかね。
0227デフォルトの名無しさん2010/05/29(土) 11:44:57
俺が苦労したのはラムダ式、高階関数、再帰の三つかな
これらがいくつか組み合わさったコードを見ると途端に混乱するということがあった
それぞれ単独でみれば難しくないし、再帰は既に知ってるだろうし、他も教えられればすぐに理解できるだろうけど、
自在に読み書きできるようになるには時間が必要で、最初のうちはfoldrの定義なんかすごく難しく見えると思う
0228デフォルトの名無しさん2010/05/29(土) 11:59:01
どうせ触りだけ話すんだろうから、モナドはあまり触れなくてもいいかもね。
c,java系の人なら関数型特有にみえることはわかりにくいかも。
30分で話すとか10分で話すとかなら簡単なことしか話せないだろうしね。
でも高階関数あたりは欲しいかもね。
0229デフォルトの名無しさん2010/05/29(土) 12:00:14
C/JAVA の人ってloopyだし非loopyのhaskellの世界は戸惑うだろうな。
0230デフォルトの名無しさん2010/05/29(土) 12:02:57
モナドは IO 以外は使わなくても説明できるからとりあえず置いておけばいいんじゃないかな。
IO も、こう書くものだ、で済ませるか、対話環境だけ使うことにするとか。
個人的には、いちばん理解しにくいのは関数適用だけでプログラムを書くということだと思う。
ループしながら変数に代入、みたいなのから
map して filter して fold になかなか切り替えられない。
0231デフォルトの名無しさん2010/05/29(土) 12:06:53
hello, worldについては気にしないでください、で最初は押し切ってしまうとか。
入力ができないのがプログラムの題材的にちょっと辛いけど。
0232デフォルトの名無しさん2010/05/29(土) 12:07:11
Haskellの話を聞いてくれる気になってるなら
一番高い壁はクリアじゃね?
0233デフォルトの名無しさん2010/05/29(土) 12:15:44
>>230
> ループしながら変数に代入、みたいなのから
> map して filter して fold になかなか切り替えられない。

リストの長さを出すのに「各要素を1に変えて合計」ってのは受けるぞ
0234デフォルトの名無しさん2010/05/29(土) 12:25:52
>>233
その前にsumをfoldで定義することが関数型特有じゃないか?
0235デフォルトの名無しさん2010/05/29(土) 12:36:29
ぱっと見で何の役に立つのか分かりづらい機能について
実例を見せると納得してくれる
0236デフォルトの名無しさん2010/05/29(土) 13:12:18
逆に、CやJavaについて一通り習った相手が、
一番惹かれそうなものは何かというアプローチはどうだ?

そこに、一番分かりにくいものを絡めていくとか。
0237デフォルトの名無しさん2010/05/29(土) 13:50:07
たらいがそのままで爆速
0238デフォルトの名無しさん2010/05/29(土) 14:35:07
>>236
quick sortちゃう?
0239デフォルトの名無しさん2010/05/29(土) 14:53:31
副作用とhaskellやc/java のこともかも
0240デフォルトの名無しさん2010/05/29(土) 15:19:22
>>236
とりあえずトランザクション制御とか
0241デフォルトの名無しさん2010/05/29(土) 15:27:54
逆に素人にCやJavaの話するときって何話すの?
0242デフォルトの名無しさん2010/05/29(土) 15:43:40
まずはhello, world
0243デフォルトの名無しさん2010/05/29(土) 16:01:14
>>241
フォンノイマンの死に様
0244デフォルトの名無しさん2010/05/29(土) 16:04:12
まぁ、社交の基本だけど、何か専門的な事を素人に話す場合、
人物を語るのが一番良い印象を与えやすいんだよね。
関数がどうのこうのと技術的な話なんて興味を持つ動機には成り得ないよ。
0245デフォルトの名無しさん2010/05/29(土) 16:16:09
えー?
人物について語るのって専門の話を回避するテクニックであって、
専門的な事を話す目的があったらそれじゃダメじゃん。
0246デフォルトの名無しさん2010/05/29(土) 16:16:28
>>241-244
何に対しての「逆」を想定してるんだ?

>>222,226 の逆であれば、Haskell を一通り習った人が
CやJavaの素人に入門的な話をするという事だと思うが、
それなら Hello, World も、人物の話も、
それほど適切ではないような気がするが。
0247デフォルトの名無しさん2010/05/29(土) 17:43:23
Haskellから入門するって、従来では考えられなかったケースだからね。
データ構造にしても、可変の方がはるかに蓄積が多いから、まず不変を学習してから可変に移るというのは異常。
0248デフォルトの名無しさん2010/05/29(土) 20:46:07
みなさん、ありがとう。

あれから、つまるところ関数型言語の本質はなんだろう、などと考え始めて
1日つぶれてしまいました。

余り大上段に構えず、こんな便利なことができる、程度の紹介にとどめておいた方がいいですね。
とりあえず高階関数だけはおさえておこうと思います。
0249デフォルトの名無しさん2010/05/29(土) 20:48:03
Software Design の、この前出た号に、ちょうど特集がある。
0250デフォルトの名無しさん2010/05/29(土) 20:49:15
>>249
あれはあんまり参考にならんぞw
考え方が偏りすぎている
0251デフォルトの名無しさん2010/05/29(土) 21:15:12
そもそもHaskellerに中立的な視点の人なんているのか?
0252デフォルトの名無しさん2010/05/29(土) 21:21:09
この世の誰一人として社会的中立な人間なんていないと断言できる。
だってその人自身が社会を構成する人間の一人なんだから。
0253デフォルトの名無しさん2010/05/29(土) 21:37:21
>>248
高階関数と再帰の具体例を挙げて関心を持ってもらうストーリーがよさそうですね。
あとは「変」数じゃなくって…って話かな。

C言語の人は関数ポインタを使うのとどう違うの?とか聞いてくるかもしれませんね。
え?そんなビギナーの聴衆はいないって?w
0254デフォルトの名無しさん2010/05/29(土) 21:40:35
>>248
関数型言語の本質はラムダ計算にある。
0255デフォルトの名無しさん2010/05/29(土) 21:42:04
>>253
遅延評価なんだから無限リストも。
0256デフォルトの名無しさん2010/05/29(土) 22:02:37
関数ポインタでは書けなくて、高階関数が必要な例ってあるのかな?
0257デフォルトの名無しさん2010/05/29(土) 22:03:53
無限リストは他の関数型言語を知っている人でもなかなか理解しにくくない?
俺は A Gentle Introduction to Haskell の fibs の例はなかなか理解できなかった。

>>247
既存のアルゴリズム本を参考にして
リストに (!!) でアクセスしまくるコードを書いて来た人を思い出した
0258デフォルトの名無しさん2010/05/29(土) 22:39:43
無限リストといえば、ストリームや遅延パターンの話でよく例示される
server と client のプログラムを理解するのに時間がかかったな。

紙に鉛筆で簡約ステップを書き下して正しいと頭では分かっていても、
初めは問題なく動くのがなんか不思議な感じだった。
ああいうのをスラスラと例示できるようになりたいな。
0259デフォルトの名無しさん2010/05/29(土) 22:42:21
Prologやったことあれば無限リストはおなじみ
0260デフォルトの名無しさん2010/05/29(土) 22:58:56
>>256
ないよ
値としての関数は、ローカル変数の値を記録したオブジェクトと生の関数ポインタの組み合わせ(クロージャ)で表現できる
実際GHCなんかはコンパイル時に似たような変換してるはず
0261デフォルトの名無しさん2010/05/29(土) 23:12:02
なぜかHaskellの講義なのにコンスセルの説明で時間を取られる気がするw
0262デフォルトの名無しさん2010/05/29(土) 23:44:05
相手がlisperなら色々と話が早そうだ
0263デフォルトの名無しさん2010/05/30(日) 01:04:03
クロージャについては、実現可能だけど関数ポインタだと面倒っていう例になるかな。
Java の人なら、環境をフィールドとして持つ
call メソッドだけが定義されたオブジェクトみたいなものと言えば通じるんだろうか
0264デフォルトの名無しさん2010/05/30(日) 15:17:58
「Haskell は論文を書くためだけに作られた言語です」
0265デフォルトの名無しさん2010/05/30(日) 15:22:53
「それなのに実用になるって、凄い事だと思いませんか?」
0266デフォルトの名無しさん2010/05/30(日) 16:54:04
>>264
LLの王様で超実用言語のperl6がhaskellで作られた、つまり、haskellは超超実用言語だ。
0267デフォルトの名無しさん2010/05/30(日) 17:07:28
perl6って使われてんの
0268デフォルトの名無しさん2010/05/30(日) 17:29:03
Perl6のリリースは6月の予定だよ
0269デフォルトの名無しさん2010/05/31(月) 01:51:43
>>264 prolog がかまってほしそうにこっちを見ています
0270デフォルトの名無しさん2010/05/31(月) 03:07:22
cabalファイルの書き方についての質問ですが、
実行ファイルの保存先を./binにしたいのですが、
どのように書けば良いでしょうか?
0271デフォルトの名無しさん2010/05/31(月) 06:24:16
>>270
CabalのBuild-type: Simpleは典型的なケースを「シンプル」に記述できるようにデザインされている。
Executableのパスを明示的に指定するのは典型的なケースではないので、他のBuild-type、たとえばCustomなどを調べてみてはどうだろうか。

0272デフォルトの名無しさん2010/05/31(月) 12:59:23
>>260
そもそも汎用プログラミング言語はすべてチューリング等価なんだから、
できることは同じ。
生産性と実行効率を改善するための努力が延々と続いている。
0273デフォルトの名無しさん2010/05/31(月) 13:25:29
cとかjavaとかは関数型に比べれば冗長だもんな。
思考にとって無駄が多すぎる^^; そのてん 生産性の向上はあるわな。
0274デフォルトの名無しさん2010/05/31(月) 13:41:37
>>273
なにを生産するかによるな
OSを生産させたら関数型のほうが冗長かもしれないし
関数型のキラーアプリである「あれ」を生産させたらもちろんCのほうが冗長だよね
0275デフォルトの名無しさん2010/05/31(月) 13:43:45
HaskellのキラーアプリといえばParsecだろ
0276デフォルトの名無しさん2010/05/31(月) 15:17:33
1 つの Haskell は全ての言語を繋ぎ止める

http://news.ycombinator.com/item?id=1390889
0277デフォルトの名無しさん2010/05/31(月) 17:53:03
>>274
「あれ」って何? もうさっきから気になって気になって、仕事が手に付きません
0278デフォルトの名無しさん2010/05/31(月) 17:55:01
>>274
どんな種類のソフトウェアを書くにしても関数型がCより冗長にしか書けないということはありえない。
OSがCで書かれているのは、抽象レベルの高すぎる言語はportableでないからだ。
少なくとも昔は、lispなどでは十分に速い実行コードを生成することができなかった。
0279デフォルトの名無しさん2010/05/31(月) 18:43:06
Linux のドライバを書くのに C より Haskell の方が簡潔に書けるとは思えないなあ。
0280デフォルトの名無しさん2010/05/31(月) 18:54:13
それはLinuxのOSモデルが関数型に適していないからだ。
0281デフォルトの名無しさん2010/05/31(月) 18:56:45
関数型に適してないモデルでは簡潔に書けないとすると >>278 の主張と矛盾が生じるね。
>>278 は『ありえない。』って言い切っちゃってるから。
0282デフォルトの名無しさん2010/05/31(月) 19:05:53
lispマシーンが主流な世界だったら変わってたよ。
0283デフォルトの名無しさん2010/05/31(月) 19:07:15
種類=用途だから。
C言語で書かれたプログラムのエミュレーションにはC言語が最適だろう。
0284デフォルトの名無しさん2010/05/31(月) 19:11:09
ひとつの関数を書くという意味ではHASKELLとか関数型のほうがC/JAVAより
短くなるよ。その辺のことを冗長で思考を止めやすいといってる。
ちがう?

関数型って思考に素直な印象が強いんだけどな。手続き型って思考する前
の前準備というのか余計な操作が多いという印象なんだな。

手続き型になれちゃってる人には関数型は面倒なんだろうね。
0285デフォルトの名無しさん2010/05/31(月) 19:11:53
現実には、C から呼び出せる GC のライブラリを作りたいとか、特定のアプリケーションの
プラグインを書きたいとか、Haskell では到底簡潔に書けない様な『種類』のソフトウェアも
沢山あるよね。
0286デフォルトの名無しさん2010/05/31(月) 19:22:18
>>284
その関数が実行される環境を無視するならね。
本来考慮すべきかもしれない事を無視していいなら、それは思考に素直にもなるでしょう。
0287デフォルトの名無しさん2010/05/31(月) 19:24:11
それぞれの言語に強みがある。
Haskellは、記号的な問題を解くのに強い。
そういう問題は関数に落とし込めるようにあらかじめ抽象化されているから。

> 特定のアプリケーションのプラグインを書きたい
Lispでマクロを使うといい。
0288デフォルトの名無しさん2010/05/31(月) 19:30:20
>>287
>> 特定のアプリケーションのプラグインを書きたい
>Lispでマクロを使うといい。

これってどういう意味だか誰か分かる?
Lisp って CL の事で良いのかな?
マクロはリーダーマクロ?
それとも defmacro の話?
それでどうやってプラグインが書けるの?
ちょっと話が見えないな。
0289デフォルトの名無しさん2010/05/31(月) 19:38:32
結局、関数型で書き易い問題とそうでない問題の両方があるってことで異論は無いよな?
0290デフォルトの名無しさん2010/05/31(月) 19:45:31
>>288
記号的というと
・variantがあればLisp風のデータ構造 (括弧は少なめ) を作れる
・concatMapがあればPrologみたいなのを作れる
ただし、クロージャと同じく、関数型ではない言語に取り入れられるかもしれない。
0291デフォルトの名無しさん2010/05/31(月) 19:47:33
>>290
アンカー間違ってない?
0292デフォルトの名無しさん2010/05/31(月) 20:11:51
>>291
フィボナッチのように数学の問題ということではないかと
0293デフォルトの名無しさん2010/05/31(月) 20:14:46
質問に答えられないなら、無理にレスしなくていいよ
0294デフォルトの名無しさん2010/05/31(月) 20:55:11
>>268
なにを指して無視といってるのかがよくわからない。
0295デフォルトの名無しさん2010/05/31(月) 21:07:19
>>294
>>292
0296デフォルトの名無しさん2010/05/31(月) 21:46:00
>>248
結果はまだ先なのかな。どんな反応があったか、よかったらレポートして下さい。
0297デフォルトの名無しさん2010/05/31(月) 23:01:04
>>248
2ちゃん規制されていたから、亀レスだけど、「こんな便利なことができる」っていう紹介で良いと思います。
例えば、(都道府県名, 市長村名, 人口, 面積)みたいなリストを作っておいて、それをmap、filter、sortBy、groupByで操作して、都道府県を人口順に並べるとか、ある県の人口密度を出すとかを、ghciでやると面白いのではないでしょうか。
0298デフォルトの名無しさん2010/06/01(火) 06:51:44
>>297
そうですね。
Haskellの素晴らしさを示すには、オーディエンスが慣れ親しんだ問題を
エレガントに解く方法を示すのがいいと思います。
彼らが使っている手続き型言語による解法との比較もしてはどうでしょうか。

でもただエレガントというだけでは、感情的な反発を引き起こしたり、
マニアックな奴だと思われるかもしれませんから、
人気度やパフォーマンスなどの客観的(統計的)なデータを示し、
長所と短所の両面も伝えてはどうでしょうか。
0299デフォルトの名無しさん2010/06/01(火) 08:54:35
>>272
それは話してるレイヤが違うだろ
CにもHaskellにも「関数」と呼ばれるものがある。Cの関数は実行時に作れないがHaskellのは作れる
ではCの関数だけを使ってHaskellの関数の真似をすることができるか?みたいな問題
ここでいう「真似」というのは関数に渡せるとか変数に入れられるとかそういう言語の「内部」での性質を真似するということ
チューリング完全性の議論はプログラムが全体としてどういう振る舞いをするかしか問題にしていないので、別の話
0300デフォルトの名無しさん2010/06/01(火) 09:53:01
(訳注)
Haskellは実行時にCの関数を作れないが、Cは実行時にHaskellの関数を作れる
Cの関数だけを使ってHaskellの関数の実装をすることができる
「実装」というのはHaskellの「内部」を実装するということ
0301デフォルトの名無しさん2010/06/01(火) 11:43:16
Cは貴金属の現物みたいなものだな
他の言語は、金融工学を駆使した電子マネーを目指しているようだ
0302デフォルトの名無しさん2010/06/01(火) 11:57:13
いまいちよくわからない比喩だな。
Cはどこでも動くが、金塊はどこでも貨幣として使えるわけじゃない
0303デフォルトの名無しさん2010/06/01(火) 12:10:14
>>301
というか電子マネーと金融工学ってあまり関係ないんじゃないか
0304デフォルトの名無しさん2010/06/01(火) 14:45:59
絶対に関係ないと言い切れないところが面倒臭い
0305デフォルトの名無しさん2010/06/01(火) 14:53:26
貴金属の現物 → 具体的なもの
電子マネー   → 具体的なものと機能は同じだけど、実体ははきりせず抽象的なもの
            金融工学は、その抽象的なものから成り立つのを助け、利益を出そうとするもの。

C → 具体的にメモリをいじくったするもの
JavaとかPHPとか → 具体的なものと、機能は同じだけど、にラップをかけて抽象的に扱う。動作は遅い。
              金融工学 → ガーベージコレクション
0306デフォルトの名無しさん2010/06/01(火) 16:37:44
Cも高級言語だし。
ポインタ演算はあるがメモリ割り当てまでコントロールするわけではない。
JavaのHotSpotみたいな最適化技術は金融工学みたいなものといえなくもない。
0307デフォルトの名無しさん2010/06/01(火) 19:03:18
>>279
Haskellを C言語にコンパイルする言語をHaskellで作ればいいんじゃね?
0308デフォルトの名無しさん2010/06/01(火) 19:11:10
>>307
C のソースを吐いても GC 前提だったりランタイムライブラリが必須だったら使えないでしょ。
0309デフォルトの名無しさん2010/06/01(火) 19:37:53
http://tryhaskell.org/

これ何に使うんだろうって思ったけど、iPhone や iPad で Haskell を動かしたい時に良いかも。
0310デフォルトの名無しさん2010/06/01(火) 19:39:25
なんでHaskellはCの関数作れないの?
0311デフォルトの名無しさん2010/06/01(火) 20:03:10
>>308
その昔、JavaOSというOSが勝手にGCしちゃう変なモノがありましてね…
0312デフォルトの名無しさん2010/06/01(火) 20:11:34
>>310
クロージャは「定義された場所のほかに、生成された時刻を持つ」。
(時刻とか言ったら怒られそうだが)

一方、Cの関数はコードの場所だけで特定される。
コードを変更して再コンパイルとかしないと、新たな関数を作ることはできない。
0313デフォルトの名無しさん2010/06/01(火) 20:11:35
>>311
OS レベルで一括してメモリを回収するのは別に良いと思いますよ?
今はそういう話はしていないですけどね…
0314デフォルトの名無しさん2010/06/01(火) 20:25:59
foreign import "wrapper"でCの関数作れるよ
0315デフォルトの名無しさん2010/06/01(火) 21:51:48
evalがない言語は、「関数を実行時に作れる」とは言わないと思う。
0316デフォルトの名無しさん2010/06/01(火) 21:59:39
お薦めの入門書を教えてください
0317デフォルトの名無しさん2010/06/01(火) 22:34:13
>>304
そういう場合は、強硬に主張している相手を値踏みして、
切っても問題なさそうな感じだったら無理矢理切ればいい。
真実がどうであろうと、どっちみち現時点では時間の浪費に
しかならないという算段がつくならその話は結局無駄。
0318デフォルトの名無しさん2010/06/01(火) 23:10:25
>>315
ということは、lex+yaccは「関数を実行時に作れる」言語ということになりますな
0319デフォルトの名無しさん2010/06/01(火) 23:17:11
Haskellが実行時に関数を作れないってのは、
Haskellが実行時にリストを作れないっていうのと同じくらい馬鹿げてる
foreign import "wrapper"は実行時にコード生成するし
0320デフォルトの名無しさん2010/06/01(火) 23:18:39
1 :名無しさん@どっと混む:2009/12/14(月) 20:45:15 ID:unnBMLw10
高根社長の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
18 :名無しさん@どっと混む:2010/01/07(木) 09:26:06 ID:5NL2jyJpO
高根は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
53 :名無しさん@どっと混む:2010/05/17(月) 13:14:06 ID:E/7OZVtz0
>>18
高根英哉blogでレイプ仲間募集中

私とともにマスクの女どもを弄ぶ仲間を募集する
急に思いついたら連絡をして、集まれるような仲間だ
だから、複数名募集するし、いついつという日時があるわけでもない
条件は以下のとおりだ
    ・SMを実践している、または興味がある
    ・マスクを用意できる
    ・都内でイベント参加できる
    ・イベント内容およびこの仲間を通じて知りえた情報を口外しない
    ・成人男子である
    ・携帯電話および携帯メールアドレスを私に公開できる
    ・酒が好きである
希望者は私宛にメールを送ってほしい
全員が参加できるわけでもないので、こちらの選択に任せてもらう
なるべく想いを書いてもらうほうがわかりやすいし
経験や顔写真も歓迎。
[email protected]
[email protected]
[email protected]
0323デフォルトの名無しさん2010/06/01(火) 23:29:04
コピペ君って馬鹿だな、まで読んだ。
0324デフォルトの名無しさん2010/06/01(火) 23:37:41
実行時コード生成機能なんてあるんだ
Haskellは型安全な言語だと思っていたのに…
0325デフォルトの名無しさん2010/06/01(火) 23:49:51
何をいまさらw HaskellのFFIは、Cと同程度の自由度じゃん
純粋でなくてもいい部分は限りなく自由なのも、Haskellの魅力だと思うね
0326デフォルトの名無しさん2010/06/02(水) 00:22:25
素晴らしい。
ちなみにmapする関数をユーザに入力させるプログラムはどうやって書けばよいでしょうか?

getLine >>= \s -> map (??? s) xs
0327デフォルトの名無しさん2010/06/02(水) 00:46:08
mapMを使ってください
0328デフォルトの名無しさん2010/06/02(水) 01:46:44
>>326

お望みのものと違うかもしれないけど。
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:27
セミコロンを行頭にもってくる記法はいいね。
0330デフォルトの名無しさん2010/06/02(水) 20:09:00
>>328
ありがとう。
なるほど、関数をHaskellの世界に持ってくるわけではなく、
引数を向こうの世界に渡して実行させるわけですか。
確かにこれなら、Haskell側は汚染されずにすみますね。
0331デフォルトの名無しさん2010/06/02(水) 20:10:21
すみません、途中で送信してしまいました。

>>327
これは、ユーザが文字列として与えた関数をHaskellの関数にできるということでしょうか?
0332デフォルトの名無しさん2010/06/02(水) 20:11:29
本音と建前を使い分けているかのような嫌な言い方だな
0333デフォルトの名無しさん2010/06/02(水) 20:32:48
Haskellには組み込みのevalがないだけで、自分で好きな構文のevalを書くのは何も問題ない
「ユーザが文字列として与えた関数をHaskellの関数に」することも当然できる
0334デフォルトの名無しさん2010/06/02(水) 20:38:48
そもそもevalってlispの用語だしな
0335デフォルトの名無しさん2010/06/02(水) 20:47:27
文字列をとって可変長引数の関数を返す高階関数になるのかな
0336デフォルトの名無しさん2010/06/02(水) 20:48:40
あ、いや副作用のある関数を返す可能性もあるし、一筋縄ではいかないか
0337デフォルトの名無しさん2010/06/02(水) 20:58:28
インタプリタだろ
0338デフォルトの名無しさん2010/06/02(水) 21:05:20
なんでそんなプログラムを書く必要があるのか理解できないな。
自分一人で使うならHaskellで直接書けばいいし、
そうでなければなぜそんな局所的なインタプリタが必要なのか。
もっとマクロなレベルでデザインが間違っているのではないか。
0339デフォルトの名無しさん2010/06/02(水) 21:22:19
>>338
チューリング完全である必要がある事は理解できるよな
それをふまえて、他の言語をマネできる自由な言語が勝ち組みたいな雰囲気になった
0340デフォルトの名無しさん2010/06/02(水) 23:01:15
>>333
C言語も同じようなことできるよね
昔、ウィンドウを操作するプログラムを作ってたときに、アセンブリコードを文字列で与えて実行時に関数を組み立ててた
0341デフォルトの名無しさん2010/06/02(水) 23:02:36
>>340
ちなみに、printfみたいに引数の数が可変の関数
0342デフォルトの名無しさん2010/06/02(水) 23:06:47
>>340
できるね
相当手間がかかるのと、機械語に依存することがHaskellとの違いだな
0343デフォルトの名無しさん2010/06/03(木) 01:22:43
>>330
{-# 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
ghc apiを息をするように使いやがって
この変態どもめ
0345デフォルトの名無しさん2010/06/03(木) 10:46:43
もうhs-pluginsの時代じゃないんだな、勉強になった
0346デフォルトの名無しさん2010/06/03(木) 16:36:19
lispの多値返しみたいなことってタプルとか型をつくったりで
対処するの?どっちがはやいん?
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:54
ごめん
data 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
これからlispってどうなるんだろうな。
抽象度の高いプログラミングはHaskellが最先端だし、
実用目的でもClojureよりScalaのほうが有望だろ
もうlispは必修言語とはいえないんじゃないか
0349デフォルトの名無しさん2010/06/03(木) 21:29:00
Haskellの弱点は遅延評価(利点でもあるが)

これがある限り、one of them にしかならんだろう
0350デフォルトの名無しさん2010/06/03(木) 21:47:09
>>348
Lisp の最大の利点はコード=データである事。
Lisp は Haskell とは全く別の世界を持った言語だから、比べてどうと言うモンじゃない。
0351デフォルトの名無しさん2010/06/03(木) 22:00:06
>>343
>インタプリタだからできることであって、インタプリタと連携させる前提で

インタプリタではなくいきなりコンパイルする実装もあるよ。
それと、別に連携している訳じゃなくてコンパイラが組み込まれているのが当然というだけ。
0352デフォルトの名無しさん2010/06/03(木) 22:00:42
>>350
Haskellでもデータをコードとして扱えるよ
0353デフォルトの名無しさん2010/06/03(木) 22:09:20
>>>352
コードをデータとして扱えるの?
マクロは無いんでしょ?
0354デフォルトの名無しさん2010/06/03(木) 22:17:55
lispをインタプリタのみだと思ってるなら大きな誤解だろうな。
lispがcobolとかみたいに消えると大きな声をだしてるのは昔からじゃない?
消えると叫ぶ人ほどlispがまだ残ってる理由がわからないんだと思うよ。
0355デフォルトの名無しさん2010/06/03(木) 22:23:26
lispってのは自由度の高さと強力なマクロや動的な言語だはみんなご存知だけど、
それに伴って、思考を邪魔しない言語なんだよ。それに気がついた人ほど病みつき
になりやすいし、他の言語を触りたがらない人になりやすい。なんでかっていうと
特に手続き型なら雑務的なプログラミングでいらいらさせられるから。それ故に
使い続ける人がいるってことさ。

haskellも面白いし、好きだよ。
0356デフォルトの名無しさん2010/06/03(木) 22:25:19
エンタープライズ用途じゃLispもHaskellも消える以前に存在してないけどな
COBOLとは生息している(いた)領域が違う
0357デフォルトの名無しさん2010/06/03(木) 22:29:27
Haskell は知らんけど、Lisp は雇用あるよ。Haskell も何かあるでしょ。

http://lispjobs.wordpress.com/
0358デフォルトの名無しさん2010/06/03(木) 22:30:57
Haskellが今のところエンタープライズ用途に向かないのは、
言語設計のせいでは無いような気がする。
0359デフォルトの名無しさん2010/06/03(木) 22:32:16
>>357
Haskellって これから需要がありそうな気がするんだけどな。
時代は関数型なのに、多くの人は手続き型をやってる印象が強い。
0360デフォルトの名無しさん2010/06/03(木) 22:35:08
>>346-347
違わない
0361デフォルトの名無しさん2010/06/03(木) 22:38:29
関数型言語全盛の時代って90年代からゆるーく続いてる気がするから、今更な感じ。
0362デフォルトの名無しさん2010/06/03(木) 22:42:09
>>359
言語単体で需要が増えることはまずない
新しい環境とかプラットフォームが出てきてそこで最適な言語であれば需要が出てくる
UNIXでC、WindowsでVB、Webで最初Perl後Java&JavaScriptのように
0363デフォルトの名無しさん2010/06/03(木) 22:43:45
CL で言う所の Allegro とか LispWorks みたいな会社が出来れば
多少は変わる気もするけど、もしかしてもうあるのかな?
0364デフォルトの名無しさん2010/06/03(木) 22:45:36
Allegro じゃなくて Franz の間違い
0365デフォルトの名無しさん2010/06/03(木) 23:05:43
>>362
emacsでlispもあるな
0366デフォルトの名無しさん2010/06/03(木) 23:14:31
Lisp は LispM じゃないの
0367デフォルトの名無しさん2010/06/03(木) 23:14:52
Emacsなlisperでも、elispは嫌々使ってるよw
0368デフォルトの名無しさん2010/06/03(木) 23:17:02
末尾呼び出しの最適化も、レキシカルクロージャも無いもんな。
0369デフォルトの名無しさん2010/06/03(木) 23:23:05
>>366
Symbolics全盛時でも流行るとこまでいってないだろ
0370デフォルトの名無しさん2010/06/03(木) 23:48:19
JHaskellとかH#とかあればいいかと思ったけど、
結局、既存のライブラリはそのまま使えなくて意味ないのかな?
0371デフォルトの名無しさん2010/06/04(金) 00:11:41
既存プラットフォームで先行(普及的な意味で)してる言語と争っても勝ち目ないよ
ScalaやClojureも際物で終わる
iPhoneとかAndroidのアプリがHaskellでしか書けないとかそういう環境が必要
0372デフォルトの名無しさん2010/06/04(金) 00:28:24
自サーバとか、普通にHaskell使ってるけど

企業とかに使ってもらうことが普及というなら、
いまだに30年前のアセンブラとかCOBOLとかがメインで動いてるから
Javaですらまだ普及していないと言える
0373デフォルトの名無しさん2010/06/04(金) 00:31:22
COBOL や ASM のコードが動いている事と、Java が普及している事は
同時に成立するんじゃないの。
0374デフォルトの名無しさん2010/06/04(金) 00:31:28
>>371
保守的にならなきゃならんところほど 動きが鈍いからね。
日本って国を考えても国民性を考えても保守的過ぎるところがあるし
あたらしい動きに合わせられないからね。たしかに人がいないものは
保守ができないという問題はあるけどね。

日本でHaskellをというならば、
アメリカでは〜 とか ヨーロッパでは〜 とかのほうが頭の硬い連中
を説得できるかもな。笑

キラーアプリ次第とはいえるよね。railが出てきたときにRubyとなった
みたいに。
0375デフォルトの名無しさん2010/06/04(金) 00:33:12
他の言語でも本で
みんなの〜 ってあったけど
結局みんな ってのがキーワードだからね。金太郎飴人間みたいで嫌な話だがね。
0376デフォルトの名無しさん2010/06/04(金) 00:46:34
企業が保守に金払ってるかどうかでいうと、アセンブリやCOBOLにはいまだに金をつぎこんでるけど、Javaには金をかけてない
個人で勝手に使うかどうかが基準ならHaskellはすでに十分に普及している
0377デフォルトの名無しさん2010/06/04(金) 00:47:42
>>376
それどこの統計?
0378デフォルトの名無しさん2010/06/04(金) 00:51:55
cobolerってまだいるの? おおいの?
0379デフォルトの名無しさん2010/06/04(金) 00:54:44
むしろHaskellは普及させてはならない

プログラマが他の業種より優れている点は、ツール次第で他人の1000倍以上の生産能力が手に入ること
こんなのは他の業種じゃありえない
これこそがプログラミングの醍醐味
カタルシス

よい言語は普及させずに知ってる人だけでコソコソ共有するべき
0380デフォルトの名無しさん2010/06/04(金) 01:09:47
大学や情報処理試験で、巨大な整数の加算乗算を丸めやオーバーフローなく計算できるのがCOBOLの特徴だと宣伝してきたので、公官庁を中心にいまだにCOBOL部署は多い
0381デフォルトの名無しさん2010/06/04(金) 01:20:46
団塊の世代が退職してアセンブリ読める人がいなくなって本当の危機がおとずれると脅されてる。
0382デフォルトの名無しさん2010/06/04(金) 01:23:27
金融(証券)じゃCobolよりJavaのが仕事多いよ
中小向けじゃバックオフィス(銀行の勘定系相当)もJavaになってきてるし
もちろんHaskellの仕事はない
0383デフォルトの名無しさん2010/06/04(金) 01:29:47
銀行はPCまわりは近代化してもATMまわりがこれからもCOBOLで当分固定だからな…
当然Haskellの出番はない
0384デフォルトの名無しさん2010/06/04(金) 01:39:54
javaやhaskellの全盛はTRONが死滅してから
0385デフォルトの名無しさん2010/06/04(金) 06:48:42
Haskellを調べててよくわからんことがあります。
push/popのようなスタックのデータ構造の操作って、ピンとこない。
なんとなく副作用のない操作と合わないというのかメモリを多く食いそうな
感じがしちゃってます。実際はどうなんだろう?
という疑問があります。どうなんでしょうか?

>>360
コメントありがとうございます。
0386デフォルトの名無しさん2010/06/04(金) 06:54:48
http://tech.puredanger.com/2010/02/24/language-job-trends/
0387デフォルトの名無しさん2010/06/04(金) 06:56:30
>>385
ST monad
0388デフォルトの名無しさん2010/06/04(金) 07:10:04
>>387
ありがとうございます。ググッてみます!
0389デフォルトの名無しさん2010/06/04(金) 09:47:51
Stateモナドで結合を制限できませんか?

例えば状態としてスタックがある場合
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:48
そもそもスタックって概念には副作用とかないような気がするんだが。
xとxsを引数にとって結合する関数ってpushしてるとは言えない?
(x:xs)からxとxsを返す関数ってpopしてるとは言えない?

副作用があるように実装している言語が多いだけのように思えるんだが。
0391デフォルトの名無しさん2010/06/04(金) 18:47:34
>>390>>385宛な。
0392デフォルトの名無しさん2010/06/04(金) 19:03:04
>>390
抽象データ型はデータのインタフェースを定義するだけだからな
consリストでスタックを実装することもできる
0393デフォルトの名無しさん2010/06/04(金) 20:16:23
>>389
空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
>>393
そういう手もあるんですなー
普通のファンクタにフラグが付いたものみたいで
何らかのイディオムとしてありそうです
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:06
>>393
pop EmptySの場合にはじかれるのは分かったけど、
それ以外だと、どのような場合にはじかれるの?
はじかれるかどうか試すテストを書けばいいの?
0397デフォルトの名無しさん2010/06/05(土) 07:36:35
>>396
型推論器が、NotEmptyと推論できない場合のすべて、じゃない?
関数引数で、型がスタック一般の場合とか。
0398デフォルトの名無しさん2010/06/05(土) 09:16:31
自然数で持てばスタックオーバーフローも防げるのかな?
だとすると凄いな
0399デフォルトの名無しさん2010/06/05(土) 09:51:47
>>398
コンパイル時に検査できるかということなら無理
一般には長さの部分が抽象化された型になる
0400デフォルトの名無しさん2010/06/05(土) 10:45:12
>>397
型推論器ってなんなの?
(疎な条件分岐を考慮した) 定数伝播でpopが失敗するとかなら分かるんだが・・・
定数ではない何かが伝播するの?
0401デフォルトの名無しさん2010/06/05(土) 11:20:35
>>400
定数伝播を型でやってるようなもの…かな
型推論器はコンパイル時に走って、型指示のついていない
式に型をつけ、型が食い違っていればエラーを出す。

popはStack a NotEmpty型をとるため、
popにEmptyS (Stack a Empty型)を食わせるような式があると
コンパイル時にわかる。
04023932010/06/05(土) 11:23:16
393はpopしたあとの残りのスタックを取り出す関数
rest (PushS _ s) = x
に型がつかなくて、スタックとして使えないことに気付いた。

395の長さつきリストならスタックとしても使える。
04033932010/06/05(土) 11:24:00
訂正
rest (PushS _ s) = s
0404デフォルトの名無しさん2010/06/05(土) 12:07:39
長さ付きのスタックから残りの長さを取得する型関数RestLenがあるとして、
例えば実行するのにスタックを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:54
>>404
Agdaがあなたが求めているものかもしれない。
0406デフォルトの名無しさん2010/06/05(土) 14:38:55
>>404
http://ideone.com/foQDB
こういう感じ?
0407デフォルトの名無しさん2010/06/05(土) 15:27:03
>>406
できるんですか!
ありがとうございます、参考にさせてもらいます
0408デフォルトの名無しさん2010/06/05(土) 15:36:25
またですかhaskell.org
0409デフォルトの名無しさん2010/06/06(日) 21:13:02
HaXmlの使い方わかんないお>ω<
0410デフォルトの名無しさん2010/06/06(日) 21:25:57
キワモノと言われるHXTすらHaXmlよりかはまだわかりやすいと思う
04114092010/06/06(日) 22:46:11
ちょっとタグのString読ませて内部表現として保持しておきたいだけなんですけど
ハクスムルじゃ大風呂敷なんでしょうか?
0412デフォルトの名無しさん2010/06/06(日) 22:49:46
やりたいことがよく分からないけど、TagSoupは簡単便利よ。
0413デフォルトの名無しさん2010/06/07(月) 11:07:30
Yampa か Reactive、あるいは他のFRPライブラリで遊んでみようと思うのですが、
お勧めとか、それぞれの特徴とか教えてもらえませんか?

あと、haskell.org の停止、長すぎる。
0414デフォルトの名無しさん2010/06/07(月) 12:06:35
>>413
私はPhooeyのドキュメンテーションを読んでみて使いやすそうだと思ったのだが、
残念ながら今のghcではビルドできない。
というわけでおすすめはQtだ。
0415デフォルトの名無しさん2010/06/07(月) 15:13:38
tagsoup-parsecがインスコできね
キャバル死ね
0416デフォルトの名無しさん2010/06/08(火) 22:36:16
Windows 使ってて Haskell Platform を入れてるんだけど、
GHC のライブラリにある Graphics.Win32 以下のものって、
Windows 用の GHC にしか入ってないの?

たとえば Linux 用の GHC なら、
なにか別のものが Graphics.*** として用意されてるの?

というのも、ここにあるライブラリと Yampa とか使って
GUI ライブラリを自作してみたいのだが、
Windows でしか使えない物になってしまうのか訊きたい。
0417デフォルトの名無しさん2010/06/08(火) 23:58:28
Graphics.Win32はWindowsだけ
wxHaskellやGtk2HsはLinuxでも使える
0418デフォルトの名無しさん2010/06/09(水) 07:25:26
>>417
ありがと、やはりか。
0419デフォルトの名無しさん2010/06/09(水) 17:44:18
そもそもIOに依存しないライブラリを作って
ごく少数のIOを注入するのがHaskellの理想だろ

理想が高くなると「本音と建前は別だよね」って奴も増えるから困る
0420デフォルトの名無しさん2010/06/09(水) 17:52:41
elereaのようにIOを注入というより一部をIOから隔離するっていう方が好きかな
実際に書くスクリプトはliftIOでモナドにIOを入れまくりってものばかりですが…
0421デフォルトの名無しさん2010/06/09(水) 18:20:03
Haskellの何がよいかというと、MonadやApplicativeを使って
型安全なDSLを簡単に定義することができることだからな

あとは型に応じて自動補完するIDEがあればいいんだが
0422デフォルトの名無しさん2010/06/09(水) 18:35:01
> 理想が高くなると「本音と建前は別だよね」って奴も増えるから困る
本音と建前のバランスは実際のパフォーマンスを考慮して取られるべきだが、
そもそもHaskellは実用性を目的としていないのだから、困るのは逆ギレみたいなもんだ
0423デフォルトの名無しさん2010/06/09(水) 18:39:11
>>422
>そもそもHaskellは実用性を目的としていないのだから

Perl6はHaskell製
0424デフォルトの名無しさん2010/06/09(水) 19:10:53
>Perl6はHaskell製
そうだったか?
Perl 6の実装には2つあって、Haskellで書かれたPugsのほうは
もうテストにしか使われていないと聞いたが。
それにしても後付けの応用でしかない。
0425デフォルトの名無しさん2010/06/09(水) 19:31:04
>>423,4
http://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
>Haskellは実用性を目的としていない
ソースは?
0427デフォルトの名無しさん2010/06/09(水) 20:28:21
>>426
http://www.haskell.org/haskellwiki/History_of_Haskell
0428デフォルトの名無しさん2010/06/09(水) 20:34:29
hackagedb見ればほとんどが実用向けだと分かる
0429デフォルトの名無しさん2010/06/09(水) 20:35:55
haskell以上に素早くプログラミング出来る言語はないだろ。
Cなんかでチマチマやるより遥かに早いスパンで成果物が出来上がる。
0430デフォルトの名無しさん2010/06/09(水) 20:44:43
>>427
どこにもそんなことは書いてなくね?
むしろ逆じゃないか

たとえば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:52
>>429
lispかhaskellかどっちがはやいだろうな。これはなんともいえん。
0432デフォルトの名無しさん2010/06/09(水) 22:37:12
実行性能が必要だったり、複数人で開発したり、自分以外の人間が保守したり、
有り物のライブラリを使って楽をしたかったり、長期間稼働する必要があったり、
ハードウェアに近い処理を実装する場合だったり、リソースの限られた機械で
動作させる必要があったり、誰かに使ってもらう為のライブラリを作る時や、
コンパイラのバグはコンパイラベンダーに丸投げしたい場合なんかは Haskell は
あんまり向いてないかもね。
0433デフォルトの名無しさん2010/06/09(水) 23:03:23
MLに対するHaskellの優位性というのはどの辺りの分野にあるのだろう?
まあ一長一短で全体としてはどちらが良いともいえないと思うが。
0434デフォルトの名無しさん2010/06/09(水) 23:33:41
並列処理ならHaskell,それ以外ならMLかな
0435デフォルトの名無しさん2010/06/09(水) 23:35:32
ocamlはhaskellの8倍遅い(笑)
0436デフォルトの名無しさん2010/06/10(木) 06:33:33
>複数人で開発したり、
lispよりはましだろう。lispこそ独善的なプログラマの言語。
0437デフォルトの名無しさん2010/06/10(木) 07:52:20
>>432
抽象データ型とかをつかってインターフェースをしっかりと定義しておけば、
C++ や Java と同程度に複数人で開発できる。

したがって、自分以外の人間が保守することも普通にできる。

汎用的に使える応用度の高いライブラリも多く公開されてるから、
有り物のライブラリを使って楽をすることも問題ない。

ハードウェアに近い処理を直接実装するのはたしかに向かんかも。
ただ、ハードウェアに近い処理を抽象的に書く能力自体はあるし、むしろ向いてる。
それを実際のハードウェアに対して実行できるものに変換できればいい。

誰かに使ってもらう為のライブラリを作るのに
Haskell が向かない理由が思いつかない、説明してくれ。

残りは、Haskell の言語としての特徴が招く問題ではなく、
全て純粋に現在のコンパイラの問題だ。
0438デフォルトの名無しさん2010/06/10(木) 08:57:47
>>432
>コンパイラのバグはコンパイラベンダーに丸投げしたい場合なんかは Haskell はあんまり向いてない

かといって、素人でもメンテナンスを続けられる軽量なコンパイラもない
手も足も出ない
0439デフォルトの名無しさん2010/06/10(木) 09:06:39
>>437
>C++ や Java と同程度に複数人で開発できる。
>したがって、自分以外の人間が保守することも普通にできる。

Haskell プログラマの人数が圧倒的に少ない
共同開発者や保守要因の確保が困難(もしくは高コスト)

>汎用的に使える応用度の高いライブラリも多く公開されてるから、
>有り物のライブラリを使って楽をすることも問題ない。

当然、C/C++/Java のライブラリの数に比べたら圧倒的に少ない

>誰かに使ってもらう為のライブラリを作るのに
>Haskell が向かない理由が思いつかない、説明してくれ。

C でライブラリを作れば、殆どの言語から呼び出せる
Haskell でライブラリを作っても Haskell でしか使えない

>残りは、Haskell の言語としての特徴が招く問題ではなく、
>全て純粋に現在のコンパイラの問題だ。

現実的な視点では、コンパイラの問題も言語の問題。
0440デフォルトの名無しさん2010/06/10(木) 10:06:13
抽象レベルが高いのでプログラマ自身が最適化するのが難しいという点では、言語に原因があるといえる
0441デフォルトの名無しさん2010/06/10(木) 12:53:14
>>439
そうか、すまんな。
全員が普通に Haskell プログラマーであること前提の話だと思ってたよ。
全員が普通に Java プログラマーの開発環境の様に。

共同開発者や保守要因の確保が困難ほど Haskell プログラマーが不足しているという話なら、
おまえの言っていることは当たり前であり、全くの正論で議論の余地はない。
0442デフォルトの名無しさん2010/06/10(木) 16:17:28
>>439
Haskellプログラマの数が少ないというより、Haskellプログラマ自身を開発するコストがバカ高いと思われ
0443デフォルトの名無しさん2010/06/10(木) 16:20:38
Haskellプログラマは一人いれば100人の中卒プログラマに匹敵する
0444デフォルトの名無しさん2010/06/10(木) 16:24:27
Haskellの1行はCの100行に相当する
0445デフォルトの名無しさん2010/06/10(木) 16:33:46
haskellの1秒はcの1光年に相当する
0446デフォルトの名無しさん2010/06/10(木) 16:41:43
>>445
それは頭悪そう
0447デフォルトの名無しさん2010/06/10(木) 16:46:22
HaskellではCで考えられないようなプログラムを書くことができる
0448デフォルトの名無しさん2010/06/10(木) 16:51:54
時間の単位が距離の単位になるくらい超越的なんだろう
0449デフォルトの名無しさん2010/06/10(木) 17:08:50
>>448
近代物理学の自然単位系では、時間と距離とを区別しない
約30万km = 1秒
1光年 = 1年
0450デフォルトの名無しさん2010/06/10(木) 22:35:56
haskellのAKB48はCのモーニング娘。に相当する。
0451デフォルトの名無しさん2010/06/10(木) 23:33:56
Haskellが地球ならCは火星でLispは宇宙そのものだ。
0452デフォルトの名無しさん2010/06/10(木) 23:54:19
テラフォーミング言語C
0453デフォルトの名無しさん2010/06/11(金) 00:32:38
Haskellの関数はCのポインタに相当する。

Cの利点:
* ポインタを使って、関数を関数の引数にできる
* 関数ポインタに自由に四則演算をすることができる
* 型キャストが容易。関数型をlong型にすることもできる

Haskellの欠点:
* ポインタがないので、関数を特別なファーストクラスオブジェクトにしなくてはならない
* 関数に自由に四則演算をすることはできない
* 型キャストはない
0454デフォルトの名無しさん2010/06/11(金) 00:36:12
それ欠点なのかw
0455デフォルトの名無しさん2010/06/11(金) 00:44:27
>>453
おい、初心者の就職活動みたいな事すんなよ
0456デフォルトの名無しさん2010/06/11(金) 12:43:34
関数に演算できるだろ。
0457デフォルトの名無しさん2010/06/11(金) 12:46:56
Haskell の関数に四則演算はできんと思ってたんだが、できるのか?
0458デフォルトの名無しさん2010/06/11(金) 12:52:37
Cでもできないはずだが、どうだろうか?掛け算や割り算って何だ?
0459デフォルトの名無しさん2010/06/11(金) 13:04:37
関数ポインタにはできないね
0460デフォルトの名無しさん2010/06/11(金) 14:25:17
和 f +++ f
積 f *** f

差と商はどう定義しよう
0461デフォルトの名無しさん2010/06/11(金) 15:23:21
積 f***g = \x-> Just x >>= f >>= g
和 f+++g = \x-> Nothing `mplus` f x `mplus` g x
0462デフォルトの名無しさん2010/06/11(金) 15:55:16
additive inverseを関数に対して定義する…だと?
0463デフォルトの名無しさん2010/06/11(金) 16:00:51
>>461
というか、MonadPlusが「和」を定義するクラスなんだが
0464デフォルトの名無しさん2010/06/11(金) 16:07:56
>>462
fが成功かつgが失敗のときf-gが成功
0465デフォルトの名無しさん2010/06/11(金) 18:49:39
Arrow とか ArrowChoice を持ってくるのが無難なのかな
0466デフォルトの名無しさん2010/06/11(金) 18:56:15
ArrowでModuleを作るのかー頑張れとしか良いようがないな
色々と制約を追加してModuleを構成できるArrowってのを考えるのが楽か
Arrowそのものが抽象だから具体例を考えなくてもいいし
0467デフォルトの名無しさん2010/06/11(金) 19:14:51
Haskellなんだから積と和はやはり直積・直和にもとづいて定義したい。

* :: (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:01
ていうか関数ポインタの演算ってそんなものじゃないし
0469デフォルトの名無しさん2010/06/11(金) 19:30:34
どんなの?
0470デフォルトの名無しさん2010/06/11(金) 19:50:14
>>467
それは命題論理に対応するっていう話で、代数系じゃないでしょ
0471デフォルトの名無しさん2010/06/11(金) 20:14:04
Prologは述語論理でHaskellは命題論理なの?
0472デフォルトの名無しさん2010/06/11(金) 20:19:25
>>471
Haskellはそもそも論理型じゃないし
0473デフォルトの名無しさん2010/06/11(金) 20:33:31
>>470
CCC+直和が代数系でない?
0474デフォルトの名無しさん2010/06/11(金) 20:33:38
forallがあるから述語論理だろ
でtype of typeができないから二階じゃない
0475デフォルトの名無しさん2010/06/11(金) 20:50:44
なんかよくわからんけど、
RankNTypes拡張を有効にしたら
高階論理なんじゃないの?
0476デフォルトの名無しさん2010/06/11(金) 21:43:14
Curry-Howard 対応様が見てる
0477デフォルトの名無しさん2010/06/11(金) 22:14:43
二値じゃないから論理じゃないだろ
0478デフォルトの名無しさん2010/06/11(金) 22:21:30
関数プログラミングの楽しみっていう本、どこの本屋に行ってもないんですが
7年前の本なんですよね?
絶版したんでしょうか?
0479デフォルトの名無しさん2010/06/12(土) 00:15:57
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06805-8

近日発売中?
0480デフォルトの名無しさん2010/06/12(土) 00:45:08
>>477
お前の中では論理っていうと二値論理のことなのか?
0481デフォルトの名無しさん2010/06/12(土) 01:14:02
>>479
この本ずっと待ってんだけど6月下旬らしいね
0482デフォルトの名無しさん2010/06/12(土) 10:09:42
>>442
大学を思想的に侵略して関数型言語以外はクズという主義を学生に叩き込もうぜ
0483デフォルトの名無しさん2010/06/12(土) 10:27:19
その前に関数型言語の定義をめぐって内ゲバしないと
0484デフォルトの名無しさん2010/06/12(土) 12:21:48
Lispは関数型言語かどうかで死闘をくりひろげるわけですね
0485デフォルトの名無しさん2010/06/12(土) 12:24:41
世間一般ではともかく、今時大学で Lisp を関数型扱いしてたら相当の時代遅れだろう
0486デフォルトの名無しさん2010/06/12(土) 12:32:16
関数型言語の歴史を知っている人間ならLISPが関数型言語だというのは明らか
0487デフォルトの名無しさん2010/06/12(土) 13:42:09
マルチパラダイムとお呼び!
0488デフォルトの名無しさん2010/06/12(土) 14:03:07
yes, sir!
0489デフォルトの名無しさん2010/06/12(土) 16:11:17
lispって型にはまらない言語なんだから、
枠にはめて考えること自体合わないんだと思うよ。
今じゃマルチパラダイムになってるからね。

型にハメる系統と対照的だといえるよ。
0490デフォルトの名無しさん2010/06/12(土) 16:26:08
ラムダ計算の筆記用として考え出されたのがLISP
関数型言語はラムダ計算の応用だからLISPは関数型言語
0491デフォルトの名無しさん2010/06/12(土) 16:34:34
> ラムダ計算の筆記用として考え出されたのがLISP

嘘ですね

> 関数型言語はラムダ計算の応用だからLISPは関数型言語

前件が意味不明です
0492デフォルトの名無しさん2010/06/12(土) 17:58:43
LISPは関数型言語ではない
LISPマシン専用言語だ
0493デフォルトの名無しさん2010/06/12(土) 18:33:42
>>491
あなたがウソですね
0494デフォルトの名無しさん2010/06/12(土) 20:19:19
関数型言語の元祖はlispだが、現代の関数型言語とは似て非なるものだ。
自転車や自動車、それに八つ橋などの例をみても、元祖が子孫と違うのは珍しくない。
関数型言語でも同様のパターンがあると考えるのはごく自然な発想だ。
0495デフォルトの名無しさん2010/06/12(土) 20:23:06
>>489
>型にハメる系統と対照的だといえるよ。
Haskellのことを言っているのであれば、これは少々不適切な表現だ。
Haskellはデータを既存の型にはめるだけではない。
プログラマが型を積極的に定義することを許しているのだから、型を使う言語と言ってほしい。
0496デフォルトの名無しさん2010/06/12(土) 20:25:29
Lispを関数型言語ではないというのは、黎明期の巨大携帯電話をmobileでないというようなもの。
0497デフォルトの名無しさん2010/06/12(土) 20:27:34
型から自由であろうと企てた結果、unsafeになって拡張できなくなってしまうのは残念なこと。
初心者にありがちな失敗コースです。
0498デフォルトの名無しさん2010/06/12(土) 20:32:39
チャーチルの戦車も、現代人には奇抜に見えるが戦車です。
http://obiekt.hp.infoseek.co.jp/t72/genesis1.html
0499デフォルトの名無しさん2010/06/12(土) 20:39:46
Lisp は純粋関数型じゃないって事で
Lisp はパラダイム非依存のパラダイス言語です
0500デフォルトの名無しさん2010/06/12(土) 20:42:25
数学も、もともと測量学だったものが長い歴史を経て純粋な神学になったんだから、歴史はより速く繰り返されるものです。
0501デフォルトの名無しさん2010/06/12(土) 20:48:41
>>499
というか、lispのパラダイムにはsyntactic abstraction(構文抽象)という名前があるんだよ
0502デフォルトの名無しさん2010/06/12(土) 20:55:54
言われてみれば測量学とラムダ算法って似たようなもんだな
具体的なものから抽象的な概念に進歩していくのか
0503デフォルトの名無しさん2010/06/12(土) 21:06:51
構文抽象は S 式と繋がりが強過ぎてパラダイムって感じはしないな
0504デフォルトの名無しさん2010/06/12(土) 21:18:08
関数型言語の始祖はC言語の関数へのポインタ
0505デフォルトの名無しさん2010/06/12(土) 21:20:01
Cの可変個の引数(printf)とコールバック
0506デフォルトの名無しさん2010/06/12(土) 21:24:41
真祖はstack winding
0507物理っぽく言ってみた2010/06/12(土) 21:31:18
古典的関数型言語(関数型言語の古典論)=
現代関数型言語(より良い理解のために)=
0508J. M.2010/06/12(土) 21:46:05
どうしよう。
「ただ、リストの再帰処理が書ける言語が欲しかっただけ」
といい出せない雰囲気…
0509デフォルトの名無しさん2010/06/12(土) 21:56:27
ジョン万次郎か
0510デフォルトの名無しさん2010/06/13(日) 02:39:41
Haskellは数値計算やシミュレーションには向かないのでは?
と書いてあるのをどこかで見た気がします。
これは本当でしょうか?
0511デフォルトの名無しさん2010/06/13(日) 02:46:34
そのようなことはありますん。書いた人に聞くか、どこに書いてあったかを示して下さい。
0512デフォルトの名無しさん2010/06/13(日) 06:29:39
>>510
まあ、Haskellに詳しくない人は、シミュレーションをどうやってモデリングすべきか見当もつかないかもしれないね
0513デフォルトの名無しさん2010/06/13(日) 07:27:25
haskellで速いプログラムを書くコツとかわからないもんね。

副作用がないってのがメモリは食うし遅いという印象があるのかも
0514デフォルトの名無しさん2010/06/13(日) 07:46:20
>>510
きれいなやり方が見当たらないときは、きたないやり方も許されます
詳しい人はそれを知っているので、数値計算もシミュレーションもこわくない
0515デフォルトの名無しさん2010/06/13(日) 09:11:15
C++みたいだな
0516デフォルトの名無しさん2010/06/13(日) 10:01:07
>>510
SoftwareDesignでnobsunが書いた記事でしょ。
Haskellはクソ遅いからシミュレーションみたいなパワーがいる処理には向いてないよw
0517デフォルトの名無しさん2010/06/13(日) 13:26:57
布教屋さんがそう言ってるのか、
0518デフォルトの名無しさん2010/06/13(日) 13:47:06
>>517
nobsunが言っているのは、我々が感じているのと同様に
reactiveなプログラミングをするのが非常に煩雑になってしまうというところ。
シミュレーションは物によるけど、決まったタイミングで処理をするもの、
例えばアニメーションとかは書きにくいね。
現在YampaなどFRPライブラリが作られてはおり、
reactiveなプログラミングを支援しようという動きはあるが、
あまりわかりやすくプログラミングできるとはとても言い難い。

そしてさらに誰がいおうと、HaskellはCと比べて明らかに遅い。
0519デフォルトの名無しさん2010/06/13(日) 14:01:16
まぁ、これからに期待だね
0520デフォルトの名無しさん2010/06/13(日) 14:08:09
しかし、関数型言語でも並行処理を利用すればオブジェクト指向設計(より強力な設計が可能)
を置き換える事が可能だと思う。
だからオブジェクト指向で有利なreactiveなプログラミングも関数型言語で簡単にできるようになると思う。
0521デフォルトの名無しさん2010/06/13(日) 16:22:15
線形型をもつATSはCに匹敵するパフォーマンスを出せるが
記述量もCと同等以上かつ大抵の人には読めない…
やっぱC++でHaskellっぽく書くというところで妥協するしかないのか
0522デフォルトの名無しさん2010/06/13(日) 17:46:29
CやC++なんて、言って見たらマシン語そのままみたいなもんだからね。それ超えようってなら、
勝手にアルゴリズムを推論して書き換えちゃうくらいじゃないとどうにもならないんじゃないの。
0523デフォルトの名無しさん2010/06/13(日) 18:00:22
>>522
何言ってるんだ?
0524デフォルトの名無しさん2010/06/13(日) 18:02:54
C++って「高級アセンブラに継ぎ接ぎだけど型レベル言語くっつけました^^」みたいなものだろ。
0525デフォルトの名無しさん2010/06/13(日) 18:07:46
継ぎ接ぎといえどTemplate Haskellよりまとも
0526デフォルトの名無しさん2010/06/13(日) 18:20:49
>>522
いや、CPUアーキテクチャの違いを吸収してくれるのは大きい。
小さなパフォーマンスコストでポータブルなコードを書けるんだからな。
0527デフォルトの名無しさん2010/06/13(日) 18:40:10
アーキテクチャまで掘って話すことは今の話の文脈では脱線だと思うが。
0528デフォルトの名無しさん2010/06/13(日) 19:07:06
アーキテクチャの話はしてないだろ。
高級言語がアーキテクチャの違いを吸収してくれると言っているんだから。
0529デフォルトの名無しさん2010/06/13(日) 19:24:02
でもね。ダイナミックプログラミングとか
必要な計算ならhaskellは得意だと思うんだけど。
0530デフォルトの名無しさん2010/06/13(日) 20:55:39
つか、Cと勝負しなくていいだろ。
Javaに勝てれば十分。
0531デフォルトの名無しさん2010/06/13(日) 21:04:33
HaskellはJavaよりスペース的には有利なはずだが。
しかし遅延評価だからスペースリークが怖いな
0532デフォルトの名無しさん2010/06/13(日) 21:45:35
スペースリークって、やっぱコンパイラによって違ってくるの?
たとえばスペースリークが出ないようにソースを調整したのに、
べつのコンパイラでコンパイルしたら出ちゃったとか。

それとも、共通したテクニックで防げるものなの?
0533デフォルトの名無しさん2010/06/13(日) 22:04:45
そりゃコンパイラによって違ってくるでしょ。
馬鹿な例だけど例えば必ずリークするコンパイラ作ってそれでコンパイルすればリークするし。
0534デフォルトの名無しさん2010/06/13(日) 22:06:29
>>532
程度の差はあるだろうが、基本的な考え方は同じでいけるはず。
Haskell でのスペースリークってのは要は遅延させた仕事がたまっていっぱいいっぱいってことだから。
それがないように注意深く調整すればいいって話。
0535デフォルトの名無しさん2010/06/13(日) 22:06:40
>>532
call by need簡約だけ想定してスペースリークを潰せば実用上問題ない
0536デフォルトの名無しさん2010/06/13(日) 22:36:10
メニーコアCPUな時代になって、すごく賢く自動的に並列化されるようになれば、
「Haskellで書くより速いプログラムをCで書くなんて非現実的な苦行」と言われるようになるかもしれない。
というか、なってほしい。
0537デフォルトの名無しさん2010/06/13(日) 22:41:55
Haskellが教えてくれたこと

純粋関数型言語だから自動並列化が簡単になるわけではない
0538デフォルトの名無しさん2010/06/13(日) 22:48:02
FRP の実装方法のひとつで、Fruit ライブラリなんかが使ってたと思うけど、
単調増加的に刻一刻と変化する「現在時刻」の列を無限リストで表現する方法があるよね。
[t0, t1, t2, t3, .....] みたいな。

ああいう無限リストで表現された現在時刻をつかってアニメーションなんかさせる場合、
リストの既に消費した部分(先頭の方)はちゃんと GC で回収されるものなの?

そのようなリストの要素は一度参照されればもう二度と参照されないことは
プログラムソースの全体をちゃんと見れば分かることだけど、
そういう事をコンパイラに期待しても良いものなのか、ちょっと心配になる。
0539デフォルトの名無しさん2010/06/13(日) 22:54:12
あ、Fruit じゃなくて Fran か
0540デフォルトの名無しさん2010/06/13(日) 23:06:00
無限リストの頭を次々に読み捨てていくような処理なら、間違いなく回収してくれるよ
0541デフォルトの名無しさん2010/06/13(日) 23:10:01
そうなのか、安心した。

けっこう賢いんだな
0542デフォルトの名無しさん2010/06/13(日) 23:17:07
特にコンパイラが賢いことをしてる訳じゃなくて、実行時に普通のGCが走査してるだけだけどね
0543デフォルトの名無しさん2010/06/14(月) 00:11:45
最後にts' - (head ts)で処理時間を返すとかしてなければおk
0544デフォルトの名無しさん2010/06/14(月) 00:13:58
>>532
どのコンパイラでも、中間コードを生成するオプションを使ってコードを追えば、明らかにヤバい部分は回避できる
0545デフォルトの名無しさん2010/06/14(月) 00:26:55
>>543
なんで?

この ts' ってのはたぶん最後に取得した時刻の事だよね。
head ts は捨てられないけど、それ以降から ts' までは要らないから、
GC で回収されるんじゃないの?

つまり ts = [t0, t1, t2, t3, ... tn-1, tn] で処理が完了したなら、
tn - head ts としても t1 や t2 などは明らかに要らないよね(参照されないから)。
それでも回収できないの?
0546デフォルトの名無しさん2010/06/14(月) 00:38:45
(head ts)はその値が必要とされるまで評価が遅延されてるから、
tsが参照されたままなんだよ
0547デフォルトの名無しさん2010/06/14(月) 07:31:33
そうなのか。

てっきり途中の t1 や t2 などは一度しか参照されないという事を
ソースを見て解析しているのかと思ってた。
あくまで実行時に ts が保持されているかどうかで、
リスト全体が保持されてしまうのかが決まるのか。

ずっと勘違いしてた、ありがと。
0548デフォルトの名無しさん2010/06/14(月) 09:29:41
そういう最適化をするコンパイラもあるかもしれないけどね
0549デフォルトの名無しさん2010/06/15(火) 12:16:51
tn - (head $! ts)
と正格適用すると回収されるのを期待できますか?
0550デフォルトの名無しさん2010/06/15(火) 18:32:50
>>549
headはもともと正格な関数なので、それでは何も変わらない
やるなら、リストを辿り初める前にあらかじめseqしておく

let h = head ts in seq h {- ここで処理。最後にhを使う -}
0551デフォルトの名無しさん2010/06/16(水) 10:59:47
http://itpro.nikkeibp.co.jp/article/COLUMN/20070305/263828/
ここで id は正格であると書かれています。

ghciだと
Prelude> (length . (:[]) . id) undefined
1
Prelude> (length . (:[]) . id $!) undefined
*** Exception: Prelude.undefined
となります。idが正格ならどちらも例外になる気がするのですが、なぜそうならないのでしょう?
0552デフォルトの名無しさん2010/06/16(水) 11:15:35
>>551
idは正格だけど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:45
(id undefined)が例外になるなら、(undefined)と書くだけで例外になるべきでは
0555デフォルトの名無しさん2010/06/16(水) 12:45:20
>>553
>id undefined は id が返す undefined が例外を生成する
>id $! undefined は idに適用する式 undefined を評価したときに例外を生成する
別にそう考えて問題ない
重要なのは、その二つの式の違いが外部からまったく区別できないということ
どちらの式も、評価されれば例外を生成するし、評価されなければ何もおこらない
0556デフォルトの名無しさん2010/06/16(水) 13:17:29
正格関数が例外を生成する
undefinedが例外を生成する
評価が例外を生成する
0557デフォルトの名無しさん2010/06/16(水) 17:36:40
>>553
例外はundefinedが評価されたときに発生する,と考えればよい.
ポイントは以下の2点.
・式の評価はその式がwhnfという形式になるまで評価を繰り返すことで行われる.
・undefinedはwhnfではない.

id undefinedという式を評価すると,idの定義からundefinedに変換されるが,
undefinedはwhnfでないため,再び評価が行われ、例外が発生する(有難いことに).
id $! undefinedという式を評価すると、$!の定義から引数であるundefinedが評価され、
例外が発生する.
例外発生までの過程は違うが、結果は同じになる.
正格関数では常にこうなるので、この現象を「idが正格だから〜」と説明しているのだろう.
0558デフォルトの名無しさん2010/06/16(水) 22:02:34
λおっぱい
http://satashi.tumblr.com/post/704197618/via-www-pornodl-com
0559デフォルトの名無しさん2010/06/17(木) 03:42:43
関数型言語で勢いが一番あるスレはここかな?それでもこれから流行る流行らないとか、生き残る生き残らないとか、そういう話が多いね
0560デフォルトの名無しさん2010/06/17(木) 10:59:07
>>559
Qi使ってる人居る?
HaskellとLispのいいとこ取りみたいで、個人的には重宝してるんだが。
0561デフォルトの名無しさん2010/06/17(木) 11:12:51
>>559
そういう話は次世代技術にはありがちなんだよ。
0562デフォルトの名無しさん2010/06/17(木) 17:27:31
>>560
恥ずかしながら、その言語をはじめて知りました。
ちょっとgoogleってみたけど、たしかに面白そう。
型定義のやり方が独特そうで、ちょっと戸惑っているけど。
0563デフォルトの名無しさん2010/06/19(土) 02:45:23
haskell遅い遅いって聞くケド、高速化に取り組んでる人っておらんの?
common 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:17
>>563
Shootoutでは速いほうだよ。
まあ、速くなるように書かれているだからだが
一体誰が遅いといっているのか知らないが、普通に書いてもRubyなどの動的言語よりは速い
Haskellはそもそも静的型なので、型宣言してもパフォーマンスは変わらない
0565デフォルトの名無しさん2010/06/19(土) 11:11:19
小手先でスクリプト組んでちょこっとした事務処理する場合、開発コストまで考えたらHaskellはおそろしく高速だと思います
0566デフォルトの名無しさん2010/06/19(土) 11:37:33
私は年賀はがきをHaskellで書いています
0567デフォルトの名無しさん2010/06/19(土) 15:22:04
Haskell はコンパイルが遅いと聞いたことがある
0568デフォルトの名無しさん2010/06/19(土) 15:32:49
ソースコードがCの1/10ならコンパイルが10倍遅くても問題無し。
実際には10倍も遅くはないが。
0569デフォルトの名無しさん2010/06/19(土) 15:50:53
Haskellコンパイラ自体をやってる人は日本にはいないん?
0570デフォルトの名無しさん2010/06/19(土) 16:44:05
コンパイルは遅くないがリンク(ld)は確実に遅い
0571デフォルトの名無しさん2010/06/19(土) 17:39:30
OCaml と比べれば遅いけどな>コンパイル

ld のメモリ食いは安い VPS だと死ねる
0572デフォルトの名無しさん2010/06/19(土) 18:20:48
make -jxオプションに相当するものがまだないんだよね…
あとリンカはgnu goldがこなれてくればある程度KAIZENできそう
0573デフォルトの名無しさん2010/06/23(水) 20:12:58
GHC-6.12.2 を使っています。ghcでコンパイルをしてみようと思ったらこんなエラーになります。
$ 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:25
>>573
ghc --make test.hs

としてもうまくいかない?
0575デフォルトの名無しさん2010/06/23(水) 20:30:28
>>574
うまくいきました…
ghc --help の先頭に書いてあるんじゃんねぇ orz

ありがとうございます、そしてお騒がせしました。
0576デフォルトの名無しさん2010/06/23(水) 21:46:21
本屋に関数プログラミングの楽しみがあったから買ってきたけど、なにこれ?

 わ け わ か ら ん
0577デフォルトの名無しさん2010/06/23(水) 22:07:31
>>576
どこが分からないのでしょうか?
0578デフォルトの名無しさん2010/06/23(水) 22:08:00
目次見ただけで難しそう
0579デフォルトの名無しさん2010/06/23(水) 22:09:34
慣れてないだけですよ。
分からない言葉はひとつひとつ調べていきましょう。
0580デフォルトの名無しさん2010/06/23(水) 22:43:30
目次だけ見るととっつきにくそうだな
0581デフォルトの名無しさん2010/06/23(水) 22:57:15
>>577
いろんなテーマについて関数プログラミングの話してるみたいなんだけど、そのテーマが分からん
この本は続編みたいなんだけど、詳しくは前の本参照、みたいな箇所がいきなり出てきてわけわからん

あと、コード(?)の断片は出てるけど、実行方法とかは載ってないので初心者お断り
0582デフォルトの名無しさん2010/06/23(水) 22:59:45
初心者お断りなのは仕方ないと思うけど
0583デフォルトの名無しさん2010/06/24(木) 00:24:27
関数プログラミングの楽しみ(邦訳版)、もう買った人いる?
ttp://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:34
おっと、すぐ上に居たか。失礼しましたw
0585デフォルトの名無しさん2010/06/24(木) 00:31:50
糞長いURLを貼るな
0586デフォルトの名無しさん2010/06/24(木) 01:21:19
http://www.amazon.co.jp/dp/4274068056/
0587デフォルトの名無しさん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
>>581
どのテーマにも興味が持てなかったのなら、
仕方がないのではないか?
よくあることだよ。

C/C++ や C# の文法を一通り覚えたら、
簡単なゲームから作り始める人もいれば、
テキストエディタから作り始める人もいる。
計算物理学入門とかの本を実践しながら遊ぶ人もいる。

同じ事だ。
0589デフォルトの名無しさん2010/06/24(木) 10:38:38
Algebra of Programmingから読むといいよ
0590デフォルトの名無しさん2010/06/24(木) 19:49:05
関数プログラミングの楽しみ は何かの続編らしいんですが、これの前の本の訳本はないのでしょうか?
0591デフォルトの名無しさん2010/06/24(木) 19:50:11
関数プログラミングの産声
関数プログラミングの楽しみ
関数プログラミングの終焉


3部冊とか?
0592デフォルトの名無しさん2010/06/24(木) 20:32:35
>>590
確か、これですかね。英語版は2nd ed.あり(>>2の一つ目の本)。

http://www.amazon.co.jp/dp/4764901811
関数プログラミング
R. バード (著), P. ワドラー (著)

次スレではテンプレ再構成ですね。何時になるか分かりませんが
0593デフォルトの名無しさん2010/06/25(金) 22:04:01
正直、あのおぼろげなヒントからここまで割り出すのは大変だった。
https://dspace.jaist.ac.jp/dspace/bitstream/10119/908/3/1184paper.pdf
0594デフォルトの名無しさん2010/06/26(土) 21:45:13
あー、世の中は広いんだなぁ。。。
0595デフォルトの名無しさん2010/07/05(月) 20:28:09
保守age
0596デフォルトの名無しさん2010/07/05(月) 20:57:48
980超えてない限りそうそう落ちないよ
0597デフォルトの名無しさん2010/07/09(金) 11:45:28
Real World Haskell 8章214頁にて、:type handle (const…で型を調べる説明があるのですが、
そこでは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:42
:t handle (\(e::SomeException) -> return [])
05995972010/07/11(日) 10:56:27
>>598
レスありがとうございます。ただ・・・
Illegal signature in pattern: SomeException
となってしまいました。

結局、元のGlob.hsソースのimportをControl.ExceptionからControl.OldExceptionに替えるとwarningが出るものの一応走りました。
0600デフォルトの名無しさん2010/07/15(木) 12:42:05
GHC 6.12.2 を使っていて、GHC 6.12.3 をコンパイルしようとすると、
こんなエラーが出ます。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
RWHの258ページにparseWhileの定義が載っていますが、そこで(b:)と
再帰を繰り返して行った時の最後の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:19
やっと解決した……。誰も必要としてないかも知れないけど、ご報告。
ttp://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:12
otu
0605デフォルトの名無しさん2010/07/20(火) 11:22:36
>>601
入力を消費(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
>>601

きちんと動かしてないけど、こんな感じにパラフレーズできるんじゃね?

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 [])
06076012010/07/22(木) 00:39:56
>>605>>606
端的には>>605の終わりの方に書いてある意味ですね。
257頁のParse上のFunctorクラスのインスタンス化の意味を理解してませんでした…。

挫折を止まらせてくれたレス、thxです。
0608デフォルトの名無しさん2010/07/22(木) 01:43:46
Haskellってオブジェクト指向プログラミングはどうなってるの?
0609デフォルトの名無しさん2010/07/22(木) 05:55:55
ポリモーフィズムもカプセル化もできるぞ
0610デフォルトの名無しさん2010/07/22(木) 06:40:56
>>608
モナドやクロージャで代替できる
0611デフォルトの名無しさん2010/07/22(木) 08:08:51
モナドとモコナはどう違うのか
永遠の謎
0612デフォルトの名無しさん2010/07/22(木) 08:11:58
モナドは「ぷぷぅ」って言わない
0613デフォルトの名無しさん2010/07/22(木) 12:43:26
しかし、モコナはモナドだ
0614デフォルトの名無しさん2010/07/22(木) 16:43:42
どう違うのかっていわれても、同じオブジェクトが見方によってモナドだったりそうでなかったりするんだよ
0615デフォルトの名無しさん2010/07/22(木) 16:55:24
モナド可愛いよね
0616デフォルトの名無しさん2010/07/22(木) 18:04:03
黒モナドモドキ
白モナドモドキ
0617デフォルトの名無しさん2010/07/22(木) 18:34:07
ホワイトボックスとブラックボックスの違いみたいなもんか
0618デフォルトの名無しさん2010/07/22(木) 20:03:42
昔は白モナドが美味しそうだったが、
最近はアルコール度数が高い黒モナドの方が美味しそうに思えてきた
0619デフォルトの名無しさん2010/07/22(木) 20:06:30
何の話だよ
0620デフォルトの名無しさん2010/07/22(木) 21:26:19
何の話って、モナドだろ?
0621デフォルトの名無しさん2010/07/22(木) 21:31:54
これはただのモナドではございません、山吹色のモナドでございます。
0622デフォルトの名無しさん2010/07/22(木) 21:38:54
>>611
よかったな
イレ食いだぞ
0623デフォルトの名無しさん2010/07/22(木) 23:11:50
あーあやっちゃったね
0624デフォルトの名無しさん2010/07/22(木) 23:54:38
本題に戻りたまえよ君達
0625デフォルトの名無しさん2010/07/23(金) 01:19:29
急に伸びたとおもって
わくわくしてスレを開いたらこれだよ!
0626デフォルトの名無しさん2010/07/23(金) 12:44:43
で、本題ってなんだったっけ
0627デフォルトの名無しさん2010/07/23(金) 17:05:14
副作用があるのかないのかって話。
0628デフォルトの名無しさん2010/07/23(金) 18:13:03
副作用は言語の外にある
0629デフォルトの名無しさん2010/07/23(金) 22:20:32
外野が勝手に解説(副作用)してくれるってこと?
0630デフォルトの名無しさん2010/07/23(金) 22:23:26
言語仕様には定義されていないということ。
なにが起こるかはすべて実装依存。
0631デフォルトの名無しさん2010/07/23(金) 23:15:00
The Haskell 98 ReportでIOモナドと基本IOは、いちおう定義されているよ。
http://haskell.org/onlinereport/io-13.html

Haskellの 『関 数 は』 副作用を持たない、で良くね?
0632デフォルトの名無しさん2010/07/23(金) 23:27:35
言語仕様のことを言語と呼んでいたのか。
0633デフォルトの名無しさん2010/07/23(金) 23:31:44
言語仕様とその実装には当然同型対応ができてかつモナドとなる。
ということでおk?
0634デフォルトの名無しさん2010/07/24(土) 00:51:20
表現がイマイチか。
Computationとは言語仕様のことじゃないか、ということ。
0635デフォルトの名無しさん2010/07/24(土) 10:17:17
elereaの使いかたがわかりません
誰かあれ+SDL/GLFWでテトリスとか作れるの?本当に??
0636デフォルトの名無しさん2010/07/24(土) 12:14:08
糞スレあげ
0637デフォルトの名無しさん2010/07/25(日) 21:50:00
Haskellでは共有ポインタはどのライブラリですか?
0638デフォルトの名無しさん2010/07/25(日) 21:56:13
共有ポインタって?
0639デフォルトの名無しさん2010/07/25(日) 22:10:28
boostだとshared_ptrです
0640デフォルトの名無しさん2010/07/25(日) 23:03:55
hackage.haskell.orgにはなさそう
GCのある言語だから需要が少いんだと思う
もし良かったら、どういう用途で使うのか教えてくれないか

どうしても必要なら自分で作ればいいんだけど、C++と違ってコピーコンストラクタを定義できないので
不用意にコピーしないように注意深く扱わないといけない気がする
0641デフォルトの名無しさん2010/07/29(木) 18:59:55
Haskellが得意なやつ集合〜♪
haskellでリストの内包表記と再帰用いずに、ピタゴラス数を求められるソース書ける?
俺は無理だがなwwww
0642デフォルトの名無しさん2010/07/29(木) 19:00:05
Haskellが得意なやつ集合〜♪
haskellでリストの内包表記と再帰用いずに、ピタゴラス数を求められるソース書ける?
俺は無理だがなwwww
0643デフォルトの名無しさん2010/07/29(木) 19:20:29
内包表記と再帰を使って書く
→内包表記をdo式で書き直す
→再帰をYコンビネータで書き直す
0644宿敵はHaskell2010/07/30(金) 01:05:59
filterとかmapとか使えば書けそうな気もするけど、どうだろう・・・
誰か書ける人いる?
0645デフォルトの名無しさん2010/07/30(金) 01:09:34
教えて欲しいなら教えて欲しいと言えば素直に教えるのに。
0646デフォルトの名無しさん2010/07/30(金) 01:21:42
>645
教えてください
0647デフォルトの名無しさん2010/07/30(金) 02:47:48
再帰型は使ってますが関数の再帰定義は一切ございません

pythagoras = 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:37
こまけぇこたぁはいいんだよ

fib = \n -> round $ (((1 + sqrt 5)/2)^n + ((1 - sqrt 5)/2)^n)/(sqrt 5)
0649デフォルトの名無しさん2010/07/30(金) 07:57:55
ピタゴラス数なのになんでフィボナッチ数列求めてるんだ俺は…暑さのせいか
0650デフォルトの名無しさん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
map とか使ってる時点で再帰を使ってることと同義ではないのか

そんなのでよかったら、適当に再帰を隠したライブラリ自作しても同じだと思うが
0652宿敵はHaskell2010/07/30(金) 17:59:18
友達が教えてくれたよ〜♪
皆さんもありがとうございました
647さん650さんありがとうございます。
0653デフォルトの名無しさん2010/07/30(金) 18:09:50
ウソ言うなよ
06546472010/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
>>652
そんで、友達の解は何?
0656デフォルトの名無しさん2010/07/31(土) 11:20:56
>>647の方法ってどこからでてきたの?
Wadlerのrecursive types for freeでおk?
06576472010/08/01(日) 14:15:18
Wikipediaの不動点コンビネータの項から拝借しました。
0658デフォルトの名無しさん2010/08/01(日) 23:15:49
Pearls of Functional Algorithm Design
ttp://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
>>659
とりあえず関数型言語を使わないで考えてみなさい。
0661デフォルトの名無しさん2010/08/02(月) 19:25:46
>>660
> とりあえず関数型言語を使わないで考えてみなさい。

なるほど。関数型言語を使わない方が楽に解けるということですね。
というのは置いといて。C++では自分ならどう計算するか考えていけばそれほど
苦労せずにプログラムを書けるのだけど haskell ではどう書いたらいいのか想
像もつかない。
0662デフォルトの名無しさん2010/08/02(月) 19:31:29
>>661
とりあえず、逆行列を計算するプログラムを Haskell で書けばいいと思うが、
それが書けないということか?
0663デフォルトの名無しさん2010/08/02(月) 19:52:40
行列計算ならHaskellが得意とするところ。
0664デフォルトの名無しさん2010/08/02(月) 20:47:56
>>662
そういうこと。

>>663
"haslell 逆行列'でググったら
http://dev.ariel-networks.com/Members/ohyama/haskell-9006884c521730926c423081308b/view
があった。頭がクラクラするほど
0665デフォルトの名無しさん2010/08/02(月) 21:09:13
>>664
何でそういうドンピシャな方法を探そうとするかな

まず普通に LU 分解をベタにプログラムしてみればいいじゃん
より洗練された方法を探したり近づけたりするのは、その後でしょ
0666デフォルトの名無しさん2010/08/02(月) 22:22:05
親切で書いているのだとは思うが何を言いたいのか分からない。
例に連立方程式をだしたのは簡単で洗練された方法が探しにくいからで
C++では行列が与えられて解を求めるまで10行で書いている。
もう一つは配列の要素を次々に書き換えながら処理が進むのでそのあ
たりをどう書くのかのヒントでもと思ったのだが>>664のリンク先がドンピ
シャで洗練された方法ということであれば私には haskell を勉強する意
味は無い。
0667デフォルトの名無しさん2010/08/02(月) 22:31:39
なんでそんな喧嘩腰なのか分からんが、STUArrayあたりを使ってC++のをそのまま移植すればいいんじゃね
「配列の要素を次々に書き換えながら処理が進む」ような計算ならそれが一番素直
0668デフォルトの名無しさん2010/08/02(月) 22:54:00
>>664のリンク先がドンピシャで洗練された方法と言ってるわけじゃないよ
「現在の」自分のレベルではモノにできなさそうな、
そういう方法に君がいきなりかぶりつこうとしているように見えたから、
目標レベルを落とそうよと言いたかっただけ

配列じゃなくリストのリストで行列を表現して、
例えば次のリンク先の方法を愚直に Haskell に翻訳してみればいい。
http://www.akita-nct.jp/yamamoto/lecture/2004/5E/linear_equations/text/html/node4.html
で、やってみて何が気に入らないのか、何が汚いのか、言ってみてよ

> 配列の要素を次々に書き換えながら処理が進む
なら、新しいリスト(のリスト)を次々に作ればいい
0669デフォルトの名無しさん2010/08/02(月) 23:18:29
>>662 で反射的に逆行列がプログラムできないのかと訪ね、
>>664 でなぜか肯定されてしまったが、
連立一次方程式を解くだけなら LR 分解だけで十分だったな。

すまんすまん。
0670デフォルトの名無しさん2010/08/03(火) 15:52:08
>>667
> 「配列の要素を次々に書き換えながら処理が進む」ような計算ならそれが一番素直
レスサンクスです。そういう書き方ができるということですね。
喧嘩腰のつもりはないけどそうとれたならすまない。

>>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
マジで思うんだけど、2chは博士号取得者か
それ相当の実績を持っている人以外は書き込めないようにしてほしい。
0672デフォルトの名無しさん2010/08/03(火) 16:40:51
>>671
アメリカ社会みたいにすればいいと思う。
実態を知られることのない支配層と、エリート層と、その他の一般大衆
エリートに上がるには能力が必要
0673デフォルトの名無しさん2010/08/03(火) 16:54:48
真っ先に排除されそうなのが>>671というのは
体当たりで挑んだ皮肉なのだろうか
0674デフォルトの名無しさん2010/08/03(火) 19:28:27
百人の博士の村?を思い出しました。
0675デフォルトの名無しさん2010/08/03(火) 21:01:20
>>671はどうやって自分の質問を書き込むつもりだ
博士課程で超能力は取得できんよ?
0676デフォルトの名無しさん2010/08/03(火) 21:31:42
>>675
どこから超能力の話が出てくるの?
0677デフォルトの名無しさん2010/08/03(火) 22:21:10
Emacs Part 35
http://pc12.2ch.net/test/read.cgi/unix/1277168855/
0678デフォルトの名無しさん2010/08/03(火) 22:23:21
>>676
モサドのくだりから
0679デフォルトの名無しさん2010/08/05(木) 10:03:11
何でhaskell使用する例題って連立方程式だとか、大多数の実務に適用出来ない様な例しかないの?
学生向けオナニー言語?
0680デフォルトの名無しさん2010/08/05(木) 11:07:50
ふつうのHaskellでも読めば?

それとも大多数の実務って要するにCOBOL仕事のこと?
0681デフォルトの名無しさん2010/08/05(木) 11:08:08
あなたにはCOBOLをおすすめします.
0682デフォルトの名無しさん2010/08/05(木) 11:46:42
大多数はJavaを使うから問題ないのでは。
0683デフォルトの名無しさん2010/08/05(木) 12:29:11
Haskellは結局Prologのように”使えないけどおもしろい”言語なんだろうな。
0684デフォルトの名無しさん2010/08/05(木) 12:30:46
なんでそう思うの?
0685デフォルトの名無しさん2010/08/05(木) 12:40:33
>>679
Haskell の例題で連立方程式なんて初めて聞いた
0686デフォルトの名無しさん2010/08/05(木) 12:45:52
>>683
Prologの様にすぐに廃れはしないだろうが、Haskellの重大な欠点は処理速度なんだよなぁ。
それさえ解決できれば次の選択肢として有望なんだがな。
0687デフォルトの名無しさん2010/08/05(木) 12:47:20
きめえwwwwwwwwwwwwwwwなにこのクソスレwwww
Haskellやっていみあるの?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:28
ゴミPHP厨より許されない存在だよ君たちはwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0689デフォルトの名無しさん2010/08/05(木) 12:48:47
なんだ、Haskellに一般ピーナッツの人気を奪われたるび厨の遠吠えか。
0690デフォルトの名無しさん2010/08/05(木) 12:50:51
Perlに勝てないくそ言語wwwwwwwww

クソHaskell「それぞれ人により、クソとかどうかは一概には言えない ってことでお前がクソ」
wwwwwwwwwwwwwwwww
wwwwwwwww
おめえがくそだよごみwwwwww
>>689
てめえみたいなゴミはhaskelやってろよwwwwwwwwwしねよごみ
今すぐ市んでくれない?うざいんだよ
0691デフォルトの名無しさん2010/08/05(木) 12:52:04
Haskellばっかやって目ん玉いかれたのかな?^^;
もうメガネどもに書くね^^;







ゴ ミ P H P 厨 よ り 許 さ れ な い 存 在 だ よ 君 た ち は(苦笑)
0692デフォルトの名無しさん2010/08/05(木) 12:56:16
>>679,687,688
はいはいわろすわろす

実務の大多数はゴミみたいなもんだろ
0693デフォルトの名無しさん2010/08/05(木) 12:58:27
このレベルの気違いがスレに現れるとは、ようやくHaskellも有名になってきたんだな
0694デフォルトの名無しさん2010/08/05(木) 12:58:41
っていうけど自分はHaskell使った事無いんですよどんな感じなんですかね?
Perlよりごみなのは確実ですか楽しいですか?(笑)

あとHaskellの本をブログなどに自慢げに載せてるバカいますがどんな心情なんですかね(笑)

将来の夢はゴミ研究者ですか そうですか アンケートありがとうございました^^;(苦笑)
0695デフォルトの名無しさん2010/08/05(木) 13:04:29
私「Haskellをやってる理由はなんですか?」

バカ「け、けけけけ、研究でつかうんででです」

私「はいそうですか(苦笑) Haskellを使ってなんか作った事はありますか?」

バカ「あ、あはい まままだないです 方程式のプログラムつくってます 卒論はhaskellでゲームです」

私「ゲームなら他の言語があるんですが 何故haskell?」

バカ「ゆゆゆゆ有名な人がブ、ブブブ、 はぁはぁ・・・ちょっと待ってください」

私「はい^^;」

バカ「ゆ、ゆ、有名な人がブログで使っていて あ、、あ、あとHaskellって名前がHacker(ハッカー)みたいだからかっこいいからは、はは、じめました」

私「鼻息あらいですよ?大丈夫ですか?」

バカ「ふんがーふんがー 初音ミクちゃんさいこう! ブログの自己紹介や壁紙では ケイオンとかつかってます」

私「そんなこと聞いてないんですが^^;」

私「これでアルファギークの質問は終わりです ありがとうございました^^;(苦笑)

バカ「フンガッ!はぁはぁ は、はははい! ありがとうごじました」

私「キモッ・・・」
0696デフォルトの名無しさん2010/08/05(木) 13:46:29
ハカセ様もいろいろだな
暑い日が続いているから大変なんだろうな
0697デフォルトの名無しさん2010/08/05(木) 14:06:16
Part12まで来て初の出来事かもしれない
0698デフォルトの名無しさん2010/08/05(木) 14:09:09
関数型プログラミング言語Haskell Part12
http://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
>>698
博士号もっててそんなうれしい?wwwwwwwwwwww
俺はノーベル賞もってるけどなwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

低レベルすぎるよ君
0700デフォルトの名無しさん2010/08/05(木) 15:26:14
2chをアカウント制にして申請時に身分証明と審査を行えばいいんじゃね。
そうすれば>>699みたいなカスはレスできなくなってキレイな2chの出来上がり。
07017002010/08/05(木) 15:45:22
2chをアカウント制にして申請時に身分証明と審査を行えばいいんじゃね。
そうすれば>>700みたいなカスはレスできなくなってキレイな2chの出来上がり。
0702PHPヲタ2010/08/05(木) 15:49:23
関数型プログラミングをやってるバカの例

1、手続き型言語しかやったことないやつは 一度でもいいから関数型言語やってみろよ

wwwwwwwwwwwwwwwwwバカ発症しちゃってるwwwwwww

職場にhaskellやってるばかがいるよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
たいしてプログラミングできねえのにブログにつづってて難しいことやってる自分がかっこいいとおもってるやつwwwwwwwww
0703デフォルトの名無しさん2010/08/05(木) 15:51:02
重要なのは主観ではなく成果だな
0704デフォルトの名無しさん2010/08/05(木) 15:52:05
そんなに暑いかなあー
0705PHPヲタ2010/08/05(木) 16:04:30
職場のhaskellやってるバカ「Haskellの本もってる人はできるとおもうな(笑)」

痛々しい発言だよねwwwwwwwwwwwwブログにも書いちゃってwwwwwwww

Haskellの白い本持ち歩いてる割に
クソだし、あんまり役に立ってない 下手の横好き
まじしんでいいとおもうよwwww
0706デフォルトの名無しさん2010/08/05(木) 16:08:31
>>671
2chから博士号取得者かそれ相当の実績を持っている人以外を追い出すより
博士号取得者かそれ相当の実績を持っている人だけのBBSを作った方が早いだろボケ
0707デフォルトの名無しさん2010/08/05(木) 16:24:24
    _, ._
  ( ・ω・) んも〜
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)wvwwWWwvwwWwwvwwwwWWWwwWw
wWWWWWWwwwwWwwvwWWwWwwvwWWW

wvwwWWwWWWwvWwwwwWWwWWWwWWWWwWWWWWwWWWWWWwWWWWWWWwWwwwwwwwwwwwwWWWWwWWWWWWWwWWWW
WWWWWWWWWWwWWWWWWWWWWWwwWWWWWWWWWWwwWWWWWWWWWWWWwWWWWWWWWWWwwWWWWWWWWWWwwwwwwWWW
WWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWwwWWWWWW
WWWWWWWWWWWwwwwwWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWW
WWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwWWwwwwwwwWWWwwwwwwwWWWWwWWWWWwwwwwwww
WWWWWWwwwwwwwwwwwwwwwwWWWWWWWwwwwwwwwwwwwwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwWWWWWWWWWwwwwWWWWWWWWWWwwwwwwwwwwwWWWWWWWWWWWwwwwwwwWWWWWWWWWWWWwww
wwwwwwwwwwwwwwwWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwww
0708デフォルトの名無しさん2010/08/05(木) 16:42:21
>>706
Haskellで掲示板でもつくるか
0709デフォルトの名無しさん2010/08/05(木) 18:10:21
>>686
もちろん適用領域にもよるんだろうけど
そんなに重大な問題かなあ?
0710デフォルトの名無しさん2010/08/05(木) 18:18:54
>>709
重大だよ。
C10Kパッケージはもっと最適化する余地はあるけど、
Haskellがもっと早ければもっと高パフォーマンスのWEBサーバを作れるよ。
0711デフォルトの名無しさん2010/08/05(木) 18:33:42
Haskell の遅さは何が原因?
0712デフォルトの名無しさん2010/08/05(木) 18:41:29
遅延評価のために、IntやCharみたいな小さい値までポインタ経由で持つこと
でかいレコードの一部のみ更新したいときに全体を再構築せざるを得ないこと
デフォルトの文字列型がCharのリストであること
0713デフォルトの名無しさん2010/08/05(木) 18:48:41
ポインタ経由っていうかクロージャ参照かな。
突き詰めたらポインタなんだけどねw
rubyとかで遅延評価を実装してみたらわかると思うけど。
0714デフォルトの名無しさん2010/08/05(木) 18:59:01
http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/HaskellExecution/PointerTagging

今のGHCはcase式で値を調べるとき、盲目的にクロージャを呼ばずに、
まずタグを調べて評価済みの場合は値を直接取り出すようになってる
たぶん行き先の決まってないジャンプのオーバーヘッドを嫌った実装だと思う
0715デフォルトの名無しさん2010/08/05(木) 19:09:27
もしHaskellが高速だったら・・っていうケースはいっぱいあるよ。
もしHaskellが高速だったらHaskellによるPerl6の実装Pugsがデファクトスタンダードになったかもしれない。
0716デフォルトの名無しさん2010/08/05(木) 19:54:23
マジレスは禁止ですw
0717デフォルトの名無しさん2010/08/05(木) 21:27:58
>>712
>でかいレコードの一部のみ更新したいときに全体を再構築せざるを得ないこと

レコードのフィールドは全部ポインタになってて、
一部を更新するとレコードのガワは新たに作られるけど、
変更されていないフィールドは前のレコードが指していたのと同じモノを指し、
変更されたフィールドだけ新たに作られてそこを指すようになってると思ってた。

巨大なレコードに色んな値を詰め込んで、
グローバル変数の様にころころ更新させて使うのは危険なのか。
勉強になった。
0718デフォルトの名無しさん2010/08/05(木) 21:48:59
>>717
>レコードのフィールドは全部ポインタになってて、
>一部を更新するとレコードのガワは新たに作られるけど、
>変更されていないフィールドは前のレコードが指していたのと同じモノを指し、
>変更されたフィールドだけ新たに作られてそこを指すようになってると思ってた。
いや、それで合ってる
>>712で言ったのは、一番外側のレコードを作り直すだけでもオーバーヘッドが無視できないってこと
フィールドが沢山あればそれだけ時間が掛かるし、メモリ確保も伴うからGCのコストにも寄与する
C言語なんかで x.a->b->c += 2; とかやるのと比べれば凄く重い処理
0719デフォルトの名無しさん2010/08/05(木) 22:18:51
おいこらもっと荒せよ
Haksellスレがこんな流れになるのなんて最初で最期かもしれないんだから
0720デフォルトの名無しさん2010/08/05(木) 22:37:33
http://en.wikipedia.org/wiki/Douglas_Prasher
0721デフォルトの名無しさん2010/08/06(金) 00:38:20
効率もそうだが、書くのが面倒。
Cだと
s.f.g++;
ですむ処理が
s { f = f s { g = g (f s) + 1 } }
になる。
0722デフォルトの名無しさん2010/08/06(金) 05:57:03
Data.Accessorを使って
f^.g ^: (+1) $ s
とか書けるけどそれでも効率はどうしようもない…

0723デフォルトの名無しさん2010/08/06(金) 13:38:32
まだ語ってるの?????????????
痛すぎるよwwwwwwwwwwwwwwwwwwwwww本と御前等うんこいかだね!!
カスすぎるよwwwwwwwwwクソすぎてかわいそうwwwwwwww

無駄な努力wwwwwwwwwwwwww
0724PHPヲタ2010/08/06(金) 15:40:13
くそばっかだなwwwwwwwwww
君たち頭良いんだろ?だったら教えてくれないか?
プログラミングおしえてくれwwwwwwwwwwwwwwなあああああ?wwwww
コツとかうんちくとか何でも良いから教えてくれよwwwwwwwwwwwwwwwwwwwww
0725デフォルトの名無しさん2010/08/06(金) 19:06:14
まってたよ、この調子でどんどん頼む
0726デフォルトの名無しさん2010/08/06(金) 19:11:32
ごぜんなど、うんこ烏賊だ?
俺は御前なんて呼ばれるほど立派なやつじゃないぜ。」






うんこイカって何だよ? 臭いの?
0727デフォルトの名無しさん2010/08/06(金) 19:24:05
うんこの調子
0728デフォルトの名無しさん2010/08/08(日) 00:25:37
HackageDB から適当なパッケージを落としてきて
"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:26
>>728
haddokをa:\に置く
0730デフォルトの名無しさん2010/08/08(日) 09:10:46
>>729
Aドライブを新たに作り、haddock.exe をそこに置くという意味ですか?

申し訳ない、言い忘れました。
現在ドライブはC(メイン)とD(光メディア)しかありません。
どこかに haddock の設定ファイルなどがあり、
そこにEドライブへのパスが書かれているのではと思いましたが、
探しても見つかりませんでした。

また、cabal の設定ファイルも開いてみましたが、
haddock そのものの場所に関するパラメータは無かったようです。
0731デフォルトの名無しさん2010/08/08(日) 13:37:22
>>730
subst
0732デフォルトの名無しさん2010/08/08(日) 15:46:04
>>731
すいません、その場しのぎではなく、
意図しない動作の理由を知って解決を図りたいです。
具体的には "E:\Program Files (x86)\..." というパスが
何によって決定されたのかが知りたいです。

その上で、今のところその場しのぎでしか進めないのなら、
それはそれで仕方がありません。
0733デフォルトの名無しさん2010/08/08(日) 16:38:23
cabal haddock --verbose=3とかやってどんな出力がでるか見せて
0734デフォルトの名無しさん2010/08/08(日) 17:53:10
>>733
アップしておきました
http://www.dotup.org/uploda/www.dotup.org1079447.txt.html
0735デフォルトの名無しさん2010/08/10(火) 00:47:10
Haskell に直接は関係ないかも知れんが、
wxHaskell を使ったプログラムを ghc ではコンパイルできるけど、
今のところ ghci 上では実行できないよね。

これって、wxHaskell に必要な stdc++ ライブラリが静的なものしか無く、
ghc は静的ライブラリを埋め込んでコンパイルできるけど、
ghci は動的ライブラリしか使わないようになってるから、
stdc++ ライブラリが無いよと怒られるわけだよね。

これって、stdc++ の動的ライブラリ版を作って解決できないの?
0736デフォルトの名無しさん2010/08/14(土) 23:28:22
reactive ライブラリの integral 関数の挙動が分からない。

integral :: (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:50
>>671に書かれた条件を満たしていますか?
07387362010/08/14(土) 23:34:26
>>736
しまった、書き間違えた。

> 例えば 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で与える時間を細かくたくさんにすると
解析的に求めた定積分に近づくかな。
07407362010/08/15(日) 01:05:47
>>739
なるほど、短冊の面積を足してるのか。
たしかに atTimes [0.0, 0.5 ..] にすると 4 秒目は 7 になって、
解析的に求めた定積分に近く。

その計算であってると思う。
ありがと、納得した。

でも、イベントをたった 0.25 秒刻みに設定するだけで処理が重くなり、
時間通りにイベントを捌けず渋滞を起こすようだ。
実用には耐えられん、何だろこの機能。
0741デフォルトの名無しさん2010/08/16(月) 22:56:59
GLUT を試してるんだけど、
forkIO で分けた別スレッドから postRedisplay を呼ぶと、
何故かウィンドウ上をマウスが動いている間しか再描画されない。
(再描画 = displayCallback に設定した関数を呼ぶ)

普通に同じスレッドの、たとえば idleCallback に設定した関数内で呼べば、
ちゃんとそのタイミングで再描画される。

こういうもの?

実際にやりたいことは、yampa を使って計算した値を元に OpenGL で描画すること。
たとえば GLUT を使うと GLUT の mainLoop も、yampa の reactimate も、
どちらも制御が戻ってこないから、どちらかをサブ スレッドにしないといけない。
今は reactimate の第3引数に渡した関数内で postRedisplay を呼んでる。

どうすればいい?
07427412010/08/17(火) 00:25:50
>>741
問題が解決した。

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
[[a,b,c]| a<-[1..10], b<-[3..15], c<-[10..20]]

上記は3つの集合の場合ですが
不定個の集合で同様の事をする関数はどう書けば良いですか?
0744デフォルトの名無しさん2010/08/18(水) 16:40:37
すいませんググったらありました
ごめんなさい
0745デフォルトの名無しさん2010/08/18(水) 21:54:34
GLFW を使おうとしたら、openWindow 関数の第1引数でエラーが出ました。

次のがエラーが出る最小限のコードです。

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:07
Haskell の OpenGL には glPushMatrix と glPopMatrix に対応する関数はないの?
0747デフォルトの名無しさん2010/08/19(木) 10:38:23
ghciで,メモリ使いまくるので関数の評価を強制終了させたんですが
メモリ使用量は減りません。
強制カベッジコレクションはできますか?
0748デフォルトの名無しさん2010/08/19(木) 11:14:06
強制GCはSystem.Mem.performGCでできるけど、ghciのメモリ消費自体は減らないはず
http://hackage.haskell.org/trac/ghc/ticket/698
0749デフォルトの名無しさん2010/08/19(木) 19:19:04
>>748
Thank you anyway.
0750デフォルトの名無しさん2010/08/20(金) 02:24:14
>>746
これ
  preservingMatrix :: IO a -> IO a
渡したIO aの前後でpopとpushを自動的にやってくれる
  preservingMatrix $ do
    loadIdentity
    ....
みたいに使う
0751デフォルトの名無しさん2010/08/20(金) 07:40:46
>>750
そいつか、ありがと

今まで Graphics.Rendering.OpenGL.Raw から
glPushMatrix と glPopMatrix をわざわざインポートしてた
0752デフォルトの名無しさん2010/08/20(金) 07:41:29
状態変更関数の固まりのせいで返って読みにくくなっちゃうのか>>OpenGLをHaskellで使う
0753デフォルトの名無しさん2010/08/20(金) 12:37:49
>>752
状態変更関数による読み難さはそれほどでもない

それよりも 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
「やさしい Haskell 入門」や「本物のプログラマは...」 などで紹介されている
遅延パターンの説明で
-- ファイル: 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
>>755
式の評価が無限ループに陥ったことを検出してる
(技術的には、あるサンクの評価中にそのサンクの値が必要になったらNonTermination例外を投げる)
ある意味お節介機能だし、完全にやるのは無理なので、働かなくても文句は言えない
ghciで働かないのは何故だろう、俺は知らない
0757デフォルトの名無しさん2010/08/23(月) 09:01:31
>>756
ありがとうございます。
>あるサンクの評価中にそのサンクの値が必要になったらNonTermination例外を投げる)
サンク reqs の評価中に、client をサンク respsに適用しようとして
resps の評価に、server をサンク reqs に適用しようとして、
ループを検出する。ということですね
0758Perl忍者 ◆M5ZWRnXOj6 2010/08/24(火) 17:15:52
自称博士+研究者の集い(笑)
0759デフォルトの名無しさん2010/08/24(火) 20:38:38
Perl忍者()
0760デフォルトの名無しさん2010/08/24(火) 20:59:27
スルーできてない男の人って…
0761デフォルトの名無しさん2010/08/24(火) 21:04:04
スルーしたら俺の常駐スレにやってきちゃうだろ!
0762デフォルトの名無しさん2010/08/24(火) 21:08:29
どこよ
0763デフォルトの名無しさん2010/08/27(金) 11:41:21
このリスト内包表現中のlet式ってどう考えたらいいの?
let式が二つ連続してるし、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:57
ふつうのlet式とは関係ないと考える
0765デフォルトの名無しさん2010/08/27(金) 12:33:25
do式の「let文」と同じようなもの

do
  y <- [1..99]
  z <- [y..99]
  let x = y * z
  let s = show x
  guard (s == reverse s)
  return x
07667632010/08/29(日) 12:30:17
> 765
あぁ、なるほどね!
リスト内包表現中は特殊なのね。
ありがとう!
0767デフォルトの名無しさん2010/09/07(火) 13:13:53
モナドパーサの非モナドパーサに対するメリットって何ですか?
Cleanで申し訳ないけど
ttp://sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part2/Chap5.html#sc2
5.11にモナドの概念を使用することによって、組の構成と破壊を回避できると書いてあります
もしかして、これは、構文木を作る際に
バックトラックしてそこで作成した解析木が破棄されるのを
回避出来るというような意味でしょうか?
0768デフォルトの名無しさん2010/09/07(火) 14:21:35
>>767
「回避できる」というのは「記述を回避できる」という意味であって発生しないという意味ではないと思う。
雑多で定型的な操作をモナドに押し込めてしまえば、見かけ上は構文をそのまま書き下せるので綺麗だねっていう話。
0769デフォルトの名無しさん2010/09/08(水) 21:09:54
IOモナド以外はsyntax sugarと思っておけば間違いない
0770デフォルトの名無しさん2010/09/08(水) 23:37:20
まあそうだな。
Haskell に限らず、大抵の言語は処理の単位をどう抽象化するかに注意を払って設計している。
例えば C なんかで極論すればループ構文は goto と if の組み合わせの構文糖衣だと言えるけど、
「分岐とジャンプ」で考えるのと「ループ」という概念で考えるのとではまるきり違うってのはわかると思う。

モナドも何だかんだの処理を纏めたもの、関数の束でしかなくて無くて、モナドが無ければ無いなりに使えるとは思うよ。
でも、「モナドという考え方」を導入したことでわかりやすくなる部分がある。
利点を短くまとめるのは難しいな。
強いてまとめるなら Haskell ではモナドを使うと簡潔に書けるケースが実際に多いってことだな。
0771デフォルトの名無しさん2010/09/09(木) 10:45:06
>>770
「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:01
Haskellは規格制定時点における関数型言語の最新研究成果をまとめた言語であり、
ZF記法のような構文糖や遅延評価前提は、できる限り数学の記法(いわゆる数式)に
近い表現を持ち込んだ言語設計のように見える

だから、数学者(あるいは数式表現に慣れた人)なら直感的に理解しやすいけど、
数式(数学的思考法)に不慣れな一般のプログラマには理解しづらいのでは?

などと、数学が苦手だたけど現在Haskellと格闘中の初心者が言ってみる
0775デフォルトの名無しさん2010/09/09(木) 20:54:30
タプルのおかげで逆に数学の直積の意味を知った僕がいる。
直積=「安直に積んだもの」って標語を自分で作って覚えた。
0776デフォルトの名無しさん2010/09/09(木) 20:59:51
双対性ってのが結構面白いと思った。
0777デフォルトの名無しさん2010/09/11(土) 22:15:51
GHC の次期リリース
haskell 2010 に準拠して、
version 7.0とかになるんかな

0778デフォルトの名無しさん2010/09/12(日) 02:16:46
完全オブジェクト指向脳のHaskell入門者です。

IOモナド等の一方向モナド(普通の値を取り出せないモナド?)は
例えばIOの場合、IOという型コンストラクタがないので、パターンマッチでIO x = ...
のようにかけないために、普通の値を取り出せないってことでいいのでしょうか?

もし合ってるならやっと眠れる...。
0779デフォルトの名無しさん2010/09/12(日) 02:24:12
IOが型コンストラクタ
ないのはデータコンストラクタ
07807782010/09/12(日) 02:26:44
データコンストラクタでしたorz
ですが少しわかりました。Haskellおもしろいですね。
07817782010/09/12(日) 02:29:55
あれれ、すみません。また疑問が。。。

では、IOモナドのreturnはどうやってIOを作り出しているのでしょうか?
処理系に隠蔽されている?
0782デフォルトの名無しさん2010/09/12(日) 02:42:16
>>781
モナドをどのように扱っているかは処理系によるが、
mainの返り値がIOモナドになっている以外は、IOモナドも普通のモナドと何ら変わらない。
3つのモナド則に従う普通のモナドだよ。
0783デフォルトの名無しさん2010/09/12(日) 02:48:53
まずプログラムが起動すると、いきなりmainがIOモナドを返し、その実行が開始される。
実行が開始されると中身が評価されるってわけ。
それが遅延評価。
0784デフォルトの名無しさん2010/09/12(日) 02:50:05
えっとIOがMonad型クラスのインスタンスである以上、
return :: a -> IO aが実装されていると思うのですが、IO aを作り出すデータコンストラクタ
がないので、どうやってreturnが定義されているのかわからないのです。
07857782010/09/12(日) 02:50:51
↑778です。
0786デフォルトの名無しさん2010/09/12(日) 02:56:28
>>784
IOのreturnはプリミティブだと思うよ。
実装によって違うだろうけど。
07877782010/09/12(日) 02:59:20
>>786
おお、わかりました。ありがとうございました。
0788デフォルトの名無しさん2010/09/16(木) 01:58:16
windows版はデフォルトでparsecは入ってないんでしょうか
ググってわかったのは
 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
ttp://darcs.haskell.org/download/docs/6.12.3/html/libraries/index.html
最新版にparsecはないのですね
かわりにText.ParserCombinators.ReadPとかいうのがあるけど、これは別物?
0790デフォルトの名無しさん2010/09/16(木) 02:39:57
The Haskell Platform 2010.2.0.0 ( http://hackage.haskell.org/platform/ )だと
extralibsに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:03
サンプル動いた!深夜にありがとうございました
0793デフォルトの名無しさん2010/09/16(木) 21:50:34
Haskell のクロスプラットフォーム開発を行いたいです。

Windows 上の GHC で Haskell ソースをコンパイルして
Linux(CentOS 5.5)用の実行ファイルを作成する方法はありますか?

具体的にやりたいことは、Haskell で CGI を作ることです。
0794デフォルトの名無しさん2010/09/16(木) 21:54:25
インタープリターでええんちゃうん?
0795デフォルトの名無しさん2010/09/16(木) 21:58:10
LinuxでSamba動かしてファイル共有でWindowsから見えるようにして、
Windowsのエディタで編集。TeraTermか何かでリモートログインして
Linuxでコンパイル、じゃダメなの?
0796デフォルトの名無しさん2010/09/16(木) 22:07:23
そもそもLinuxにGHCが入ってない&入れられないってことなんじゃないの?
GHCでクロスコンパイルとかできないと思うから、
virtualboxとかで仮想PCにLiunx&GHC環境作ってコンパイルするのが良いと思う。
0797デフォルトの名無しさん2010/09/16(木) 22:09:43
ghcはバックエンドでgccを動かせるから,そこをクロス用の設定にすればよいかと
0798デフォルトの名無しさん2010/09/16(木) 22:28:18
GHCの吐くGCC用コードが素直にクロスコンパイラなGCCを通ってくれそうにはとても思えない。

やってみたわけではないのでサクッとできるかもしれないけど。
0799デフォルトの名無しさん2010/09/17(金) 09:29:44
GHCに(それなりに)ポータブルなCを吐かせるにはunregisterizedなGHCを用意しないといけない
すごく面倒だと思う

たぶん>>795-796が最短ルート
08007932010/09/17(金) 19:15:21
みなさん、ありがとうございます。

サーバー側で Haskell ソースをコンパイルして CGI として公開することは成功しました。

クライアント側を Linux にして、
そこでコンパイルしたモノをサーバーにアップしてCGI として公開することも成功しました。

クライアント側を Windows にして、
そこでコンパイルしたものでやってみたいのですが、
どうも「できなくはないだろうが、そうとう面倒」みたいですね。

でも、いくつかヒントを戴けたので挑戦してみます。
08017932010/09/17(金) 19:56:50
>>794
すいません、言い忘れてました。

インタープリタ形式でも CGI として動くことを確認できました。
処理速度を求めなければ、これが一番簡単ですね。
0802デフォルトの名無しさん2010/09/18(土) 03:34:56
全部10以上かしらべるのに
all ((<=)10) [10,20,30] よりは
all (flip (>=) 10) [10,20,30] が直感的だけど
all (`>=` 10) [10,20,30] こうできれば良いのに
0803デフォルトの名無しさん2010/09/18(土) 03:48:18
all (>= 10) [10,20,30]
0804デフォルトの名無しさん2010/09/18(土) 03:49:16
>>802
落ち着け。
0805デフォルトの名無しさん2010/09/18(土) 13:25:31
all (10 <=) [10, 20, 30] の方がより直感的に感じるが
0806デフォルトの名無しさん2010/09/18(土) 13:39:04
>>805
対称的になってて見栄えがいいとは思う

さらに
(10 <=) `all` [10,20,30]
とかやると逆に`all`の存在で対称が崩れてるような感じになって見栄えが悪く感じる
直感って本当にわがままだな、わがままな俺にそっくりだ
0807デフォルトの名無しさん2010/09/18(土) 20:49:51
GHCi で
take 3 (reverse [1..1000000])
はちゃんと結果を返すけど
take 3 (reverse [1..1000000000])
を実行すると死んでしまうのは何故ですか?
0808デフォルトの名無しさん2010/09/18(土) 21:18:59
reverseするにはリストを最後までたどる必要があるため、
ヒープにリストが入りきらなくて死ぬ。
0809デフォルトの名無しさん2010/09/18(土) 21:25:48
64bit環境ならいけそうだな
0810デフォルトの名無しさん2010/09/18(土) 21:26:35
>リストを最後までたどる必要があるため
それは何故?
遅延評価するなら、take 3 が必要な3つだけ要素を生成すればいい、
ってわけじゃないの?

それとも遅延評価させるには何か指令が必要だったり、
または Haskell は遅延評価をサポートしてないの?
0811デフォルトの名無しさん2010/09/18(土) 21:28:23
>>809
ちなみにOSは Win7 x64
0812デフォルトの名無しさん2010/09/18(土) 21:31:13
>>810
だって、双方向リストじゃないんだから一番後ろの3つを手に入れるためには
前から順番にたどっていかなきゃいけないでしょ?
0813デフォルトの名無しさん2010/09/18(土) 22:01:10
>>810
自分でreverseを書いてみればわかるよ
0814デフォルトの名無しさん2010/09/18(土) 22:01:54
うーむ、[1..1000000000] は単方向リストだったのか
でもそれって実装上の問題じゃないの?

0815デフォルトの名無しさん2010/09/18(土) 22:02:58
>>813
なるほど
0816デフォルトの名無しさん2010/09/18(土) 23:18:20
>>814
しかし双方向リストって凄いメモリ食うぞ
ただでさえHaskellはメモリ食いって言われてるのに・・・
0817デフォルトの名無しさん2010/09/18(土) 23:24:02
[1..1000000000]がどう言う構造かって仕様で決まってるんだと思ってた。
0818デフォルトの名無しさん2010/09/18(土) 23:28:17
GHC の Linux (X86) 版を使ってみたいのだけど、
2つあるファイルのうち、どちらを選べばいいのか分からない。

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:39
というか関数型言語ならリテラルが用意されてるリストっぽいのは大抵単方向リストじゃない?
0820デフォルトの名無しさん2010/09/18(土) 23:38:26
>>819
実装では真面目な単方向リストとしては実装されていないよ。
GHCではlst!1もlst!100もかかる時間は同じだったような気がする。
別の実装ではまた違う結果が出るかも。
0821デフォルトの名無しさん2010/09/18(土) 23:45:35
100くらいじゃね。
0822デフォルトの名無しさん2010/09/19(日) 06:19:31
diffList xs [] = xs
diffLIst [] 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:02
いやHaskellのリストは真面目な単方向リストだよ
data List a = Nil | Cons a (List a)
と同じ構造

>>823のようなことをやりたければ、リストじゃない別のデータ構造が必要
0825デフォルトの名無しさん2010/09/19(日) 11:25:02
>>823
> [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
>>825
>双方向リストはメモリの関係で嫌がられるしなぁ・・・

そんなあなたにマジックリスト
(多少アクセス速度が犠牲になるけどね。)
0830デフォルトの名無しさん2010/09/19(日) 12:06:43
>>825
> それって双方向リストかもしくは配列にしないとできないのでは。
> 双方向リストはメモリの関係で嫌がられるしなぁ・・・

いや、だから引数を評価(生成)せずイテレータを生成すればいいじゃん。
オブジェクトの生成は必要になるときまで遅延するのが関数型言語ってもんじゃないの?
0831デフォルトの名無しさん2010/09/19(日) 12:08:08
> 826
関数型言語を使う人がメモリアクセスの仕方を気にするのは変だよね。

言語を実装する人が気にする話。
0832デフォルトの名無しさん2010/09/19(日) 12:09:20
>>830
825じゃないけど、イテレータを生成するのはいいが、
実際には末尾の要素までどうやって到達するの?
0833デフォルトの名無しさん2010/09/19(日) 12:11:45
>>830
ちょっと誤解してると思う
「Haskellが計算を必要なときまで遅延する」ってのは、単にcall by needを採用しているという意味であって、
なにかすごく賢い方法で不要な計算を省いてる訳じゃない
そしてcall by needでreverseを計算すると、リストの最後まで辿るのは避けられない

もう一つ、関数型言語だからといって遅延評価とは限らないよ
0834デフォルトの名無しさん2010/09/19(日) 12:37:16
>>830
言いだしっぺの法則
〜すればいいじゃんって言ったやつが自己責任で〜すればいい
0835デフォルトの名無しさん2010/09/19(日) 12:54:07
>>832
take 3 (reverse [1..1000000000]) の場合であれば、
(最初の要素から)末尾の要素まで到達する必要は無いだろ

末尾の要素から前に向かって3つの要素を生成するだけ
take 3 (reverse [1..1000000000])
take 3 [1000000000..1]
[1000000000, 999999999, 999999998]
0836デフォルトの名無しさん2010/09/19(日) 13:12:40
[x..y]はenumFromTo x yで
[..a,b..]のときbはsucc aで定義されるんで
末尾の要素が必要になった時点でsucc.succ....というのが作られるから無理
succのかわりにpredを使うenumToFromとかあればそういうのもできるけど
reverseによりenumFromToと切り替えるみたいな機構が必要になるからもはや普通のリストとはいえない代物になる
0837デフォルトの名無しさん2010/09/19(日) 13:14:23
>>830
イテレータを生成できるかどうかはコンパイラに判断させる気?
それとも、プログラマが指示するの?
このリストはこのようにしてイテレータで表現できるぞ、とか。

後者なら、そういう型クラスとインスタンスを作るのと何ら変わらないよ。

前者なら、コンパイラはどうやってイテレータを作るわけ?
たとえば100万個の要素のフィボナッチ数列の後ろ3つ欲しい場合、
コンパイラはどうするの?
0838デフォルトの名無しさん2010/09/19(日) 13:17:05
> reverseによりenumFromToと切り替えるみたいな機構が必要になるからもはや普通のリストとはいえない代物になる
普通のリストでないとダメなの?
0839デフォルトの名無しさん2010/09/19(日) 13:21:44
>837
イテレータは常に生成されるが、それが指す要素が実際に生成されるのは
要素が参照された場合のみ。

> たとえば100万個の要素のフィボナッチ数列の後ろ3つ欲しい場合、
> コンパイラはどうするの?
この場合は前から順にイテレータの要素が参照されるので、順に値が生成される
0840デフォルトの名無しさん2010/09/19(日) 13:25:42
>>839
ちょっと待て、それなら [1..100] だって
結局前から順にイテレータの要素が参照されなければ
後ろ3つは計算できないだろ。

[1..100] は要するに [n1=1, n2=n1+1, n3=n2+1, ...] ではないのか?
0841デフォルトの名無しさん2010/09/19(日) 13:27:52
>>839
お前のいうようなイテレータ方式は可能だけど、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:46
>>838
Haskellは無限リストと有限リストを区別しないのが自慢だった
後ろの要素を取れるのは有限リストに限定されるからダメ
0844デフォルトの名無しさん2010/09/19(日) 22:45:46
data NR s e = Succ s e | Pred s e
tolist (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はよく解らないのですが、これでどうですか?
08458442010/09/19(日) 23:04:43
間違い。
take_ 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
>>844
どうですかと言われても、そのコードを提示した目的が分からん。

何が言いたいんだい?
0847デフォルトの名無しさん2010/09/19(日) 23:59:36
旧来の言語では、ふつうのリストと遅延リストが区別され、
両方に対応するためほとんど同じような関数を二度も書かされるという、
おかしな事態に陥っていました。
そこで、ふつうのリストと遅延リストを区別しない言語が開発されました。

ある日、reverseが非効率なことに不満を持ったプログラマーが
効率的にreverseできるリストを発明し、普通のリストと区別することにしました。
0848デフォルトの名無しさん2010/09/20(月) 00:05:42
>ある日、reverseが非効率なことに不満を持ったプログラマーが

正しい選択だね。現実世界のプログラミングでは、効率は重要な要素だから。
同様に、現実世界は入出力や状態遷移に代表される副作用に満ちあふれている。
それをモナドやアローといった回りくどいやりかたでしか表現できないとしたら、
それは「おかしな事態に陥っている」と言えるだろう。
0849デフォルトの名無しさん2010/09/20(月) 02:28:42
モナドは副作用の解決のためだけじゃないぞ
確かに、それがうまく解決されているとは言い難いが
0850デフォルトの名無しさん2010/09/20(月) 02:48:51
>モナドは副作用の解決のためだけじゃないぞ

そんなことは分かっている。

もし「旧来の言語のおかしな事態を解決する為に(Haskellが)開発された」のだとしたら、
旧来の言語では自然に表現できた副作用を不自然な形式でしか表現できない
言語設計を決定した研究者達は、お馬鹿さんだらけだったのね、ということになる。

それは(本人は気付いていないけど)>>847のHaskellに対する無知と研究者達への侮辱であり、
だから>>847の詭弁に対して詭弁で混ぜ返した(反論した)わけ。分かるかな?
0851デフォルトの名無しさん2010/09/20(月) 02:56:21
なるほどわからん。
0852デフォルトの名無しさん2010/09/20(月) 03:37:43
value constructorや値コンストラクタって用語をたまに見るけど
仕様書にはないんだね
real world haskellを見て混乱した
0853デフォルトの名無しさん2010/09/20(月) 08:24:11
いや>>847が言ってることは正しいだろ
旧来の言語のおかしな事態を解決しようとしないなら、新しい言語を作る価値なんてない

IOについては、旧来の言語よりもHaskell方式の方が自然に扱えてると思うけどな
0854デフォルトの名無しさん2010/09/20(月) 13:16:17
>>853
> 旧来の言語のおかしな事態を解決しようとしないなら、新しい言語を作る価値なんてない

これがくせ者で、「おかしい、扱いにくい、直感的じゃない」
と感じるかどうか、感じる度合いは人によって千差万別。

ある人がそういう目的で新言語を開発してコミュニティができてきても、
それに共感できない人たちも大勢いる。
08558532010/09/20(月) 16:55:32
>>854
俺もそう思うが、何か変なこと言ってるか?
0856デフォルトの名無しさん2010/09/20(月) 22:44:41
コードを提示した目的が分からん

Haskell標準のリストは汎用性が低かったから別のを作ったって事だろ

汎用性を高める事(だけ)が目的だったのではないから、汎用性を批判するのは詭弁だ

という流れですか

汎用性は、かなり微妙な高さだと俺は思います
もし十分に高かったら、言語の取っつきにくさとか多少の犠牲を払っても使う価値があるのが明白だったわけですが、そこまで高くはない
けど低いというわけでもない
0857デフォルトの名無しさん2010/09/20(月) 23:33:11
>>856
コードを提示した目的が分からんと発言したのは私だが、
その後のレスとは全く繋がってないんじゃないかな。

私には >>844 があのコードを提示した理由が本当に分からん。
どうですかと言うからには、本人にとっては前レスまでに提示された問題を
少しでも解決の方向へ導けると思ってコードを提示したのだろう。

しかし、前スレまでの何の問題に対する解なのか・・・
0858デフォルトの名無しさん2010/09/20(月) 23:58:12
>>857
「本当に分からん」のに、なんで「全く繋がってない」って確信してるの?
自分に都合の良いことだけ信じてるの?
0859デフォルトの名無しさん2010/09/21(火) 00:22:04
>>858
確信してたら理由を説明して断定してる
確信できないから「じゃないかな」と曖昧な表現にした
0860デフォルトの名無しさん2010/09/21(火) 00:27:37
data Ni e = Infinity | Limit e
data 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
>>859
そうですか
でも「全く」は断定的な表現ですよ
0862デフォルトの名無しさん2010/09/21(火) 00:32:00
何の問題を解決したのか、一言添えていただけないでしょうか
ちゃんと理解したいです
0863デフォルトの名無しさん2010/09/21(火) 00:35:20
>>861
少ししか繋がっていないんじゃないかな(曖昧、緩い)
少ししか繋がっていない(断定)

全く繋がっていないんじゃないかな(曖昧、緩い)
全く繋がっていない(断定)
0864デフォルトの名無しさん2010/09/21(火) 09:23:41
>>862
何の問題を解決したかと言われれば、
定数時間かつ定数空間でreverseできるような遅延リスト風データ構造の設計、じゃね
>>828も同じ
0865デフォルトの名無しさん2010/09/21(火) 09:38:05
>>864
そんなの何千人も同じこと考えてでたのが今の結論なんだからねぇ。
0866デフォルトの名無しさん2010/09/21(火) 10:22:03
>>865
今の結論って何?
少なくとも標準ライブラリには入ってないよ
0867デフォルトの名無しさん2010/09/21(火) 11:11:37
>>866
横だが
仕様と実装を分離して、実装のことは思考停止する、みたいな結論かもしれない。
効率とかは実装側の問題だから考えないと。

仕様と実装の話題は
Common LispとかSchemeとかECMAScriptとか色々あるみたいだね。
0868デフォルトの名無しさん2010/09/21(火) 11:36:32
>>866
結論は今のリスト実装だよ。
いろんな構造を考えたけど速度やメモリ容量やいろんな要素を考慮して結局今の実装になった。
0869デフォルトの名無しさん2010/09/21(火) 11:54:46
双方向リストじゃ無限リストを作れないだろ

それに [0..100] みたいな書き方は言語のプリミティブじゃなくてシンタックスシュガーだ、
って認識しないと。
0870デフォルトの名無しさん2010/09/21(火) 11:55:06
>>867
リストの実装は決まってる

>>868
それは今のリスト以外の構造を非難する理由にはならない
リストが万能じゃないからこそ、ArrayやData.Sequenceなんかが必要になる
reverseが高速にできることが必要なら、また別のデータ構造が要る
で、それを提示したのが>>844だろ
0871デフォルトの名無しさん2010/09/21(火) 11:56:39
>>869
その点を誤解してる奴は多分いないから安心してくれ
0872デフォルトの名無しさん2010/09/21(火) 12:11:29
>>870
lazyが万能じゃないからこそ、lazyをデフォにしたらダメだろ?

lazyがデフォの言語は、lazyが万能だと主張し続けないと生きのこれないんだよ
0873デフォルトの名無しさん2010/09/21(火) 12:25:12
僕の胃の中もリバースされそうです
0874デフォルトの名無しさん2010/09/21(火) 12:54:05
>>864
その提示された構造は [a .. b] あるいは [a ..] で表現できるリストに限定されていないか?

もしそうなら、遅延リスト風データ構造という名前はちょっと大げさな気がする。
リストがもつ能力の半分も表現されていないと思う。
0875デフォルトの名無しさん2010/09/21(火) 13:23:22
>>874
>>844の方はそうだね
>>828はもうちょっといろいろできる(配列からの変換とか)
0876デフォルトの名無しさん2010/09/21(火) 15:12:52
単純な整数列に対して`take n (reverse [a..b])'を行うような限られた使い道しか
無いのなら意味ないよね。
これだけなら`take n [b,b-1..a]'とか`[b,b-1..b-n+1]'とでも書けば済む問題だし。

>>844>>860はこれ以外の用法を提示してほしいな。
それとも、これだけでも十分有用だということなのか。
0877デフォルトの名無しさん2010/09/21(火) 17:53:40
はsけっl
0878デフォルトの名無しさん2010/09/21(火) 22:00:38
もういいよコードが読めないならわからなくていいよ。
0879デフォルトの名無しさん2010/09/21(火) 22:11:17
もういいよ論文しか書けないならわからなくていいよ。
0880デフォルトの名無しさん2010/09/21(火) 22:22:43
下流プログラマは帰りたまえ
0881デフォルトの名無しさん2010/09/21(火) 22:27:36
int 0x80ってなんすか?
0882デフォルトの名無しさん2010/09/21(火) 22:27:41
コードレビューをやると、自分で書いたプログラムなのに自分の口では説明できない、
ってのは初級プログラマにありがちなんだよね
きっと彼も(説明しないんじゃなくて)説明できないんだと思う
0883デフォルトの名無しさん2010/09/21(火) 22:28:45
上流と下流を分離して、下流をこきつかう、みたいな
0884デフォルトの名無しさん2010/09/21(火) 22:49:31
中流でいこう
0885デフォルトの名無しさん2010/09/23(木) 12:52:54
別にtake n $ reverse [a..b]って書きたくて、でもエラー出るなら[b..a]に相当する関数を末尾再帰で書けばいいだけ。
全てにおいて完璧なデータ構造なんて無いんだから適切な構造をto/from用の関数と一緒に定義すればいいだけじゃないの?

話の肝を勘違いしてたらすみません。
0886デフォルトの名無しさん2010/09/23(木) 13:23:48
haskell-modeを2.4から2.8にアップデートしたら
:load "/home/my/hoge.hs"
が動かず
:load "c:/cygwin/home/my/hoge.hs"
としなければいけなくなっていた件
emacs lispわからん
0887デフォルトの名無しさん2010/09/23(木) 15:43:32
>>886
haskell-mode のせいか?
cygwin 上で普通にビルドした実行ファイルはファイル操作関連のことをしようとすると cygwin1.dll がパス変換する仕組があり、
あたかも cygwin ディレクトリがルートディレクトリに見えるようになっている。
:load を処理しているのは haskell 処理系の方のはずだから haskell-mode と直接の関係はなさそうに思うんだけど。
0888デフォルトの名無しさん2010/09/23(木) 16:19:28
んー、そうなのかな。2.4に戻したら普通に動くよ
setqで設定してる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:20
最近emacs卒業してnotepad++使ってるよ。
0890デフォルトの名無しさん2010/09/23(木) 18:49:54
それは卒業ではなくて退学ではないのか?
0891デフォルトの名無しさん2010/09/23(木) 18:51:01
物は言いよう
0892デフォルトの名無しさん2010/09/23(木) 19:12:27
いや、HaskellってCとは違ってひたすら打ち込むより考えながら打ち込む事が多いじゃん?
だとしたらHaskellプログラミングに適したエディタはタイピング機能よりも
リーディング機能のほうが重要だと思うんだ。
0893デフォルトの名無しさん2010/09/23(木) 19:19:19
notepad++はhaskellのコードのアウトライン解析とか
ライブラリのドキュメント参照機能とか充実してるの?
0894デフォルトの名無しさん2010/09/23(木) 19:25:57
emacs:キーボードを打つので前かがみ → 腰が痛くなる
notepad++:マウス操作メインで背もたれ → 腰が痛まない
0895デフォルトの名無しさん2010/09/23(木) 19:26:40
>>894
納得
0896デフォルトの名無しさん2010/09/23(木) 19:32:10
実際のところ、アウトライン解析が必要なほど
長く込み入ったコードを書くことってまず無いのではないか?

字下げが強要されるという事も相まって、
適切な空白とコメントと型宣言があれば、
全体の見通しは解析が必要なほど悪くはならないと思う。
0897デフォルトの名無しさん2010/09/23(木) 20:28:06
>>894
俺は逆だなぁ
マウス操作メインの時は前かがみになってキーボード操作メインの時は背もたれ
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
>>897
まっすぐな机使ってる?
俺は真ん中が凹んでて左右が手前に伸びてる形の机を使ってる。
机の形の違いかな。
0901デフォルトの名無しさん2010/09/24(金) 21:41:38
節子それ机ちゃう、便座や!
0902デフォルトの名無しさん2010/09/24(金) 21:46:26
時代の先端を行く純粋関数型言語Haskellのスレで昭和のコントが見られるとは思わなかった
0903デフォルトの名無しさん2010/09/24(金) 23:06:05
20年ぐらい前に生まれた言語じゃなかったっけ?
0904デフォルトの名無しさん2010/09/25(土) 00:42:59
booooooooooooooo!!!!!!
0905デフォルトの名無しさん2010/09/25(土) 09:34:24
仕様のバージョン1.0が1990年だから、ちょうど20年だね
0906デフォルトの名無しさん2010/09/25(土) 19:12:33
モナドって90年代の関数型コミュニティのホットな話題だったらしい。
0907デフォルトの名無しさん2010/09/25(土) 19:37:48
Haskell の歴史が知りたかったらこれがいい

http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/

英語が聞き取れるのなら、同ページにビデオもある
0908デフォルトの名無しさん2010/09/25(土) 22:01:54
>>906
経済学といい世界から遅れるのが日本のデフォだよな
()笑
0909デフォルトの名無しさん2010/09/25(土) 22:20:42
いやいやいまさらなモナド入門は日本に限らず世界中で量産されてる
0910デフォルトの名無しさん2010/09/25(土) 22:24:01
>>908
で、日本のバブル崩壊を笑っていた欧米がどうなっているかというと....。
こいつらには学習能力がないのかって感じですねw
0911デフォルトの名無しさん2010/09/25(土) 23:02:01
党のお偉方 「同志。あの資本主義を掲げる憎きアメリカの情勢を報告したまえ。」
部下 「はい、閣下!もはや崖っぷちに立っている状態であります!」
偉 「では、わがソビエト連邦の情勢はどうなっておるか?」
部 「はい!アメリカより常に一歩先んじております!」
0912デフォルトの名無しさん2010/09/25(土) 23:25:30
いろいろとすごい歯がゆい思いをしてた人がいっぱいいたんだろうねー。
Googleに入れるような人がなんだかんだと最高なんだろうと思ってたけど、
全く別タイプのすごい業界がどっかにありそうな感じがする。
0913デフォルトの名無しさん2010/09/25(土) 23:34:03
asw
0914デフォルトの名無しさん2010/09/26(日) 08:45:44
マイクロソフトリサーチに入るような人の業界?
0915デフォルトの名無しさん2010/09/26(日) 10:14:53
マイクロソフトリサーチといえば、
Parsec も wxHaskell もあそこで生まれたんだな
長くお世話になってたが、最近初めて知った

あそこのサイトで Haskell をキーワードに検索をかけると、
いろいろ興味深い記事や論文が大量に出てくる
0916デフォルトの名無しさん2010/09/26(日) 10:24:21
MSリサーチは、MSに研究内容をタッチできないような約束をさせてんだよね
チューリング賞やらノーベル賞やら取ってる人が一杯いるしMSっぽくない
0917デフォルトの名無しさん2010/09/26(日) 13:11:24
連邦がー
0918デフォルトの名無しさん2010/09/27(月) 00:33:38
インデントとかミスを自動修正してくれる
プラグインしらない?

文法にインデントの制約儲けるってアホだろ
0919デフォルトの名無しさん2010/09/27(月) 01:11:48
あるインデントがあって、その意味論が正しいかミスかという判断は、
プログラマの意図を正確に推論できなければ実現不可能。
今のところ、そんな素晴らしい夢のようなプラグインは存在しないと思われ。

個人的には「インデントによる制約(いわゆるオフサイドルール)」は嫌いなんだよな。
プログラミングスタイルは自由でありたい。C言語風の中括弧 ('{' .. '}') でええやん。
0920デフォルトの名無しさん2010/09/27(月) 01:19:43
>>918,919
オフサイドルール使わなくっても、{}を使って書けるよ。
オレはオフサイドルール使うほうが好きだけど。
0921デフォルトの名無しさん2010/09/27(月) 03:18:45
>>920
マジで知らなかった
0922デフォルトの名無しさん2010/09/27(月) 17:20:12
haskell勉強中なのですが、文字列のリストを改行付で出力したくて
こういうのを書いたけど、putStr ""のあたりがなんか汚い
もっと良い書き方はありますか?

strdump :: [String] -> IO ()
strdump = foldl (\a x -> a >> putStrLn x) (putStr "")
0923デフォルトの名無しさん2010/09/27(月) 17:37:49
>>922
IO () 型で何もしないことを表すのなら return () を使う

strdump = foldl (¥a x -> a >> putStrLn x) (return ())

ただ、この場合なら mapM_ 使ったほうが楽

strdump = mapM_ putStrLn
0924デフォルトの名無しさん2010/09/27(月) 17:39:15
>>922
動作確認してないけど
 strdump = mapM_ putStrLn
でいけんじゃね?
09259242010/09/27(月) 17:39:56
だからリロードしろとあれほど…orz
0926デフォルトの名無しさん2010/09/27(月) 18:02:47
>>923-924
ありがとうございます。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
>>927
俺はこっちの方が好き
0929デフォルトの名無しさん2010/09/27(月) 21:49:54
なんとなくだが >>922 は foldl の初期値を
指定しないですむ方法が知りたいだけのような気がする

strdump = foldl1 (>>) . map putStrLn

ただ、これだと空リストを渡した時にエラーになってしまう
0930デフォルトの名無しさん2010/09/27(月) 21:50:37
データが小さい間は>972がいいね。副作用の切り分けという点で。
mapM_ に最適化してくれたら最高だけど。
0931デフォルトの名無しさん2010/09/27(月) 23:28:33
>>930
map show [1..1000000]
を/dev/nullに書き捨ててみたら
mapM_ putStrLn より putStr . unlines のほうが早かった。
mapM_ に最適化ってどういうことだ?
0932デフォルトの名無しさん2010/09/27(月) 23:37:25
>>931
I/Oを1000k回実行するのとI/Oを1回実行するなら1回の方が早いに決まってる
0933デフォルトの名無しさん2010/09/27(月) 23:39:12
あと、flushも忘れるなよ。
flushしなかったらI/Oが終了するまえにプログラムが終了するぞ。
0934デフォルトの名無しさん2010/09/28(火) 00:55:03
書き出しはrunhaskellや実行ファイルからのリダイレクトで ( > /dev/null)
行ったからか、flushの有無は関係ないみたい。実行時間が変わらない。

haskell内部から書き出すときは注意したほうがいいんだろうな。

IOはまとめたほうが早い、でいいのか?場合による?
0935デフォルトの名無しさん2010/09/28(火) 01:30:58
メモリいじいじよりIOのが遅いからね
0936デフォルトの名無しさん2010/09/28(火) 01:32:11
putStr . unlines だと無限リストはダメなのかと思ったら、ちゃんと表示されるな。
てことは、ある程度の数の文字を評価した後、まとめてシステムコールを呼び出しているんだろうから、
どれくらいの文字をまとめれば効率が良いか考えて、最適化されているのではなかろうか。
0937デフォルトの名無しさん2010/09/28(火) 20:56:54
>934
標準ライブラリの実装依存じゃない?
ライブラリのIO関数がまとめている場合、プログラムでまとめるのは二度手間になるし。
0938デフォルトの名無しさん2010/09/29(水) 13:06:05
>>937
つーか、入出力はフツウにバッファリング
されてるだけじゃないの?
0939デフォルトの名無しさん2010/10/01(金) 08:12:25
さいきん、モナドについて調べてるんだけど、このページの
http://blogs.dion.ne.jp/keis/archives/5984552.html
「群論の四則演算と同じで、圏論のモナドも公理系の利便性を享受すればいいんだよ!」
という見方って合ってるのかな?
0940デフォルトの名無しさん2010/10/01(金) 10:01:28
Haskell のモナドはイテレータ
繰り返しとは限らないけどイテレータ
ほとんどの言語が、独特の工夫を凝らしたイテレータをもっている
0941デフォルトの名無しさん2010/10/01(金) 10:13:05
>>939
合ってると思う
Haskellの学習という観点だったら、モナドについて圏論的な理解を深めるよりも
プログラミング上のテクニックとしてモナド変換子の使い方でも学んだ方が良い
0942デフォルトの名無しさん2010/10/01(金) 10:48:09
>>939
俺もこれ読んで少しモナドが理解できた。
Haskellのモナドって正確にはKleisliなんたらってやつなんでしょ?
0943デフォルトの名無しさん2010/10/01(金) 13:24:35
ぐぐったら、プログラム・プロムナードの2006年3月号に書いてた
Haskellのモナド⊂圏論のモナド、になるんだな
該当のPDF,teeの定義ではあってるのに
巻末のまとめのfmapの型が間違ってる気がする
0944デフォルトの名無しさん2010/10/01(金) 16:26:36
>>941
なるほど。Haskellにおけるモナドの全体像が見えてきた気がする。

参考までにもう一つ聞きたいんだけど、圏論の道具がプログラミングに使えるっていうのは、
いちおう理論的な裏付けがあるんだよね? もし三行で説明できる内容なら教えて欲しい。
0945デフォルトの名無しさん2010/10/01(金) 17:12:10
>>944
色々な概念の整合性が理論的に保証できる事が圏論を使うことの利点の一つ。
0946デフォルトの名無しさん2010/10/01(金) 19:01:01
>>944
3行じゃないけどこれ読んどけ
http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
0947デフォルトの名無しさん2010/10/01(金) 19:20:43
>>946
1行で要約すると: IOは置いてconcatMapの話を聞け
0948Perl忍者 ◆M5ZWRnXOj6 2010/10/01(金) 22:00:04
まだ続いてますか


















きもいですね
0949デフォルトの名無しさん2010/10/01(金) 22:01:02
やあ、久しぶり!
君も立派にきもいよ!
0950デフォルトの名無しさん2010/10/02(土) 07:18:37
>>945-947
分かったような分からないような。。とりあえずそのエントリ読んでみます。
0951デフォルトの名無しさん2010/10/02(土) 07:19:18
ごめん、これから出かけるから次スレ誰かお願い。
0952デフォルトの名無しさん2010/10/02(土) 07:23:03
この勢いなら950で立てなくてもいいだろ
0953デフォルトの名無しさん2010/10/02(土) 11:09:58
たまに突発的に活気付くから困る
0954Perl忍者 ◆M5ZWRnXOj6 2010/10/05(火) 07:22:23
きも
0955デフォルトの名無しさん2010/10/05(火) 12:17:31
あんきも、おいしいよね♪
0956デフォルトの名無しさん2010/10/05(火) 14:30:14
アンキモ アンキモ アンキモ!
0957デフォルトの名無しさん2010/10/05(火) 14:33:14
>>954
こう言って欲しいんだろ
「perlも関数型言語だからHaskellの仲間だね」
0958デフォルトの名無しさん2010/10/05(火) 14:58:35
?
0959Perl忍者 ◆M5ZWRnXOj6 2010/10/05(火) 19:14:55
haskellって名前じゃなかったらやってないくせによ

どうせハッカーみたいな名前してるからやってんでしょ

gnwとか意味わからない名前だったらやってないでしょ

haskell=hacker
みたいだからやってるだけのお前らはな
やめたほうがいいと思うよ
0960Perl忍者 ◆M5ZWRnXOj6 2010/10/05(火) 19:15:45
そういうやつらのキーボードって
happy hackingとかそういうキーボードつかってんでしょ

ハッキングとか名前ついてるから

まじうざいんだよね
0961デフォルトの名無しさん2010/10/05(火) 19:50:21
kinesis使ってる人もいるお
0962デフォルトの名無しさん2010/10/05(火) 19:56:50
>960
だよなー、キーボードなんて1000円もしないのを使ってるよ
0963デフォルトの名無しさん2010/10/05(火) 20:03:20
え、俺FPSで強くなるために買ったRealforce91つかってプログラミングしてるよ
0964デフォルトの名無しさん2010/10/05(火) 20:51:19
俺はフリック入力してる
0965デフォルトの名無しさん2010/10/05(火) 21:08:41
>>962
A の横が Contorl であるキーボードで 1000 円くらいのものがあるのなら教えてください。
0966デフォルトの名無しさん2010/10/05(火) 21:15:40
親指シフト使ってる。自分以外に見たことないわ。
0967デフォルトの名無しさん2010/10/05(火) 21:19:41
>>965
キーマップ変更したらいいのでは
0968デフォルトの名無しさん2010/10/05(火) 21:21:43
やっぱりHaskellはキーボードを選ぶということですか。
0969デフォルトの名無しさん2010/10/05(火) 21:21:45
kinesisは親指ctlとかできる
果ては足shiftとか足enterとか...
0970デフォルトの名無しさん2010/10/05(火) 21:28:27
キーボードのキー配置とか出力値とかマクロとか全て Haskell でプログラミングして
キーボード内蔵のフラッシュメモリに書き込めたらいいのに
0971デフォルトの名無しさん2010/10/05(火) 21:29:17
XMonadで妥協してください
0972デフォルトの名無しさん2010/10/05(火) 21:39:19
>>971
驚いた、こんなのがあるのか

現物もさることながら、作り方も興味深い
フォーカス機能の実装に zipper データ構造をつかうとか、
ウィンドウマネージャの特性を QuickCheck で検査するとか、
なかなか勉強になる

ありがと
0973デフォルトの名無しさん2010/10/05(火) 21:58:33
なにそのパイプオルガン
0974デフォルトの名無しさん2010/10/05(火) 22:00:00
mini guru が中止にさえならなければなあ
0975デフォルトの名無しさん2010/10/08(金) 06:06:25
ctrlは現状使ってるキーボードでマップ変えればええがな…
Windowsはフリーソフトで出来ると思うし
Linuxもほとんどの環境でできると思うし
MacはApple標準キーボードがAの隣だからそのままでいいし、そうでなくてもOSX側に入れ替えあるし
0976Perl忍者 ◆M5ZWRnXOj6 2010/10/08(金) 12:03:01
Haskellバカ君とFPS対戦したいんですがどうすればいいですか?教えてください

やっぱりHaskellでHSAIMとかしちゃうんでしょうか?・・・
そこらへん気になります
具体的にいうとHaskellやってればFPS強くなりますか?

Perler vs Haskell のFPSバトルしませんか?

0977デフォルトの名無しさん2010/10/08(金) 20:11:53
>バカ
正しい
0978デフォルトの名無しさん2010/10/09(土) 08:09:56
FPS - Faculty of Policy Studiesの略。
総合政策学部の意。
0979デフォルトの名無しさん2010/10/09(土) 08:22:45
WASD大学ですね。わかります
0980Perl忍者 ◆M5ZWRnXOj6 2010/10/09(土) 13:01:29
ここのスレのやつ頭が沸いてるしね

暴言をわざとうけねらいの方に狙うカス

死ねばいいよ
0981デフォルトの名無しさん2010/10/09(土) 15:07:01
>>979
ちと吹いたw
0982デフォルトの名無しさん2010/10/09(土) 16:15:09
>>980
いきなり死ねって、どういう事ですか?
君には社会の常識がないのですか?
普通は、『あのう、すいませんけれども死んでくれませんか?』とか
『あなたには、死ぬという選択肢もありますよ』とか言うものですよ、
あなたみたいに最初から喧嘩腰だと、
言われた方は『じゃあ死んでみようかな』とかいう気持ちがなくなるものです。
まずは、親切丁寧に人に死んでと頼むべきだと思いますよ。
そこから、人の輪と協調が生まれ、『よーし死んでみるか』
という気持ちが生まれるわけです。
0983デフォルトの名無しさん2010/10/09(土) 17:03:43
>>980
>>671
0984デフォルトの名無しさん2010/10/10(日) 15:15:12
push型のFRPライブラリで、Grapefruit以外で良いのある?
0985デフォルトの名無しさん2010/10/10(日) 16:34:36
FRP の push と pull って、何を以て分けるんだっけ?
0986デフォルトの名無しさん2010/10/10(日) 16:50:05
定期的にサンプリングして内部状態を更新し続けるのがpull型
外部からイベントを受け取った時だけ内部状態を更新するのがpush型

だと理解してる
0987デフォルトの名無しさん2010/10/10(日) 17:12:46
>>986
ありがと

ということは、Yampa は pull 型なのか。
普通は微少な差分時間を入力し続けないとまともに機能しない。

でも、微積する必要がなければ、
べつに正しい差分時間をしなくても良いんだよな。
それなら外部からイベントを受けたときだけ
内部状態を更新するようにすればいいから、
push 型としても使えるのか?
いまいち分からんな・・・

reavtive は論文読むと push 型と pull 型の
いいとこ取りみたいなことが書かれてるけど、それじゃダメ?
0988デフォルトの名無しさん2010/10/10(日) 18:03:59
["a","b","c"]みたいなリストをa,b,cと出力したいんですが
mapM_ (\x -> putStr x >> putStr ",") ["a","b","c"]
これだと余分な,が一個つきます
最後1つの処理が余計で微妙なんですが
こんな時どう書くのが簡単でしょうか
0989デフォルトの名無しさん2010/10/10(日) 18:08:40
List.intersperse使って
putStrLn $ concat $ intersperse "," ["a","b","c"]
0990デフォルトの名無しさん2010/10/10(日) 18:08:56
書いてから自分で一個思いつきました
let str = ["a","b","c"] in putStr (head str) >> mapM_ (\x -> putChar ',' >> putStr x) (tail str)
0991デフォルトの名無しさん2010/10/10(日) 18:12:06
>>989 ありがとうございます。これは便利ですね。こっちのほうが効率も良さそうだし
0992デフォルトの名無しさん2010/10/10(日) 18:26:09
intercalate x = concat . intersperse x
という関数があるから、
putStrLn $ intercalate "," ["a", "b", "c"]
でおk
0993デフォルトの名無しさん2010/10/10(日) 18:41:39
Hoogleは偉大
http://www.haskell.org/hoogle/?hoogle=[String]+->+String+->+String
0994デフォルトの名無しさん2010/10/10(日) 18:51:18
Hoogle Sugeeeeeee!!!!!!と言わざるを得ない
次スレを作るなら是非テンプレに入れて欲しい
てか次スレのことを忘れてた
0995デフォルトの名無しさん2010/10/10(日) 18:54:49
今更かよって感じだな
0996デフォルトの名無しさん2010/10/10(日) 19:07:21
建ててくる
0997デフォルトの名無しさん2010/10/10(日) 19:13:57
建てれなかったので誰か頼みます
0998デフォルトの名無しさん2010/10/10(日) 19:26:59
>>998 でこの体たらく。
もうすぐ埋まっちゃうじゃん。
0999デフォルトの名無しさん2010/10/10(日) 19:35:45
関数型プログラミング言語Haskell Part13
ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/

あと頼みますわ。あと>>1の全角スペースともう一個何か?が"?"になってしまったよorz
1000デフォルトの名無しさん2010/10/10(日) 19:37:14
>>999
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。