5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん: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の仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。


2 :デフォルトの名無しさん: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

3 :デフォルトの名無しさん:2010/04/29(木) 19:20:53
これは乙じゃなくて乙なんだからねうんたらかんたら

4 :デフォルトの名無しさん: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/

5 :デフォルトの名無しさん:2010/04/29(木) 19:25:57
・【.NET】F#について語れ【OCAML】
ttp://pc12.2ch.net/test/read.cgi/tech/1186030985/

6 :デフォルトの名無しさん: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

洋書で分かりやすいのってどれですか?

7 :デフォルトの名無しさん:2010/04/29(木) 21:35:36
英語ができるならネットでチュートリアルをいくつか→RWHでいいよ

8 :デフォルトの名無しさん:2010/04/29(木) 21:41:11
>>7

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

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

http://learnyouahaskell.com/

9 :デフォルトの名無しさん:2010/04/29(木) 21:55:18
なんか珍しく盛り上がってるな
こここんなに人いたんだな

10 :デフォルトの名無しさん:2010/04/29(木) 22:06:38
少人数が騒いでるだけ。

11 :デフォルトの名無しさん:2010/04/29(木) 22:11:08
しかもJSON分かり辛いって言われてもなあ。
あれはわかりやすいから普及したんだよ。


12 :デフォルトの名無しさん:2010/04/29(木) 22:21:02
>>11

まだやんのかw

>>7-8

ビデオも良いね

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

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

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

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

Road は知らん。
PDF で読めるヤツとは違うものなんかな

14 :デフォルトの名無しさん:2010/04/29(木) 23:24:36
>>6
おっと、肝心の質問に答えてなかったな。

私にとっては Craft と School は理解し難くはなかった。
School の方が説明を端折ってる感は若干あった。

15 :デフォルトの名無しさん:2010/04/29(木) 23:30:03
Haskellよりも本を読むことが目的になってるように思えるんだが、みんなそんなに読みまくってるのw?

16 :デフォルトの名無しさん:2010/04/29(木) 23:35:09
>>15
> Haskellより

意味が分かりません。
明瞭な言葉で語ってください。


17 :デフォルトの名無しさん:2010/04/29(木) 23:56:23
>>16
Haskell でのプログラミング中に起きた問題の解決よりも、とか、
Haskell でプログラミングすることよりも、
という様な感じの意味だろ。
それくらい文脈を考慮して察してやれよ。

18 :デフォルトの名無しさん:2010/04/30(金) 00:04:03
>>13-14

THX

Craftかなとも思いますが、>>7のいうようにネット上のチュートリアルとか
リファレンスをまず漁ってみます

19 :デフォルトの名無しさん:2010/04/30(金) 00:59:54
本を読むのも悪くないと思うけどな
もちろん練習も必要だが、その前にインプットだろ

20 :デフォルトの名無しさん:2010/04/30(金) 01:01:46
>>18
Craftは来年に新版が出る、かもしれない

21 :デフォルトの名無しさん:2010/04/30(金) 01:08:03
そことそこ
推薦図書スレへ帰れ

22 :デフォルトの名無しさん:2010/04/30(金) 01:10:06
>>15>>19な。

23 :デフォルトの名無しさん:2010/04/30(金) 01:24:34
日本語が不得手な人が混ざってるね

24 :デフォルトの名無しさん:2010/04/30(金) 02:18:23
>>23
どの人?

25 :デフォルトの名無しさん: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 とかシグネチャとの対応がどうなってるのか本を何分かにらまないと理解できない。

本が悪いというより、ただ単に、本をさくさく読みたい人向けの本じゃないってだけの話。

26 :デフォルトの名無しさん:2010/04/30(金) 04:00:36
伝説のPHP作者「Rasmus Lerdorf」名言集を聞くと嫌PHP厨がファビョる
・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
・問題を解くのが好きなだけで、プログラミングは大嫌いです。
・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
・パーザを書くのは苦手です。本当にダメなんです。今でもね。
・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。

27 :デフォルトの名無しさん:2010/04/30(金) 05:40:06
>>26
同意できるな
Haskellプログラマは最適化なんて興味ないだろ
仕様を記述できればいい

28 :デフォルトの名無しさん:2010/04/30(金) 05:47:16
>・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
GHCを作ったのも多数の開発者だな。
>・問題を解くのが好きなだけで、プログラミングは大嫌いです。
まさしくHaskellだな。
>・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
Haskellは再利用性が高いな
>・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
Haskellの本は少ないな
>・パーザを書くのは苦手です。本当にダメなんです。今でもね。
Parsecか
>・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
Haskellにはプログラミング言語の研究者が重要だという奴は何でもあるな。
>・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
理解できないな
>・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
俺の書いたHaskellプログラムもやっつけ仕事だな。スペースリークだらけだがnが小さいので問題ない
>・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
同意だな
>・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
俺もHaskellがあれば作る必要はないと思う
>・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。
まあ、Javaしかできない人よりはましだな


29 :デフォルトの名無しさん:2010/04/30(金) 06:42:05
あちこちにコピペ投下するようなバカを相手にしてはいけない

30 :デフォルトの名無しさん:2010/05/01(土) 22:51:00
code.haskell.org is down?

31 :デフォルトの名無しさん:2010/05/01(土) 23:09:19
yp

32 :デフォルトの名無しさん:2010/05/02(日) 10:56:37
脈略ないけど、Haskellでは
余データ==プログラム
という意味合い?

33 :デフォルトの名無しさん:2010/05/02(日) 12:03:28
Haskellではcodataはclassに相当するもんだと思う

34 :デフォルトの名無しさん:2010/05/02(日) 12:33:18
余データ(codata)って何?
興味ある

35 :デフォルトの名無しさん:2010/05/02(日) 14:05:03
モナドはたしかデータ、余データ(codata)に関する理論じゃなかったっけ。
なんでそれがリストモナドとかと関係するのか全くわからなかったけど。

36 :デフォルトの名無しさん:2010/05/02(日) 14:28:43
>>34
データの双対

37 :デフォルトの名無しさん:2010/05/02(日) 14:58:55
>>36
ごめん、まだ分かんない・・・
ググってもなかなかそれらしい記事に当たらないし(キーワードがまずいのか)。

codata が class に相当するのだとしたら、data は何に相当するの?
そしてそれらは、どのような事柄に関して双対関係があるの?

38 :デフォルトの名無しさん:2010/05/02(日) 15:14:27
>>37
>そしてそれらは、どのような事柄に関して双対関係があるの?
それこそ自然な同型になるようにするためだろう。
じゃないと取り扱いづらいし双対関係作る意味がないと思う。

39 :デフォルトの名無しさん:2010/05/02(日) 15:16:13
なんだか閃いた。>>37 thx!

40 :デフォルトの名無しさん:2010/05/02(日) 15:47:45
>>38
質問の仕方が悪かったかも。

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

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

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

・ある意味で互いに裏返しの「ある意味」というのは、
今回の件(Haskell)では何に当たるのか。

41 :デフォルトの名無しさん:2010/05/02(日) 18:41:05
class宣言がinstanceの型からADTへの射だとしたら
その矢印が反対のものはADTからinstanceの型への射
ならdataはinstance宣言になるのか?なんかしっくりくるようでこない

42 :デフォルトの名無しさん:2010/05/02(日) 23:31:11
質問なんですが、今RWHを読んでいるのですが、putStrLnの後に $ がある場合と
無い場合がありますよね?
これってputStrLnの引数が文字列リテラルだけの時は要らなくて、文字列++変数
みたいな時には要るということなのでしょうか?

よろしくお願いします。

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


44 :デフォルトの名無しさん:2010/05/02(日) 23:45:09
>>43

ありがとうございます。

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

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

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

分かりましたー

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

46 :デフォルトの名無しさん: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))))
みたいな式を書きたいときとか、括弧()の代わりに$を使うと読みやすくなる。

47 :46:2010/05/02(日) 23:51:50
うわwww オレ、はずかし。


48 :デフォルトの名無しさん:2010/05/02(日) 23:58:19
>>46-47

いえいえ凄く分かりやすいです。ありがとうございます。

49 :デフォルトの名無しさん:2010/05/03(月) 00:08:14
たぶん、>>48>>46 の恥ずかしさが分かっていないと思う。

50 :デフォルトの名無しさん:2010/05/03(月) 01:57:07
一応、Haskellでは関数合成と適用を組み合わせるスタイルが推奨されているようだ。

g x y = f1 . f2 . f3 $ x * y

51 :デフォルトの名無しさん:2010/05/03(月) 09:43:50
誰も突っ込まないので言ってみる

>>46
> 演算子($)は、
>  f $ x = f x
> と定義されている演算子で、他のどの演算子よりも優先度は低いが、関数適用よりは高い優先度を持っている。

関数適用は何よりも優先順位が高い(最高位)ですよ。
関数適用以上の優先順位のものは Haskell プログラマは定義できないです。

52 :デフォルトの名無しさん: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を評価するとき、$が最初に評価されないといけない。
じゃないとエラーになるでしょ?

53 :デフォルトの名無しさん:2010/05/03(月) 12:53:11
結合則と評価順をごっちゃにしてはいけない

54 :デフォルトの名無しさん:2010/05/03(月) 13:34:14
>>53
そっか、>>46 は「先に評価される=優先度が高い」という話をしてたのか。

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

すまんかった、申し訳ない。
ちなみに >>49 も俺、本当に悪い

55 :デフォルトの名無しさん: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上で動かしています)
これはモジュールがインストールされていないということでしょうか?
対処方法を教えてください。お願いします。

56 :デフォルトの名無しさん:2010/05/03(月) 23:16:40
>>55
とりあえず、モジュールがインストールされているかどうかを調べてみたらどうだ?

57 :デフォルトの名無しさん:2010/05/03(月) 23:21:48
>>56

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

該当するライブラリは見つけたっぽいんですけど↓
http://hackage.haskell.org/package/regex-posix
どこにインストールすればいいのか分かりません。

58 :デフォルトの名無しさん:2010/05/03(月) 23:37:33
ghc-pkg list
でインストール済みパッケージの一覧

59 :55:2010/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

一覧には無いっぽいですね。

60 :デフォルトの名無しさん:2010/05/03(月) 23:56:49
>>59
正規表現ライブラリはいくつもあるので、Hackageで探してインストール。

61 :デフォルトの名無しさん:2010/05/03(月) 23:58:22
>>59
訂正。ライブラリは見つけたようなので、cabalでインストール。cabal-installがインストールされていなければ、まずそれをインストール(ぐぐればダウンロード元が見つかる)。

62 :デフォルトの名無しさん:2010/05/04(火) 13:10:02
Linuxならディストロのパッケージを入れる方がいい
aptとかで探せば出てくるはず

63 :デフォルトの名無しさん:2010/05/04(火) 13:28:39
>>62
ディストロのパッケージだと何故か上手くいかない、
という相性の問題が以前からたびたび出てるよ。
Debian 系の報告が比較的多い感じ。

Cabal 使っておけば安全だし、他の OS でも知識が生きると思う。

64 :デフォルトの名無しさん:2010/05/04(火) 13:35:36
そりゃあDebianにレポートすべきでは。

65 :デフォルトの名無しさん:2010/05/04(火) 18:07:52
ディストロ系のパッケージだとpure Haskellでないライブラリも確実に処理してくれる半面、
バージョンのチェックが怪しいかもしれんね。
Deb系のパッケージシステムのことはよく知らんが、Cabalみたいに上限バージョンのチェックまでしてくれるのだろうか?
それにDebianのレポジトリに入っているパッケージは全体的に古い

66 :55:2010/05/04(火) 18:47:03
cabal-installを入れようとしたら、timeライブラリが無いと言われ
timeを入れようとしたら、baseライブラリが古いと言われ、baseを
アップデートしようと調べたらGHC自体をアップしないと無理と
書いてあったので、最新のGHCをソースからインストールしたら、
Text.Regex.Posixも一緒に入り、最初の問題が解決しました。

67 :デフォルトの名無しさん:2010/05/04(火) 19:49:24
最初からCabalでなくPortageでも採用してれば今こんなに
面倒なことにはなってなかったはず

68 :デフォルトの名無しさん:2010/05/04(火) 23:51:23
Cabal に削除コマンドが未だに無いのも不思議だ

69 :デフォルトの名無しさん:2010/05/05(水) 00:18:06
Cabalは参照透明性を維持します。
破壊更新・削除はできません。

70 :デフォルトの名無しさん:2010/05/05(水) 00:38:55
>>68
ていうか、Cabalはbuild architectureだから。
パッケージ管理システムではなく、makeの置き換えだと考えるべき。
パッケージ管理はghc-pkgがやっている。

71 :デフォルトの名無しさん:2010/05/05(水) 00:40:59
書店でざっと見て来ました。前スレだったかにハンドブックを求めていた人がいたと思うけど、
プログラミングHaskell (ISBN-10: 4274067815)で良い気がした。

RWHは長いからタイトル通り実用例題集くらいに思って、これと両方持ってると良さそうですな。

72 :デフォルトの名無しさん:2010/05/05(水) 03:08:32
makeはautomakeでuninstallルールの自動生成できるじゃん

73 :デフォルトの名無しさん:2010/05/05(水) 07:38:52
>>72
ghc-pkg unregisterではだめか?

74 :デフォルトの名無しさん:2010/05/05(水) 11:45:39
>>73
依存性を考慮するのがメンドイ

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

あと、ライブラリやドキュメント、実行ファイルを消すのがメンドイ
まぁ、これはインストールされてる場所は決まってるから、作業は簡単なんだが。

75 :デフォルトの名無しさん: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

76 :デフォルトの名無しさん:2010/05/05(水) 14:39:38
cabal --versionの結果は?

77 :デフォルトの名無しさん:2010/05/05(水) 17:59:08
>>76
cabal-install version 0.8.1
using version 1.8.0.2 of the Cabal library

です。

78 :デフォルトの名無しさん:2010/05/05(水) 18:33:39
とりあえずhackageからtarball落して解凍して手動で入れてみれば?

79 :デフォルトの名無しさん: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 を再インストールしてみる。

80 :デフォルトの名無しさん:2010/05/05(水) 19:58:54
>>75
その現象には私も直面した。
globalとuserの両方にcabalがあり、userのほうが新しいcabalのはずなのだが、
参照されているcabalは古いバージョンのようだ。
私はHaskellのライブラリを全部削除してからGHCを再インストールした。
もっとうまい方法はないだろうか。

81 :デフォルトの名無しさん:2010/05/06(木) 06:48:09
cabalには正しくアップグレードできないというバグがあるのかもしれない

82 :デフォルトの名無しさん:2010/05/06(木) 12:07:33
うちではtimeとconvertibleが百年戦争やってるよ

83 :デフォルトの名無しさん:2010/05/07(金) 20:58:39
Haskell Platform 2010.1.0.0 を再インストールしたけど、だめだった。
他のライブラリは "cabal install" でインストールしたら
ちゃんと "cabal info" に反映されるのに、
cabal-install だけは反映されない。

こういうモンだと思って、もう諦めた。

84 :デフォルトの名無しさん:2010/05/07(金) 22:33:07
cabalは変な動作をするね
モジュールの依存関係を正しく理解してないことがしばしばある
しかも、出来上がったパッケージが稀に壊れてたりもする
cleanしてからビルドするとちゃんとしたものが出来るけど、それってどうなのよ


85 :デフォルトの名無しさん:2010/05/07(金) 23:28:40
Haskellにはよくあること

86 :デフォルトの名無しさん:2010/05/08(土) 01:41:52
cabalでのビルドにおけるトラブルの主因は、依存ライブラリを
パッケージごとに管理しているせいではないか。

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

一方で、Haskellをプロダクションに使うには、ビルドを確実に処理するための
特別なサポートが必要だろう。

87 :デフォルトの名無しさん:2010/05/08(土) 11:48:44
PDFファイル所在のメモ
ttp://openpdf.com/ebook/replicate-haskell-pdf.html

88 :デフォルトの名無しさん:2010/05/09(日) 00:02:15
型Bを型Aへ変換する関数と、型Cを型Aへ変換する関数を同じ名前にしたいです。
型Bと型Cを、型Aへ変換する関数を持つクラスのインスタンスにするしかないでしょうか。

89 :デフォルトの名無しさん:2010/05/09(日) 00:35:53
>>88
モジュールを分けて修飾インポート。
しかしそもそも同じ名前にすべき理由は何?

90 :デフォルトの名無しさん:2010/05/09(日) 00:37:11
Example
let a = B.toA b
a' = C.toA c


91 :デフォルトの名無しさん:2010/05/09(日) 18:06:43
> and []
True
> or []
False

GHCでこんな結果がでるんですが、これは意図してこのように定義されて
いるのでしょうか? どっちも False か、どっちもエラーかの方が妥当な
気がするのです。

92 :デフォルトの名無しさん:2010/05/09(日) 18:26:48
それはどちらもそう定義してある。

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

その2つとこれ見て実際に手を動かしてみたら分かると思うな。


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

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

どうしたらいいでしょうか?

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

Mac (Safari, Firefox)でも似たようなものです。

95 :デフォルトの名無しさん:2010/05/09(日) 21:28:24
>>89,90
ありがとうございます。

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




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

それで質問をさせてもらったのでした。

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

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

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

なので、and [] は「それ以外」の条件に当てはまり True となる。
or [] も「それ以外」の条件に当てはまり False となる。

98 :デフォルトの名無しさん:2010/05/09(日) 23:34:52
ここらは(代表的な)Lispのand/orとまったく同じ定義
さすがにhaskellではhead [] /= []かつtail [] /= []だけど

99 :デフォルトの名無しさん:2010/05/09(日) 23:45:53
0個の元の論理積の値を,論理積の単位元 True で定義しておくと,0個以上の元の論理積を再帰的に定義できる.
0!(0の階乗)を 1と定義するのと同じ.

100 :91:2010/05/09(日) 23:57:03
ぼんやりと心がわかったような気がしました。
いただいた回答を参考に、もうちょっと考えてみたいと思います。

回答してくださったみなさんありがとうございます!


101 :デフォルトの名無しさん:2010/05/10(月) 16:38:55
case中全部から見えるwhere節が欲しい時がある

102 :デフォルトの名無しさん:2010/05/10(月) 18:14:05
その case 以外からは見えない where 節ということ?

103 :デフォルトの名無しさん:2010/05/10(月) 19:00:59
>>102
case n of
0 -> f ....
1 -> f ...
_ -> ...
where f = ...
なんてことができればいいなと

104 :デフォルトの名無しさん: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


105 :デフォルトの名無しさん:2010/05/10(月) 19:58:17
>>104
caseの各パターンマッチのwhere節

この間がほしい

関数のwhere節

let f = .. in case exp of ..的なスコープってこと
expの部分では見えてなくてもいいけど

106 :デフォルトの名無しさん: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 は見えない。

と言うことを別関数を作らずともできるように文法に組み込んでくれよ、
って事だよね

107 :デフォルトの名無しさん:2010/05/10(月) 20:21:27
やっとわかってもらえた
まあパターンマッチング部でwhere節が使えるってことは
case縛りのwhereはシンタックス的に追加は不可能なんだろうけど

108 :デフォルトの名無しさん:2010/05/11(火) 16:42:40
関数プログラミングの楽しみ|Ohmsha
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=978-4-274-06805-8

7年前の本か
使い物になんのかな?

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

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

また、「Real World Haskell」以上に入門書から遠い本だとは思った。
中置データ構築子などを含む基本文法は当然として、
式の置き換えによる評価の追跡とか、構造的帰納法による解析(証明)とか、
その手の基本テクニックも慣れてること前提っぽい。

110 :デフォルトの名無しさん:2010/05/11(火) 21:37:28
Real World Haskell買って読んでるけど、いちいち話が長い。

そう思っていた時にふと本屋で「プログラミングHaskell」を手にしてあっさりしている事が新鮮だったよ。
実用(利用)例は文字通りRWHがいろいろあるので、両者を手にして往復しながら理解を進めていくのが正解かもね

111 :デフォルトの名無しさん:2010/05/12(水) 00:17:25
>>108

高い上に難しそう・・・

フフフ 買いかな?

112 :デフォルトの名無しさん:2010/05/12(水) 20:58:41
data でつくる代数データ型だけど、どの辺が「代数」なのでしょうか?

113 :デフォルトの名無しさん:2010/05/12(水) 21:56:12
代数データ型間の同型関係を=,
sumを+,
productを*
と読み替えたときに環になっているから?

まあデータ型なんてどれでも代数的にみることはできると思うけど。

114 :デフォルトの名無しさん:2010/05/13(木) 00:23:42
代数系でググれ

115 :デフォルトの名無しさん:2010/05/13(木) 00:58:51
代数データ型でないデータ型などない
整数,実数,文字,すべて代数的だ


116 :デフォルトの名無しさん: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

117 :デフォルトの名無しさん:2010/05/13(木) 14:58:21
>>115
いや、だとしたらdataで作るデータ型にわざわざ「代数」という単語をくっつけた理由を知りたいです

118 :デフォルトの名無しさん:2010/05/13(木) 22:24:46
>>111
すまん、>>109 は脅すつもりはなかったんだ。
買っとけ。

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

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

ただ、日本語がどうなってるか知らんがな。

119 :デフォルトの名無しさん:2010/05/14(金) 17:12:28
罠なんだろうか

Network.Socket.SockAddrInet :: PortNumber -> HostAddress -> SockAddr
PortNumberの方はWord16のnewtypeでfromIntegralにエンディアン変換が仕込んである
HostAddressの方は単なるWord32のtype-synonymなので自分で変換する必要がある
どっちかに統一してくれ

120 :デフォルトの名無しさん:2010/05/15(土) 14:01:34
ファイル処理の関数を書いたら、シグネチャが String> IO String みたいにIOがつく関数がたくさんできるんだけど、これがRWHが言うところの「汚染される」ってこと?
上手に作るとIOがついてない関数で置き換えられるってこと?

121 :デフォルトの名無しさん:2010/05/15(土) 16:07:53
>>120
処理対象がファイルなら必然的に IO ばかりになる。
ファイルは Haskell の知らないところで変わったり消えたりするんだから。

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

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

>>120 だけの情報だと、こういう至極当たり前な事しか言えない。


122 :デフォルトの名無しさん: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の枝になってるのも分からない。

123 :デフォルトの名無しさん: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)
=> ...

124 :デフォルトの名無しさん:2010/05/15(土) 23:01:54
Haskellってひょっとして、言語の学習コストが、ソフトの保守コストよりも大きいんじゃね?

125 :デフォルトの名無しさん:2010/05/15(土) 23:08:51
>>124
初心者卒業レベルまではそれほどでもないのだが、そこから製品開発に使えるレベルまでいくのが大変
- 要求性能が出ないとき
- 結果が変なとき
に、短時間で原因を突き止め修正できるようになるには、相当の練習が必要

126 :デフォルトの名無しさん:2010/05/15(土) 23:10:50
すんません
HOpenCVのマニュアルってどこにあるでしょうか?

http://hackage.haskell.org/package/HOpenCV
に、
http://www.ee.bgu.ac.il/~noamle/
ここ↑にオンラインドキュメントがあるみたいなことが書いてあるんですが見当たりません

127 :デフォルトの名無しさん:2010/05/16(日) 00:02:15
言語に関する総コスト一定の法則

128 :デフォルトの名無しさん:2010/05/16(日) 18:28:59
コメント文に見たことのない演算子が書いてあったから、どういう意味なのか考え込んだ
それがこれ

:-)

129 :デフォルトの名無しさん:2010/05/16(日) 18:48:29
:-p

130 :デフォルトの名無しさん:2010/05/16(日) 19:09:08
><

131 :デフォルトの名無しさん:2010/05/16(日) 19:24:10
^^

132 :デフォルトの名無しさん:2010/05/16(日) 19:47:24
:-)
これがぱっと見で演算子に見えたのか
まだ Haskell に慣れていないんだな

133 :デフォルトの名無しさん:2010/05/16(日) 20:03:14
: D

134 :デフォルトの名無しさん:2010/05/16(日) 21:43:48
</>

135 :デフォルトの名無しさん:2010/05/16(日) 21:56:31
顔文字プログラミングとかできないだろうか

136 :デフォルトの名無しさん:2010/05/16(日) 22:07:08
(:[])
は比較的良く使うよね

137 :デフォルトの名無しさん:2010/05/16(日) 23:33:10
getChar ってキーボードから文字を何回入力しようとも、
最後に改行を入力しない限り関数から処理が抜けないと思うんだけど、
そうすると最初の一文字だけ取得して残りはバッファに残ってしまう。

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

最後の改行も含めた複数のキー入力のうちで
最初の文字を取得するだけなら getLine と head でいいんだけど、
ユーザーに改行を入力させずに、一文字のキーを入力したら
直ちに関数から抜けてその文字を取得できるような関数は
標準ライブラリには無いですか?


138 :デフォルトの名無しさん:2010/05/16(日) 23:45:37
>>137
hSetBuffering stdin NoBuffering

139 :137:2010/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'

140 :デフォルトの名無しさん:2010/05/17(月) 09:11:08
>>139
正しい動作じゃない?
getCharを2回繰り替えしてからprintしてるんだから

141 :デフォルトの名無しさん:2010/05/17(月) 09:53:09
改行くるまでバッファリングしてるのは端末だお

142 :デフォルトの名無しさん:2010/05/17(月) 10:04:33
>>139
a <- getChar -- 'a'
b <- getChar -- '\n'
print a
print b


143 :デフォルトの名無しさん:2010/05/17(月) 10:42:49
いや、俺の環境(Linux, GHC 6.10.1)だとhSetBufferingだけで端末のバッファリングまで無効になるよ

144 :137:2010/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 のコンソールが悪いのか。
であれば諦めるしかないですね。

145 :デフォルトの名無しさん:2010/05/17(月) 13:02:32
ttp://hackage.haskell.org/trac/ghc/ticket/2189
6.12.3で直る"かも"

146 :デフォルトの名無しさん:2010/05/17(月) 13:05:31
>>144
私の環境では、>>144のプログラムは期待通りに動作しました。
a'a'
b'b'
Linux, runghc 6.12.2, xtermです。

147 :デフォルトの名無しさん:2010/05/17(月) 13:48:27
http://blog.llvm.org/2010/05/glasgow-haskell-compiler-and-llvm.html

これでもしコンパイル時間も短くなったら最高なんだけどなあ…

148 :デフォルトの名無しさん:2010/05/17(月) 14:13:56
コンパイル時間よりリンク時間(と空間)をどうにかしてほしい
ldにmlにあったパッチ当てたけどまだ遅い

149 :137:2010/05/17(月) 18:16:32
>>145
なんと GHC 側の問題でしたか。

それならば気長に待つことにします。
Haskell Platform に反映されるのはいつになることやら分からんが。

150 :デフォルトの名無しさん:2010/05/18(火) 06:48:45
ldからgoldになればあるいは…

151 :デフォルトの名無しさん: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の表す意味の違い
スタックの使用量はここには現れていない?


152 :デフォルトの名無しさん: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だから

スタックはヒープの一部として確保されるんじゃなかったっけ

153 :デフォルトの名無しさん:2010/05/18(火) 19:46:16
>>152 ありがとうございます。
>スタックはヒープの一部として確保されるんじゃなかったっけ
C言語の感覚で別々にアロケートされると思い込んでいましたが、
ヒープ、スタックともGHCのランタイムが割り付けたメモリの
合計の量をいっているのでしょうか?
foldl と foldr の比較で、RWHには「foldr、あるいはfoldl'を使うのなら
スペースリークに悩まされることはないでしょう」とありますが、foldr でも
foldl の70%〜程度の統計が得られるます。これはスペースリークとは呼ばない
のでしょうか?

154 :デフォルトの名無しさん:2010/05/18(火) 20:07:21
>>153
未評価の値が無駄に蓄積されてヒープを圧迫することをスペースリークと呼ぶなら、
foldr自体がスペースリークを引き起すことはないね
ただし、foldrは末尾再帰じゃないので、そもそもの空間効率が悪いことが多い

155 :デフォルトの名無しさん:2010/05/18(火) 22:21:20
プログラミングHaskell
 ↓
Real World Haskell
 ↓
ふつうのHaskell

と読んだが、順序がまったく逆だったような気がするw

156 :デフォルトの名無しさん:2010/05/18(火) 23:26:02
プログラミングHaskell
 ↓
Real World Haskell

ときて、次の「ふつうのHaskell」に何を期待してたんだ?

157 :デフォルトの名無しさん:2010/05/19(水) 00:31:38
プログラミングHaskellを読み終えて
次は何を読んだが良いだろうか

以下候補

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

目標としては「関数型言語らしいプログラミング」が行いたい


158 :デフォルトの名無しさん:2010/05/19(水) 00:38:37
>目標としては「関数型言語らしいプログラミング」が行いたい
本読むより実際にコーディングしたり人のソース読んだ方がいいよ

159 :デフォルトの名無しさん:2010/05/19(水) 00:50:37
>>157
その目標とその候補であれば「関数プログラミングの楽しみ」を薦める。

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

さすがに完成されたソースが丸ごと一式載っていることはまずないが、
「関数型言語らしいプログラミング」を学ぶのにソース丸ごと一式は要らないだろ。
そもそも、何が関数型言語らしさを作っているのかを知らないまま、
実際にコーディングしたり人のソース読んでも、分からないままだと思う。

160 :デフォルトの名無しさん:2010/05/19(水) 01:18:02
>>156
そういうレスがあるとは思っていた。尼のギフトカードの残高で丁度中古の
「ふつうの〜」が1冊買えたんだよね。だから一層のこと揃えてみただけ。

ただ最初の2冊で分かりにくかったことが、サラっと「ふつうの〜」に説明して
あったりして、最初に読んどけば良かったなと。

161 :デフォルトの名無しさん:2010/05/19(水) 01:19:12
>>159
人のソースはともかく、自分でコーディングしてみないと結局伸びない

162 :デフォルトの名無しさん:2010/05/19(水) 07:24:30
>>160
> ただ最初の2冊で分かりにくかったことが、サラっと「ふつうの〜」に説明して
> あったりして、最初に読んどけば良かったなと。

そういう読み方のタイプも普通にあるし、推奨している読書テクニック本もある。
難解な本を読んで、ある部分が難しかったら、別の一段レベルが低い本を読んで、
それから先の本に再チャレンジする。

163 :デフォルトの名無しさん:2010/05/19(水) 07:49:47
>>161
コードをただ書くだけで伸びるってものでもないけどな
インプット(読む)とアウトプット(書く)は両方あった方がいい

164 :デフォルトの名無しさん:2010/05/19(水) 08:17:38
学びて思わざれば則ち罔し。思いて学ばざれば則ち殆うし。

165 :デフォルトの名無しさん:2010/05/19(水) 08:34:40
他の言語だけどCoq'Artみたいな本だと書きながら読まないと意味不明になって挫折する

166 :デフォルトの名無しさん:2010/05/19(水) 08:45:55
伸ばす方向と方法が分かってないと、効率悪いよ。
それが本の役割だと思う。

167 :デフォルトの名無しさん:2010/05/19(水) 14:28:50
効率悪いよ。

168 :デフォルトの名無しさん:2010/05/19(水) 15:57:33
どう書く?.org http://ja.doukaku.org/ の問題を解いてみたり他人の解答読んだりするのはどう。

169 :デフォルトの名無しさん:2010/05/19(水) 16:00:58
Software Designの記事読んでたら、なぜかnobsunがHaskellプログラミングの第一人者って書かれてるw
おいおいって感じw

170 :デフォルトの名無しさん:2010/05/19(水) 16:29:15
>>169
nobsunって誰?と思ってググってみたらツイッターやってて
しかもHaskell公式のマークを上下ミラーリングして(λ→y)
自分のマークにしちゃっててワロタ

171 :デフォルトの名無しさん:2010/05/19(水) 16:33:31
nobsun、論文も書いた事ないような奴が第一人者気取りかよw
笑っちゃうぜ

172 :デフォルトの名無しさん:2010/05/19(水) 16:40:55
2ちゃんねるで吠えるだけの奴が「笑っちゃうぜ」ってのが一番笑えるなw

173 :デフォルトの名無しさん:2010/05/19(水) 16:44:21
>>171
まぁ、プログラミングの分野は論文がすべてじゃないからね。
ソフトウェア論文がいかに評価されないか、研究者ならみんな知ってるはず。

174 :デフォルトの名無しさん:2010/05/19(水) 16:49:50
nobsun は「RWH」と「関数プログラミングの楽しみ」の翻訳やってる。
日本でのエバンジェリストとしての第一人者だね。

175 :デフォルトの名無しさん:2010/05/19(水) 16:53:34
nobsunはHaskellで新規性ある何かをやったの?
開発手法を編み出したとか
斬新なソフトを書いたとか
ツールを開発したとか
Haskellコンパイラのすごい最適化エンジンを実装したとか、
なにか無いの?

176 :デフォルトの名無しさん:2010/05/19(水) 16:54:13
nobusunこと山下伸夫さんはsampou.orgの管理者で
ふつうのHaskellプログラミングの監修もしていますね。
どう見ても日本のHaskellプログラミングの第一人者です。
笑っちゃった人は自分の無知を自覚すべきだと思います。

177 :デフォルトの名無しさん:2010/05/19(水) 16:55:27
>>176
俺の答えは、日本にはマトモなHaskellerはいない、って事だよ。

178 :デフォルトの名無しさん:2010/05/19(水) 17:34:06
RT @_tad_: 懇親会終盤「この中でGCに興味のある方、ちょっと挙手お願いします」→「ありがとうございます。では片付けをよろしくお願いします」 #rubykaigi ※この物語はフィクションです

179 :デフォルトの名無しさん:2010/05/19(水) 17:47:32
nobsunはHaskellでうまいこと金儲けてる人
白石さんはHaskellに人生食われちゃってる人



180 :デフォルトの名無しさん:2010/05/19(水) 20:32:16
>>179
評価が早計だな
もっと評価を遅延すべき

181 :デフォルトの名無しさん:2010/05/19(水) 20:42:40
>>180
つまり、宇宙の終りの時に初めて評価されるんですね

182 :デフォルトの名無しさん:2010/05/19(水) 20:42:45
>>177
その中の第一人者ってことでいいだろ
所詮相対評価だ

183 :デフォルトの名無しさん:2010/05/19(水) 20:43:15
プログラマーというのは実践家で、スポーツ選手みたいなものだから、
新しいことをしなくても、技のレベルが高ければ評価は高くなると思う。

Haskellの技とは? とかnobsunはレベルが高いのか? はおいといて。

184 :デフォルトの名無しさん:2010/05/19(水) 20:56:47
Software Design に、関数型言語ではHaskellが一番ユーザーが多いと書いてあったんですが、本当でしょうか?

185 :デフォルトの名無しさん:2010/05/19(水) 20:58:10
>>184
Lispの方言を別の言語として数えればそうかもね

186 :デフォルトの名無しさん:2010/05/19(水) 21:05:09
>>184
んなわけあるかいw

と言ってしまえばその記事と同じなので
ちゃんと調査が必要ですね。

187 :デフォルトの名無しさん:2010/05/19(水) 21:05:46
そういう話をするとocamlの人が雪崩れ込んでくるから

188 :デフォルトの名無しさん:2010/05/19(水) 21:52:17
>>184
純粋関数型言語では一番多いんじゃね?

189 :デフォルトの名無しさん:2010/05/19(水) 21:59:20
選択肢はほぼ2択に絞られる・・・

190 :デフォルトの名無しさん:2010/05/19(水) 22:14:50
純粋で非正格な関数型言語では一番多いんじゃね?

191 :デフォルトの名無しさん:2010/05/19(水) 22:35:30
>>189
もう1つって何?
Concurrent Clean?
Lazy K?

192 :デフォルトの名無しさん:2010/05/19(水) 22:59:01
>>191
λ

193 :デフォルトの名無しさん:2010/05/19(水) 23:03:52
立ち読みしたけど、
関数型言語を始めるなら純粋な言語がいいという理由でHaskellを勉強する人が一番多い
みたいなことがSoftwareDesignに書いてあった気がする

194 :デフォルトの名無しさん:2010/05/19(水) 23:22:13
俺としては関数型言語初心者はML系の方がいいんじゃないかと思うけどなぁ

195 :デフォルトの名無しさん:2010/05/19(水) 23:45:10
実用レベルのプログラムを書くのでなければ、Haskellの方が楽だと思う。

前方参照できる
let/let recの区別が不要
deriving (Eq, Show)がある
インタプリタが使いやすい
方言がない
構文がCに似ている
--makeで万事よろしくやってくれる


196 :デフォルトの名無しさん:2010/05/19(水) 23:46:25
SoftwareDesignといえば、Haskellで書いたWEBサーバが紹介されてましたけど、
JavaのTomcatみたいに、サーバ部分とは独立して作ったアプリケーションを追加していくようなサーバコンテナってないでしょうか

それとも、関数型言語だから、Mighttpdみたいなサーバでも、TomcatみたいなWEBサーバコンテナになるのでしょうか

197 :デフォルトの名無しさん:2010/05/20(木) 06:31:10
>>196
Tomcatがどんなものか知らないが、お遊びのウェブアプリケーションを書くならhackがおすすめ。
リクエストをレスポンスに変換する関数を書くだけでウェブアプリケーションを実装できる。
バックエンドのサーバはFastCGIやhappstackなどアダプタさえあれば何でもいい。
本格的なウェブサービスを構築するにはそもそもHaskellを使うべきかどうかが問題。

198 :デフォルトの名無しさん:2010/05/21(金) 10:38:06
Hac ΦのΦって何だよと思ったらPhiladelphiaのphiか

199 :デフォルトの名無しさん:2010/05/21(金) 21:12:53
実用にならないプログラムって…

200 :デフォルトの名無しさん:2010/05/21(金) 21:20:07
>>199
実用にならないというか、production-qualityでないプログラム。
具体的には、Haskellに多い実験的なライブラリや、
品質上の理由でミッションクリティカルな用途に耐えないインターナルなソフトウェアなどが含まれる。

201 :デフォルトの名無しさん:2010/05/21(金) 21:35:37
Haskellにもブレークポイントを張ったりステップ実行できるデバッガが欲しいな。
1ステップ = WHNFの1-stepリダクションで。

202 :デフォルトの名無しさん:2010/05/21(金) 21:36:47
品質とは具体的にセキュリティや堅牢性など。
ソフトウェアアーキテクチャの文脈で定義される品質属性すべて。

製品に使われた実績の少ないプラットフォームは一般にエコシステムが弱いので、
製品に使うには不適当。

203 :デフォルトの名無しさん:2010/05/21(金) 21:40:47
ところでLLVMバックエンドが話題になっているが、
LLVMというのは本格的なシステムの運用に使えるようなものなのか?

204 :デフォルトの名無しさん:2010/05/21(金) 21:44:34
>>201
一応 ghci でブレークポイント張ったりステップ実行できるけど、
ステップ単位は望んでるものではないな。

205 :デフォルトの名無しさん:2010/05/21(金) 22:10:12
>>201
と思ったけど、改めて使ってみたら結構ステップ単位が細かい。
もしかしたら望んでるものに近いかも知れんぞ。

「1ステップ = WHNFの1-stepリダクション」が具体的に
どういうステップ単位かよく分かんないけど。

206 :デフォルトの名無しさん:2010/05/22(土) 08:04:20
どんなときに必要なの? 30行もいくような関数でもつくってるの?

207 :デフォルトの名無しさん:2010/05/22(土) 13:46:27
>>206
文脈から察するにデバッガのことか。

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

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

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

ただ、ghci のデバッガは無いよりマシ程度のものなので、
願わくばもっと使いやすい本格的な Haskell デバッガが欲しいな。
できればビジュアルなもので。

208 :デフォルトの名無しさん:2010/05/22(土) 15:59:19
>>207
なるほど 解説サンクス

209 :デフォルトの名無しさん:2010/05/22(土) 16:00:31
ハスケラーさんたちも紙と鉛筆で練るのか。リスパーちゃんたちと同じだな。

210 :デフォルトの名無しさん:2010/05/22(土) 16:02:30
λ式ってPCで書くにはLaTeXがないと書きにくいもんねw
手のほうが楽でいいよ。

211 :デフォルトの名無しさん:2010/05/22(土) 16:08:00
ちなみに使ってるノートって 方眼系? ただの白紙? 罫線系?

212 :デフォルトの名無しさん:2010/05/22(土) 16:12:53
モールスキン

213 :デフォルトの名無しさん:2010/05/22(土) 16:13:36
やっぱ知的=モールスキンでしょ。
見た目だけ知的w

214 :デフォルトの名無しさん:2010/05/22(土) 16:33:04
ちら裏コピー裏をクリップでとめたもので十分だろ
近所回って回収してくりゃあっという間に段ボール10箱分ぐらい集まるし

215 :デフォルトの名無しさん:2010/05/22(土) 16:44:25
>>211
secion系。
私はあまりたくさんのノートを書かず、そしてグラフィックの割合が高いからだ。

216 :デフォルトの名無しさん:2010/05/22(土) 17:16:53
>>215
Haskellプログラミングに使うノートの話をしているんだが。

217 :デフォルトの名無しさん:2010/05/22(土) 18:04:36
今更ながらHaskell-Beginersに入ってみたんだけど色々話題が出てていいね。

218 :デフォルトの名無しさん:2010/05/22(土) 18:56:24
>>216
http://www.amazon.co.jp/dp/B001NDOO8C

219 :デフォルトの名無しさん:2010/05/23(日) 02:58:48
HN で新しいウェブフレームワークが話題になってた

http://news.ycombinator.com/item?id=1369852

220 :デフォルトの名無しさん:2010/05/23(日) 07:03:16
>>219
> A fast HTTP server library with an optional high-concurrency backend using the libev event loop library.
これは期待できそうだな

221 :デフォルトの名無しさん:2010/05/29(土) 03:28:11
http://hackage.haskell.org/package/haskell-cnc

Intel さんって色んな事やってるのね…

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

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



223 :デフォルトの名無しさん:2010/05/29(土) 09:30:14
>>222
どんな人を対象に話すのかで変わると思うよ。
相手が計算機科学の人なのか? プログラミング言語をひとつくらい習得している
人なのか?まったくの素人なのか?
とかね。

224 :デフォルトの名無しさん:2010/05/29(土) 09:33:28
>>222
やっぱモナドじゃね

225 :デフォルトの名無しさん:2010/05/29(土) 09:51:06
変数を一つだけしか受け取れないとかの原則論がわからんかった。
どうしても多変数脳から脱却出来ん。

226 :デフォルトの名無しさん:2010/05/29(土) 10:15:51
>>223
C, Javaについて一通り習った人が相手です。

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

>>225
なるほど。
その辺、可換図式でも使って説明しますかね。

227 :デフォルトの名無しさん:2010/05/29(土) 11:44:57
俺が苦労したのはラムダ式、高階関数、再帰の三つかな
これらがいくつか組み合わさったコードを見ると途端に混乱するということがあった
それぞれ単独でみれば難しくないし、再帰は既に知ってるだろうし、他も教えられればすぐに理解できるだろうけど、
自在に読み書きできるようになるには時間が必要で、最初のうちはfoldrの定義なんかすごく難しく見えると思う

228 :デフォルトの名無しさん:2010/05/29(土) 11:59:01
どうせ触りだけ話すんだろうから、モナドはあまり触れなくてもいいかもね。
c,java系の人なら関数型特有にみえることはわかりにくいかも。
30分で話すとか10分で話すとかなら簡単なことしか話せないだろうしね。
でも高階関数あたりは欲しいかもね。

229 :デフォルトの名無しさん:2010/05/29(土) 12:00:14
C/JAVA の人ってloopyだし非loopyのhaskellの世界は戸惑うだろうな。

230 :デフォルトの名無しさん:2010/05/29(土) 12:02:57
モナドは IO 以外は使わなくても説明できるからとりあえず置いておけばいいんじゃないかな。
IO も、こう書くものだ、で済ませるか、対話環境だけ使うことにするとか。
個人的には、いちばん理解しにくいのは関数適用だけでプログラムを書くということだと思う。
ループしながら変数に代入、みたいなのから
map して filter して fold になかなか切り替えられない。

231 :デフォルトの名無しさん:2010/05/29(土) 12:06:53
hello, worldについては気にしないでください、で最初は押し切ってしまうとか。
入力ができないのがプログラムの題材的にちょっと辛いけど。

232 :デフォルトの名無しさん:2010/05/29(土) 12:07:11
Haskellの話を聞いてくれる気になってるなら
一番高い壁はクリアじゃね?

233 :デフォルトの名無しさん:2010/05/29(土) 12:15:44
>>230
> ループしながら変数に代入、みたいなのから
> map して filter して fold になかなか切り替えられない。

リストの長さを出すのに「各要素を1に変えて合計」ってのは受けるぞ

234 :デフォルトの名無しさん:2010/05/29(土) 12:25:52
>>233
その前にsumをfoldで定義することが関数型特有じゃないか?

235 :デフォルトの名無しさん:2010/05/29(土) 12:36:29
ぱっと見で何の役に立つのか分かりづらい機能について
実例を見せると納得してくれる

236 :デフォルトの名無しさん:2010/05/29(土) 13:12:18
逆に、CやJavaについて一通り習った相手が、
一番惹かれそうなものは何かというアプローチはどうだ?

そこに、一番分かりにくいものを絡めていくとか。

237 :デフォルトの名無しさん:2010/05/29(土) 13:50:07
たらいがそのままで爆速

238 :デフォルトの名無しさん:2010/05/29(土) 14:35:07
>>236
quick sortちゃう?

239 :デフォルトの名無しさん:2010/05/29(土) 14:53:31
副作用とhaskellやc/java のこともかも

240 :デフォルトの名無しさん:2010/05/29(土) 15:19:22
>>236
とりあえずトランザクション制御とか

241 :デフォルトの名無しさん:2010/05/29(土) 15:27:54
逆に素人にCやJavaの話するときって何話すの?

242 :デフォルトの名無しさん:2010/05/29(土) 15:43:40
まずはhello, world

243 :デフォルトの名無しさん:2010/05/29(土) 16:01:14
>>241
フォンノイマンの死に様

244 :デフォルトの名無しさん:2010/05/29(土) 16:04:12
まぁ、社交の基本だけど、何か専門的な事を素人に話す場合、
人物を語るのが一番良い印象を与えやすいんだよね。
関数がどうのこうのと技術的な話なんて興味を持つ動機には成り得ないよ。

245 :デフォルトの名無しさん:2010/05/29(土) 16:16:09
えー?
人物について語るのって専門の話を回避するテクニックであって、
専門的な事を話す目的があったらそれじゃダメじゃん。

246 :デフォルトの名無しさん:2010/05/29(土) 16:16:28
>>241-244
何に対しての「逆」を想定してるんだ?

>>222,226 の逆であれば、Haskell を一通り習った人が
CやJavaの素人に入門的な話をするという事だと思うが、
それなら Hello, World も、人物の話も、
それほど適切ではないような気がするが。

247 :デフォルトの名無しさん:2010/05/29(土) 17:43:23
Haskellから入門するって、従来では考えられなかったケースだからね。
データ構造にしても、可変の方がはるかに蓄積が多いから、まず不変を学習してから可変に移るというのは異常。

248 :デフォルトの名無しさん:2010/05/29(土) 20:46:07
みなさん、ありがとう。

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

余り大上段に構えず、こんな便利なことができる、程度の紹介にとどめておいた方がいいですね。
とりあえず高階関数だけはおさえておこうと思います。

249 :デフォルトの名無しさん:2010/05/29(土) 20:48:03
Software Design の、この前出た号に、ちょうど特集がある。

250 :デフォルトの名無しさん:2010/05/29(土) 20:49:15
>>249
あれはあんまり参考にならんぞw
考え方が偏りすぎている

251 :デフォルトの名無しさん:2010/05/29(土) 21:15:12
そもそもHaskellerに中立的な視点の人なんているのか?

252 :デフォルトの名無しさん:2010/05/29(土) 21:21:09
この世の誰一人として社会的中立な人間なんていないと断言できる。
だってその人自身が社会を構成する人間の一人なんだから。

253 :デフォルトの名無しさん:2010/05/29(土) 21:37:21
>>248
高階関数と再帰の具体例を挙げて関心を持ってもらうストーリーがよさそうですね。
あとは「変」数じゃなくって…って話かな。

C言語の人は関数ポインタを使うのとどう違うの?とか聞いてくるかもしれませんね。
え?そんなビギナーの聴衆はいないって?w

254 :デフォルトの名無しさん:2010/05/29(土) 21:40:35
>>248
関数型言語の本質はラムダ計算にある。

255 :デフォルトの名無しさん:2010/05/29(土) 21:42:04
>>253
遅延評価なんだから無限リストも。

256 :デフォルトの名無しさん:2010/05/29(土) 22:02:37
関数ポインタでは書けなくて、高階関数が必要な例ってあるのかな?

257 :デフォルトの名無しさん:2010/05/29(土) 22:03:53
無限リストは他の関数型言語を知っている人でもなかなか理解しにくくない?
俺は A Gentle Introduction to Haskell の fibs の例はなかなか理解できなかった。

>>247
既存のアルゴリズム本を参考にして
リストに (!!) でアクセスしまくるコードを書いて来た人を思い出した

258 :デフォルトの名無しさん:2010/05/29(土) 22:39:43
無限リストといえば、ストリームや遅延パターンの話でよく例示される
server と client のプログラムを理解するのに時間がかかったな。

紙に鉛筆で簡約ステップを書き下して正しいと頭では分かっていても、
初めは問題なく動くのがなんか不思議な感じだった。
ああいうのをスラスラと例示できるようになりたいな。

259 :デフォルトの名無しさん:2010/05/29(土) 22:42:21
Prologやったことあれば無限リストはおなじみ

260 :デフォルトの名無しさん:2010/05/29(土) 22:58:56
>>256
ないよ
値としての関数は、ローカル変数の値を記録したオブジェクトと生の関数ポインタの組み合わせ(クロージャ)で表現できる
実際GHCなんかはコンパイル時に似たような変換してるはず

261 :デフォルトの名無しさん:2010/05/29(土) 23:12:02
なぜかHaskellの講義なのにコンスセルの説明で時間を取られる気がするw

262 :デフォルトの名無しさん:2010/05/29(土) 23:44:05
相手がlisperなら色々と話が早そうだ

263 :デフォルトの名無しさん:2010/05/30(日) 01:04:03
クロージャについては、実現可能だけど関数ポインタだと面倒っていう例になるかな。
Java の人なら、環境をフィールドとして持つ
call メソッドだけが定義されたオブジェクトみたいなものと言えば通じるんだろうか

264 :デフォルトの名無しさん:2010/05/30(日) 15:17:58
「Haskell は論文を書くためだけに作られた言語です」

265 :デフォルトの名無しさん:2010/05/30(日) 15:22:53
「それなのに実用になるって、凄い事だと思いませんか?」

266 :デフォルトの名無しさん:2010/05/30(日) 16:54:04
>>264
LLの王様で超実用言語のperl6がhaskellで作られた、つまり、haskellは超超実用言語だ。

267 :デフォルトの名無しさん:2010/05/30(日) 17:07:28
perl6って使われてんの

268 :デフォルトの名無しさん:2010/05/30(日) 17:29:03
Perl6のリリースは6月の予定だよ

269 :デフォルトの名無しさん:2010/05/31(月) 01:51:43
>>264 prolog がかまってほしそうにこっちを見ています

270 :デフォルトの名無しさん:2010/05/31(月) 03:07:22
cabalファイルの書き方についての質問ですが、
実行ファイルの保存先を./binにしたいのですが、
どのように書けば良いでしょうか?

271 :デフォルトの名無しさん:2010/05/31(月) 06:24:16
>>270
CabalのBuild-type: Simpleは典型的なケースを「シンプル」に記述できるようにデザインされている。
Executableのパスを明示的に指定するのは典型的なケースではないので、他のBuild-type、たとえばCustomなどを調べてみてはどうだろうか。



272 :デフォルトの名無しさん:2010/05/31(月) 12:59:23
>>260
そもそも汎用プログラミング言語はすべてチューリング等価なんだから、
できることは同じ。
生産性と実行効率を改善するための努力が延々と続いている。

273 :デフォルトの名無しさん:2010/05/31(月) 13:25:29
cとかjavaとかは関数型に比べれば冗長だもんな。
思考にとって無駄が多すぎる^^; そのてん 生産性の向上はあるわな。

274 :デフォルトの名無しさん:2010/05/31(月) 13:41:37
>>273
なにを生産するかによるな
OSを生産させたら関数型のほうが冗長かもしれないし
関数型のキラーアプリである「あれ」を生産させたらもちろんCのほうが冗長だよね

275 :デフォルトの名無しさん:2010/05/31(月) 13:43:45
HaskellのキラーアプリといえばParsecだろ

276 :デフォルトの名無しさん:2010/05/31(月) 15:17:33
1 つの Haskell は全ての言語を繋ぎ止める

http://news.ycombinator.com/item?id=1390889

277 :デフォルトの名無しさん:2010/05/31(月) 17:53:03
>>274
「あれ」って何? もうさっきから気になって気になって、仕事が手に付きません

278 :デフォルトの名無しさん:2010/05/31(月) 17:55:01
>>274
どんな種類のソフトウェアを書くにしても関数型がCより冗長にしか書けないということはありえない。
OSがCで書かれているのは、抽象レベルの高すぎる言語はportableでないからだ。
少なくとも昔は、lispなどでは十分に速い実行コードを生成することができなかった。

279 :デフォルトの名無しさん:2010/05/31(月) 18:43:06
Linux のドライバを書くのに C より Haskell の方が簡潔に書けるとは思えないなあ。

280 :デフォルトの名無しさん:2010/05/31(月) 18:54:13
それはLinuxのOSモデルが関数型に適していないからだ。

281 :デフォルトの名無しさん:2010/05/31(月) 18:56:45
関数型に適してないモデルでは簡潔に書けないとすると >>278 の主張と矛盾が生じるね。
>>278 は『ありえない。』って言い切っちゃってるから。

282 :デフォルトの名無しさん:2010/05/31(月) 19:05:53
lispマシーンが主流な世界だったら変わってたよ。

283 :デフォルトの名無しさん:2010/05/31(月) 19:07:15
種類=用途だから。
C言語で書かれたプログラムのエミュレーションにはC言語が最適だろう。

284 :デフォルトの名無しさん:2010/05/31(月) 19:11:09
ひとつの関数を書くという意味ではHASKELLとか関数型のほうがC/JAVAより
短くなるよ。その辺のことを冗長で思考を止めやすいといってる。
ちがう?

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

手続き型になれちゃってる人には関数型は面倒なんだろうね。

285 :デフォルトの名無しさん:2010/05/31(月) 19:11:53
現実には、C から呼び出せる GC のライブラリを作りたいとか、特定のアプリケーションの
プラグインを書きたいとか、Haskell では到底簡潔に書けない様な『種類』のソフトウェアも
沢山あるよね。

286 :デフォルトの名無しさん:2010/05/31(月) 19:22:18
>>284
その関数が実行される環境を無視するならね。
本来考慮すべきかもしれない事を無視していいなら、それは思考に素直にもなるでしょう。

287 :デフォルトの名無しさん:2010/05/31(月) 19:24:11
それぞれの言語に強みがある。
Haskellは、記号的な問題を解くのに強い。
そういう問題は関数に落とし込めるようにあらかじめ抽象化されているから。

> 特定のアプリケーションのプラグインを書きたい
Lispでマクロを使うといい。

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

これってどういう意味だか誰か分かる?
Lisp って CL の事で良いのかな?
マクロはリーダーマクロ?
それとも defmacro の話?
それでどうやってプラグインが書けるの?
ちょっと話が見えないな。

289 :デフォルトの名無しさん:2010/05/31(月) 19:38:32
結局、関数型で書き易い問題とそうでない問題の両方があるってことで異論は無いよな?

290 :デフォルトの名無しさん:2010/05/31(月) 19:45:31
>>288
記号的というと
・variantがあればLisp風のデータ構造 (括弧は少なめ) を作れる
・concatMapがあればPrologみたいなのを作れる
ただし、クロージャと同じく、関数型ではない言語に取り入れられるかもしれない。

291 :デフォルトの名無しさん:2010/05/31(月) 19:47:33
>>290
アンカー間違ってない?

292 :デフォルトの名無しさん:2010/05/31(月) 20:11:51
>>291
フィボナッチのように数学の問題ということではないかと

293 :デフォルトの名無しさん:2010/05/31(月) 20:14:46
質問に答えられないなら、無理にレスしなくていいよ

294 :デフォルトの名無しさん:2010/05/31(月) 20:55:11
>>268
なにを指して無視といってるのかがよくわからない。

295 :デフォルトの名無しさん:2010/05/31(月) 21:07:19
>>294
>>292

296 :デフォルトの名無しさん:2010/05/31(月) 21:46:00
>>248
結果はまだ先なのかな。どんな反応があったか、よかったらレポートして下さい。

297 :デフォルトの名無しさん:2010/05/31(月) 23:01:04
>>248
2ちゃん規制されていたから、亀レスだけど、「こんな便利なことができる」っていう紹介で良いと思います。
例えば、(都道府県名, 市長村名, 人口, 面積)みたいなリストを作っておいて、それをmap、filter、sortBy、groupByで操作して、都道府県を人口順に並べるとか、ある県の人口密度を出すとかを、ghciでやると面白いのではないでしょうか。

298 :デフォルトの名無しさん:2010/06/01(火) 06:51:44
>>297
そうですね。
Haskellの素晴らしさを示すには、オーディエンスが慣れ親しんだ問題を
エレガントに解く方法を示すのがいいと思います。
彼らが使っている手続き型言語による解法との比較もしてはどうでしょうか。

でもただエレガントというだけでは、感情的な反発を引き起こしたり、
マニアックな奴だと思われるかもしれませんから、
人気度やパフォーマンスなどの客観的(統計的)なデータを示し、
長所と短所の両面も伝えてはどうでしょうか。

299 :デフォルトの名無しさん:2010/06/01(火) 08:54:35
>>272
それは話してるレイヤが違うだろ
CにもHaskellにも「関数」と呼ばれるものがある。Cの関数は実行時に作れないがHaskellのは作れる
ではCの関数だけを使ってHaskellの関数の真似をすることができるか?みたいな問題
ここでいう「真似」というのは関数に渡せるとか変数に入れられるとかそういう言語の「内部」での性質を真似するということ
チューリング完全性の議論はプログラムが全体としてどういう振る舞いをするかしか問題にしていないので、別の話

300 :デフォルトの名無しさん:2010/06/01(火) 09:53:01
(訳注)
Haskellは実行時にCの関数を作れないが、Cは実行時にHaskellの関数を作れる
Cの関数だけを使ってHaskellの関数の実装をすることができる
「実装」というのはHaskellの「内部」を実装するということ

301 :デフォルトの名無しさん:2010/06/01(火) 11:43:16
Cは貴金属の現物みたいなものだな
他の言語は、金融工学を駆使した電子マネーを目指しているようだ

302 :デフォルトの名無しさん:2010/06/01(火) 11:57:13
いまいちよくわからない比喩だな。
Cはどこでも動くが、金塊はどこでも貨幣として使えるわけじゃない

303 :デフォルトの名無しさん:2010/06/01(火) 12:10:14
>>301
というか電子マネーと金融工学ってあまり関係ないんじゃないか

304 :デフォルトの名無しさん:2010/06/01(火) 14:45:59
絶対に関係ないと言い切れないところが面倒臭い

305 :デフォルトの名無しさん:2010/06/01(火) 14:53:26
貴金属の現物 → 具体的なもの
電子マネー   → 具体的なものと機能は同じだけど、実体ははきりせず抽象的なもの
            金融工学は、その抽象的なものから成り立つのを助け、利益を出そうとするもの。

C → 具体的にメモリをいじくったするもの
JavaとかPHPとか → 具体的なものと、機能は同じだけど、にラップをかけて抽象的に扱う。動作は遅い。
              金融工学 → ガーベージコレクション

306 :デフォルトの名無しさん:2010/06/01(火) 16:37:44
Cも高級言語だし。
ポインタ演算はあるがメモリ割り当てまでコントロールするわけではない。
JavaのHotSpotみたいな最適化技術は金融工学みたいなものといえなくもない。

307 :デフォルトの名無しさん:2010/06/01(火) 19:03:18
>>279
Haskellを C言語にコンパイルする言語をHaskellで作ればいいんじゃね?

308 :デフォルトの名無しさん:2010/06/01(火) 19:11:10
>>307
C のソースを吐いても GC 前提だったりランタイムライブラリが必須だったら使えないでしょ。

309 :デフォルトの名無しさん:2010/06/01(火) 19:37:53
http://tryhaskell.org/

これ何に使うんだろうって思ったけど、iPhone や iPad で Haskell を動かしたい時に良いかも。

310 :デフォルトの名無しさん:2010/06/01(火) 19:39:25
なんでHaskellはCの関数作れないの?

311 :デフォルトの名無しさん:2010/06/01(火) 20:03:10
>>308
その昔、JavaOSというOSが勝手にGCしちゃう変なモノがありましてね…

312 :デフォルトの名無しさん:2010/06/01(火) 20:11:34
>>310
クロージャは「定義された場所のほかに、生成された時刻を持つ」。
(時刻とか言ったら怒られそうだが)

一方、Cの関数はコードの場所だけで特定される。
コードを変更して再コンパイルとかしないと、新たな関数を作ることはできない。

313 :デフォルトの名無しさん:2010/06/01(火) 20:11:35
>>311
OS レベルで一括してメモリを回収するのは別に良いと思いますよ?
今はそういう話はしていないですけどね…

314 :デフォルトの名無しさん:2010/06/01(火) 20:25:59
foreign import "wrapper"でCの関数作れるよ

315 :デフォルトの名無しさん:2010/06/01(火) 21:51:48
evalがない言語は、「関数を実行時に作れる」とは言わないと思う。

316 :デフォルトの名無しさん:2010/06/01(火) 21:59:39
お薦めの入門書を教えてください

317 :デフォルトの名無しさん:2010/06/01(火) 22:34:13
>>304
そういう場合は、強硬に主張している相手を値踏みして、
切っても問題なさそうな感じだったら無理矢理切ればいい。
真実がどうであろうと、どっちみち現時点では時間の浪費に
しかならないという算段がつくならその話は結局無駄。

318 :デフォルトの名無しさん:2010/06/01(火) 23:10:25
>>315
ということは、lex+yaccは「関数を実行時に作れる」言語ということになりますな


319 :デフォルトの名無しさん:2010/06/01(火) 23:17:11
Haskellが実行時に関数を作れないってのは、
Haskellが実行時にリストを作れないっていうのと同じくらい馬鹿げてる
foreign import "wrapper"は実行時にコード生成するし

320 :デフォルトの名無しさん: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
高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉

321 :デフォルトの名無しさん: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
首吊り首絞めプレイ大好き高根英哉

322 :デフォルトの名無しさん:2010/06/01(火) 23:20:03
53 :名無しさん@どっと混む:2010/05/17(月) 13:14:06 ID:E/7OZVtz0
>>18
高根英哉blogでレイプ仲間募集中

私とともにマスクの女どもを弄ぶ仲間を募集する
急に思いついたら連絡をして、集まれるような仲間だ
だから、複数名募集するし、いついつという日時があるわけでもない
条件は以下のとおりだ
    ・SMを実践している、または興味がある
    ・マスクを用意できる
    ・都内でイベント参加できる
    ・イベント内容およびこの仲間を通じて知りえた情報を口外しない
    ・成人男子である
    ・携帯電話および携帯メールアドレスを私に公開できる
    ・酒が好きである
希望者は私宛にメールを送ってほしい
全員が参加できるわけでもないので、こちらの選択に任せてもらう
なるべく想いを書いてもらうほうがわかりやすいし
経験や顔写真も歓迎。
r2007@maskr.com
maskr_2008@yahoo.co.jp
hide@comrade.co.jp

323 :デフォルトの名無しさん:2010/06/01(火) 23:29:04
コピペ君って馬鹿だな、まで読んだ。

324 :デフォルトの名無しさん:2010/06/01(火) 23:37:41
実行時コード生成機能なんてあるんだ
Haskellは型安全な言語だと思っていたのに…

325 :デフォルトの名無しさん:2010/06/01(火) 23:49:51
何をいまさらw HaskellのFFIは、Cと同程度の自由度じゃん
純粋でなくてもいい部分は限りなく自由なのも、Haskellの魅力だと思うね

326 :デフォルトの名無しさん:2010/06/02(水) 00:22:25
素晴らしい。
ちなみにmapする関数をユーザに入力させるプログラムはどうやって書けばよいでしょうか?

getLine >>= \s -> map (??? s) xs

327 :デフォルトの名無しさん:2010/06/02(水) 00:46:08
mapMを使ってください

328 :デフォルトの名無しさん: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
}
}
}

329 :デフォルトの名無しさん:2010/06/02(水) 08:51:27
セミコロンを行頭にもってくる記法はいいね。


330 :デフォルトの名無しさん:2010/06/02(水) 20:09:00
>>328
ありがとう。
なるほど、関数をHaskellの世界に持ってくるわけではなく、
引数を向こうの世界に渡して実行させるわけですか。
確かにこれなら、Haskell側は汚染されずにすみますね。

331 :デフォルトの名無しさん:2010/06/02(水) 20:10:21
すみません、途中で送信してしまいました。

>>327
これは、ユーザが文字列として与えた関数をHaskellの関数にできるということでしょうか?


332 :デフォルトの名無しさん:2010/06/02(水) 20:11:29
本音と建前を使い分けているかのような嫌な言い方だな

333 :デフォルトの名無しさん:2010/06/02(水) 20:32:48
Haskellには組み込みのevalがないだけで、自分で好きな構文のevalを書くのは何も問題ない
「ユーザが文字列として与えた関数をHaskellの関数に」することも当然できる

334 :デフォルトの名無しさん:2010/06/02(水) 20:38:48
そもそもevalってlispの用語だしな

335 :デフォルトの名無しさん:2010/06/02(水) 20:47:27
文字列をとって可変長引数の関数を返す高階関数になるのかな

336 :デフォルトの名無しさん:2010/06/02(水) 20:48:40
あ、いや副作用のある関数を返す可能性もあるし、一筋縄ではいかないか

337 :デフォルトの名無しさん:2010/06/02(水) 20:58:28
インタプリタだろ

338 :デフォルトの名無しさん:2010/06/02(水) 21:05:20
なんでそんなプログラムを書く必要があるのか理解できないな。
自分一人で使うならHaskellで直接書けばいいし、
そうでなければなぜそんな局所的なインタプリタが必要なのか。
もっとマクロなレベルでデザインが間違っているのではないか。

339 :デフォルトの名無しさん:2010/06/02(水) 21:22:19
>>338
チューリング完全である必要がある事は理解できるよな
それをふまえて、他の言語をマネできる自由な言語が勝ち組みたいな雰囲気になった

340 :デフォルトの名無しさん:2010/06/02(水) 23:01:15
>>333
C言語も同じようなことできるよね
昔、ウィンドウを操作するプログラムを作ってたときに、アセンブリコードを文字列で与えて実行時に関数を組み立ててた

341 :デフォルトの名無しさん:2010/06/02(水) 23:02:36
>>340
ちなみに、printfみたいに引数の数が可変の関数

342 :デフォルトの名無しさん:2010/06/02(水) 23:06:47
>>340
できるね
相当手間がかかるのと、機械語に依存することがHaskellとの違いだな

343 :デフォルトの名無しさん: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の似たような関数にしてもインタプリタだからできることであって、インタプリタと連携させる前提で比較しないと不公平という気もする。

344 :デフォルトの名無しさん:2010/06/03(木) 10:37:50
ghc apiを息をするように使いやがって
この変態どもめ

345 :デフォルトの名無しさん:2010/06/03(木) 10:46:43
もうhs-pluginsの時代じゃないんだな、勉強になった

346 :デフォルトの名無しさん: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

みたいなの違い。

347 :デフォルトの名無しさん: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)

こんなのについてのこと。

348 :デフォルトの名無しさん:2010/06/03(木) 21:22:35
これからlispってどうなるんだろうな。
抽象度の高いプログラミングはHaskellが最先端だし、
実用目的でもClojureよりScalaのほうが有望だろ
もうlispは必修言語とはいえないんじゃないか

349 :デフォルトの名無しさん:2010/06/03(木) 21:29:00
Haskellの弱点は遅延評価(利点でもあるが)

これがある限り、one of them にしかならんだろう

350 :デフォルトの名無しさん:2010/06/03(木) 21:47:09
>>348
Lisp の最大の利点はコード=データである事。
Lisp は Haskell とは全く別の世界を持った言語だから、比べてどうと言うモンじゃない。

351 :デフォルトの名無しさん:2010/06/03(木) 22:00:06
>>343
>インタプリタだからできることであって、インタプリタと連携させる前提で

インタプリタではなくいきなりコンパイルする実装もあるよ。
それと、別に連携している訳じゃなくてコンパイラが組み込まれているのが当然というだけ。

352 :デフォルトの名無しさん:2010/06/03(木) 22:00:42
>>350
Haskellでもデータをコードとして扱えるよ

353 :デフォルトの名無しさん:2010/06/03(木) 22:09:20
>>>352
コードをデータとして扱えるの?
マクロは無いんでしょ?

354 :デフォルトの名無しさん:2010/06/03(木) 22:17:55
lispをインタプリタのみだと思ってるなら大きな誤解だろうな。
lispがcobolとかみたいに消えると大きな声をだしてるのは昔からじゃない?
消えると叫ぶ人ほどlispがまだ残ってる理由がわからないんだと思うよ。

355 :デフォルトの名無しさん:2010/06/03(木) 22:23:26
lispってのは自由度の高さと強力なマクロや動的な言語だはみんなご存知だけど、
それに伴って、思考を邪魔しない言語なんだよ。それに気がついた人ほど病みつき
になりやすいし、他の言語を触りたがらない人になりやすい。なんでかっていうと
特に手続き型なら雑務的なプログラミングでいらいらさせられるから。それ故に
使い続ける人がいるってことさ。

haskellも面白いし、好きだよ。

356 :デフォルトの名無しさん:2010/06/03(木) 22:25:19
エンタープライズ用途じゃLispもHaskellも消える以前に存在してないけどな
COBOLとは生息している(いた)領域が違う

357 :デフォルトの名無しさん:2010/06/03(木) 22:29:27
Haskell は知らんけど、Lisp は雇用あるよ。Haskell も何かあるでしょ。

http://lispjobs.wordpress.com/

358 :デフォルトの名無しさん:2010/06/03(木) 22:30:57
Haskellが今のところエンタープライズ用途に向かないのは、
言語設計のせいでは無いような気がする。

359 :デフォルトの名無しさん:2010/06/03(木) 22:32:16
>>357
Haskellって これから需要がありそうな気がするんだけどな。
時代は関数型なのに、多くの人は手続き型をやってる印象が強い。

360 :デフォルトの名無しさん:2010/06/03(木) 22:35:08
>>346-347
違わない

361 :デフォルトの名無しさん:2010/06/03(木) 22:38:29
関数型言語全盛の時代って90年代からゆるーく続いてる気がするから、今更な感じ。

362 :デフォルトの名無しさん:2010/06/03(木) 22:42:09
>>359
言語単体で需要が増えることはまずない
新しい環境とかプラットフォームが出てきてそこで最適な言語であれば需要が出てくる
UNIXでC、WindowsでVB、Webで最初Perl後Java&JavaScriptのように

363 :デフォルトの名無しさん:2010/06/03(木) 22:43:45
CL で言う所の Allegro とか LispWorks みたいな会社が出来れば
多少は変わる気もするけど、もしかしてもうあるのかな?

364 :デフォルトの名無しさん:2010/06/03(木) 22:45:36
Allegro じゃなくて Franz の間違い

365 :デフォルトの名無しさん:2010/06/03(木) 23:05:43
>>362
emacsでlispもあるな

366 :デフォルトの名無しさん:2010/06/03(木) 23:14:31
Lisp は LispM じゃないの

367 :デフォルトの名無しさん:2010/06/03(木) 23:14:52
Emacsなlisperでも、elispは嫌々使ってるよw

368 :デフォルトの名無しさん:2010/06/03(木) 23:17:02
末尾呼び出しの最適化も、レキシカルクロージャも無いもんな。

369 :デフォルトの名無しさん:2010/06/03(木) 23:23:05
>>366
Symbolics全盛時でも流行るとこまでいってないだろ

370 :デフォルトの名無しさん:2010/06/03(木) 23:48:19
JHaskellとかH#とかあればいいかと思ったけど、
結局、既存のライブラリはそのまま使えなくて意味ないのかな?

371 :デフォルトの名無しさん:2010/06/04(金) 00:11:41
既存プラットフォームで先行(普及的な意味で)してる言語と争っても勝ち目ないよ
ScalaやClojureも際物で終わる
iPhoneとかAndroidのアプリがHaskellでしか書けないとかそういう環境が必要

372 :デフォルトの名無しさん:2010/06/04(金) 00:28:24
自サーバとか、普通にHaskell使ってるけど

企業とかに使ってもらうことが普及というなら、
いまだに30年前のアセンブラとかCOBOLとかがメインで動いてるから
Javaですらまだ普及していないと言える


373 :デフォルトの名無しさん:2010/06/04(金) 00:31:22
COBOL や ASM のコードが動いている事と、Java が普及している事は
同時に成立するんじゃないの。

374 :デフォルトの名無しさん:2010/06/04(金) 00:31:28
>>371
保守的にならなきゃならんところほど 動きが鈍いからね。
日本って国を考えても国民性を考えても保守的過ぎるところがあるし
あたらしい動きに合わせられないからね。たしかに人がいないものは
保守ができないという問題はあるけどね。

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

キラーアプリ次第とはいえるよね。railが出てきたときにRubyとなった
みたいに。

375 :デフォルトの名無しさん:2010/06/04(金) 00:33:12
他の言語でも本で
みんなの〜 ってあったけど
結局みんな ってのがキーワードだからね。金太郎飴人間みたいで嫌な話だがね。

376 :デフォルトの名無しさん:2010/06/04(金) 00:46:34
企業が保守に金払ってるかどうかでいうと、アセンブリやCOBOLにはいまだに金をつぎこんでるけど、Javaには金をかけてない
個人で勝手に使うかどうかが基準ならHaskellはすでに十分に普及している


377 :デフォルトの名無しさん:2010/06/04(金) 00:47:42
>>376
それどこの統計?

378 :デフォルトの名無しさん:2010/06/04(金) 00:51:55
cobolerってまだいるの? おおいの?

379 :デフォルトの名無しさん:2010/06/04(金) 00:54:44
むしろHaskellは普及させてはならない

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

よい言語は普及させずに知ってる人だけでコソコソ共有するべき


380 :デフォルトの名無しさん:2010/06/04(金) 01:09:47
大学や情報処理試験で、巨大な整数の加算乗算を丸めやオーバーフローなく計算できるのがCOBOLの特徴だと宣伝してきたので、公官庁を中心にいまだにCOBOL部署は多い


381 :デフォルトの名無しさん:2010/06/04(金) 01:20:46
団塊の世代が退職してアセンブリ読める人がいなくなって本当の危機がおとずれると脅されてる。


382 :デフォルトの名無しさん:2010/06/04(金) 01:23:27
金融(証券)じゃCobolよりJavaのが仕事多いよ
中小向けじゃバックオフィス(銀行の勘定系相当)もJavaになってきてるし
もちろんHaskellの仕事はない

383 :デフォルトの名無しさん:2010/06/04(金) 01:29:47
銀行はPCまわりは近代化してもATMまわりがこれからもCOBOLで当分固定だからな…
当然Haskellの出番はない


384 :デフォルトの名無しさん:2010/06/04(金) 01:39:54
javaやhaskellの全盛はTRONが死滅してから


385 :デフォルトの名無しさん:2010/06/04(金) 06:48:42
Haskellを調べててよくわからんことがあります。
push/popのようなスタックのデータ構造の操作って、ピンとこない。
なんとなく副作用のない操作と合わないというのかメモリを多く食いそうな
感じがしちゃってます。実際はどうなんだろう?
という疑問があります。どうなんでしょうか?

>>360
コメントありがとうございます。

386 :デフォルトの名無しさん:2010/06/04(金) 06:54:48
http://tech.puredanger.com/2010/02/24/language-job-trends/

387 :デフォルトの名無しさん:2010/06/04(金) 06:56:30
>>385
ST monad

388 :デフォルトの名無しさん:2010/06/04(金) 07:10:04
>>387
ありがとうございます。ググッてみます!

389 :デフォルトの名無しさん: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すると型システムに弾かれるようなやつです

390 :デフォルトの名無しさん:2010/06/04(金) 18:29:48
そもそもスタックって概念には副作用とかないような気がするんだが。
xとxsを引数にとって結合する関数ってpushしてるとは言えない?
(x:xs)からxとxsを返す関数ってpopしてるとは言えない?

副作用があるように実装している言語が多いだけのように思えるんだが。

391 :デフォルトの名無しさん:2010/06/04(金) 18:47:34
>>390>>385宛な。

392 :デフォルトの名無しさん:2010/06/04(金) 19:03:04
>>390
抽象データ型はデータのインタフェースを定義するだけだからな
consリストでスタックを実装することもできる

393 :デフォルトの名無しさん: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' (略


394 :デフォルトの名無しさん:2010/06/04(金) 23:01:22
>>393
そういう手もあるんですなー
普通のファンクタにフラグが付いたものみたいで
何らかのイディオムとしてありそうです

395 :デフォルトの名無しさん: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)

なんてすれば長さつきのリスト型ができますー

396 :デフォルトの名無しさん:2010/06/04(金) 23:32:06
>>393
pop EmptySの場合にはじかれるのは分かったけど、
それ以外だと、どのような場合にはじかれるの?
はじかれるかどうか試すテストを書けばいいの?

397 :デフォルトの名無しさん:2010/06/05(土) 07:36:35
>>396
型推論器が、NotEmptyと推論できない場合のすべて、じゃない?
関数引数で、型がスタック一般の場合とか。

398 :デフォルトの名無しさん:2010/06/05(土) 09:16:31
自然数で持てばスタックオーバーフローも防げるのかな?
だとすると凄いな

399 :デフォルトの名無しさん:2010/06/05(土) 09:51:47
>>398
コンパイル時に検査できるかということなら無理
一般には長さの部分が抽象化された型になる

400 :デフォルトの名無しさん:2010/06/05(土) 10:45:12
>>397
型推論器ってなんなの?
(疎な条件分岐を考慮した) 定数伝播でpopが失敗するとかなら分かるんだが・・・
定数ではない何かが伝播するの?

401 :デフォルトの名無しさん:2010/06/05(土) 11:20:35
>>400
定数伝播を型でやってるようなもの…かな
型推論器はコンパイル時に走って、型指示のついていない
式に型をつけ、型が食い違っていればエラーを出す。

popはStack a NotEmpty型をとるため、
popにEmptyS (Stack a Empty型)を食わせるような式があると
コンパイル時にわかる。

402 :393:2010/06/05(土) 11:23:16
393はpopしたあとの残りのスタックを取り出す関数
rest (PushS _ s) = x
に型がつかなくて、スタックとして使えないことに気付いた。

395の長さつきリストならスタックとしても使える。


403 :393:2010/06/05(土) 11:24:00
訂正
rest (PushS _ s) = s


404 :デフォルトの名無しさん: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
みたいな感じで制約付きの関数が定義できるといいかもなーとか考えてるんだけど
できそうにないのか残念

405 :デフォルトの名無しさん:2010/06/05(土) 12:28:54
>>404
Agdaがあなたが求めているものかもしれない。

406 :デフォルトの名無しさん:2010/06/05(土) 14:38:55
>>404
http://ideone.com/foQDB
こういう感じ?

407 :デフォルトの名無しさん:2010/06/05(土) 15:27:03
>>406
できるんですか!
ありがとうございます、参考にさせてもらいます

408 :デフォルトの名無しさん:2010/06/05(土) 15:36:25
またですかhaskell.org

409 :デフォルトの名無しさん:2010/06/06(日) 21:13:02
HaXmlの使い方わかんないお>ω<

410 :デフォルトの名無しさん:2010/06/06(日) 21:25:57
キワモノと言われるHXTすらHaXmlよりかはまだわかりやすいと思う

411 :409:2010/06/06(日) 22:46:11
ちょっとタグのString読ませて内部表現として保持しておきたいだけなんですけど
ハクスムルじゃ大風呂敷なんでしょうか?

412 :デフォルトの名無しさん:2010/06/06(日) 22:49:46
やりたいことがよく分からないけど、TagSoupは簡単便利よ。

413 :デフォルトの名無しさん:2010/06/07(月) 11:07:30
Yampa か Reactive、あるいは他のFRPライブラリで遊んでみようと思うのですが、
お勧めとか、それぞれの特徴とか教えてもらえませんか?

あと、haskell.org の停止、長すぎる。


414 :デフォルトの名無しさん:2010/06/07(月) 12:06:35
>>413
私はPhooeyのドキュメンテーションを読んでみて使いやすそうだと思ったのだが、
残念ながら今のghcではビルドできない。
というわけでおすすめはQtだ。

415 :デフォルトの名無しさん:2010/06/07(月) 15:13:38
tagsoup-parsecがインスコできね
キャバル死ね

416 :デフォルトの名無しさん:2010/06/08(火) 22:36:16
Windows 使ってて Haskell Platform を入れてるんだけど、
GHC のライブラリにある Graphics.Win32 以下のものって、
Windows 用の GHC にしか入ってないの?

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

というのも、ここにあるライブラリと Yampa とか使って
GUI ライブラリを自作してみたいのだが、
Windows でしか使えない物になってしまうのか訊きたい。

417 :デフォルトの名無しさん:2010/06/08(火) 23:58:28
Graphics.Win32はWindowsだけ
wxHaskellやGtk2HsはLinuxでも使える

418 :デフォルトの名無しさん:2010/06/09(水) 07:25:26
>>417
ありがと、やはりか。

419 :デフォルトの名無しさん:2010/06/09(水) 17:44:18
そもそもIOに依存しないライブラリを作って
ごく少数のIOを注入するのがHaskellの理想だろ

理想が高くなると「本音と建前は別だよね」って奴も増えるから困る

420 :デフォルトの名無しさん:2010/06/09(水) 17:52:41
elereaのようにIOを注入というより一部をIOから隔離するっていう方が好きかな
実際に書くスクリプトはliftIOでモナドにIOを入れまくりってものばかりですが…

421 :デフォルトの名無しさん:2010/06/09(水) 18:20:03
Haskellの何がよいかというと、MonadやApplicativeを使って
型安全なDSLを簡単に定義することができることだからな

あとは型に応じて自動補完するIDEがあればいいんだが

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

423 :デフォルトの名無しさん:2010/06/09(水) 18:39:11
>>422
>そもそもHaskellは実用性を目的としていないのだから

Perl6はHaskell製

424 :デフォルトの名無しさん:2010/06/09(水) 19:10:53
>Perl6はHaskell製
そうだったか?
Perl 6の実装には2つあって、Haskellで書かれたPugsのほうは
もうテストにしか使われていないと聞いたが。
それにしても後付けの応用でしかない。

425 :デフォルトの名無しさん: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.

426 :デフォルトの名無しさん:2010/06/09(水) 19:51:17
>Haskellは実用性を目的としていない
ソースは?

427 :デフォルトの名無しさん:2010/06/09(水) 20:28:21
>>426
http://www.haskell.org/haskellwiki/History_of_Haskell

428 :デフォルトの名無しさん:2010/06/09(水) 20:34:29
hackagedb見ればほとんどが実用向けだと分かる

429 :デフォルトの名無しさん:2010/06/09(水) 20:35:55
haskell以上に素早くプログラミング出来る言語はないだろ。
Cなんかでチマチマやるより遥かに早いスパンで成果物が出来上がる。

430 :デフォルトの名無しさん: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.


431 :デフォルトの名無しさん:2010/06/09(水) 21:53:52
>>429
lispかhaskellかどっちがはやいだろうな。これはなんともいえん。

432 :デフォルトの名無しさん:2010/06/09(水) 22:37:12
実行性能が必要だったり、複数人で開発したり、自分以外の人間が保守したり、
有り物のライブラリを使って楽をしたかったり、長期間稼働する必要があったり、
ハードウェアに近い処理を実装する場合だったり、リソースの限られた機械で
動作させる必要があったり、誰かに使ってもらう為のライブラリを作る時や、
コンパイラのバグはコンパイラベンダーに丸投げしたい場合なんかは Haskell は
あんまり向いてないかもね。

433 :デフォルトの名無しさん:2010/06/09(水) 23:03:23
MLに対するHaskellの優位性というのはどの辺りの分野にあるのだろう?
まあ一長一短で全体としてはどちらが良いともいえないと思うが。

434 :デフォルトの名無しさん:2010/06/09(水) 23:33:41
並列処理ならHaskell,それ以外ならMLかな

435 :デフォルトの名無しさん:2010/06/09(水) 23:35:32
ocamlはhaskellの8倍遅い(笑)

436 :デフォルトの名無しさん:2010/06/10(木) 06:33:33
>複数人で開発したり、
lispよりはましだろう。lispこそ独善的なプログラマの言語。

437 :デフォルトの名無しさん:2010/06/10(木) 07:52:20
>>432
抽象データ型とかをつかってインターフェースをしっかりと定義しておけば、
C++ や Java と同程度に複数人で開発できる。

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

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

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

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

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

438 :デフォルトの名無しさん:2010/06/10(木) 08:57:47
>>432
>コンパイラのバグはコンパイラベンダーに丸投げしたい場合なんかは Haskell はあんまり向いてない

かといって、素人でもメンテナンスを続けられる軽量なコンパイラもない
手も足も出ない

439 :デフォルトの名無しさん:2010/06/10(木) 09:06:39
>>437
>C++ や Java と同程度に複数人で開発できる。
>したがって、自分以外の人間が保守することも普通にできる。

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

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

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

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

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

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

現実的な視点では、コンパイラの問題も言語の問題。

440 :デフォルトの名無しさん:2010/06/10(木) 10:06:13
抽象レベルが高いのでプログラマ自身が最適化するのが難しいという点では、言語に原因があるといえる

441 :デフォルトの名無しさん:2010/06/10(木) 12:53:14
>>439
そうか、すまんな。
全員が普通に Haskell プログラマーであること前提の話だと思ってたよ。
全員が普通に Java プログラマーの開発環境の様に。

共同開発者や保守要因の確保が困難ほど Haskell プログラマーが不足しているという話なら、
おまえの言っていることは当たり前であり、全くの正論で議論の余地はない。

442 :デフォルトの名無しさん:2010/06/10(木) 16:17:28
>>439
Haskellプログラマの数が少ないというより、Haskellプログラマ自身を開発するコストがバカ高いと思われ

443 :デフォルトの名無しさん:2010/06/10(木) 16:20:38
Haskellプログラマは一人いれば100人の中卒プログラマに匹敵する

444 :デフォルトの名無しさん:2010/06/10(木) 16:24:27
Haskellの1行はCの100行に相当する

445 :デフォルトの名無しさん:2010/06/10(木) 16:33:46
haskellの1秒はcの1光年に相当する

446 :デフォルトの名無しさん:2010/06/10(木) 16:41:43
>>445
それは頭悪そう

447 :デフォルトの名無しさん:2010/06/10(木) 16:46:22
HaskellではCで考えられないようなプログラムを書くことができる

448 :デフォルトの名無しさん:2010/06/10(木) 16:51:54
時間の単位が距離の単位になるくらい超越的なんだろう

449 :デフォルトの名無しさん:2010/06/10(木) 17:08:50
>>448
近代物理学の自然単位系では、時間と距離とを区別しない
約30万km = 1秒
1光年 = 1年

450 :デフォルトの名無しさん:2010/06/10(木) 22:35:56
haskellのAKB48はCのモーニング娘。に相当する。

451 :デフォルトの名無しさん:2010/06/10(木) 23:33:56
Haskellが地球ならCは火星でLispは宇宙そのものだ。

452 :デフォルトの名無しさん:2010/06/10(木) 23:54:19
テラフォーミング言語C

453 :デフォルトの名無しさん:2010/06/11(金) 00:32:38
Haskellの関数はCのポインタに相当する。

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

Haskellの欠点:
* ポインタがないので、関数を特別なファーストクラスオブジェクトにしなくてはならない
* 関数に自由に四則演算をすることはできない
* 型キャストはない

454 :デフォルトの名無しさん:2010/06/11(金) 00:36:12
それ欠点なのかw

455 :デフォルトの名無しさん:2010/06/11(金) 00:44:27
>>453
おい、初心者の就職活動みたいな事すんなよ

456 :デフォルトの名無しさん:2010/06/11(金) 12:43:34
関数に演算できるだろ。

457 :デフォルトの名無しさん:2010/06/11(金) 12:46:56
Haskell の関数に四則演算はできんと思ってたんだが、できるのか?

458 :デフォルトの名無しさん:2010/06/11(金) 12:52:37
Cでもできないはずだが、どうだろうか?掛け算や割り算って何だ?

459 :デフォルトの名無しさん:2010/06/11(金) 13:04:37
関数ポインタにはできないね

460 :デフォルトの名無しさん:2010/06/11(金) 14:25:17
和 f +++ f
積 f *** f

差と商はどう定義しよう

461 :デフォルトの名無しさん:2010/06/11(金) 15:23:21
積 f***g = \x-> Just x >>= f >>= g
和 f+++g = \x-> Nothing `mplus` f x `mplus` g x

462 :デフォルトの名無しさん:2010/06/11(金) 15:55:16
additive inverseを関数に対して定義する…だと?

463 :デフォルトの名無しさん:2010/06/11(金) 16:00:51
>>461
というか、MonadPlusが「和」を定義するクラスなんだが

464 :デフォルトの名無しさん:2010/06/11(金) 16:07:56
>>462
fが成功かつgが失敗のときf-gが成功

465 :デフォルトの名無しさん:2010/06/11(金) 18:49:39
Arrow とか ArrowChoice を持ってくるのが無難なのかな

466 :デフォルトの名無しさん:2010/06/11(金) 18:56:15
ArrowでModuleを作るのかー頑張れとしか良いようがないな
色々と制約を追加してModuleを構成できるArrowってのを考えるのが楽か
Arrowそのものが抽象だから具体例を考えなくてもいいし

467 :デフォルトの名無しさん: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の構文でうまく書けないけど

468 :デフォルトの名無しさん:2010/06/11(金) 19:20:01
ていうか関数ポインタの演算ってそんなものじゃないし

469 :デフォルトの名無しさん:2010/06/11(金) 19:30:34
どんなの?

470 :デフォルトの名無しさん:2010/06/11(金) 19:50:14
>>467
それは命題論理に対応するっていう話で、代数系じゃないでしょ

471 :デフォルトの名無しさん:2010/06/11(金) 20:14:04
Prologは述語論理でHaskellは命題論理なの?

472 :デフォルトの名無しさん:2010/06/11(金) 20:19:25
>>471
Haskellはそもそも論理型じゃないし

473 :デフォルトの名無しさん:2010/06/11(金) 20:33:31
>>470
CCC+直和が代数系でない?

474 :デフォルトの名無しさん:2010/06/11(金) 20:33:38
forallがあるから述語論理だろ
でtype of typeができないから二階じゃない

475 :デフォルトの名無しさん:2010/06/11(金) 20:50:44
なんかよくわからんけど、
RankNTypes拡張を有効にしたら
高階論理なんじゃないの?

476 :デフォルトの名無しさん:2010/06/11(金) 21:43:14
Curry-Howard 対応様が見てる

477 :デフォルトの名無しさん:2010/06/11(金) 22:14:43
二値じゃないから論理じゃないだろ

478 :デフォルトの名無しさん:2010/06/11(金) 22:21:30
関数プログラミングの楽しみっていう本、どこの本屋に行ってもないんですが
7年前の本なんですよね?
絶版したんでしょうか?

479 :デフォルトの名無しさん:2010/06/12(土) 00:15:57
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06805-8

近日発売中?

480 :デフォルトの名無しさん:2010/06/12(土) 00:45:08
>>477
お前の中では論理っていうと二値論理のことなのか?

481 :デフォルトの名無しさん:2010/06/12(土) 01:14:02
>>479
この本ずっと待ってんだけど6月下旬らしいね

482 :デフォルトの名無しさん:2010/06/12(土) 10:09:42
>>442
大学を思想的に侵略して関数型言語以外はクズという主義を学生に叩き込もうぜ

483 :デフォルトの名無しさん:2010/06/12(土) 10:27:19
その前に関数型言語の定義をめぐって内ゲバしないと

484 :デフォルトの名無しさん:2010/06/12(土) 12:21:48
Lispは関数型言語かどうかで死闘をくりひろげるわけですね

485 :デフォルトの名無しさん:2010/06/12(土) 12:24:41
世間一般ではともかく、今時大学で Lisp を関数型扱いしてたら相当の時代遅れだろう

486 :デフォルトの名無しさん:2010/06/12(土) 12:32:16
関数型言語の歴史を知っている人間ならLISPが関数型言語だというのは明らか

487 :デフォルトの名無しさん:2010/06/12(土) 13:42:09
マルチパラダイムとお呼び!

488 :デフォルトの名無しさん:2010/06/12(土) 14:03:07
yes, sir!

489 :デフォルトの名無しさん:2010/06/12(土) 16:11:17
lispって型にはまらない言語なんだから、
枠にはめて考えること自体合わないんだと思うよ。
今じゃマルチパラダイムになってるからね。

型にハメる系統と対照的だといえるよ。

490 :デフォルトの名無しさん:2010/06/12(土) 16:26:08
ラムダ計算の筆記用として考え出されたのがLISP
関数型言語はラムダ計算の応用だからLISPは関数型言語

491 :デフォルトの名無しさん:2010/06/12(土) 16:34:34
> ラムダ計算の筆記用として考え出されたのがLISP

嘘ですね

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

前件が意味不明です

492 :デフォルトの名無しさん:2010/06/12(土) 17:58:43
LISPは関数型言語ではない
LISPマシン専用言語だ

493 :デフォルトの名無しさん:2010/06/12(土) 18:33:42
>>491
あなたがウソですね

494 :デフォルトの名無しさん:2010/06/12(土) 20:19:19
関数型言語の元祖はlispだが、現代の関数型言語とは似て非なるものだ。
自転車や自動車、それに八つ橋などの例をみても、元祖が子孫と違うのは珍しくない。
関数型言語でも同様のパターンがあると考えるのはごく自然な発想だ。

495 :デフォルトの名無しさん:2010/06/12(土) 20:23:06
>>489
>型にハメる系統と対照的だといえるよ。
Haskellのことを言っているのであれば、これは少々不適切な表現だ。
Haskellはデータを既存の型にはめるだけではない。
プログラマが型を積極的に定義することを許しているのだから、型を使う言語と言ってほしい。

496 :デフォルトの名無しさん:2010/06/12(土) 20:25:29
Lispを関数型言語ではないというのは、黎明期の巨大携帯電話をmobileでないというようなもの。

497 :デフォルトの名無しさん:2010/06/12(土) 20:27:34
型から自由であろうと企てた結果、unsafeになって拡張できなくなってしまうのは残念なこと。
初心者にありがちな失敗コースです。

498 :デフォルトの名無しさん:2010/06/12(土) 20:32:39
チャーチルの戦車も、現代人には奇抜に見えるが戦車です。
http://obiekt.hp.infoseek.co.jp/t72/genesis1.html

499 :デフォルトの名無しさん:2010/06/12(土) 20:39:46
Lisp は純粋関数型じゃないって事で
Lisp はパラダイム非依存のパラダイス言語です

500 :デフォルトの名無しさん:2010/06/12(土) 20:42:25
数学も、もともと測量学だったものが長い歴史を経て純粋な神学になったんだから、歴史はより速く繰り返されるものです。

501 :デフォルトの名無しさん:2010/06/12(土) 20:48:41
>>499
というか、lispのパラダイムにはsyntactic abstraction(構文抽象)という名前があるんだよ

502 :デフォルトの名無しさん:2010/06/12(土) 20:55:54
言われてみれば測量学とラムダ算法って似たようなもんだな
具体的なものから抽象的な概念に進歩していくのか

503 :デフォルトの名無しさん:2010/06/12(土) 21:06:51
構文抽象は S 式と繋がりが強過ぎてパラダイムって感じはしないな

504 :デフォルトの名無しさん:2010/06/12(土) 21:18:08
関数型言語の始祖はC言語の関数へのポインタ

505 :デフォルトの名無しさん:2010/06/12(土) 21:20:01
Cの可変個の引数(printf)とコールバック

506 :デフォルトの名無しさん:2010/06/12(土) 21:24:41
真祖はstack winding

507 :物理っぽく言ってみた:2010/06/12(土) 21:31:18
古典的関数型言語(関数型言語の古典論)=
現代関数型言語(より良い理解のために)=

508 :J. M.:2010/06/12(土) 21:46:05
どうしよう。
「ただ、リストの再帰処理が書ける言語が欲しかっただけ」
といい出せない雰囲気…

509 :デフォルトの名無しさん:2010/06/12(土) 21:56:27
ジョン万次郎か

510 :デフォルトの名無しさん:2010/06/13(日) 02:39:41
Haskellは数値計算やシミュレーションには向かないのでは?
と書いてあるのをどこかで見た気がします。
これは本当でしょうか?

511 :デフォルトの名無しさん:2010/06/13(日) 02:46:34
そのようなことはありますん。書いた人に聞くか、どこに書いてあったかを示して下さい。

512 :デフォルトの名無しさん:2010/06/13(日) 06:29:39
>>510
まあ、Haskellに詳しくない人は、シミュレーションをどうやってモデリングすべきか見当もつかないかもしれないね

513 :デフォルトの名無しさん:2010/06/13(日) 07:27:25
haskellで速いプログラムを書くコツとかわからないもんね。

副作用がないってのがメモリは食うし遅いという印象があるのかも

514 :デフォルトの名無しさん:2010/06/13(日) 07:46:20
>>510
きれいなやり方が見当たらないときは、きたないやり方も許されます
詳しい人はそれを知っているので、数値計算もシミュレーションもこわくない

515 :デフォルトの名無しさん:2010/06/13(日) 09:11:15
C++みたいだな

516 :デフォルトの名無しさん:2010/06/13(日) 10:01:07
>>510
SoftwareDesignでnobsunが書いた記事でしょ。
Haskellはクソ遅いからシミュレーションみたいなパワーがいる処理には向いてないよw

517 :デフォルトの名無しさん:2010/06/13(日) 13:26:57
布教屋さんがそう言ってるのか、

518 :デフォルトの名無しさん:2010/06/13(日) 13:47:06
>>517
nobsunが言っているのは、我々が感じているのと同様に
reactiveなプログラミングをするのが非常に煩雑になってしまうというところ。
シミュレーションは物によるけど、決まったタイミングで処理をするもの、
例えばアニメーションとかは書きにくいね。
現在YampaなどFRPライブラリが作られてはおり、
reactiveなプログラミングを支援しようという動きはあるが、
あまりわかりやすくプログラミングできるとはとても言い難い。

そしてさらに誰がいおうと、HaskellはCと比べて明らかに遅い。

519 :デフォルトの名無しさん:2010/06/13(日) 14:01:16
まぁ、これからに期待だね

520 :デフォルトの名無しさん:2010/06/13(日) 14:08:09
しかし、関数型言語でも並行処理を利用すればオブジェクト指向設計(より強力な設計が可能)
を置き換える事が可能だと思う。
だからオブジェクト指向で有利なreactiveなプログラミングも関数型言語で簡単にできるようになると思う。

521 :デフォルトの名無しさん:2010/06/13(日) 16:22:15
線形型をもつATSはCに匹敵するパフォーマンスを出せるが
記述量もCと同等以上かつ大抵の人には読めない…
やっぱC++でHaskellっぽく書くというところで妥協するしかないのか

522 :デフォルトの名無しさん:2010/06/13(日) 17:46:29
CやC++なんて、言って見たらマシン語そのままみたいなもんだからね。それ超えようってなら、
勝手にアルゴリズムを推論して書き換えちゃうくらいじゃないとどうにもならないんじゃないの。

523 :デフォルトの名無しさん:2010/06/13(日) 18:00:22
>>522
何言ってるんだ?

524 :デフォルトの名無しさん:2010/06/13(日) 18:02:54
C++って「高級アセンブラに継ぎ接ぎだけど型レベル言語くっつけました^^」みたいなものだろ。

525 :デフォルトの名無しさん:2010/06/13(日) 18:07:46
継ぎ接ぎといえどTemplate Haskellよりまとも

526 :デフォルトの名無しさん:2010/06/13(日) 18:20:49
>>522
いや、CPUアーキテクチャの違いを吸収してくれるのは大きい。
小さなパフォーマンスコストでポータブルなコードを書けるんだからな。

527 :デフォルトの名無しさん:2010/06/13(日) 18:40:10
アーキテクチャまで掘って話すことは今の話の文脈では脱線だと思うが。

528 :デフォルトの名無しさん:2010/06/13(日) 19:07:06
アーキテクチャの話はしてないだろ。
高級言語がアーキテクチャの違いを吸収してくれると言っているんだから。

529 :デフォルトの名無しさん:2010/06/13(日) 19:24:02
でもね。ダイナミックプログラミングとか
必要な計算ならhaskellは得意だと思うんだけど。

530 :デフォルトの名無しさん:2010/06/13(日) 20:55:39
つか、Cと勝負しなくていいだろ。
Javaに勝てれば十分。

531 :デフォルトの名無しさん:2010/06/13(日) 21:04:33
HaskellはJavaよりスペース的には有利なはずだが。
しかし遅延評価だからスペースリークが怖いな

532 :デフォルトの名無しさん:2010/06/13(日) 21:45:35
スペースリークって、やっぱコンパイラによって違ってくるの?
たとえばスペースリークが出ないようにソースを調整したのに、
べつのコンパイラでコンパイルしたら出ちゃったとか。

それとも、共通したテクニックで防げるものなの?

533 :デフォルトの名無しさん:2010/06/13(日) 22:04:45
そりゃコンパイラによって違ってくるでしょ。
馬鹿な例だけど例えば必ずリークするコンパイラ作ってそれでコンパイルすればリークするし。

534 :デフォルトの名無しさん:2010/06/13(日) 22:06:29
>>532
程度の差はあるだろうが、基本的な考え方は同じでいけるはず。
Haskell でのスペースリークってのは要は遅延させた仕事がたまっていっぱいいっぱいってことだから。
それがないように注意深く調整すればいいって話。

535 :デフォルトの名無しさん:2010/06/13(日) 22:06:40
>>532
call by need簡約だけ想定してスペースリークを潰せば実用上問題ない

536 :デフォルトの名無しさん:2010/06/13(日) 22:36:10
メニーコアCPUな時代になって、すごく賢く自動的に並列化されるようになれば、
「Haskellで書くより速いプログラムをCで書くなんて非現実的な苦行」と言われるようになるかもしれない。
というか、なってほしい。

537 :デフォルトの名無しさん:2010/06/13(日) 22:41:55
Haskellが教えてくれたこと

純粋関数型言語だから自動並列化が簡単になるわけではない

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

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

そのようなリストの要素は一度参照されればもう二度と参照されないことは
プログラムソースの全体をちゃんと見れば分かることだけど、
そういう事をコンパイラに期待しても良いものなのか、ちょっと心配になる。

539 :デフォルトの名無しさん:2010/06/13(日) 22:54:12
あ、Fruit じゃなくて Fran か

540 :デフォルトの名無しさん:2010/06/13(日) 23:06:00
無限リストの頭を次々に読み捨てていくような処理なら、間違いなく回収してくれるよ

541 :デフォルトの名無しさん:2010/06/13(日) 23:10:01
そうなのか、安心した。

けっこう賢いんだな

542 :デフォルトの名無しさん:2010/06/13(日) 23:17:07
特にコンパイラが賢いことをしてる訳じゃなくて、実行時に普通のGCが走査してるだけだけどね

543 :デフォルトの名無しさん:2010/06/14(月) 00:11:45
最後にts' - (head ts)で処理時間を返すとかしてなければおk

544 :デフォルトの名無しさん:2010/06/14(月) 00:13:58
>>532
どのコンパイラでも、中間コードを生成するオプションを使ってコードを追えば、明らかにヤバい部分は回避できる


545 :デフォルトの名無しさん: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 などは明らかに要らないよね(参照されないから)。
それでも回収できないの?

546 :デフォルトの名無しさん:2010/06/14(月) 00:38:45
(head ts)はその値が必要とされるまで評価が遅延されてるから、
tsが参照されたままなんだよ

547 :デフォルトの名無しさん:2010/06/14(月) 07:31:33
そうなのか。

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

ずっと勘違いしてた、ありがと。

548 :デフォルトの名無しさん:2010/06/14(月) 09:29:41
そういう最適化をするコンパイラもあるかもしれないけどね

549 :デフォルトの名無しさん:2010/06/15(火) 12:16:51
tn - (head $! ts)
と正格適用すると回収されるのを期待できますか?

550 :デフォルトの名無しさん:2010/06/15(火) 18:32:50
>>549
headはもともと正格な関数なので、それでは何も変わらない
やるなら、リストを辿り初める前にあらかじめseqしておく

let h = head ts in seq h {- ここで処理。最後にhを使う -}

551 :デフォルトの名無しさん: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が正格ならどちらも例外になる気がするのですが、なぜそうならないのでしょう?

552 :デフォルトの名無しさん:2010/06/16(水) 11:15:35
>>551
idは正格だけどlength . (:[]) . idは非正格

553 :デフォルトの名無しさん:2010/06/16(水) 11:40:06
ごもっとも。
(length . (:[]) . (id $!)) undefined
のつもりで書いたんですが、式はそうなってなかったですね。
結局この場合、idを評価する前に終わってしまってるってことか。

例外になるタイミングが理解できないです。「タイミング」なんというものを
考えていること自体が間違ってるのかなぁ…

id undefined は id が返す undefined が例外を生成する
id $! undefined は idに適用する式 undefined を評価したときに例外を生成する
と考えてしまうのですが(なのでidが正格という意味がわからない)、
違うんですよね、きっと…

554 :デフォルトの名無しさん:2010/06/16(水) 11:45:45
(id undefined)が例外になるなら、(undefined)と書くだけで例外になるべきでは

555 :デフォルトの名無しさん:2010/06/16(水) 12:45:20
>>553
>id undefined は id が返す undefined が例外を生成する
>id $! undefined は idに適用する式 undefined を評価したときに例外を生成する
別にそう考えて問題ない
重要なのは、その二つの式の違いが外部からまったく区別できないということ
どちらの式も、評価されれば例外を生成するし、評価されなければ何もおこらない

556 :デフォルトの名無しさん:2010/06/16(水) 13:17:29
正格関数が例外を生成する
undefinedが例外を生成する
評価が例外を生成する

557 :デフォルトの名無しさん:2010/06/16(水) 17:36:40
>>553
例外はundefinedが評価されたときに発生する,と考えればよい.
ポイントは以下の2点.
・式の評価はその式がwhnfという形式になるまで評価を繰り返すことで行われる.
・undefinedはwhnfではない.

id undefinedという式を評価すると,idの定義からundefinedに変換されるが,
undefinedはwhnfでないため,再び評価が行われ、例外が発生する(有難いことに).
id $! undefinedという式を評価すると、$!の定義から引数であるundefinedが評価され、
例外が発生する.
例外発生までの過程は違うが、結果は同じになる.
正格関数では常にこうなるので、この現象を「idが正格だから〜」と説明しているのだろう.

558 :デフォルトの名無しさん:2010/06/16(水) 22:02:34
λおっぱい
http://satashi.tumblr.com/post/704197618/via-www-pornodl-com

559 :デフォルトの名無しさん:2010/06/17(木) 03:42:43
関数型言語で勢いが一番あるスレはここかな?それでもこれから流行る流行らないとか、生き残る生き残らないとか、そういう話が多いね

560 :デフォルトの名無しさん:2010/06/17(木) 10:59:07
>>559
Qi使ってる人居る?
HaskellとLispのいいとこ取りみたいで、個人的には重宝してるんだが。

561 :デフォルトの名無しさん:2010/06/17(木) 11:12:51
>>559
そういう話は次世代技術にはありがちなんだよ。

562 :デフォルトの名無しさん:2010/06/17(木) 17:27:31
>>560
恥ずかしながら、その言語をはじめて知りました。
ちょっとgoogleってみたけど、たしかに面白そう。
型定義のやり方が独特そうで、ちょっと戸惑っているけど。

563 :デフォルトの名無しさん: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 のおっぱいが遅延評価されて干からびたようなものか? 意味不明

564 :デフォルトの名無しさん:2010/06/19(土) 07:09:17
>>563
Shootoutでは速いほうだよ。
まあ、速くなるように書かれているだからだが
一体誰が遅いといっているのか知らないが、普通に書いてもRubyなどの動的言語よりは速い
Haskellはそもそも静的型なので、型宣言してもパフォーマンスは変わらない

565 :デフォルトの名無しさん:2010/06/19(土) 11:11:19
小手先でスクリプト組んでちょこっとした事務処理する場合、開発コストまで考えたらHaskellはおそろしく高速だと思います

566 :デフォルトの名無しさん:2010/06/19(土) 11:37:33
私は年賀はがきをHaskellで書いています

567 :デフォルトの名無しさん:2010/06/19(土) 15:22:04
Haskell はコンパイルが遅いと聞いたことがある

568 :デフォルトの名無しさん:2010/06/19(土) 15:32:49
ソースコードがCの1/10ならコンパイルが10倍遅くても問題無し。
実際には10倍も遅くはないが。

569 :デフォルトの名無しさん:2010/06/19(土) 15:50:53
Haskellコンパイラ自体をやってる人は日本にはいないん?

570 :デフォルトの名無しさん:2010/06/19(土) 16:44:05
コンパイルは遅くないがリンク(ld)は確実に遅い

571 :デフォルトの名無しさん:2010/06/19(土) 17:39:30
OCaml と比べれば遅いけどな>コンパイル

ld のメモリ食いは安い VPS だと死ねる

572 :デフォルトの名無しさん:2010/06/19(土) 18:20:48
make -jxオプションに相当するものがまだないんだよね…
あとリンカはgnu goldがこなれてくればある程度KAIZENできそう

573 :デフォルトの名無しさん: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 が見つからない、というエラーはどうやったら解消できるでしょうか…


574 :デフォルトの名無しさん:2010/06/23(水) 20:20:25
>>573
ghc --make test.hs

としてもうまくいかない?

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

ありがとうございます、そしてお騒がせしました。

576 :デフォルトの名無しさん:2010/06/23(水) 21:46:21
本屋に関数プログラミングの楽しみがあったから買ってきたけど、なにこれ?

 わ け わ か ら ん

577 :デフォルトの名無しさん:2010/06/23(水) 22:07:31
>>576
どこが分からないのでしょうか?

578 :デフォルトの名無しさん:2010/06/23(水) 22:08:00
目次見ただけで難しそう

579 :デフォルトの名無しさん:2010/06/23(水) 22:09:34
慣れてないだけですよ。
分からない言葉はひとつひとつ調べていきましょう。

580 :デフォルトの名無しさん:2010/06/23(水) 22:43:30
目次だけ見るととっつきにくそうだな

581 :デフォルトの名無しさん:2010/06/23(水) 22:57:15
>>577
いろんなテーマについて関数プログラミングの話してるみたいなんだけど、そのテーマが分からん
この本は続編みたいなんだけど、詳しくは前の本参照、みたいな箇所がいきなり出てきてわけわからん

あと、コード(?)の断片は出てるけど、実行方法とかは載ってないので初心者お断り

582 :デフォルトの名無しさん:2010/06/23(水) 22:59:45
初心者お断りなのは仕方ないと思うけど

583 :デフォルトの名無しさん: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

584 :デフォルトの名無しさん:2010/06/24(木) 00:25:34
おっと、すぐ上に居たか。失礼しましたw

585 :デフォルトの名無しさん:2010/06/24(木) 00:31:50
糞長いURLを貼るな

586 :デフォルトの名無しさん:2010/06/24(木) 01:21:19
http://www.amazon.co.jp/dp/4274068056/

587 :デフォルトの名無しさん: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→関数プログラミングの楽しみ、
の順に読む方が挫折しにくそうですね。

588 :デフォルトの名無しさん:2010/06/24(木) 07:28:08
>>581
どのテーマにも興味が持てなかったのなら、
仕方がないのではないか?
よくあることだよ。

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

同じ事だ。

589 :デフォルトの名無しさん:2010/06/24(木) 10:38:38
Algebra of Programmingから読むといいよ

590 :デフォルトの名無しさん:2010/06/24(木) 19:49:05
関数プログラミングの楽しみ は何かの続編らしいんですが、これの前の本の訳本はないのでしょうか?

591 :デフォルトの名無しさん:2010/06/24(木) 19:50:11
関数プログラミングの産声
関数プログラミングの楽しみ
関数プログラミングの終焉


3部冊とか?

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

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

次スレではテンプレ再構成ですね。何時になるか分かりませんが

593 :デフォルトの名無しさん:2010/06/25(金) 22:04:01
正直、あのおぼろげなヒントからここまで割り出すのは大変だった。
https://dspace.jaist.ac.jp/dspace/bitstream/10119/908/3/1184paper.pdf


594 :デフォルトの名無しさん:2010/06/26(土) 21:45:13
あー、世の中は広いんだなぁ。。。

595 :デフォルトの名無しさん:2010/07/05(月) 20:28:09
保守age

596 :デフォルトの名無しさん:2010/07/05(月) 20:57:48
980超えてない限りそうそう落ちないよ

597 :デフォルトの名無しさん: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

598 :デフォルトの名無しさん:2010/07/09(金) 14:03:42
:t handle (\(e::SomeException) -> return [])

599 :597:2010/07/11(日) 10:56:27
>>598
レスありがとうございます。ただ・・・
Illegal signature in pattern: SomeException
となってしまいました。

結局、元のGlob.hsソースのimportをControl.ExceptionからControl.OldExceptionに替えるとwarningが出るものの一応走りました。

600 :デフォルトの名無しさん: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 の中身が影響して
何か問題が起きているのかなと思うのですが、こういう場合はどうする
のがよいのでしょうか?

601 :デフォルトの名無しさん:2010/07/17(土) 17:15:43
RWHの258ページにparseWhileの定義が載っていますが、そこで(b:)と
再帰を繰り返して行った時の最後のidentity[]とはどう繋がるんでしょうか?

(b1:) <$> (b2:) <$> … <$> (identity []の結果(?))みたいな感じになると思うのですが、
この演算てどう行われるのでしょうか。


隣の頁のparseWhileVerboseを見ると、ifのTRUE節に対応した方はidentity (b:bs)と出てるから、
これが何故出てくるか分かれば理解できそうな気もするのですが…。

602 :デフォルトの名無しさん:2010/07/18(日) 19:49:21
初歩的な質問で申し訳ないんですが、
自前のDLLをHaskellで読み込んで使用するのって、どのようにすればいいのでしょうか?

603 :デフォルトの名無しさん: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

604 :デフォルトの名無しさん:2010/07/20(火) 01:48:12
otu

605 :デフォルトの名無しさん: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':) $ []
と同様ではないでしょうか

606 :デフォルトの名無しさん: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 [])


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

挫折を止まらせてくれたレス、thxです。

608 :デフォルトの名無しさん:2010/07/22(木) 01:43:46
Haskellってオブジェクト指向プログラミングはどうなってるの?

609 :デフォルトの名無しさん:2010/07/22(木) 05:55:55
ポリモーフィズムもカプセル化もできるぞ

610 :デフォルトの名無しさん:2010/07/22(木) 06:40:56
>>608
モナドやクロージャで代替できる

611 :デフォルトの名無しさん:2010/07/22(木) 08:08:51
モナドとモコナはどう違うのか
永遠の謎

612 :デフォルトの名無しさん:2010/07/22(木) 08:11:58
モナドは「ぷぷぅ」って言わない

613 :デフォルトの名無しさん:2010/07/22(木) 12:43:26
しかし、モコナはモナドだ

614 :デフォルトの名無しさん:2010/07/22(木) 16:43:42
どう違うのかっていわれても、同じオブジェクトが見方によってモナドだったりそうでなかったりするんだよ

615 :デフォルトの名無しさん:2010/07/22(木) 16:55:24
モナド可愛いよね

616 :デフォルトの名無しさん:2010/07/22(木) 18:04:03
黒モナドモドキ
白モナドモドキ

617 :デフォルトの名無しさん:2010/07/22(木) 18:34:07
ホワイトボックスとブラックボックスの違いみたいなもんか

618 :デフォルトの名無しさん:2010/07/22(木) 20:03:42
昔は白モナドが美味しそうだったが、
最近はアルコール度数が高い黒モナドの方が美味しそうに思えてきた

619 :デフォルトの名無しさん:2010/07/22(木) 20:06:30
何の話だよ

620 :デフォルトの名無しさん:2010/07/22(木) 21:26:19
何の話って、モナドだろ?

621 :デフォルトの名無しさん:2010/07/22(木) 21:31:54
これはただのモナドではございません、山吹色のモナドでございます。

622 :デフォルトの名無しさん:2010/07/22(木) 21:38:54
>>611
よかったな
イレ食いだぞ

623 :デフォルトの名無しさん:2010/07/22(木) 23:11:50
あーあやっちゃったね

624 :デフォルトの名無しさん:2010/07/22(木) 23:54:38
本題に戻りたまえよ君達

625 :デフォルトの名無しさん:2010/07/23(金) 01:19:29
急に伸びたとおもって
わくわくしてスレを開いたらこれだよ!

626 :デフォルトの名無しさん:2010/07/23(金) 12:44:43
で、本題ってなんだったっけ

627 :デフォルトの名無しさん:2010/07/23(金) 17:05:14
副作用があるのかないのかって話。

628 :デフォルトの名無しさん:2010/07/23(金) 18:13:03
副作用は言語の外にある

629 :デフォルトの名無しさん:2010/07/23(金) 22:20:32
外野が勝手に解説(副作用)してくれるってこと?

630 :デフォルトの名無しさん:2010/07/23(金) 22:23:26
言語仕様には定義されていないということ。
なにが起こるかはすべて実装依存。

631 :デフォルトの名無しさん:2010/07/23(金) 23:15:00
The Haskell 98 ReportでIOモナドと基本IOは、いちおう定義されているよ。
http://haskell.org/onlinereport/io-13.html

Haskellの 『関 数 は』 副作用を持たない、で良くね?

632 :デフォルトの名無しさん:2010/07/23(金) 23:27:35
言語仕様のことを言語と呼んでいたのか。

633 :デフォルトの名無しさん:2010/07/23(金) 23:31:44
言語仕様とその実装には当然同型対応ができてかつモナドとなる。
ということでおk?

634 :デフォルトの名無しさん:2010/07/24(土) 00:51:20
表現がイマイチか。
Computationとは言語仕様のことじゃないか、ということ。

635 :デフォルトの名無しさん:2010/07/24(土) 10:17:17
elereaの使いかたがわかりません
誰かあれ+SDL/GLFWでテトリスとか作れるの?本当に??

636 :デフォルトの名無しさん:2010/07/24(土) 12:14:08
糞スレあげ

637 :デフォルトの名無しさん:2010/07/25(日) 21:50:00
Haskellでは共有ポインタはどのライブラリですか?

638 :デフォルトの名無しさん:2010/07/25(日) 21:56:13
共有ポインタって?

639 :デフォルトの名無しさん:2010/07/25(日) 22:10:28
boostだとshared_ptrです

640 :デフォルトの名無しさん:2010/07/25(日) 23:03:55
hackage.haskell.orgにはなさそう
GCのある言語だから需要が少いんだと思う
もし良かったら、どういう用途で使うのか教えてくれないか

どうしても必要なら自分で作ればいいんだけど、C++と違ってコピーコンストラクタを定義できないので
不用意にコピーしないように注意深く扱わないといけない気がする

641 :デフォルトの名無しさん:2010/07/29(木) 18:59:55
Haskellが得意なやつ集合〜♪
haskellでリストの内包表記と再帰用いずに、ピタゴラス数を求められるソース書ける?
俺は無理だがなwwww

642 :デフォルトの名無しさん:2010/07/29(木) 19:00:05
Haskellが得意なやつ集合〜♪
haskellでリストの内包表記と再帰用いずに、ピタゴラス数を求められるソース書ける?
俺は無理だがなwwww

643 :デフォルトの名無しさん:2010/07/29(木) 19:20:29
内包表記と再帰を使って書く
→内包表記をdo式で書き直す
→再帰をYコンビネータで書き直す

644 :宿敵はHaskell:2010/07/30(金) 01:05:59
filterとかmapとか使えば書けそうな気もするけど、どうだろう・・・
誰か書ける人いる?

645 :デフォルトの名無しさん:2010/07/30(金) 01:09:34
教えて欲しいなら教えて欲しいと言えば素直に教えるのに。

646 :デフォルトの名無しさん:2010/07/30(金) 01:21:42
>645
教えてください

647 :デフォルトの名無しさん: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)

648 :デフォルトの名無しさん:2010/07/30(金) 07:56:37
こまけぇこたぁはいいんだよ

fib = \n -> round $ (((1 + sqrt 5)/2)^n + ((1 - sqrt 5)/2)^n)/(sqrt 5)

649 :デフォルトの名無しさん:2010/07/30(金) 07:57:55
ピタゴラス数なのになんでフィボナッチ数列求めてるんだ俺は…暑さのせいか

650 :デフォルトの名無しさん: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

651 :デフォルトの名無しさん:2010/07/30(金) 12:44:40
map とか使ってる時点で再帰を使ってることと同義ではないのか

そんなのでよかったら、適当に再帰を隠したライブラリ自作しても同じだと思うが

652 :宿敵はHaskell:2010/07/30(金) 17:59:18
友達が教えてくれたよ〜♪
皆さんもありがとうございました
647さん650さんありがとうございます。

653 :デフォルトの名無しさん:2010/07/30(金) 18:09:50
ウソ言うなよ

654 :647:2010/07/31(土) 01:31:40
なにをとちくるったのか
ピタゴラス数を1からnまでの和と勘違いしてた
暑さのせいか…

pyth = [ (x,y,z) | x <- [1..], y <- [1..x], z <- [1..2*x*x], x^2 + y^2 == z^2 ]

を643の方法で書き直した。まったくの力技。
再帰型は使ってますが関数の再帰定義は一切ございません
http://codepad.org/aoVADy5Z

うちのパソコンだと、(120,119,169)から次がいくら待ってもでてこない…

655 :デフォルトの名無しさん:2010/07/31(土) 01:41:59
>>652
そんで、友達の解は何?

656 :デフォルトの名無しさん:2010/07/31(土) 11:20:56
>>647の方法ってどこからでてきたの?
Wadlerのrecursive types for freeでおk?

657 :647:2010/08/01(日) 14:15:18
Wikipediaの不動点コンビネータの項から拝借しました。

658 :デフォルトの名無しさん:2010/08/01(日) 23:15:49
Pearls of Functional Algorithm Design
ttp://www.amazon.co.jp/gp/product/0521513383/ref=sib_rdr_dp

胸熱

659 :デフォルトの名無しさん:2010/08/02(月) 13:25:30
関数型言語で連立方程式解くにはどうしたらいい?
誰かヒントだけでも教えてください。

660 :デフォルトの名無しさん:2010/08/02(月) 17:47:41
>>659
とりあえず関数型言語を使わないで考えてみなさい。

661 :デフォルトの名無しさん:2010/08/02(月) 19:25:46
>>660
> とりあえず関数型言語を使わないで考えてみなさい。

なるほど。関数型言語を使わない方が楽に解けるということですね。
というのは置いといて。C++では自分ならどう計算するか考えていけばそれほど
苦労せずにプログラムを書けるのだけど haskell ではどう書いたらいいのか想
像もつかない。

662 :デフォルトの名無しさん:2010/08/02(月) 19:31:29
>>661
とりあえず、逆行列を計算するプログラムを Haskell で書けばいいと思うが、
それが書けないということか?

663 :デフォルトの名無しさん:2010/08/02(月) 19:52:40
行列計算ならHaskellが得意とするところ。

664 :デフォルトの名無しさん:2010/08/02(月) 20:47:56
>>662
そういうこと。

>>663
"haslell 逆行列'でググったら
http://dev.ariel-networks.com/Members/ohyama/haskell-9006884c521730926c423081308b/view
があった。頭がクラクラするほど

665 :デフォルトの名無しさん:2010/08/02(月) 21:09:13
>>664
何でそういうドンピシャな方法を探そうとするかな

まず普通に LU 分解をベタにプログラムしてみればいいじゃん
より洗練された方法を探したり近づけたりするのは、その後でしょ

666 :デフォルトの名無しさん:2010/08/02(月) 22:22:05
親切で書いているのだとは思うが何を言いたいのか分からない。
例に連立方程式をだしたのは簡単で洗練された方法が探しにくいからで
C++では行列が与えられて解を求めるまで10行で書いている。
もう一つは配列の要素を次々に書き換えながら処理が進むのでそのあ
たりをどう書くのかのヒントでもと思ったのだが>>664のリンク先がドンピ
シャで洗練された方法ということであれば私には haskell を勉強する意
味は無い。

667 :デフォルトの名無しさん:2010/08/02(月) 22:31:39
なんでそんな喧嘩腰なのか分からんが、STUArrayあたりを使ってC++のをそのまま移植すればいいんじゃね
「配列の要素を次々に書き換えながら処理が進む」ような計算ならそれが一番素直

668 :デフォルトの名無しさん:2010/08/02(月) 22:54:00
>>664のリンク先がドンピシャで洗練された方法と言ってるわけじゃないよ
「現在の」自分のレベルではモノにできなさそうな、
そういう方法に君がいきなりかぶりつこうとしているように見えたから、
目標レベルを落とそうよと言いたかっただけ

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

> 配列の要素を次々に書き換えながら処理が進む
なら、新しいリスト(のリスト)を次々に作ればいい

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

すまんすまん。

670 :デフォルトの名無しさん: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のレスからは関数型の売りを守ったまま変数の変更ができそうなのでこち
らでやってみたい。

671 :デフォルトの名無しさん:2010/08/03(火) 16:37:02
マジで思うんだけど、2chは博士号取得者か
それ相当の実績を持っている人以外は書き込めないようにしてほしい。

672 :デフォルトの名無しさん:2010/08/03(火) 16:40:51
>>671
アメリカ社会みたいにすればいいと思う。
実態を知られることのない支配層と、エリート層と、その他の一般大衆
エリートに上がるには能力が必要

673 :デフォルトの名無しさん:2010/08/03(火) 16:54:48
真っ先に排除されそうなのが>>671というのは
体当たりで挑んだ皮肉なのだろうか

674 :デフォルトの名無しさん:2010/08/03(火) 19:28:27
百人の博士の村?を思い出しました。

675 :デフォルトの名無しさん:2010/08/03(火) 21:01:20
>>671はどうやって自分の質問を書き込むつもりだ
博士課程で超能力は取得できんよ?

676 :デフォルトの名無しさん:2010/08/03(火) 21:31:42
>>675
どこから超能力の話が出てくるの?

677 :デフォルトの名無しさん:2010/08/03(火) 22:21:10
Emacs Part 35
http://pc12.2ch.net/test/read.cgi/unix/1277168855/


678 :デフォルトの名無しさん:2010/08/03(火) 22:23:21
>>676
モサドのくだりから

168 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)