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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2013/03/23(土) 13:52:58.14
関連書籍
・Introduction to Functional Programming Using Haskell (2nd ed.)
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/

・Haskell: The Craft of Functional Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/

・The Fun of Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/

・The Haskell School of Expression: Learning Functional Programming Through Multimedia
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/

・入門Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/

・ふつうのHaskellプログラミング
 ttp://item.rakuten.co.jp/book/4052963/

・Programming in Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/

・Real World Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980

・関数プログラミングの楽しみ
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056

・すごいHaskellたのしく学ぼう!
 ttp://www.amazon.co.jp/dp/4274068854
3デフォルトの名無しさん:2013/03/23(土) 13:56:00.83
関連リンク
・GHC Wiki
 ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex

・A History of Haskell
 ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/

・関数型関連の用語集
 ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/

・本物のプログラマはHaskellを使う
 ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend

・Haskell API search Engine
 ttp://www.haskell.org/hoogle/

 【簡単な使い方】
 1.検索バーに関数名を入れて検索
  例 map
 2.検索バーに型名を入れて検索
  例 (a -> b) -> [a] -> [b]

・Real World Haskell
 ttp://book.realworldhaskell.org/read/

・Learn You a Haskell for Great Good!
 ttp://learnyouahaskell.com/chapters
4デフォルトの名無しさん:2013/03/23(土) 20:06:48.43
 
私がこの世界に求める優しさのすべて―
  それがHaskellなんだと。

あぁ この世界の女性がみんなHaskellになったら
  なんてすてきな世界なんだろうと考えました。


レトルトカレーしか作れぬお前がHaskellになったところで

   そ れ は H a s k e l l で は な い !
5デフォルトの名無しさん:2013/03/23(土) 20:13:25.01
さすがキチガイだな
Haskellにはチンポ入れる穴がないだろ
6デフォルトの名無しさん:2013/03/23(土) 20:34:16.03
チンコ入らないこともなさそう http://hackage.haskell.org/trac/ghc/wiki/Holes
7デフォルトの名無しさん:2013/03/24(日) 17:26:46.75
927 デフォルトの名無しさん [] 2013/03/24(日) 13:57:24.26 ID: Be:
    15分で始めるScala
    http://xerial.org/scala-cookbook/recipes/2012/11/29/scala-in-15-minutes/


    ↑
    東大の先生は、Scala使ってDNA解析をガンガンぶん回しているというのに、
    おまえらみたいな低脳は、いつまでもたっても、言語がどーのこーので、ちっとも前に進まないな。

928 デフォルトの名無しさん [sage] 2013/03/24(日) 15:33:58.26 ID: Be:
    そういうレスはHaskellスレに書いたほうがウケる
8デフォルトの名無しさん:2013/03/24(日) 17:28:24.21
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
9デフォルトの名無しさん:2013/03/24(日) 17:51:57.40
いくらクソ言語のクソスレだからってあんまりだ……
10デフォルトの名無しさん:2013/03/24(日) 18:26:53.82
11デフォルトの名無しさん:2013/03/24(日) 20:15:47.91
>>7
scalaなんかで解析してるから進みが遅いんだな・・・
12デフォルトの名無しさん:2013/03/25(月) 09:20:06.30
貴様は一生機械語でカイてろ
13デフォルトの名無しさん:2013/03/25(月) 15:35:24.77
Haskellって遅延評価じゃん?
この言語で作ったGUIも遅延評価になるの?

GUIが遅延評価になるってのが自分で言っててよくわかんないんだけど

2chブラウザなんか作ったとして、スレッドを読み込んだ時点で
先の方のレスはまだ表示させる必要ないから
データの解釈とレンダリングは必要になる(実際にそのレス番に着く)までしないとかさ
そういう、特に工夫しなくてもデフォルトで遅延評価になってることを類推するじゃん?
14デフォルトの名無しさん:2013/03/25(月) 15:59:33.76
>>13
特殊な裏ワザを使わなければ遅延評価
ただし、評価生成されるのは、「表示」じゃなくて「表示するプロセス」
15デフォルトの名無しさん:2013/03/25(月) 16:05:28.04
>>13
gtkとか使う場合、描画タイミングとかはwidgetにお任せだよ。
16デフォルトの名無しさん:2013/03/25(月) 16:13:57.56
むむむ
17デフォルトの名無しさん:2013/03/25(月) 16:21:02.33
誰も使わない
18デフォルトの名無しさん:2013/03/26(火) 00:58:12.02
>>12
君はいつもそういう極論しか言えないよね
19デフォルトの名無しさん:2013/03/26(火) 03:18:28.10
ただの報告だけど、いまHaskell使ってGPU用のCのコードを自動生成してる
並列計算
20デフォルトの名無しさん:2013/03/26(火) 09:19:52.44
突然どうした
21デフォルトの名無しさん:2013/03/26(火) 10:32:50.06
>>18
>>11 の暴論っぷりはスルーかいw
22デフォルトの名無しさん:2013/03/26(火) 15:57:14.31
     参照は透ける――Haskell!

よし
23デフォルトの名無しさん:2013/03/27(水) 16:35:57.90
Haskellって言語としての出来はともかく標準ライブラリは変だよね
なんでApplicativeのpureとMonadのreturnが分かれてるんだ
歴史的経緯は分かるんだけど、Applicativeを導入するときにpureじゃなくてreturnって名前にすりゃよかったじゃん
24デフォルトの名無しさん:2013/03/27(水) 17:05:52.71
(」・ω・)」はぁ〜

(/・ω・)/ 透けるぅー!
25デフォルトの名無しさん:2013/03/27(水) 18:59:27.80
>>23
return の方がおかしいと思うのは俺だけか?
26デフォルトの名無しさん:2013/03/27(水) 19:07:29.53
>>23
歴史的経緯が分かってて、その提案なの?
27デフォルトの名無しさん:2013/03/27(水) 19:26:25.29
MonadとClannadの違いについて教えてください
28デフォルトの名無しさん:2013/03/27(水) 19:55:05.54
>>27
違いについて質問しようと思った経緯を教えて欲しい。
それによって返答が違う。

たとえば、**や〜〜などの共通項を見つけたが、
あまりにも似すぎているために、逆に違いがあるのか気になった、とか。

スレチだったりバカな理由なら以後は無視する。
29デフォルトの名無しさん:2013/03/27(水) 19:56:31.43
Monadは隠蔽でClannadは人生
30デフォルトの名無しさん:2013/03/27(水) 20:02:37.79
クラナッハはハウスバルドゥンクの師匠に当たるのかな。
31デフォルトの名無しさん:2013/03/27(水) 20:18:19.71
レーベンシュタイン距離……?
32デフォルトの名無しさん:2013/03/27(水) 20:45:37.05
モナドは文脈依存
33デフォルトの名無しさん:2013/03/27(水) 20:49:44.15
Keyは登場人物がキチガイだらけの糞
34デフォルトの名無しさん:2013/03/27(水) 22:48:24.96
Haskell頭文字がHだからってエロゲの話しなくていいから
今ホットなライブラリの話でもしててくれ
35デフォルトの名無しさん:2013/03/28(木) 03:43:19.83
ホットというか、新しいプラットホーム入れたらライブラリがけっこう移動しててビビッた
36デフォルトの名無しさん:2013/03/28(木) 10:29:28.24
>>30
ハンス・バルドゥンクだろう。グリーンの使い方の名手として
知られたらしいが、あまり発色の良いものは残っていないらしい。
37デフォルトの名無しさん:2013/03/28(木) 10:42:41.45
美術をテーマにしたHaskellプログラムは見たことがないな。Prologだと、
1980年代前半から古典主義建築のオーダーだとか、ファサードの研究に
結構利用されていたのだが。
38デフォルトの名無しさん:2013/03/28(木) 10:47:25.85
なにそれ詳しく知りたいです
39デフォルトの名無しさん:2013/03/28(木) 11:05:51.10
>>38
84-5年頃だから前半ではなくて中頃だった。建設省建築研究所での
Prolog-KABAを使った研究が有名。浮動小数点数も扱えない処理系で
何ができたかは疑問ですが。
それとは全く別の話だが、こちらは海外でPrologのプログラミングで
黄金分割の研究をしたものもあった。
40デフォルトの名無しさん:2013/03/28(木) 11:22:13.38
>>37
GitHubにはあると思うけど。
41デフォルトの名無しさん:2013/03/29(金) 02:07:27.94
綺麗に書かれたコードはそれ自体が美術です
42デフォルトの名無しさん:2013/03/29(金) 06:59:08.79
クヌースは文芸と言っていた
43デフォルトの名無しさん:2013/03/29(金) 07:34:38.31
"The Art of ~" シリーズがベストセラーを連発していてすっかり世俗化した。
44デフォルトの名無しさん:2013/03/29(金) 08:17:56.13
hoge :: a -> Maybe b とするべきか
hoge :: a -> b として境界条件外はundefinedするべきか
よく迷うけど指針ってありますか? (b自体はMaybe型じゃないとして)
45デフォルトの名無しさん:2013/03/29(金) 12:39:27.02
それは、戻り値が境界条件外だった場合に「何がしたいか」によると思うんだが
46デフォルトの名無しさん:2013/03/29(金) 12:41:39.37
すまん、戻り値がじゃなくて引数が、ね

境界条件外だった場合に、その事を何かに伝達したいのなら Maybe b の方が良いだろうし
47デフォルトの名無しさん:2013/03/29(金) 16:36:42.12
Nothingってどのくらいメモリ食うの?
Left "" はその何倍食うの?
48デフォルトの名無しさん:2013/03/29(金) 19:28:07.82
>>44
数学の関数として考えるとき、定義域(domain)に未定義はあり得ない
引数が定義域の範囲の外にあるなら、それは例外として処理すべき
49デフォルトの名無しさん:2013/03/29(金) 21:28:04.30
そう言う実コードの役に立たない知識はどうでもいいです
50デフォルトの名無しさん:2013/03/29(金) 22:47:07.90
Types And Programming Languages って、ついに翻訳されたんだな
http://www.amazon.co.jp/dp/4274069117/

くっそ高いけど
51デフォルトの名無しさん:2013/03/29(金) 22:51:19.53
>>50
ですよねぇ。価値ある情報が無料じゃないのは許されないと思います。
52デフォルトの名無しさん:2013/03/29(金) 22:52:16.67
>>49はモデル化できないks
53デフォルトの名無しさん:2013/03/29(金) 23:06:02.40
>>48
有理関数(分母と分子が多項式になってる分数で定義される関数)なんかは、
分母がゼロになるところを定義域から外すようにすると、有理関数
を定義するのに先立って分母がゼロになるところを求めておいてそれを
除外したところを定義域とするようにしないといけないのであり得ませんね
54デフォルトの名無しさん:2013/03/29(金) 23:10:04.56
TaPL立ち読みしたけど、クソむずそうで興味持てなかったわ
55デフォルトの名無しさん:2013/03/29(金) 23:18:14.16
>>50
英語版買ったばかりなのに........
56デフォルトの名無しさん:2013/03/29(金) 23:24:56.02
オーム社の関数型言語への入れこみっぷりはちょっとおかしい
ラムダ社に社名変更すべき
57デフォルトの名無しさん:2013/03/29(金) 23:50:25.09
>>50
まじで。偉業だな。
大学一年の推薦図書決定だなw
58デフォルトの名無しさん:2013/03/29(金) 23:51:50.56
>>52
そんなに気に障ったの?
59デフォルトの名無しさん:2013/03/30(土) 00:05:53.19
Haskeller様はコードなんて書かないからいいんだよ
60デフォルトの名無しさん:2013/03/30(土) 01:12:54.27
たまには書くわ!ばかにするな!
61デフォルトの名無しさん:2013/03/30(土) 01:19:16.35
>>53
高次多項式の零点を求めることになるから、それは一般に計算不可能
関数の計算が問題にする時点で正則関数に限定されており、つまり、分母に零になった時点で例外にしなければならない

特異点を例外にしないのは、高階関数や数式処理をする場合だけにすべき
62デフォルトの名無しさん:2013/03/30(土) 02:06:19.67
「高階関数や数式処理」ってなんだよ……
63デフォルトの名無しさん:2013/03/30(土) 02:31:33.33
>>62
高階関数=積分
数式処理=通分
64デフォルトの名無しさん:2013/03/30(土) 07:15:46.75
TaPL日本語、期待してたんだが、ちょっと訳が直訳気味だな。
これだと原語のほうが読みやすいぞ。
超訳よりはマシだが、もうちょいこなれた日本語にできんかったんかね?
65デフォルトの名無しさん:2013/03/30(土) 10:56:46.88
>>61はこの前暴れてたやつだろ
66デフォルトの名無しさん:2013/04/01(月) 10:54:04.60
数式が全部文字に置き換えられたモノから数式に戻して計算する関数を作りたいと思います。
例えば、[ Kazu 0.1, Tasu, Kazu 2.1, Hiku, Kazu 3.0, Kake, Kazu 2.9, Waru, Kazu 0.9]があって、
これを戻すと 0.1 + 2.1 - 3.0 * 2.9 / 0.9 -> -7.46 みたいに結果をだしたい。
67デフォルトの名無しさん:2013/04/01(月) 12:08:21.66
"0.1 + 2.1 - 3.0 * 2.9 / 0.9" という文字列を作ったとして、それをどうやって計算するつもりなのよさ
68デフォルトの名無しさん:2013/04/01(月) 12:14:23.30
引くは "-"に、足すは”+”にしてどうにかできない?
KazuとかHikuなど data Keisan = [Moji]みたいにして?
69デフォルトの名無しさん:2013/04/01(月) 12:30:16.34
>>68
Prologだと以下のような定義となる。Haskellだってあるでしょ。

数式が全部文字に置き換えられたモノから数式に戻して計算する(_リスト,_式,結果) :-
    演算子を置換する(_リスト,_演算子を置換されたリスト),
    atomic_list_concat(_演算子を置換されたリスト,' ',_式文字列),
    atom_to_term(_式文字列,_式,_),
    _結果 is _式.
7069:2013/04/01(月) 12:32:12.68
ごめん間違えた。
数式が全部文字に置き換えられたモノから数式に戻して計算する(_リスト,_式,_結果) :-

結果の前のアンダースコアが落ちていました。これだとfailしてしまいます。
71デフォルトの名無しさん:2013/04/01(月) 13:37:16.71
ParsecのtokenPrim使おう
72デフォルトの名無しさん:2013/04/01(月) 15:51:33.18
結果を出すのはこんな感じかな
ttp://pastebin.com/200nZjPm
73デフォルトの名無しさん:2013/04/01(月) 16:46:27.98
マセマティカみたいに文字式のままとか、対数関数を
log 6 を log 2 + log 3みたいにちゃんと扱ってくれるライブラリないの?

logで猛烈に四則演算繰り返すと絶対非負であることが証明できる演算が負になっちゃったりして困るの

エントロピー関連の計算でさもありなんでしょ?
74デフォルトの名無しさん:2013/04/01(月) 17:37:35.36
これかな。
ttp://www.haskell.org/haskellwiki/Libraries_and_tools/Mathematics#Computer_Algebra
あんまないのか?

それっぽいキーワードで検索すると他にも出てくるけど、これでキマリ、みたいなのはないっぽい。
75デフォルトの名無しさん:2013/04/01(月) 18:07:14.37
フリーかつ言語ライブラリとしてまともに使える
数式処理システムはpythonのsympyぐらいでは
他言語じゃhaskell含めて寡聞にして聞かないわ
76デフォルトの名無しさん:2013/04/01(月) 21:26:00.27
NumPyとかSymPyとかそのへんはやたら定評があるのなPython。
77デフォルトの名無しさん:2013/04/01(月) 21:29:37.78
Pythonさんが最強の言語だな
78デフォルトの名無しさん:2013/04/01(月) 21:32:04.16
MissingPyで成果だけ横取りしたらええんや!
79デフォルトの名無しさん:2013/04/01(月) 21:40:09.51
数式処理は作る過程が目的だからな…
昔は演習の時間にschemeで数式処理システムを作らされてた
Haskellだとスマートに作れそうな気がするんだけどな
80デフォルトの名無しさん:2013/04/01(月) 21:49:23.73
みんな、>>79が作るってよー
81デフォルトの名無しさん:2013/04/01(月) 22:04:40.15
schemeなら和田本に数式処理の微分まで載ってる
82デフォルトの名無しさん:2013/04/01(月) 22:17:00.71
その分野は最強はMathematicaだろ。
作ってる奴の頭が良すぎる。
83デフォルトの名無しさん:2013/04/02(火) 00:57:11.10
Maximaとか?
84デフォルトの名無しさん:2013/04/02(火) 01:23:58.97
グラフで表示するために特異点求める研究してて、論文で特異点の説明でその特異点を図示するためにMathematica使ってたのは良い思い出
85デフォルトの名無しさん:2013/04/02(火) 16:01:29.50
79氏の伝説が今、爆誕!
86デフォルトの名無しさん:2013/04/03(水) 00:03:19.35
モナド戦争しようぜ
87デフォルトの名無しさん:2013/04/03(水) 00:43:07.87
Functor〜モナド考えたやつ誰だよ頭いいな
1日経ってもまだ理解できない
88デフォルトの名無しさん:2013/04/03(水) 00:53:05.06
>>87
一日で理解できたら相当頭いい。

あと、いろんなものがモナドになってるけど、「いろいろなものが経験的にモナドで表せる」だけで
モナド最強無敵完璧究極とかは明確に間違い。

モナドで不足するところを補うためにあとから色々アイデアが出てる。
圏論的な意味でモナドはかなり良い抽象化であるにもかかわらず
関数型言語ではなぜそれが不十分な抽象化であり得るか:
Hask圏が「ふつうの圏」ではなく豊穣圏の一種だから、だと思われる。
89デフォルトの名無しさん:2013/04/03(水) 00:54:50.09
寝ぼけていい加減な事書いてしまった。
90デフォルトの名無しさん:2013/04/03(水) 01:07:15.65
いい加減なことだったのかよ読んじゃったよ!
9188:2013/04/03(水) 01:16:30.20
いやさ、「豊穣圏だから」って言い方がなんか投げやりだなって。

先に現象があるのであって、「豊穣圏だから」って言い方だと先に理論が
あるみたいな言い方で極めて質が悪い。
92デフォルトの名無しさん:2013/04/03(水) 01:17:54.37
それに、Haskは豊穣圏ではあるけど豊穣圏の中でも最も単純なタイプだ。
だれか夏コミで書いてたけど。豊穣圏などという大砲を持ちだして雀を撃つような
真似は良くない。
93デフォルトの名無しさん:2013/04/03(水) 01:31:50.88
自分もいまApplicative Functorやってるんだけどよくわからないな
多少手を動かして「普通の型を関手の世界に持ち上げる」とか「文脈を注入する」
という言葉の上での感覚は掴んだけど
例えばこのへんhttp://d.hatena.ne.jp/shunsuk/20101215/1292414064で関数合成
(fmap f g) == f ・ g
できることすら気づいていなかった自分の頭の硬さにおののく
94デフォルトの名無しさん:2013/04/03(水) 01:40:28.70
よーわからんから:tに頼りまくって試してみてる
95デフォルトの名無しさん:2013/04/03(水) 01:43:35.20
GoFのデコレーションパターン見たいなものなのかなとか思いつつおやすみ
96デフォルトの名無しさん:2013/04/03(水) 05:21:12.62
ぼくはこんな概念を覚えたよ自慢、うざっ
97デフォルトの名無しさん:2013/04/03(水) 09:29:44.25
>>72
初心者なので考えてもまだ理解できない。
今はなんとかこれで出来ないかと苦戦中。
type Keisan = [Moji]
data Moji = Kazu Double | Tasu | Hiku
deriving (show)

-- only Tasu or Hiku in a list [Kazu 0.0, Tasu, Kazu 1.0, Hiku, Hiku, Kazu 0.5]
-- == [0.0 + 1.0 - -0.5] -> [Kazu 0.5]
tokenizer :: Keisan -> Moji
tokenizer shiki = Kazu (convMoji shiki)

convMoji :: (Ord a) => Moji -> a
convMoji moji
| moji == Tasu = +
| moji == Hiku = -
| moji == (Kazu x) = x
98デフォルトの名無しさん:2013/04/03(水) 09:49:26.80
>>97
プログラミング以前に、まず問題を分けて。

1.
[Kazu 0.1,Tasu,Kazu 2.1,Hiku,Kazu 3.0,Kake,Kazu 2.9,Waru,Kazu 0.9] というデータから、
"0.1 + 2.1 - 3.0 * 2.9 / 0.9" という文字列を作ること。

2.
[Kazu 0.1,Tasu,Kazu 2.1,Hiku,Kazu 3.0,Kake,Kazu 2.9,Waru,Kazu 0.9] というデータから、
-7.466666666666666 という値を求めること。

3.
"0.1 + 2.1 - 3.0 * 2.9 / 0.9" という文字列から、
-7.466666666666666 という値を求める、というのがやりたいことなの?
99デフォルトの名無しさん:2013/04/03(水) 18:44:29.76
ええ、そうです。
100デフォルトの名無しさん:2013/04/03(水) 22:28:46.99
>ぼくはこんな概念を覚えたよ自慢、うざっ
ぼくはこんな嫌味を覚えたよ自慢、うざっ
101デフォルトの名無しさん:2013/04/03(水) 22:57:47.56
そこまでムカついたのか
102デフォルトの名無しさん:2013/04/03(水) 22:59:47.41
場外乱闘がはじまるですか?
103デフォルトの名無しさん:2013/04/03(水) 23:21:18.95
クズ共食いつきいいな
104デフォルトの名無しさん:2013/04/03(水) 23:25:15.53
おいおい、落ち着いてhaskellの話しようぜ
105デフォルトの名無しさん:2013/04/03(水) 23:53:53.23
Haskellのコードリーディングって難しくない?

たとえばFRPライブラリ reactivce の特徴である
Sink と Event の仕組みや実際の振る舞いについて調べたいとする。

というのも、makeEvent 関数でタプル (sink, event) を作ると、
あたかも、プログラム内のある場所で sink を評価すると、
全く別の場所にある event が反応したかのように表面上は振る舞って、
なかなか興味深い。

だが、とりあえず Sink a の型を見ても a -> Action としか分からない。
makeEvent 関数のソースを見ても、いきなり (fmap.fmap) が出てくるし。

こういう場合は、adaptE 関数から順に自分で簡約しながら見ていく方が良いのかな。
(reactive のチュートリアルでは皆 adaptE 関数から実際の計算が始まる)

C/C++ だと比較的大きな機能がまとまって書かれているけど、
Haskell だと非常に細かい機能が関数呼び出しという数珠繋ぎで表現されていて、
それらがソース中のバラバラの場所に書かれていたりするから、
なかなか C/C++ と同じ要領ではコードリーディングしにくい。
Haskell としてコードが洗練されているほど、振る舞いが追いにくい印象。

もしかしたら、同じようにできるのかも知れんが、何かコツでもあるのかな。
106デフォルトの名無しさん:2013/04/04(木) 00:07:15.63
使って不便だと思うなら、それは無価値だということだ。
わざわざ取り組む必要もない。
107105:2013/04/04(木) 00:09:56.48
>>106
なぜそのようなことを言うのでしょうか。

不便なんて思っていません。

使いたいから使っています。
仕組みを理解したいからコードリーディングに挑戦しています。
108デフォルトの名無しさん:2013/04/04(木) 00:30:25.57
>>105
出たなうんこ野郎

こいつは屁理屈こねるために質問してくる
相手するだけ無駄
109デフォルトの名無しさん:2013/04/04(木) 00:44:27.94
屁理屈やら討論やらまったり会話が何でもありの掲示板で屁理屈批判とか。
それに105が屁理屈とも思わんし。言ってることが理解できないけどさ。
110デフォルトの名無しさん:2013/04/04(木) 00:53:34.29
悔しかったの?w
111デフォルトの名無しさん:2013/04/04(木) 01:17:14.29
単芝で煽ったつもりになってるとか君も青いな
112デフォルトの名無しさん:2013/04/04(木) 05:23:19.58
>>92
コミケでHaskellの本売ってるの?
113デフォルトの名無しさん:2013/04/04(木) 05:49:20.62
>>105
それ、Haskellの問題つーより宣言型の問題な
114デフォルトの名無しさん:2013/04/04(木) 21:30:28.84
>>112
いわゆる技術系サークルってのはあって電子工作やらプログラミングやら扱ってる本
書いてるね。Haskellはあったかなぁ??
115デフォルトの名無しさん:2013/04/04(木) 21:46:29.00
簡約λカ娘のことじゃねーの
思い出しついでにちょっとサイト見に行ったら新刊イカ娘と関係なくなってるじゃねえか
116デフォルトの名無しさん:2013/04/05(金) 10:48:38.33
g :: [Int] -> [Int] -> Int
g (x:xs) (y:ys)
| (x:xs) == [] && (y:ys) == [] = 1
| otherwise = x*y + g xs ys
処理終わらない。助けて
117デフォルトの名無しさん:2013/04/05(金) 12:53:02.20
>>116
それだと、空リストら適用した時点で例外が起きるんだが

「処理終わらない」の意味をもう少し明確に述べてみ
118デフォルトの名無しさん:2013/04/05(金) 13:33:13.49
Non-exhaustiveになるんです。
多分間違い : (x:xs) == [] && (y;ys) == [] = 0?
g [1,2,3:[]] [4,5,6:[]] -> (1*4 + 2*5 + 3*6 + []* [] ) -> 32になるはず
119デフォルトの名無しさん:2013/04/05(金) 14:03:32.08
g _[]=0
g[]_=0
g(x;xs)(y:ys)=x*y+g xs ys
120デフォルトの名無しさん:2013/04/05(金) 14:38:01.15
ありがとうございます。けど、なんで上のガードが出来なかったのだろうか?
121デフォルトの名無しさん:2013/04/05(金) 15:05:17.28
[]は(x;xs)にマッチしない
122デフォルトの名無しさん:2013/04/05(金) 15:09:30.43
ああ、本当だ。
(x:xs)はすでに何かあるから[]ではないと言うことですね。
納得しました。
123デフォルトの名無しさん:2013/04/06(土) 00:45:30.84
124デフォルトの名無しさん:2013/04/06(土) 01:23:44.88
>>118=122
[1,2,3:[]]
こんなリストはねえ。1:2:3:[]か、[1,2,3]だボケ
んで、後者は前者の糖衣構文

(xs)であれば[]もマッチする
(x:xs)に[]がマッチしない理由は、「何かあるから」ではなく、[]が値コンストラクタ ":" を使ってないから。
125デフォルトの名無しさん:2013/04/06(土) 08:00:26.38
質問、
ave関数でなぜかIntが返されます。[1.0, 2.0, 3.0]ならばsumはで、lengthは3なので戻りは1.0のはずなのですが。
value :: [Float] -> Float
value list = case (list) of
(x:xs) -> (x/(ave list)) : value xs
[] -> 0
ave :: [Float] -> Float
ave (x:xs) = ( sum (x:xs) / (length (x:xs) ))
126デフォルトの名無しさん:2013/04/06(土) 08:36:07.91
型あわせろボケ
127デフォルトの名無しさん:2013/04/06(土) 10:36:13.07
ラムダの記号が円マークでかっこ悪いのは日本への嫌がらせなの?
Haskell作者しぬの?
128デフォルトの名無しさん:2013/04/06(土) 10:38:34.45
どっちかというと問題があるのはREVERSE SOLIDUSがYEN SIGNに見える日本人の方では
129デフォルトの名無しさん:2013/04/06(土) 11:07:47.12
>>128
バックスラッシュの方が使ってはいけない領域を
制御記号として使用したのだから非があるのでは。
130デフォルトの名無しさん:2013/04/06(土) 11:32:01.95
使ってはいけない領域とはいったい
131デフォルトの名無しさん:2013/04/06(土) 11:33:30.90
では
では
132デフォルトの名無しさん:2013/04/06(土) 11:36:55.84
あたし、むしろバックスラッシュより¥マークの方がカッコイイと思う

バックスラッシュってパールみたいで嫌い
133デフォルトの名無しさん:2013/04/06(土) 11:41:40.51
>>130
ローカルに自由に使用するべき文字領域を。
134デフォルトの名無しさん:2013/04/06(土) 13:54:43.94
λという字はλとλが……合って……
135デフォルトの名無しさん:2013/04/06(土) 14:04:47.78
人使えば解決
136デフォルトの名無しさん:2013/04/06(土) 16:36:10.75
>>129
ラムダを制するものは稼げるエンジニアになれる、ということ。
137デフォルトの名無しさん:2013/04/06(土) 16:51:33.16
>>132
おっさんプログラミング板くんだりまでやって来てネカマすることないだろ
138デフォルトの名無しさん:2013/04/06(土) 18:20:16.73
既定とは異なる順序で比較したい時ってどうする?
data Ordered a = Ordered (a->a->Ordering) a
instance Ord (Ordered a) where
compare (Ordered compare' x) (Ordered _ y) = compare' x y
って型を新しく作る?
139デフォルトの名無しさん:2013/04/06(土) 18:22:05.47
>>126
value :: [Float] -> [Float]
この型でいいの?
140デフォルトの名無しさん:2013/04/06(土) 18:48:55.71
諸君、議論したまえ
141デフォルトの名無しさん:2013/04/06(土) 19:17:18.25
>>138
既定とは異なる順序で比較というのが今ひとつ分かりません。

データ型の定義時に Ord クラスを deriving するのが、
既定の順序で比較することに当たるのでしょうか。

そうであれば、既定とは異なる順序で比較するのは、
単に Ord クラスのインスタンスを自身で定義する事に当たると思いますが、
質問の例をみると、どうもそのような単純な話ではなさそうですね。

まず、どのような時に既定とは異なる順序で比較したくなるのか、
そのケースを例示していただけると、応えてくれる方が増えると思います。


あと、余計なお世話ですが、直感に反した不自然な計算(比較)を定義すると、
やっかいなバグに繋がりやすいので、注意が必要です。
142デフォルトの名無しさん:2013/04/06(土) 19:39:59.62
>>139
除算の型は (/) :: Fractional a => a -> a -> a です。

length :: [a] -> Int
は、IntがFractionalのインスタンスではありません
fromIntegralを使うなどして型を合わせましょう

どこの学生さんだろう。ひどい教え方されてんなあ。
143デフォルトの名無しさん:2013/04/06(土) 19:52:36.23
>>141
あるアルゴリズムがあって
有限個のデータ(具体的には関数記号)に適切な順序構造を与えたときに停止して適切な結果を返してくれるのですが
その順序構造を探すためにプログラム中で順序を動的に変えたいです
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%8C%E3%83%BC%E3%82%B9%E3%83%BB%E3%83%99%E3%83%B3%E3%83%87%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E5%AE%8C%E5%82%99%E5%8C%96%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
144デフォルトの名無しさん:2013/04/06(土) 20:00:36.82
145デフォルトの名無しさん:2013/04/06(土) 20:07:42.07
>>143
データと、それに付随する優先順位をペアにして持つ、
という単純な方法ではやりにくい、あるいはマズイですか?
146デフォルトの名無しさん:2013/04/06(土) 20:39:09.44
>>145
data Ordered a = Ordered [a] a   -- [a]は優先順位を表現したリスト
ということですね?
同じく今はこれで行こうと思っています
147デフォルトの名無しさん:2013/04/06(土) 20:46:35.79
>>146
いや、本当は違う事を言ったんだけど・・・

私は Data.IntMap a でキーを優先順位に、
a 型をそのデータにしたものを想像してました。
>>143 の状況がよく分からなかったので、
たぶん私トンチンカンな事言ってます。
148デフォルトの名無しさん:2013/04/06(土) 20:48:13.51
あ、それか (優先順位 :: Int, データ) というタプルを想像してました。
149デフォルトの名無しさん:2013/04/06(土) 21:00:44.62
>> 142
ありがとうございます。出来ました。
つまり、除算の時はFractionalクラスじゃなきゃダメでその為に適切な数値に解釈してあげる必要があると。
150デフォルトの名無しさん:2013/04/06(土) 21:42:36.92
>>148>>144だな
151デフォルトの名無しさん:2013/04/06(土) 22:50:15.97
>>149
すみません。どういうコードになったのか、差し支えなかったら、
もう一度載せてください。
152デフォルトの名無しさん:2013/04/06(土) 23:30:28.79
>>151
ave :: [Float] -> Float
ave (x:xs) = (sum (x:xs)) / (fromIntegral (length (x:xs))) -- length -> Int, which is not fractional
このようになりました
153デフォルトの名無しさん:2013/04/06(土) 23:53:23.11
λをつかったら無駄が無い
154デフォルトの名無しさん:2013/04/07(日) 00:11:38.23
>>152
ちゃんと、思った通りに動いているか、確認した?
特にvalueの方
155デフォルトの名無しさん:2013/04/07(日) 01:03:08.63
GHCじゃないのかな使ってるの
156デフォルトの名無しさん:2013/04/07(日) 06:40:05.31
>>154
なんとか動いてます。
value :: [Float] -> [Float]
value [] = []
value (x:xs) = case (ave (x:xs) /= 0) of
True -> (x/ave (x:xs)) : value xs
False -> []

ave :: [Float] -> Float
ave (x:xs) = (sum (x:xs)) / (fromIntegral (length (x:xs)))
ave [] = 0
157デフォルトの名無しさん:2013/04/07(日) 07:49:49.17
>>156
いつの間にか全然違うではないかw
158デフォルトの名無しさん:2013/04/07(日) 09:11:21.82
なにその強引すぎるパターンマッチ 禿げるわ
159デフォルトの名無しさん:2013/04/07(日) 10:55:35.29
最近は初めてのプログラミング言語にHaskell選ぶのが流行ってるのか
160デフォルトの名無しさん:2013/04/07(日) 11:07:50.45
普通にまずJavaでもやっとけば良いのに
初心者ほど最強言語とか訳分からん理由で選ぶからな
挫折する姿が目に浮かぶようだ
161デフォルトの名無しさん:2013/04/07(日) 11:10:10.27
>>156
ありがとうございます。
162デフォルトの名無しさん:2013/04/07(日) 11:24:27.03
>>159
はい。それが王道となりつつあります。
163デフォルトの名無しさん:2013/04/07(日) 11:33:13.63
やっとHaskellも上に出てるようなクソコード製造機になれるのか。胸熱だな
164デフォルトの名無しさん:2013/04/07(日) 11:33:36.63
C言語の某定番教科書はポインタと構造体の解説が延々と続く。

正直、あんなもの勉強するくらいなら最初からHaskellでリスト処理を学ぶ方が良い。
165デフォルトの名無しさん:2013/04/07(日) 11:42:44.91
>>157
そこは勘弁。
>>158
華麗なコード書きたいけど、どうしても無理。
ラムダに行く前にまだまだ練習が必要だと思う。
166デフォルトの名無しさん:2013/04/07(日) 11:55:33.26
>>164
まあ、C の言語仕様はシンプルだからな
はっきり言って、知的好奇心をそそるものではないよね
C++ の template は、そこそこ面白いんだけど、実践言語であれは無いだろとも思う
167デフォルトの名無しさん:2013/04/07(日) 11:59:35.78
Haskellでスペースリークを潰して廻るのは
Cでメモリリークを潰して廻るより苦痛だけどな

まあトイプログラムで遊んでるレベルじゃ関係ないけど
168デフォルトの名無しさん:2013/04/07(日) 12:01:03.15
value xs = map (/ ave xs) xs
ave xs = sum xs / fromIntegral (length xs)
169デフォルトの名無しさん:2013/04/07(日) 12:08:22.39
えっ、Haskellでトイプログラムじゃないプログラムを書いてる人なんて居るの?
170デフォルトの名無しさん:2013/04/07(日) 12:11:14.14
>>168
残りリスト要素の平均じゃなかったの。
>>170
そうだったな、すまん
value xs = zipWith (/) xs (map ave (tails xs))
172デフォルトの名無しさん:2013/04/07(日) 14:01:10.42
>>164
>C言語の某定番教科書はポインタと構造体の解説が延々と続く。
どれ?
173デフォルトの名無しさん:2013/04/07(日) 14:10:23.37
ポインターを考えなくてすむ代わりに別の追加の概念注意しなきゃならないなら
俺はよりコンピュータの本質に近い方を選ぶ
174デフォルトの名無しさん:2013/04/07(日) 14:14:32.28
let ! や $! や $!! でサンクを潰して廻るのは
コンピュータの本質に近く無いと申すか


確かにそうですね
175デフォルトの名無しさん:2013/04/07(日) 15:17:04.03
>>173
そのコンピュータというのがハードの事なら、より近いのはC言語だな
もし計算を意味するのならHaskellの方が近いな
176デフォルトの名無しさん:2013/04/07(日) 15:42:26.12
ほう、ループよりも再帰の方が計算の本質にちかいと申すか?
たんなる理論的なからくりだろう>再帰
177デフォルトの名無しさん:2013/04/07(日) 17:56:41.74
本質なんて言葉を使ったらダメだよ。

チューリングマシンとラムダ計算のどちらが本質か、だなんて誰にも決められない。
178デフォルトの名無しさん:2013/04/07(日) 18:15:01.36
本質言うならCPUと密接なCに決まってる
179デフォルトの名無しさん:2013/04/07(日) 18:44:06.43
CPUが本質だってんならループでも再帰でもなく条件ジャンプが本質だw
180デフォルトの名無しさん:2013/04/07(日) 18:51:44.96
>>176
そもそも自然数が再帰の構造なんだから
181デフォルトの名無しさん:2013/04/07(日) 19:11:30.89
ペアノの公理も単なる理論上のからくりというか‥‥実用上でなにかうれしいことでもあるのか?
182デフォルトの名無しさん:2013/04/07(日) 19:32:57.56
>>181
自動定理証明に応用できる
183デフォルトの名無しさん:2013/04/07(日) 19:46:45.41
お前らってアセンブラやったことないの?
184デフォルトの名無しさん:2013/04/07(日) 20:01:24.84
アセンブラみたいな具体的さが本質なのか、抽象が本質なのか、誰にも決められん。

最近流行ってるのは抽象による形式手法だけど、C言語ベースでの形式手法も研究されてるし。
185デフォルトの名無しさん:2013/04/07(日) 20:27:08.19
抽象の方が変更に強いからな。
実践では抽象しないと開発が間に合わないんだよね。
186デフォルトの名無しさん:2013/04/07(日) 20:52:52.11
ソースが紛失して2000年問題のときに機械語編集してた思い出
187デフォルトの名無しさん:2013/04/07(日) 20:55:39.32
>>186
マジで?!
188デフォルトの名無しさん:2013/04/07(日) 21:39:37.77
それはSys/370(互換機)の機械語かな?
189デフォルトの名無しさん:2013/04/08(月) 02:21:59.09
プログラミングをコンピュータと人間との通信と考えると、言語列の長さとその通信の平均誤り率いう視点から機械語と高級言語に本質的な違いが出てくる
190デフォルトの名無しさん:2013/04/08(月) 04:39:05.59
>>184
本物の形式手法は抽象度の高い仕様から
Adaサブセットやアセンブリまでをカバーして
それぞれのレベルでテストや証明をした上で
相互にトレーサブルにする。

つまり、どっちも本質。
191デフォルトの名無しさん:2013/04/08(月) 06:43:16.27
コンパイラやリンカのテストや証明もつくのかそれは本格的
C/C++等の抽象度が低い、というのが今ひとつ理解できないのだが、この場合の抽象度とは何を意味するのだろうか?
言い換えるとC/C++でも抽象度が高い記述があるのだろうか?

抽象度が高い=ての込んだ複雑な「からくり」がついただけ、という史観はそろそろカビが生えてきたようだ‥‥
192デフォルトの名無しさん:2013/04/08(月) 11:15:43.10
C言語だと、式の世界は比較的に抽象度が高い。
副作用のない関数と式の組み合わせで書けるものはそう書いたほうが良いね。
193デフォルトの名無しさん:2013/04/08(月) 19:47:50.78
>>192
fortranの設計者(バッカス先生)はチューリング賞講演で、
fortranの中で意味があるのは代入文の右辺だけだと言ってた。
194デフォルトの名無しさん:2013/04/08(月) 22:31:21.02
抽象度が高いってのはそれだけレイヤ踏んでるんだからハードウェアの本質から遠ざかってるだろ
195デフォルトの名無しさん:2013/04/08(月) 22:34:50.48
レイヤ?それは計算モデルではなく実装の話だろうが。
計算モデルにはレイヤなんて概念は存在しないw
196デフォルトの名無しさん:2013/04/08(月) 22:59:54.66
だから実装の話だよ何聞いてんだ
実装に実装を重ねてハード寄りの泥臭さから遠ざかったところに高級言語があるんだから
ハードウェアの本質がそこにあるはずがないって話
197デフォルトの名無しさん:2013/04/08(月) 23:06:44.08
ハードは泥臭くない
ゲーデル数が数学の定理に比べて泥臭くないのと同じ

むしろ洗練されている
198デフォルトの名無しさん:2013/04/08(月) 23:17:35.81
例えばI/Oポートにアクセスしたあとnop並べないといけないじゃない
そういうのが洗練されてるって言うつもりでいる?
199デフォルトの名無しさん:2013/04/08(月) 23:21:24.73
>>198
高水準言語で見ればnop並んでる
最も低水準の機械語で見ればコードの端から端まで2進数というたった一種類に抽象化された数が並んでるだけ
200デフォルトの名無しさん:2013/04/08(月) 23:25:00.57
それは屁理屈だよ
201デフォルトの名無しさん:2013/04/08(月) 23:47:58.93
Haskellスレはマ板に移った方がいいな
202デフォルトの名無しさん:2013/04/09(火) 01:01:33.08
アホを構う大馬鹿がいるからな。
203デフォルトの名無しさん:2013/04/09(火) 01:17:36.25
204デフォルトの名無しさん:2013/04/09(火) 01:25:49.73
コンピュータが人間だったら、機械語こそがもっととも抽象化されてて自然言語にもっとも近い言語なんだよね?
205デフォルトの名無しさん:2013/04/09(火) 01:37:28.97
自然言語が上手く抽象化されてるとは限らなくね
最強の俺言語として生まれたハングルを指して言ってるならあれだけど
206デフォルトの名無しさん:2013/04/09(火) 02:12:20.33
コンピュータ人間にとっては、自然言語(機械語)こそが最高に抽象化された言語
語の列を元と同じ動作をする範囲で抽象化して再び提示しても元の語の列になるという意味で

語の列が抽象化という作用により不動になるプログラミング言語を完成させたとき、その言語は機械語と同型である
207デフォルトの名無しさん:2013/04/09(火) 02:20:52.25
誰か>>206を翻訳してくれ
日本語で書いてあるはずなのに、意味が分からないんだ
208デフォルトの名無しさん:2013/04/09(火) 02:28:04.88
あるプログラミング言語の任意のソースコードを同じ動作をするように抽象化したら、元のソースコードと変わらない
そのプログラミング言語は機械語である
ゆえに機械語こそが最高に抽象化された言語である
209デフォルトの名無しさん:2013/04/09(火) 02:40:44.15
機械語は抽象されてるよ
実際、機械語の操作的意味論の美しさといったら…
210デフォルトの名無しさん:2013/04/09(火) 06:00:31.60
言葉遊びと拡大解釈はファウルだよ
211デフォルトの名無しさん:2013/04/09(火) 07:09:20.20
>>208
はっきり言って、なにを言っているのかわからない。
212デフォルトの名無しさん:2013/04/09(火) 22:33:26.37
また始まるのか
213デフォルトの名無しさん:2013/04/09(火) 22:59:28.84
いつもの人かな?
214デフォルトの名無しさん:2013/04/10(水) 00:12:02.18
いつもの人というのは俺の事なんで、そいつは別人だ
215デフォルトの名無しさん:2013/04/10(水) 00:15:45.44
>>214
匿名とはいえ、失礼いたしました。(_O_)
216デフォルトの名無しさん:2013/04/10(水) 00:29:33.56
>>214
何とかしてくれよ
217デフォルトの名無しさん:2013/04/10(水) 01:21:41.46
拡大解釈=抽象化
言葉遊び=プログラミング
218デフォルトの名無しさん:2013/04/12(金) 00:00:06.73
ほらつまんないレスするからスレ止まったじゃん
219デフォルトの名無しさん:2013/04/12(金) 00:19:25.55
Monadのインスタンスにしたら自動的にFunctorやApplicativeのインスタンスにしてくれる機構ってある
無いよね?
220デフォルトの名無しさん:2013/04/12(金) 05:05:31.67
【議題】
Monad ⊂ Functor みたいにサブクラス宣言があればいいのに
221デフォルトの名無しさん:2013/04/12(金) 07:01:04.05
そんな宣言が有ったらreturnが要らない子になるだろ!
222デフォルトの名無しさん:2013/04/12(金) 10:08:01.28
要らないなのはどう見てもfailの方なんだが
なんだそれふざけてるの
223デフォルトの名無しさん:2013/04/12(金) 22:34:40.22
return はいらない子
むしろ有害
224デフォルトの名無しさん:2013/04/12(金) 23:37:48.82
ポカーン
225デフォルトの名無しさん:2013/04/13(土) 01:12:51.31
*Main> (\m -> m (++"z")) . runCont $ do { x<- Cont $ \f -> f . f $ "a"; y<- Cont
$ \g -> g . g $ "b"; return $ x++y; }
"aabzzaabzzbzz"
色々実験してるけどContモナドが継続の意味も含めさっぱり分からない…
226デフォルトの名無しさん:2013/04/13(土) 10:13:06.61
ttp://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/
これのHaskellの部分は見た?
227デフォルトの名無しさん:2013/04/13(土) 12:11:28.44
ありがとうございます
良さそうなpdfをリンクから見つけたので読んできます
http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-j.pdf
228デフォルトの名無しさん:2013/04/13(土) 18:46:31.54
リワハ以上専門家未満のライブラリ教えろ
229デフォルトの名無しさん:2013/04/13(土) 18:50:38.00
うっさい
230デフォルトの名無しさん:2013/04/13(土) 20:26:57.25
>>228
リワハのライブラリって何?
231デフォルトの名無しさん:2013/04/13(土) 20:44:44.28
リアルワールドハスケルのことだろう
232デフォルトの名無しさん:2013/04/13(土) 22:20:41.84
いや、だからリアルワールドハスケルの「ライブラリ」って何よ
233デフォルトの名無しさん:2013/04/13(土) 22:23:49.48
Bloom filterより複雑めなアルゴリズムとかじゃね(適当
まあ接続詞が1つしかない文章にこれ以上突っ込んでも仕方ない気がするけど
234デフォルトの名無しさん:2013/04/14(日) 15:38:54.38
ごめんなさい
235デフォルトの名無しさん:2013/04/14(日) 17:49:32.35
なんで謝る?もっと謝って
236デフォルトの名無しさん:2013/04/14(日) 18:38:09.36
/⌒ヽ    ごめんなさい
く/・ ⌒ヽ
| 3 (∪ ̄]
く、・ (∩ ̄]
237デフォルトの名無しさん:2013/04/14(日) 22:23:52.55
可愛らしい顔文字だというのは分かるが
2ちんこ1金玉だな
238デフォルトの名無しさん:2013/04/15(月) 15:04:25.83
 /⌒ヽ    ごめんなさい
く/・ ⌒ヽ
 | 3 (∪ ̄]
く、・ (∩ ̄]
239デフォルトの名無しさん:2013/04/17(水) 02:08:13.62
Prelude> let f a b c = (a,b,c)
Prelude> f 1 2 3
(1,2,3)
Prelude> (1 `f`) 2 3
(1,2,3)
Prelude> (`f` 2) 1 3
(1,2,3)
Prelude> let g = (`f` 2)
Prelude> 1 `g` 3
(1,2,3)
Prelude> let h = (`g` 3)
Prelude> h 1
(1,2,3)
240デフォルトの名無しさん:2013/04/17(水) 13:01:01.94
(`f` y) x === x `f` y === f x y
ったりめえだとしか言い様がないんですが
あと、
f = (,,)
241デフォルトの名無しさん:2013/04/17(水) 23:21:25.37
何を主張したかったのかがわからない
242デフォルトの名無しさん:2013/04/17(水) 23:26:23.89
HaskellやっててCategoryの勉強し始めた奴っている?
243デフォルトの名無しさん:2013/04/17(水) 23:30:06.01
-- n ^ 2 steps
rev :: [a] -> [a]
rev (x:xs) = rev xs ++ [x]
rev [] = []

-- n steps
reverse' :: [a] -> [a]
reverse' = foldl prefix []
where prefix xs x = x : xs

foldr, flodlの働きがいまいちわからない。
244デフォルトの名無しさん:2013/04/17(水) 23:40:33.41
チラシの裏に自分の手で簡約の様子を書くことを面倒くさがると何も理解できん
245デフォルトの名無しさん:2013/04/17(水) 23:58:13.13
わかった。やってみる.
246デフォルトの名無しさん:2013/04/18(木) 22:10:36.22
foldlをfoldrで書けたら単位認定
247デフォルトの名無しさん:2013/04/18(木) 22:20:10.59
効率を考えなければreverseやって引数の順番変えればOK
248デフォルトの名無しさん:2013/04/19(金) 04:47:17.13
foldrの末尾再帰放棄してまで欲しいものって短絡?
249デフォルトの名無しさん:2013/04/19(金) 05:17:43.69
アキュムレータ使いたがるのは駄目なのか。
haskellの人は賢くてポイントフリーや既存の関数を使いまわすのが得意な人が多いせいか、
他人のコードはperlのワンライナーに似た難読性がある。
250デフォルトの名無しさん:2013/04/19(金) 20:24:23.77
遅延評価だから、リストを受け取って、その先頭を見て目的のリストの先頭だけ作って、
残りは自分自身に再帰、みたいな構造にしたほうがいいよ、という仕掛け。

でも慣れるまでは気にせずLispやMLでやるみたいに補助変数に溜め込むコードを
書いてればいいんじゃないかと思うけど。
251デフォルトの名無しさん:2013/04/19(金) 20:38:58.17
foldrなら短絡とアキュムレータ両方同時に使えるよ
252デフォルトの名無しさん:2013/04/19(金) 21:12:55.90
原始再帰関数とfoldrとの関係を答えられたら単位認定
253デフォルトの名無しさん:2013/04/20(土) 06:56:48.03
ぱらもるふぃずむ
254デフォルトの名無しさん:2013/04/23(火) 04:52:34.04
Windows2000に対応してますか?
255デフォルトの名無しさん:2013/04/23(火) 21:59:42.01
まず Windows2000 を探してきます
256デフォルトの名無しさん:2013/04/24(水) 01:15:26.74
まてよ、Windows2000を定義するほうが先だろ
257デフォルトの名無しさん:2013/04/24(水) 04:51:10.38
Windows2000,副作用なしで定義できるもんかね?
258デフォルトの名無しさん:2013/04/25(木) 02:09:17.88
致命的なバグがなくならなかったという意味でWindows2000はまだ完成していない
259デフォルトの名無しさん:2013/04/25(木) 04:36:30.68
Haskellに限った話じゃないけど
HaswellでTSX実装されたらソフトウェアトランザクショナルメモリは要らん子になるの?
260デフォルトの名無しさん:2013/04/25(木) 09:44:26.66
http://www.isus.jp/article/transactional-synchronization-in-haswell/
手始めにSTMに組み込まれるんじゃね?
261デフォルトの名無しさん:2013/04/25(木) 10:17:02.42
262デフォルトの名無しさん:2013/04/25(木) 10:41:53.81
>>259
TSXでSTMも速くなりますけど?
263デフォルトの名無しさん:2013/04/25(木) 11:23:46.58
でもそのネタGHCのproposalにあがってないんでしょ?
予定は未定で予定ですらないのは当分実現しないって事だ
264デフォルトの名無しさん:2013/04/28(日) 16:37:54.93
話題は?
265デフォルトの名無しさん:2013/04/28(日) 17:53:42.26
>>264
そんなの待ってても来ないよ
自分で探せ

探す気がないんなら、これでも解読してろ
Wormholes: Introducing Effects to FRP
http://haskell.cs.yale.edu/?post_type=publication&p=802
266デフォルトの名無しさん:2013/04/28(日) 20:32:07.10
学生に実装を手伝って欲しいリスト(GSoC)
http://hackage.haskell.org/trac/summer-of-code/report/1
267デフォルトの名無しさん:2013/04/28(日) 21:01:43.48
何このリスト

アイデア閃いだけど実装面倒いからお前らやってくんない?
あ、でも閃いたのは俺だから、そこ忘れずに

ってやつか
268デフォルトの名無しさん:2013/04/28(日) 21:06:35.55
閃いたとかどうでもいい。
269デフォルトの名無しさん:2013/04/28(日) 21:16:01.96
大学って、誰が最初に閃いた(と発表して認められる)かでもめる所じゃないの?
270デフォルトの名無しさん:2013/04/28(日) 21:19:05.43
閃きだけの研究なんて皆無に等しい。
271デフォルトの名無しさん:2013/04/28(日) 22:27:14.61
聞いてくてださい、質問です。

未だに Arrow がよく分からないのです。
再帰を表現するために ArrowLoop クラスがあるそうなのですが、
具体的にはどのようにして再帰を作るのでしょうか。

例えば階乗を計算する Int -> Int 型の関数を loop 関数を使って作るとしたら、
どのような式になるでしょうか。
272デフォルトの名無しさん:2013/04/29(月) 07:47:17.94
>>271
>再帰を表現するために ArrowLoop クラスがあるそうなのですが、
再帰というより、ループのある回路を実現する
モナドでいうMonadFixみたいなもの

>例えば階乗を計算する Int -> Int 型の関数を loop 関数を使って作るとしたら、
それは例題がおかしい。やろうとしてることがArrowと関係ない
一応、関数アローを無理矢理使って書けなくもないけど

fac :: Int -> Integer
fac n = loop f n
 where
  f (k, g) = (g k, \x -> if x <= 0 then 1 else fromIntegral x * g (x-1))
273デフォルトの名無しさん:2013/04/29(月) 11:52:07.16
>>272
> 再帰というより、ループのある回路を実現する

それが主なんですか。

私が勉強して感じたところでは、Arrow というのは Monad と同様に
「計算」というものを抽象化して捉える見方のひとつ、こちらが本質だと思ってました。
ループというのは、再帰でループも表現できる、という感じで二次的なもの、だと。
(直感では Haskell にループという概念は似合わないような気がしてならないのですが)

> それは例題がおかしい。やろうとしてることがArrowと関係ない

私は何か重大な思い違いをしているっぽいので、
今のうちに頭をリセットして勉強しなおしてみます。

ありがとうございました。
274デフォルトの名無しさん:2013/04/29(月) 12:18:35.83
java にsyntax シュガーを追加した言語を追加したいんです。
コンパイラ書くなら パターンマッチがある ocaml, f#, scala, haskellだよね、と思って検討中なのですが
haskellで書くのはヤメテおいたほうがいいでしょうかね?
275デフォルトの名無しさん:2013/04/29(月) 13:07:21.90
>>274
> haskellで書くのはヤメテおいたほうがいいでしょうかね?

そのように思ったのは、何か不安材料でもあったから?
ghc だって Haskell で書かれているから、理論的にはなんの問題も無い。
あとは慣れとか、コンパイラ作成の参考資料の充実さの問題だと思うよ。
その点で言えば、挙げられた4言語は資料あまりないね。
どれも似たりよったりだ。
276デフォルトの名無しさん:2013/04/29(月) 13:17:20.25
不特定多数が気軽にいじれるようにしたいんで
I/Oの形見が狭そうなのは避けるのが無難かな、と思いまして
277デフォルトの名無しさん:2013/04/29(月) 14:09:23.25
>>276
Haskellをメインで使って楽しんでいる立場の俺には、
IOの形見が狭いなどとは全く感じられないのだがな。

そもそもだ、コンパイラにおいてIOが必要なのはどこだ?
外部からコンパイルするソースや設定ファイルを読み取る部分と、
コンパイルされたオブジェクトコードを外部に出力する部分、
全体の処理のうちこの両端の部分しか思いつかない。

不特定多数が気軽にいじれるようにしたいのは、
IOではなく、その間の処理の部分ではないのか?
278デフォルトの名無しさん:2013/04/29(月) 15:46:36.55
>>277
Haskellをメインで使ってるってパフォーマンスは満足いく?
haskellで使ってないはずのメモリ使用量が徐々に増えていかないサーバって書ける?
モナディウスもメモリ使用量の増加が止まらないわけだけど
279デフォルトの名無しさん:2013/04/29(月) 16:26:10.47
monadiusは古い
今はmonaris
280デフォルトの名無しさん:2013/04/29(月) 16:31:25.74
>>278
なにか勘違いをしている感じを受けるのだが・・・
別に仕事でメイン使っているわけではなく、
趣味で幾種類かの言語でプログラムを楽しんでいて、
その中でHaskellが一番面白いからメインで使っているだけだよ。

> Haskellをメインで使ってるってパフォーマンスは満足いく?

はじめ満足いかなくて、時間かけて根気よく改善していったことは度々ある。
その時の自分の力ではどうにもできないレベルまでいったと感じたら、
「今回はけっこう勉強になったな」と前向きに考えて、
そのテーマでは活動停止、あるいは休止する。

> haskellで使ってないはずのメモリ使用量が徐々に増えていかないサーバって書ける?

知らん、サーバーは興味ない。
サーバー上で動くWebアプリのフレームワークには多少興味あるが。

> モナディウスもメモリ使用量の増加が止まらないわけだけど

んなこと言われてもな。

モナディウスはなぜメモリ使用量の増加が止まらないんだ?
現時点で分かっている範囲で原因をリストアップしてみて、
その原因に関係有りそうな技術資料を ACM なんかで漁ってみてはどうだ。

あと、ゲームの実装なら、最新のFRPライブラリを使ってみてはどうだ。
『FRPの話』(http://maoe.hatenadiary.jp/entry/2012/12/24/011414)
ここの話だと、最近のはリークもかなら改善されているらしい。
281デフォルトの名無しさん:2013/04/29(月) 17:48:17.79
>>278
横からすまん

>Haskellをメインで使ってるってパフォーマンスは満足いく?
それなりに。俺の経験だと、Cと張り合おうと思うと苦しい
(やってできないことはないと思うけど)
Cより2〜3倍遅い速度なら、ちょっとパフォーマンスに気を付けるだけで達成できることが多い

>haskellで使ってないはずのメモリ使用量が徐々に増えていかないサーバって書ける?
もちろん

>モナディウスもメモリ使用量の増加が止まらないわけだけど
それはバグ。Haskellは遅延評価のせいでうっかりspace leakを仕込みやすい
直せないspace leakはない。もちろん直すのも手間がかかるのでトレードオフだけど
282デフォルトの名無しさん:2013/04/29(月) 17:49:45.27
>>280
原因不明のspace leakを直すのならまずプロファイルを取るのがいいよ
頭で考えたり論文を漁ったりしても滅多に役に立たない
283デフォルトの名無しさん:2013/04/29(月) 17:52:05.17
space leakってどういう状況で発生するの?
284デフォルトの名無しさん:2013/04/29(月) 17:57:21.84
>>283
http://itpro.nikkeibp.co.jp/article/COLUMN/20070403/267180/?ST=develop
(ライフラリの話は古くなってるけど)
285デフォルトの名無しさん:2013/04/29(月) 18:24:19.73
直せないバグはない!
286デフォルトの名無しさん:2013/04/29(月) 18:42:39.46
>>282
すまん、俺(>>280)の
> モナディウスはなぜメモリ使用量の増加が止まらないんだ?

これは、自分で理由を調べてみてくれと >>278 に促す意味なのだが・・・

そもそも、使ってないはずのメモリ使用量が徐々に増えていかないサーバは書けるかどうか、
という質問に添えられているからには、モナディウスでは増えていくのだが、
増えていかないようにはできるのか、それはサーバー作りでもできるのか、という問だろ。

だったら、まずモナディウスではなぜ増えるのかを調べるのが先だろ。
(そして、その原因と解決はサーバー作りに関係するのかを調べる)

で、それは他人に任せず、まずは自分で調べるべきだと思うぞ。
他人の疑問じゃなく自分の疑問なんだから。
287デフォルトの名無しさん:2013/04/29(月) 23:12:35.76
>>286
>だったら、まずモナディウスではなぜ増えるのかを調べるのが先だろ。
その通りだけど、
>現時点で分かっている範囲で原因をリストアップしてみて、
>その原因に関係有りそうな技術資料を ACM なんかで漁ってみてはどうだ。
こういうアドバイスが的外れだと言いたかった
288デフォルトの名無しさん:2013/04/30(火) 02:33:50.97
287は質問の意図を明確に伝えた方がいい
286がハスケルでどの程度の事ができるのか知りたいだけの質問じゃないのか?
289デフォルトの名無しさん:2013/04/30(火) 04:10:48.36
Perl忍者最近みないな
290デフォルトの名無しさん:2013/04/30(火) 07:01:53.22
>>288
俺(287,282)は質問してないよ
291デフォルトの名無しさん:2013/04/30(火) 07:10:01.48
>>287
的外れだと分かるのなら、的は何なのか具体的に説明してみてくれ。
292デフォルトの名無しさん:2013/04/30(火) 07:53:27.56
>>291
>>282に書いた
293デフォルトの名無しさん:2013/04/30(火) 12:43:09.95
>>278 の聞きたいことって、モナディウスの原因不明のspace leakを直す方法じゃなくて、
space leakが起こる仕組みじゃないの?

モナディウス「も」と言ってるわけだし、モナディウスを例に出したのは、
そう言えば確かモナディウスもスペースリーク起こしてたよね、ってニュアンスじゃね
294デフォルトの名無しさん:2013/04/30(火) 16:47:54.89
プログラムには二種類の時間がある

実行開始してから結果が出るまでの時間
プログラムが出来上がるまでの時間

役に立つか確信の持てないものを創る場合は後者を重視し
確信が持てたら前者を重視する

確信の度合いの変化に応じて最適化に注ぐ情熱の量を切り替える

この切り替えはときに道具を変えることも含まれる

確信を持つ主体はなにか?
プログラマか?所属組織か?社会か?
そして俺は何を言いたいのか?
295デフォルトの名無しさん:2013/04/30(火) 16:55:13.01
またいつものキモいやつか
296デフォルトの名無しさん:2013/04/30(火) 20:46:35.13
ライブラリをオフラインのスタンドアロンマシンにインストールする方法の解説ってどこかにありますでしょうか?
297デフォルトの名無しさん:2013/04/30(火) 20:58:19.17
Real World Haskell のP80で詰まった。
concatを定義を使ってある関数を作ろうとしたんだけどエラー出てワケワカメ。たすけて
concatenate :: [[a]] -> [a]
concatenate list = case (list) of
[] -> []
(x:xs) -> x ++ concatenate xs

concatenate' :: [[[a]]] -> [a]
concatenate' list = case (list) of
[] -> []
(x:xs) -> concatenate x ++ concatenate' (concatenate xs)
298デフォルトの名無しさん:2013/04/30(火) 22:28:17.39
>>297
> (x:xs) -> concatenate x ++ concatenate' (concatenate xs)
(x:xs) -> concatenate x ++ concatenate' xs

じゃない?
299デフォルトの名無しさん:2013/04/30(火) 22:36:35.56
>>298
ありがとう!何でconcatenate関数を使ったんだろう?
気を付けます。
300デフォルトの名無しさん:2013/04/30(火) 23:06:19.80
名前が一々長いとワーキングメモリを圧迫するから
301デフォルトの名無しさん:2013/04/30(火) 23:13:44.13
haskell は名前にハイフン使えないのが不満なんだけど、どうにかならない?キャメルノーテーシヨンだと名前が長ったらしく見えるんだけど。
302デフォルトの名無しさん:2013/05/01(水) 00:52:43.77
アンダースコアじゃなくてハイフン?普通使わないと思うが……
303デフォルトの名無しさん:2013/05/01(水) 01:06:04.18
LISP組の人はハイフン使う
304デフォルトの名無しさん:2013/05/01(水) 07:37:17.47
「普通使わない」ってすごいな
「使えないのが不満」に対して何も答えてない
305デフォルトの名無しさん:2013/05/01(水) 07:43:35.67
解決になってないだけで答えてるじゃん
306デフォルトの名無しさん:2013/05/01(水) 08:06:37.12
Agdaも割りとハイフン使う
307デフォルトの名無しさん:2013/05/01(水) 08:06:39.17
演算子間に空白を開ける必要性とのトレードオフ
308デフォルトの名無しさん:2013/05/01(水) 09:49:33.39
>>307
おれは演算子間のスペースは空けとかないと不安でしかたない
309デフォルトの名無しさん:2013/05/01(水) 10:28:27.04
アンダースコア使えばいいじゃん
310デフォルトの名無しさん:2013/05/01(水) 10:38:05.95
アンダースコアはハイフンが使えないから仕方なく使うものだよ。英文でアンダースコアなんてめったに使わないでしょ。
do-something
doSomething
do_something
明らかにハイフンが自然。異論は認める。
311デフォルトの名無しさん:2013/05/01(水) 11:12:22.76
>>310
スペースの代わりだと思っていた。
312デフォルトの名無しさん:2013/05/01(水) 11:13:05.38
でも x:xs って書きたいでしょう?
x : xs はマヌケ
313デフォルトの名無しさん:2013/05/01(水) 11:44:05.66
マイナスとハイフンをいっしょくたにしたASCIIが悪い
314デフォルトの名無しさん:2013/05/01(水) 11:49:43.94
外国人もときどき ! と 1 の区別がつかなくなるからそれは仕方ない
315デフォルトの名無しさん:2013/05/01(水) 12:39:02.28
それより、単項マイナス演算子が普通には使えない仕様をどうにかしてほしいのだが
316デフォルトの名無しさん:2013/05/01(水) 12:45:38.66
無理じゃね?
単項演算子と二項演算子のどちらの可能性もあって
しかもカリー化もあるんだから
317デフォルトの名無しさん:2013/05/01(水) 13:18:34.08
SMLみたいな、~を単項マイナスにすればおk、というのが多分機械可読テキストとしては
一番エレガントな解決法だけど、HMI的には微妙。
318デフォルトの名無しさん:2013/05/01(水) 15:32:07.13
AgdaのmixfixをHaskellにもくれ
319デフォルトの名無しさん:2013/05/01(水) 22:47:38.28
>>312
おれはスペース空けたい派。x:xs って書くと窮屈。
320デフォルトの名無しさん:2013/05/01(水) 23:32:01.04
わかる 目が寄る
321デフォルトの名無しさん:2013/05/02(木) 01:53:20.62
>>310
うん。
けど海外でdoSomethingの書き方が嫌いな人はdo_something使ってる。
322デフォルトの名無しさん:2013/05/02(木) 03:11:29.11
Haskellはアンダースコアの関数とか殆どないし、他の記法と揃えるようにしてるな
323デフォルトの名無しさん:2013/05/02(木) 14:18:28.38
ハイフンは減法演算子にとっておく。
アンダースコアはスペースの代わり。
記号前後のスペースは必要。バグが極端に減る。入れない奴は自己中の証拠と知れ。
324デフォルトの名無しさん:2013/05/02(木) 14:43:22.08
(x:xs) を ( x : xs ) と書くことで「バグが極端に減る」証拠があるなら見せてくれ。
325デフォルトの名無しさん:2013/05/02(木) 20:51:09.46

ぱっと見、x:xsとxxsの違いがわからない
スペースあけないのはバカかゴミだけ
326デフォルトの名無しさん:2013/05/02(木) 20:54:24.05
標準ライブラリ書いてるのはバカかゴミ
327デフォルトの名無しさん:2013/05/02(木) 21:04:51.46
ソースを見る時、たいていは記号と識別子の色は分けて表示されるから、
実際のところ、ぱっと見x:xsとxxsの違いが分からないなんて事は無いな。
(見やすい等幅フォント使ってるし)

でも、言いたいことは分かる。
Haskellで使う全ての記号についてというのは言い過ぎだが、
記号と識別の間を開けた方が見やすい場合は少なくないね。
328デフォルトの名無しさん:2013/05/02(木) 21:06:42.60
あと、バカとかゴミとか、なに興奮してるのか知らんけど、もう少し落ち着いて
329デフォルトの名無しさん:2013/05/02(木) 21:19:50.10
ものによるな
x:xsはもうひと固まりとして認識できるレベルで頻出だから空けない
330デフォルトの名無しさん:2013/05/02(木) 21:29:26.23
>>328
良いこと言うね、同意。
331デフォルトの名無しさん:2013/05/02(木) 21:39:45.91
>>326
ひどい(ひどいよぉ)
332デフォルトの名無しさん:2013/05/02(木) 22:07:59.07
>>331
>>326 は皮肉だろ

標準ライブラリをざっと見てみると、パターンとして現れる場合は (x:xs) とくっつけて、
式として現れる場合は x : xs と離している傾向があるような気がする。
333デフォルトの名無しさん:2013/05/02(木) 22:09:37.18
好きにすりゃええがな
334デフォルトの名無しさん:2013/05/02(木) 22:15:58.44
>>332
>>331 はアニソンの歌詞だろ
335デフォルトの名無しさん:2013/05/02(木) 22:25:14.18
>>334
すまん、それは知らなかった
336デフォルトの名無しさん:2013/05/02(木) 22:45:31.07
いいってことよ
337デフォルトの名無しさん:2013/05/02(木) 23:06:18.10
Haskellでキーボードの←→キーが押されたらその方向にキャラが歩いてすばやく2回同じキーが押されたらその方向に走って
↑キーが押されたら押され続けた時間に応じてキャラが小ジャンプ、大ジャンプするサンプルください
GHC platformのみインストールされた環境で動くもので
画面描画のバックエンドはopengl+glutでお願いします
338デフォルトの名無しさん:2013/05/03(金) 03:40:50.28
Grahpics.UI.GLUT の KeybordMouseCallback のサンプルとドキュメントが入ってたはず
339デフォルトの名無しさん:2013/05/03(金) 16:17:19.49
x :xs
340デフォルトの名無しさん:2013/05/03(金) 21:44:20.08
Q:-P
341デフォルトの名無しさん:2013/05/05(日) 13:09:09.38
The Glorious Glasgow Haskell Compilation System, version 7.4.2を使っています。
uniq :: Eq a => [a] -> [a]
uniq [] = []
uniq [x] = [x]
uniq (x1:xs@(x2:_)) | x1 == x2 = uniq xs
| x1 /= x2 = x1 : uniq xs
というコードを書いてコンパイルすると、
retu.hs:27:1:
Warning: Pattern match(es) are non-exhaustive
In an equation for `uniq': Patterns not matched: _ : (_ : _)
と言われます。
このuniqの定義は自分にはexhaustiveに思えるのですが、
何か見落としているのでしょうか。
342デフォルトの名無しさん:2013/05/05(日) 13:54:52.70
GHCだと問題ないけど
343デフォルトの名無しさん:2013/05/05(日) 13:57:21.20
>>341
こちらも、ghc 7.6.2 で問題なかった。
344デフォルトの名無しさん:2013/05/05(日) 14:04:39.23
>>341
パターンじゃなくて、ガードに問題がある
== と /= ですべての状態をカバーしてると思われてない

uniq :: Eq a => [a] -> [a]
uniq [] = []
uniq [x] = [x]
uniq (x1:xs@(x2:_))
| x1 == x2 = uniq xs
| otherwise = x1 : uniq xs

でok

あるいは /= の実装で otherwise を使えばokかと
345デフォルトの名無しさん:2013/05/05(日) 14:09:47.42
せやな
346341:2013/05/05(日) 14:14:24.16
なるほど、ありがとうございます
確かに==と/=だと、それぞれの演算子の意味を解析しないと
exhaustiveかどうか分からないですからね

/=の実装がotherwiseとおっしゃっているのは、
f x | hoge x = True
  | otherwise = false
notF x = not $ f x
のような実装をすればパターンマッチで判定が出来るから、
という事ですか?
347デフォルトの名無しさん:2013/05/06(月) 00:09:01.32
Grahpics.UI.GLUT の KeybordMouseCallback のサンプルとドキュメントがどこにあるのかみつかりまふぇん(;-;)
348デフォルトの名無しさん:2013/05/06(月) 16:44:01.16
>>347
ドキュメント
http://www.haskell.org/haskellwiki/OpenGLTutorial1
http://www.haskell.org/haskellwiki/OpenGLTutorial2
http://www.cs.hs-rm.de/~panitz/hopengl/skript.html
http://www.renci.org/wp-content/pub/tutorials/BeautifulCode.pdf
http://www.cin.ufpe.br/~haskell/hopengl/

サンプルは
The OpenGL Programming Guide: The Official Guide to Learning OpenGL

The OpenGL Shading Language
の中の例題の一部に対応するサンプルがGLUT-2.4.x.xのexamplesフォルダの中に入ってる
349デフォルトの名無しさん:2013/05/07(火) 00:13:00.71
わーいありがと
350デフォルトの名無しさん:2013/05/07(火) 16:32:56.45 ID:+yPWQW2x
(3::Int16) ← 一々括弧付けなきゃならないのがウザい
351デフォルトの名無しさん:2013/05/07(火) 17:07:59.90
Int16を値に降格できて
asTypeOf 3 Int16
とかできたらいいのにな
352デフォルトの名無しさん:2013/05/07(火) 19:35:34.67
前スレッド http://tech.log2.me/1358702176_900.html >>961
に書いたパルズ解答ソフトについて。
Haskellに慣れるための習作として作っているけれども。
計算時間は、目標…2秒以内に到達。C++版より多少遅い程度まで改善させた。

ソースコードサイズ(未参照コード含む)
C++版 167kB
Haskell版 54kB(3月中旬版)
Haskell版 68kB(5月前半版)

計算時間
C++版 1.77秒
Haskell版 38.2秒(3月中旬版)
Haskell版 1.93秒(5月前半版)

プロファイル機能は役にたった。
予想外に演算負荷を使っていたところがあった。

これで、Haskell に慣れたと言っていいかな。
次に本番…ゲーム作成に取り掛かりたいと思う。
353デフォルトの名無しさん:2013/05/07(火) 23:09:48.16
haskell始めようと思ったもののGHC.exeが開かないんだけど
バイナリパッケージをダウンロードするだけだよね
もしかして他に何か必要なファイルとか他にあるの?
354デフォルトの名無しさん:2013/05/07(火) 23:20:46.58
ない
355デフォルトの名無しさん:2013/05/07(火) 23:31:46.79
ありがとう
もう一回ダウンロードしてみる
356デフォルトの名無しさん:2013/05/08(水) 00:25:49.79
.exeってことはWindowsでやろうとしてるのか。
単純にGHCをインストールするよりHaskell Platformをインストールしろと公式が推奨してるだろ

というかそもそもGHC.exeを開くってなんだ? 何がしたいんだ? 訳がわからんぞ
357デフォルトの名無しさん:2013/05/08(水) 00:42:38.56
バイナリパッケージってPlatformのことじゃなかったのか・・・
それならだめだ
358デフォルトの名無しさん:2013/05/08(水) 21:33:24.03
入力した名前に対してイニシャルを返す関数
initials :: String -> String -> String
initials firstname lastname = [f] ++ ". " ++ [l] ++ ". "
where (f:_) = firstname
(l:_) = lastname
ってソースをコンパイルして実行
ghci> initials hoge poyo
って入力すると,
Not in scope: `hoge'
Not in scope: `poyo'
と出て詰んでます...すごいH本通りの記述ですし見る限りwhereのスコープ内だと思うのですが...
359デフォルトの名無しさん:2013/05/08(水) 21:39:24.65
ghci> initials "hoge" "poyo"
だろ
360デフォルトの名無しさん:2013/05/08(水) 21:40:42.80
プログラミングなんてやめて別のことした方がいいよ
361デフォルトの名無しさん:2013/05/08(水) 21:43:45.02
>>359 ありがとうございます>< お恥ずかしい限りです
362デフォルトの名無しさん:2013/05/09(木) 00:32:12.14
初めての言語がHaskellなのか?
高度な変態だな
363デフォルトの名無しさん:2013/05/09(木) 00:34:57.85
下手に他の言語の知識ないほうが覚えやすいという可能性も
364デフォルトの名無しさん:2013/05/09(木) 00:47:11.91
始めての言語が haskell って凄いhaskell モンスターに育ちそう。頑張れ!
365デフォルトの名無しさん:2013/05/09(木) 01:17:09.85
C++とかやらせたらすごい富豪PGやらかしそう
てかまず一流のメモリリーカーになりそう
366デフォルトの名無しさん:2013/05/09(木) 01:35:45.70
もうそろそろプログラマにメモリのことを考えさせる時代が終わってもいいはずだ
367デフォルトの名無しさん:2013/05/09(木) 01:37:05.14
ノイマン型が続く限りメモリ関連の悩みは尽きることはない
368デフォルトの名無しさん:2013/05/09(木) 02:00:46.11
いつから非ノイマン型でメモリ関連の悩みが消えるかもしれないと錯覚していた?
369デフォルトの名無しさん:2013/05/09(木) 02:03:45.98
クラウドベースになればjavascriptあたりがCに取って代わるからとりあえず自前のメモリ管理は不要になるかと
370デフォルトの名無しさん:2013/05/09(木) 02:09:37.37
別にクラウドベースにしなくてもガベージコレクションがある言語を使えば同じことじゃん
例えばHaskellとか
371デフォルトの名無しさん:2013/05/09(木) 02:27:59.49
俺ならせめてerlang薦めるな
372デフォルトの名無しさん:2013/05/09(木) 07:32:28.68
クラウトベース()
373デフォルトの名無しさん:2013/05/09(木) 18:01:33.24
圏XのT代数X^Tと
圏Xのクライスリ圏X_Tは
互いに圏論的双対?
374デフォルトの名無しさん:2013/05/09(木) 21:09:13.30
定期的に再起動で解決
375デフォルトの名無しさん:2013/05/09(木) 21:53:45.44
メモリも管理できないような奴が優れたプログラム書けるわけなかろう
376デフォルトの名無しさん:2013/05/09(木) 23:06:49.17
優れたプログラムを書く必要はない
優れたアイデアをスマートに表現したいだけだ
377デフォルトの名無しさん:2013/05/11(土) 06:13:51.10
型システムに頼るような奴が優れたプログラム書けるわけなかろう
378デフォルトの名無しさん:2013/05/11(土) 07:05:30.73
え?
379デフォルトの名無しさん:2013/05/11(土) 07:20:05.70
>>376
機械語で書くのが一番スマートな表現だと思うぞ。
380デフォルトの名無しさん:2013/05/11(土) 11:00:15.16
>>377
一発完動的な意味でかな?
381377:2013/05/11(土) 13:44:31.86
もう一度言うぞ。
型システムに頼るのはダメな奴。
あと、エディタとかコンパイラ使う奴もな。
382デフォルトの名無しさん:2013/05/11(土) 14:16:54.35
バイナリエディタも使わないのか

どうせならコンピュータも使うなよなw
383デフォルトの名無しさん:2013/05/11(土) 15:17:47.21
お前は機械語でプログラミングするとき
インダイレクトアドレッシングモードは決して使わずに
プログラム自己書き換えとダイレクトアドレッシングモードで対応してるのかよ
機械語命令セットにインダイレクトアドレッシングモードを導入するのはある種の抽象化なんだよ
Haskellの場合はその抽象化の度合いが常人には理解できないレベルまで昇華してるだけ
384デフォルトの名無しさん:2013/05/11(土) 15:49:02.15
フィールド名とか構造体とか、型システムに頼り過ぎだ。
385デフォルトの名無しさん:2013/05/11(土) 16:24:07.74
あれだな、サブルーチンも、callとreturnを使わずに、レジスタで帰り番地を渡して
ジャンプ命令のオペランド自己書き換えで戻るんだよな。
386デフォルトの名無しさん:2013/05/12(日) 04:32:12.51
本物のプログラマはコアダンプを読める
387デフォルトの名無しさん:2013/05/12(日) 06:35:51.44
俺は飲み会のあとよくコアダンプするよ。
388デフォルトの名無しさん:2013/05/12(日) 07:10:13.64
型システムがデバッグに役に立つなんて懐疑的だった。
ところが、不思議なほど、型がチェックして問題を弾いてくれる。めんどくさい、と最初は思ってたけど、慣れると実にいいね。
少なくとも型に関しては人間だと見逃す矛盾を確実に防げる道具、としてはオレは型システムに頼ってる。

>>387
コアファイルはちゃんと調べるのか?
389デフォルトの名無しさん:2013/05/12(日) 07:20:44.91
>>388 みたいなことをいう人の90%は
強型に懐疑的だったことなんてなくて
最初から強型を使っている信者さんだよ
390388:2013/05/12(日) 07:37:44.59
>>389
えー、おれのよく使う言語ってperlとCommon Lisp なんだけど。型信者じゃないよ。
それに型検査がめんどくさいなぁ、とは思ってる。うまく言えないが、自分がプログラム書いてるというより、書かされてるような感じはある。
391デフォルトの名無しさん:2013/05/12(日) 09:06:06.10
zipやzipWith のかっこいい応用方法を教えてください。
392デフォルトの名無しさん:2013/05/12(日) 10:14:17.83
型は書き方を強制するためのものだからね。
393デフォルトの名無しさん:2013/05/12(日) 13:59:44.86
カタカタ言ってないで早くコード書けや
394デフォルトの名無しさん:2013/05/12(日) 14:12:31.39
カタカタ
395デフォルトの名無しさん:2013/05/12(日) 16:13:42.22
forall の指定がどのような場合に必要なのか、未だによく分かりません。
役割や使い所などが詳しく書かれたWebページはありますか。
英語でも構いません。

ちなみに「本物のプログラマはHaskellを使う」の説明は難しくて理解出来ませんでした。
http://itpro.nikkeibp.co.jp/article/COLUMN/20080603/305833/?P=2

型の一番外側や内側という表現がまず分かりません。
例えば f :: a -> b -> c という関数の場合、a は外側でしょうか、c は内側でしょうか。
また、applyTupleのfにおける多相性がapplyTuple自身に成り立つという表現も分かりませんでした。

分からない部分はとりあえず無視して読み進めましたが、分からない部分が次々と増えていくだけでした。
396デフォルトの名無しさん:2013/05/12(日) 18:06:52.47
>>395
f :: a -> b -> c
と書いたら、
f :: forall a b c. (a -> b -> c)
という意味になる。つまりforallが型全体にかかる。これが「一番外側」の意味
これ以外の場所にforallが必要なら、明示しないといけない。例えば、
f :: forall a c. (a -> (forall b. b) -> c)
397デフォルトの名無しさん:2013/05/12(日) 18:46:17.88
>>396
すいません、違いが分かりません。

f :: forall a b c. (a -> b -> c)
f :: forall a c. (a -> (forall b. b) -> c)

前者では認められる定義(関数の内容)が、後者では認められない定義やその逆など、
具体例を出していただけると嬉しいです。
398デフォルトの名無しさん:2013/05/12(日) 20:12:31.15
>>397
このばあい、どっちにしてもまともな定義は与えられないから、
使う側で比較した方が分かりやすいと思う
(f True True)は、前者ならOK、後者なら型エラー(Trueはforall b.bでないので)
(f True undefined)なら、前者でも後者でもOK
399デフォルトの名無しさん:2013/05/12(日) 20:34:45.73
>>398
せっかく例を説明していただいたのに、申し訳ないです。
よく分かりません。

> Trueはforall b.bでないので

前者の関数も b について forall なのに何故? と疑問に思ってしまいます。
(b だけではないのですが)

forall は全称量化で、全ての〜について、という意味ですよね。
後者の関数で、全ての〜について、と言っているのは a も b も(c も) だと思うのですが、
なぜ a に対する「全ての〜について」の「全て」の中には True が含まれていて、
b に対する「全ての〜について」の「全て」の中には True が含まれないのでしょうか。
400デフォルトの名無しさん:2013/05/12(日) 21:00:57.37
>>399
(forall a. a -> a)という型を持つ値があったとすると、その値は
(Int -> Int)としても、(Bool -> Bool)としても、([[Int]] -> [[Int]])としても、使えないといけない
だから、例えばidはこの値を持てるけど、notは持てない

つまり、
f :: (forall a. a -> a) -> Int
というfがあったら、fにidを渡すことはできるけど、notを渡すことはできない

一方、
f :: forall a. ((a -> a) -> Int)
なら、fを((Int -> Int) -> Int)としても、((Bool -> Bool) -> Int)としても、…使えることになるので、
fにnotを渡せる(もちろんidも)
401デフォルトの名無しさん:2013/05/12(日) 21:37:10.13 ID:FOfpj64p!
クラスがいまいちよくわからない。Fractional は Numのサブで、EqはNumの親でいいの?
f :: (Num a) => a -> a -> a
f x y = sqrt (fromIntegral (x +y))
でNumでもEqでもダメ。
402デフォルトの名無しさん:2013/05/12(日) 21:54:37.51
そこはIntegralかと
403デフォルトの名無しさん:2013/05/13(月) 06:09:44.22
forall:『(型の)特定は許さない』ルール

f :: (forall a. a -> a) -> Int
a -> a の特定は許さない
だからnotのようなTrueしか扱えないような特定したものをfへとるのは許さない

f :: forall a. ((a -> a) -> Int)
(a -> a) -> Int の特定は許さない

利根川「ここでnotを使う」

カイジ「ちょっと待て! notはTrueに特定しているじゃねぇか!」

利根川「くくく……確かに。a -> a に関してはTrueで特定している。
    だが今一度確認して欲しい……。a -> a は確定したかも知れないが、
    今回私は (a -> a) -> Int までは決して特定していないということを……」

カイジ「……な!? て、てめぇ! 汚ねぇぞ! 同じことじゃあねえか!」

利根川「浅い。……浅いなぁ、カイジ君。
    君はこのゲームのルールをまるでわかっちゃあいない」

カイジ「」ざわ……ざわ……
404デフォルトの名無しさん:2013/05/13(月) 07:23:29.20
>>403
すいません、これでも、まるでわかっちゃいない状態です。

> a -> a は確定したかも知れないが、
> 今回私は (a -> a) -> Int までは決して特定していないということを……

型変数 a に True を入れることで、(a -> a) -> Int の a -> a までは特定しているのですよね。
しかし、それでもなお (a -> a) -> Int までは決して特定していないという理由が
いまひとつ分かりません。


それと、確認なのですが、

> だからnotのようなTrueしか扱えないような特定したものをfへとるのは許さない
> くくく……確かに。a -> a に関してはTrueで特定している。

これらは、TrueではなくBool型の値ではないでしょうか。
つまり、TrueだけではなくFalseも、ということではないかと。
もし私の考えの方が間違っているのなら、私は根本から大きく勘違いをしているかもしれません。
405デフォルトの名無しさん:2013/05/13(月) 09:15:38.32
>>395 あたりから読むと、
Haskellって難しいですね・・・
ということになる。
406デフォルトの名無しさん:2013/05/13(月) 11:50:30.83
f :: forall a . (a -> a) -> Bool
f a = True

g :: (forall a . (a -> a)) -> Bool
g a = True

どちらの関数も、第一引数に関数を受け取り、Bool値を返す関数。
ただし、第一引数の解釈が異なる。

f の場合は、「どのような型の関数を渡しても良い」という意味。
それは (Bool -> Bool) でも (Int -> Int) でも。
だから f not は動く。 (なぜなら f は、「どのような型の関数でも受け取れる」、という定義だから)

一方 g の場合は、「”どのような関数でも受け取れる関数”、しか受け取りません」という意味。
「どのような関数でも受け取れる関数」とは、すなわち ∀ a => a -> a のみ。
それ以外の (Integral a => a -> a) や (Floating a => a -> a) などでは要求に合わない。
だから g not は動かない。 (なぜなら g は、「”どのような関数でも受け取れる関数”しか受け取れない」、という定義だから)

g not は動かないが、 g (\x -> x) ならば動く。
なぜなら (\x -> x) は、「どのような型も受け取れる関数」という型だから。 g が求めてる型に合致してる。
このラムダ関数に型を付けてしまうと、 g (\x -> x :: Int) 動かない。 「Int型しか受け取れない関数」を渡すことになってしまうので。

f の場合は、「どのうような型の関数でも受け取れる」という意味なので、 f not でも f (\x -> x) でも受け取ってくれる。
これが f と g の動作の違い。これが何に役立つかは知りません。
407デフォルトの名無しさん:2013/05/13(月) 16:47:54.87
@∀a
××× a => 〜


A∃a
Num a => 〜
Ord a => 〜
   :

こゆこと?
408デフォルトの名無しさん:2013/05/13(月) 16:53:32.83
∀←自由だ! やった!

ではなく寧ろ

∀←自由で な く ち ゃ い け な いという 不 自由

的な?

制限することを制限する的な?
409デフォルトの名無しさん:2013/05/13(月) 18:02:23.20
>>406
> 一方 g の場合は、「”どのような関数でも受け取れる関数”、しか受け取りません」という意味。

とても分かりやすい説明で、こんな私でも理解出来ました。

f の forall はこの関数全体に言及していて、
g の forall は第1引数として適用する関数のことのみ言及しているのですね。
これで内側や外側という言い回しも分かり、すっきりしました。

ありがとうございました。
今まで説明してくださった方も、ありがとうございました。
理解出来なくて申し訳なかったです。
410デフォルトの名無しさん:2013/05/13(月) 18:15:25.51
>>406
> これが f と g の動作の違い。これが何に役立つかは知りません。

fの方は適用されている文脈によってaが限定されることがある。
gはそれを許さない。
411デフォルトの名無しさん:2013/05/13(月) 21:08:58.54 ID:PrnnR3SJ!
>>402
Integral もダメなんだ。
Haskellのクラスややこしいな。
ところで、パターンマッチとガードの違いって、パターンマッチはタイプをチェックして、ガードは値をチェックの認識でいいの?
412デフォルトの名無しさん:2013/05/13(月) 21:40:22.59
いいよそれで
413デフォルトの名無しさん:2013/05/14(火) 00:03:59.85
>>408
述語論理で使う∀も同じ意味だと思うが
414デフォルトの名無しさん:2013/05/14(火) 01:03:52.84
TSX命令が使えるようになったらSTMは単にTMと呼ばれるようになるのだろうか? o(^-^)o
415デフォルトの名無しさん:2013/05/14(火) 06:53:54.53 ID:XUYxe5VW!
>>412
ありがと。
416デフォルトの名無しさん:2013/05/14(火) 07:50:37.25
>>411
全然違う
417デフォルトの名無しさん:2013/05/14(火) 22:17:48.75 ID:XUYxe5VW!
あれ?違うの?
data Hoge = True | False

f :: Int -> Hoge
f x = if (x=2) then True else False
みたいにHogeタイプを確定してくれるものだと思ってた。
418デフォルトの名無しさん:2013/05/15(水) 00:31:15.32
それパターンマッチかガードと何の関係あんの
419デフォルトの名無しさん:2013/05/15(水) 00:51:38.29
>>417

412,416の意見に惑わされるな
他人の意見に惑わされるな



お前がどうするかだ! お前がどう動くかだ!
お前がどうするかだ! お前がどう動くかだ!!

決めるのは誰だ? やるのは誰だ? 行くのは誰だ?
そう お前だ! お前が舵を取れ!
お前が行け! お前が走れ! お前が行くから道になる
前へ 前へ 前へ 前へ ただただひたすら前へ突き進めばいい
わかるか! わかるか! お前が決めろ お前がしっかり舵を取れ
420デフォルトの名無しさん:2013/05/15(水) 09:48:34.34
舵取りはお前にまかせたぞ!
421デフォルトの名無しさん:2013/05/15(水) 11:06:47.11
長渕かよ
422デフォルトの名無しさん:2013/05/15(水) 13:17:18.57
手続き型は文系・バカ
関数型は理系・知的

という書き込みをみたらバカはなんて思うか
知的に憧れ関数型をやるに1万円
423デフォルトの名無しさん:2013/05/15(水) 13:34:44.35
布教するための一例

・本物のプログラマはHaskellを使う
自信が無いプログラマや社会事情を知らない独学者の心のスキをついたキャッチフレーズ

・手続き型言語はオワコン、関数型言語の時代
IT特有の最先端の物を取り入れるという美徳心理をついたこと

・手続き型言語=一般人 関数型言語=変態
人と違うように思われたいという選民意識を釣ったこと
424デフォルトの名無しさん:2013/05/15(水) 14:13:01.26
本物のプログラマはJavaで量り売り
425デフォルトの名無しさん:2013/05/15(水) 16:47:21.37
>>420
お前が消えて喜ぶ奴にお前のオールを任せるな
426デフォルトの名無しさん:2013/05/15(水) 19:57:55.33
手続き型と関数型の二択だと思ってる>>422がバカ
427デフォルトの名無しさん:2013/05/15(水) 22:24:12.22
闇のProlog一族はどうぞ安らかにお眠りください
428デフォルトの名無しさん:2013/05/15(水) 22:44:11.57
プログラムが組めないのですが誰か教えてください
2枚目を参考にしながら
よろしくお願いします
http://i.imgur.com/pqa6Bk4.jpg
http://i.imgur.com/R8FsYBJ.jpg
429デフォルトの名無しさん:2013/05/15(水) 22:45:03.16
追記:(1)だけでいいです
430デフォルトの名無しさん:2013/05/16(木) 00:07:18.35
>>417
パターンマッチは値コンストラクタをマッチさせる。その例だと
f 2 = True
f x = False
みたいに書くのがパターンマッチ
f x | x == 2 = True
| otherwise = False
みたいに引数の性質によって場合分けするのがガード
型を確定どうのは型推論の話だと初学者がマジレスしてみるテスト
431デフォルトの名無しさん:2013/05/16(木) 03:31:22.70
アスペクト志向だかサブジェクト志向だかプログラミングってどうなったの?
432デフォルトの名無しさん:2013/05/16(木) 04:31:47.77
たぶん純粋関数型よりは普及している
433デフォルトの名無しさん:2013/05/16(木) 07:36:44.34
AOPはもうあって当たり前の技術
434デフォルトの名無しさん:2013/05/16(木) 07:57:15.87
>>433
「あって」とは?
435デフォルトの名無しさん:2013/05/16(木) 08:06:05.35
その辺のプロジェクトに
436デフォルトの名無しさん:2013/05/16(木) 11:53:47.98
>>430
fって値コンストラクターなん?
437デフォルトの名無しさん:2013/05/16(木) 17:45:58.75
違う
438デフォルトの名無しさん:2013/05/16(木) 17:51:46.01
パターンマッチの例に2を使ってるのがイマイチなんじゃ。

comb :: Maybe a -> (a -> Maybe b) -> Maybe b
comb Nothing _ = Nothing
comb (Just x) f = f x

safeSqrt x
| x >= 0 = Just (sqrt x)
| otherwise = Nothing

こんな使い分け。
439デフォルトの名無しさん:2013/05/16(木) 18:24:32.33
>>427
Prologと関数型言語は持ちつ持たれつ進んでいくのが一番いいよ。
440デフォルトの名無しさん:2013/05/16(木) 19:12:04.82
AOP研究者は最近Feature Oriented Programming(FOP)に鞍替えしてると聞く
441デフォルトの名無しさん:2013/05/17(金) 13:00:50.42
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < Haskell Platform 2013.2.0.0 まだ〜?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん |/
442デフォルトの名無しさん:2013/05/19(日) 23:44:52.16
話題は?
443デフォルトの名無しさん:2013/05/20(月) 00:08:19.53
オヌヌメの開発環境を教えて下さい
444デフォルトの名無しさん:2013/05/20(月) 07:00:45.93
>>443
Emacs + haskell-mode
445デフォルトの名無しさん:2013/05/20(月) 07:09:44.51
>>443
vim + hdevtools
446デフォルトの名無しさん:2013/05/20(月) 15:32:57.02
hdevtoolsのウリは?
447デフォルトの名無しさん:2013/05/20(月) 20:17:09.78
448デフォルトの名無しさん:2013/05/20(月) 23:00:40.75
最近は何でもsublime text使っときゃ間違いないみたいになりつつあるから、
sublime textがいいかもな
449デフォルトの名無しさん:2013/05/21(火) 06:55:43.87
>何でもsublime text使っときゃ間違いないみたいになりつつある
初耳だな
450デフォルトの名無しさん:2013/05/21(火) 08:41:53.58
俺も初めて聞いた。
何でもかんでもvim使えとかemacs使えという人ならいっぱいいるけどww
451デフォルトの名無しさん:2013/05/21(火) 09:22:10.27
sublime用のhaskellプラグインはemacsのhaskell-modeより開発が活発
hoogleとかghs-modには大分前から対応してる
452デフォルトの名無しさん:2013/05/21(火) 09:56:09.26
haskell-modeはシンプルだから活発に開発する段階はとうに過ぎてるねぇw
453デフォルトの名無しさん:2013/05/21(火) 12:39:49.89
haskell-modeはお世辞にも使いやすいとか、かゆいところに手が届くってわけではないが、
Emacs 自体が使いやすいから、haskell-mode の開発が止まっても、仕方なく使い続けてる。

Haskell で C# や Java みたいに GUI パーツをペタペタ貼ったり、
ロジックをグラフィカルに定義できる様になれば、専用の開発環境に移るかもしれん。
さすがに、そういうのが Emacs で気持よくできるようになるとは思えないからね。
454デフォルトの名無しさん:2013/05/21(火) 14:03:05.09
マクロがhaskellで記述できるエディタってあったりするの?
455デフォルトの名無しさん:2013/05/21(火) 15:11:15.55
義ってどうなったの?
456デフォルトの名無しさん:2013/05/21(火) 19:27:05.11
>>455
http://hackage.haskell.org/package/yi-0.6.5.0
最終アップデートが2012年3月
それまでだいたい半年に1回くらいのペースで定期的にアップデートしてきたのに・・・
457デフォルトの名無しさん:2013/05/21(火) 19:32:41.53
と思ったが、GitHub ではちょくちょく更新されてるから、開発は続いているみたい

俺は Linux だからいいけと、Windows で簡単にインストールできるようにならんと、流行らんな
458デフォルトの名無しさん:2013/05/30(木) 18:55:48.24
話題は?
459デフォルトの名無しさん:2013/05/30(木) 20:38:48.49 ID:WFTkAEQe!
質問でも良かな?
460デフォルトの名無しさん:2013/05/30(木) 21:18:33.96
>>459
どぞ
461デフォルトの名無しさん:2013/05/30(木) 21:36:00.73 ID:WFTkAEQe!
ありがとう。最近haskellを始めた。
haskell99の1~10をやっているのだが、9の問題で詰まった。

duplicateSet :: (Eq a) => [a] -> [a]
duplicateSet list = case (list) of
[] -> []
(x:y:xs)
| x == y -> y : duplicateSet (x:xs)
| otherwise -> [x]

deleteSet :: (Eq a) => [a] -> [a] -> [a]
deleteSet originaList set = case (originaList) of
(x:xs) -> case (set) of
(y:ys)
| x == y -> deleteSet xs ys
| otherwise -> error"Something wrong"
[] -> (x:xs)
_ -> error"Need at least one element"

pack :: (Eq a) => [a] -> [[a]]
pack list = case (list) of
[] -> [[]]
(x:xs) -> (duplicateSet list) : pack (deleteSet list (duplicateSet list))
462デフォルトの名無しさん:2013/05/30(木) 22:02:32.13
どう詰まったのかとか、そういうのは」ないのかね
463デフォルトの名無しさん:2013/05/30(木) 22:20:15.44 ID:WFTkAEQe!
失敬。例えば、
*Main> pack [1,1,1,2,2,3,4,4]
[[1,1,1],[2,2],[3],[4,4],[]]
があったとき、どうすれば最後の[]を消せるのだろうか?
元をちょこっと書き足してみたのだが。
duplicateSet :: (Eq a) => [a] -> [a]
duplicateSet list = case (list) of
[] -> []
[x] -> [x]
(x:y:xs)
| x == y -> y : duplicateSet (x:xs)
| otherwise -> [x]

deleteSet :: (Eq a) => [a] -> [a] -> [a]
deleteSet originaList set = case (originaList) of
[] -> []
(x:xs) -> case (set) of
(y:ys)
| x == y -> deleteSet xs ys
| otherwise -> error"Something wrong"
[] -> (x:xs)
-- _ -> error"Need at least one element"
464デフォルトの名無しさん:2013/05/30(木) 22:46:41.04
initを使う
465デフォルトの名無しさん:2013/05/30(木) 23:11:33.94
>>463
[] -> [[]] を[] -> []
とするんだよ。
466デフォルトの名無しさん:2013/05/30(木) 23:25:30.45 ID:WFTkAEQe!
なぜ、[[]]が[]なのだろう?
[a] : [[]] -> [[a], ... []]にならないのだろうか?
[a]:[]はエラーな気がするのだが。
467デフォルトの名無しさん:2013/05/30(木) 23:28:24.79
>>466
なぜ、[a]:[]がエラーだと思うの?
468デフォルトの名無しさん:2013/05/31(金) 00:12:00.47 ID:8/3B9ldc!
”:”の最初は”:”の後の要素でなければならないから。
例えば、[1]:[2] -> error. しかし、1:[2] -> ok 見たいな?
間違ってました。
[1]:[]は[[1]]になるんだね。(1:[]) -> [1]の延長見たいなものか。
ありがとうございます。
469デフォルトの名無しさん:2013/05/31(金) 07:30:24.94
data [] a = [] | a : [a]
470デフォルトの名無しさん:2013/05/31(金) 19:54:30.74 ID:8/3B9ldc!
*Main> compress "aaabbbbvvvcccaaaddd"
"abvcad*** Exception: Documents/Haskell/excercise.hs:(15,56)-(19,59): Non-exhaustive patterns in case
何がたりなんだろうか。
compress :: (Eq a) => [a] -> [a]
compress list = case (list) of
[] -> []
(_:_) -> (findDuplicate list) : (compress (deleteDuplicate list (findDuplicate list)))
where
findDuplicate :: (Eq a) => [a] -> a
findDuplicate list = case (list) of
[] -> error""
[x]->x
(x:y:xs)
| x==y-> findDuplicate (y:xs)
| otherwise -> x

deleteDuplicate :: (Eq a) => [a] -> a -> [a]
deleteDuplicate list element = case (list) of
[] -> []
(x:y:xs)
| x == element -> deleteDuplicate (y:xs) element
| otherwise -> list
471デフォルトの名無しさん:2013/05/31(金) 20:55:58.86
>>470
エラーメッセージ読めよ。
472デフォルトの名無しさん:2013/05/31(金) 23:36:01.66
compress [] = []
compress (x:xs) = reverse $ foldl (\a y -> if head a == y then a else (y:a)) [x] xs

どうもすっきりしない…
[]を特別扱いしない方法はないでしょうか?
473デフォルトの名無しさん:2013/05/31(金) 23:58:00.94
if head a == y then a else (y:a) だって、
head a と y が等しい場合を特別扱いしてるくせに・・・
474デフォルトの名無しさん:2013/06/01(土) 00:50:55.28
ポイントフリーの達人の出番か
475デフォルトの名無しさん:2013/06/01(土) 11:24:15.57 ID:05NwpYWl!
deleteDuplicateが list=[]の時、終了しないからNonexhaustiveになるんだと思う。
終了させるにはどうすれば良いかな。
試しに[x]->[x]入れたら無限に津尽くし。
476デフォルトの名無しさん:2013/06/01(土) 12:10:42.80
yがいらんだろ。
477デフォルトの名無しさん:2013/06/01(土) 12:51:27.14
compress&amp;#160;::&amp;#160;(Eq&amp;#160;a)&amp;#160;=>&amp;#160;[a]&amp;#160;->&amp;#160;[a]
compress&amp;#160;list&amp;#160;=&amp;#160;case&amp;#160;(list)&amp;#160;of
&amp;#160;[]&amp;#160;->&amp;#160;[]
&amp;#160;(_:_)&amp;#160;->&amp;#160;(findDuplicate&amp;#160;list)
&amp;#160;&amp;#160;where
&amp;#160;&amp;#160;&amp;#160;&amp;#160;findDuplicate&amp;#160;::&amp;#160;(Eq&amp;#160;a)&amp;#160;=>&amp;#160;[a]&amp;#160;->&amp;#160;[a]
&amp;#160;&amp;#160;&amp;#160;&amp;#160;findDuplicate&amp;#160;list&amp;#160;=&amp;#160;case&amp;#160;(list)&amp;#160;of
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[x]->[x]
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;(x:y:xs)
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;|&amp;#160;x==y->&amp;#160;findDuplicate&amp;#160;(y:xs)
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;|&amp;#160;otherwise&amp;#160;->&amp;#160;x&amp;#160;:&amp;#160;compress&amp;#160;(y:xs)

------------------------------------
comp2&amp;#160;[]=[]
comp2&amp;#160;[x]=[x]
comp2&amp;#160;(x:y:xs)|x==y&amp;#160;=&amp;#160;comp2(y:xs)
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;|otherwise&amp;#160;=&amp;#160;x:comp2(y:xs)
478477:2013/06/01(土) 12:52:38.51
ごめん、失敗した。
479デフォルトの名無しさん:2013/06/01(土) 12:59:49.83 ID:05NwpYWl!
もうcompress のlistに[x]->[]で強制的に終わらせることにした。
できればcompress "f" > "f"みたにしたかったけど、いいか。
ありがとう。
480デフォルトの名無しさん:2013/06/01(土) 13:30:05.31
(>>=take 1) . Data.List.group
481デフォルトの名無しさん:2013/06/01(土) 13:55:08.25
deleteDuplicate :: (Eq a) => [a] -> a -> [a]
deleteDuplicate list element = case (list) of
[] -> []
(x:xs)
| x == element -> deleteDuplicate (xs) element
| otherwise -> list
482デフォルトの名無しさん:2013/06/03(月) 20:25:21.69 ID:vG7d+PED!
質問。
getnameに入れる値の構造は(c,name,age)じゃダメなのでしょうか?
[Haskellで学ぶ原理と技法」の5章で躓いた。
data Person = Person {c :: Class , name :: String , age :: Int}deriving (Show)
data Class = Student | Teacher
deriving (Show)

type Name = String
type Age = Int
--data List = [Person]
getname :: Person -> Name
getname (_ ,name ,_) = name
getage :: Person -> Age
getage (_ , _ ,age) = age

後ほど[Person]を使って多くのデータを処理したいと思っています。
下のは動くけど、[Person]出来ないし、[(class, name, age)]だけにしたいし。
data Person = Person (Class, Name , Age)
deriving (Show)

data Class = Student | Teacher
deriving (Show)

type Name = String
type Age = Int

--data List = [Person]
name :: Person -> Name
name (Person (_,name, _)) = name

age :: Person -> Age
age (Person (_ ,_,age)) = age
483デフォルトの名無しさん:2013/06/03(月) 21:57:27.37
>>482
> getnameに入れる値の構造は(c,name,age)じゃダメなのでしょうか?
> getname :: Person -> Name
> getname (_ ,name ,_) = name
型シグネチャの引数が代数データ型Personなのに、
パターンマッチしてるのがClass,Name,Ageからなるトリプルなので矛盾してる
正しくパターンマッチさせるには(Person _ name _)にする必要がある
またはtype Person = (Class, Name, Age) という定義にすればよい
でもそもそもレコード構文を使っているので
getname という関数を作らなくても name :: Person -> Nameという関数でNameを取り出せる
484デフォルトの名無しさん:2013/06/03(月) 22:19:55.39 ID:vG7d+PED!
>>483
getname :: Person -> Name
getname (Person _ ,name ,_) = name
は最初に試したのですが、エラーを吐かれたので。
>正しくパターンマッチさせるには(Person _ name _)にする必要がある
確かに引数?としては(Person c, name, age)が正しいと思うのですが、
getname (Person _ ,name ,_) = name -> なぜかコンパイラーが通らない。

data Person = Person (Class, Name , Age)はname (Person (_,name, _)) = nameで動きました。
>getname という関数を作らなくても name :: Person -> Nameという関数でNameを取り出せる
確かにそうですね。
それと、ちょっと訂正。
data Person = Person {c :: Class , name :: Name , age :: Age}deriving (Show)
485デフォルトの名無しさん:2013/06/03(月) 23:01:15.32
>>484
(Person _ ,name ,_) と (Person _ name _) は違うよ
()を,で区切ってあるのはタプルというPersonとは異なる型(リストみたいなやつ)だから
486デフォルトの名無しさん:2013/06/04(火) 07:04:07.14 ID:3+1kYpm8!
>>485
おお!出来た。有難うございます。
data Person = Person {c :: Class , name :: Name , age :: Age}deriving (Show)に
"," があったので引数のほうにも入れないといけないと思っていました。
487デフォルトの名無しさん:2013/06/04(火) 07:15:35.00
関数の引数にカンマは要らんよ
488デフォルトの名無しさん:2013/06/04(火) 07:41:23.74
data T = T {a :: A, b :: B, c :: C}
上は下の糖衣構文
data T = T A B C
a (T x _ _) = x
b (T _ y _) = y
c (T _ _ z) = z
ですが、上の定義にするとこんなことも出来る
f t@(T {b = y}) = t {b = g y}
-- f (T x y z) = T x (g y) z
489デフォルトの名無しさん:2013/06/04(火) 11:05:46.59
エラーメッセージなんて英語なんだから
読みようが無いってのが実際だろうな
知ってる事が英語ならまだしも
知らない事を英語で書かれても
意味がわかるわけない
490デフォルトの名無しさん:2013/06/04(火) 11:21:05.01
っ辞書
491デフォルトの名無しさん:2013/06/04(火) 12:02:49.72
パスカルの三角形とか4次元モデル(立方体の中に立方体)をイメージしたら
なんとなく繋がりが分かってきた
492デフォルトの名無しさん:2013/06/04(火) 12:11:40.24
カルノー図っての描ければ
なんとなく平面上で繋がりはイメージできた
493デフォルトの名無しさん:2013/06/04(火) 15:12:33.46 ID:3+1kYpm8!
>>487,488
なるほど。
data T = T {a::A, b::B, c::C}の時は引数にカンマがいらなくて、data T = T (A,B,C)の時は要るのか。
砂糖構文調べてみる。
494デフォルトの名無しさん:2013/06/04(火) 19:23:25.51
>>493
勘違いをしていなければいいのだが・・・

data TT = T (A,B,C)と定義されたデータ型があるときに、
let a = T (1, 2, 3) みたいに括弧とカンマを使って記述することになるのは、
「関数(データコンストラクタ T)の引数がひとつのタプルだから」だよ
495デフォルトの名無しさん:2013/06/04(火) 20:19:53.37 ID:3+1kYpm8!
>>494
何か勘違いをしていたみたい。ありがとうございます。
もう一つ質問してもいいでしょうか??
例えば、
data Person = Person (Occupation, ID, Name, Age)deriving (Eq, Show)
data Occupation = Student | Teacher deriving (Eq, Show)
type ID = Int
type Name = String
type Age = Int
type List = [Person]

record :: List
record = [Person (Student, 23281, "A", 20), Person (Teacher, 12037, "B", 29),Person (Student, 37823, "C", 18),
Person (Student, 24932, "D", 19),Person (Teacher, 12917, "E", 33)]
があって、recordのデータをageの若いもん順にした。
sort :: [Int]
sort (x:xs) = sort [x | x<-xs, x <= x] ++ [x] ++ sort [x | x<-xs, x > x]を参考にしたのですが”_”のエラーがいっぱい。
別の方法もあるんでしょうか?
youngSort :: List -> List
youngSort list = case (list) of
[] -> []
((Person (_, _, _, age)):xs) -> youngSort [(Person (_, _, _, younger)) | (Person (_, _, _, younger)) <- xs, younger <= age] ++ [(Person (_, _, _, age))] ++ youngSort [(Person (_, _, _, age)) | (Person (_, _, _, older)) <- xs, older > age]
496デフォルトの名無しさん:2013/06/04(火) 21:27:08.28
youngSort :: [Person] -> [Person]
youngSort list = case (list) of
[] -> []
((Person (a, b, c, age)):xs) -> youngSort [(Person (a, b, c, younger)) | (Person (a, b, c, younger)) <- xs, younger <= age]
++ [(Person (a, b, c, age))] ++ youngSort [(Person (a, b, c, older)) | (Person (a, b, c, older)) <- xs, older > age]
497デフォルトの名無しさん:2013/06/04(火) 21:52:49.33 ID:3+1kYpm8!
>>496
ありがとうございます。
何となく関数型が分かってきた感じがします。
頑張ってモナドまで行こっと。
498デフォルトの名無しさん:2013/06/04(火) 22:29:54.52
,
◆じゃあのさん来た!◆
744:カミカゼ[]
2013/06/04(火) 21:38:46.58 ID:gQxj8a/C0
コングラッチュレーションwwwwww
ヒャッハーwwwww
ようおまいらwww俺だwwww
いいニュースだなあwwワールドカップ出場www
本当にいいニュースだ
ただ、悪いニュースがある聞きてえかおまいら?

--- 以下スレ情報 ---
高岡さんがフジ韓流ゴリ押し批判したら干されたのでウジテレビ凸
http://hayabusa.2ch.net/test/read.cgi/news4vip/1370194661/
499デフォルトの名無しさん:2013/06/05(水) 07:07:41.05
トリプルのコンストラクタ関数は(,,)です。
(x, y, z) == (,,) x y z
3つの引数を受けます。
data T = K (A, B, C)
K (x, y, z)
K ((,,) x y z)
このT型のKというコンストラクタ関数は一つの引数しか受けません。引数の型は(A,B,C)です。
このトリプルは別にいらない。なくして内容をKの引数にすればいい
data T = K A B C
K x y z
K (x, y, z) -- エラー。Kの一番目の引数は(A,B,C)型じゃなくてA型であるべきですから

僕は母語が日本語じゃないから変な文は許してね
500デフォルトの名無しさん:2013/06/05(水) 14:12:51.94
>>499
どこの国の人?
501デフォルトの名無しさん:2013/06/05(水) 14:15:22.30
Land of LISP
502499:2013/06/05(水) 15:27:05.68
>>500
プログラミングスレであまり語るものにならないと思うんですけど
(まあそれを言っちゃったら最初からわざわざ日本人じゃないよーとは言うべきじゃないんですけどね)
と、ごちゃごちゃ言っといて
アメリカ人です

Haskell楽しいお
503デフォルトの名無しさん:2013/06/05(水) 17:33:22.42
>>502
日本語上手すぎるだろ
日本に何年住んでいるの?

>>501
ご近所さんだな
504デフォルトの名無しさん:2013/06/05(水) 18:58:40.58 ID:LmcXm0ZX!
木をリストから作りたいです。
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show, Eq)
singleton :: a -> Tree a
singleton element = Node element Empty Empty

insert :: (Ord a) => a -> Tree a -> Tree a
insert element tree = case (tree) of
Empty -> singleton element
(Node x ltree rtree)
| x > element -> Node x (insert element ltree) rtree
| x == element -> Node element ltree rtree
| otherwise -> Node x ltree (insert element rtree)
mkTree :: (Ord a) => [a] -> Tree a
mkTree list = case (list) of
[] -> Empty
(x:xs) -> -- do not use any prelude functions
最初のxをinsertに渡したらNode x E Eになるから、残りのxsを"insert x”で出来た木に同じようにしたい。
リストの最初の値と取ってinsertに渡していくようなループってそうすればいいでしょうか?
出来ればpreludeの関数は使わない方向でおねがいしたいのですが。
505デフォルトの名無しさん:2013/06/05(水) 19:37:33.83
こういうこと?
mkTree :: (Ord a) => [a] -> Tree a
mkTree list = case (list) of
[] -> Empty
(x:xs) -> insert x $ mkTree xs
506デフォルトの名無しさん:2013/06/06(木) 23:14:31.03 ID:E5gkHTLj!
>>505
ありがとうございます。
これを元にバランス木を作ってみたいと思います。
507デフォルトの名無しさん:2013/06/08(土) 16:21:21.49 ID:qUSgaMZw!
何故、map (3:) []は[]?
3:[]の[3]じゃなくて?
508デフォルトの名無しさん:2013/06/08(土) 17:40:19.93
>>507
map f xs はリストxsの各要素に対して関数fを適用した結果をリストとして返す
(map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn])
要素数0のリスト[]に対しては適用するリストの中身がないので[]を返す
map は f :: a -> b という関数 を 受け取って
g :: [a] -> [b] という関数を返す関数と考えるとよいかも
関数gの引数が[]のとき、返り値として最もふさわしい値は[]以外には考えにくいでしょう?
509デフォルトの名無しさん:2013/06/08(土) 21:58:18.92
tail []も[]にしてほしかったね
510デフォルトの名無しさん:2013/06/08(土) 22:00:32.67 ID:qUSgaMZw!
>>508
なるほど。
[]に(3:)しても、[]に要素がないから[]を返される訳なのか。
ありがとうございます。


所で、だれかHaskell99 やってる人いないかな。62Bむずかしい。
511デフォルトの名無しさん:2013/06/08(土) 22:04:18.77
>>509
自分で tail をそのように再定義すれば済む話ではないか?
512デフォルトの名無しさん:2013/06/08(土) 22:25:29.24
標準ライブラリの機能にあれが欲しいっていうよくある話だろ
自分で書くより標準ライブラリ使う方が保守性は格段に上がるんだから
513デフォルトの名無しさん:2013/06/08(土) 22:36:10.36
>>510
Haskell99か元はprolog向けなんだな。

こういうのはだいたい、1の時を考える。
N-1が成り立つとしてNを考える。
あとは、再帰で書けばいいんだよ。
514デフォルトの名無しさん:2013/06/08(土) 22:42:42.86
>>512
保守性というのは、これ以降あなたが作るプログラムの保守の話でしょ?
あなたが tail [] == [] の仕様が欲しいと言っているのだから。

自分のプログラムに tail [] == [] である関数を組み込む程度で
保守性が下がる理由が分からない
自分でユーティリティ関数を集めたモジュールを作るのと同じだと思うけど。
515デフォルトの名無しさん:2013/06/08(土) 22:54:07.59
一人で書いてるならその通りだな。
516デフォルトの名無しさん:2013/06/08(土) 22:54:14.49
lispだとcdr nil = nilなんだっけ

>508的な考えも一理ある
> g :: [a] -> [b] という関数を返す関数と考えるとよいかも
> 関数gの引数が[]のとき、返り値として最もふさわしい値は[]以外には考えにくいでしょう?
517デフォルトの名無しさん:2013/06/08(土) 23:12:41.17
>>515
チームでプログラムしているのなら、
チーム用のユーティリティモジュールに自作 tail を入れればいいのでは?
518デフォルトの名無しさん:2013/06/08(土) 23:36:13.70
俺はdrop 1を良く使う
519デフォルトの名無しさん:2013/06/08(土) 23:44:41.56 ID:qUSgaMZw!
>>513
なるほど。
Haskellでもインベーダーみたいなの作りたいけど、言語自体自分には難しいから夢のまた夢。
ま〜まずはモナドなど勉強します。
なにかオススメのサイトとかありますか?
520デフォルトの名無しさん:2013/06/09(日) 00:00:13.56
なんで入門者の間でモナドがひとつの壁、理解の目標みたいな風潮になってるんだろ。

今Haskellで日常的にプログラムしている人の中でも、
モナドをまとまった一つの項目として学んではいない人は多いと思う。
よく分からんが使っているうちになんとなく少し分かったという体験を、
知らず知らずの間に塵のように積み重ねてきたんじゃないかな。
521デフォルトの名無しさん:2013/06/09(日) 00:04:39.35
>>520
そりゃIOを使ったプログラムを自分なりにコピペ改変しながらやろうとして
上手くいかなくて、この do 記法はモナドの操作のシンタックスシュガーであり
みたいな解説があったからそうかではIOちゃんと使えるようになるためには
モナド知らんといかんなぁと思ったんだろ。

んでもって、冷静になってIOぐらいだったら do 記法の使い方の
例からなんとなく使えるようになるじゃんか…という真実にたどり着いた
あと、「ところで、なんでIOみたいな普通の言語が普通に持ってる機能を
モナドなどというケッタイなもので実装したのか、そのデザインには
なにか神秘的な力があるのではないだろうか。ゼノブレイドでもモナドが
スゴイって言ってたし…」 と気になってやっぱりモナド知りたいぞーとなった人がいても
不思議じゃないし。
522520:2013/06/09(日) 00:07:30.00
>>521
ごめん、変な話で割り込んだ俺が悪かった。

>>520 は無視して続けてくれ。
523デフォルトの名無しさん:2013/06/09(日) 07:39:39.83
>>516
Common Lisp だと cdr nil = nil だけど、
Scheme だと cdr nil = error だね。
どっちが正しいかは、信じる教義に依る。
524デフォルトの名無しさん:2013/06/09(日) 08:11:37.76
head []がerrorだからtail []もそうなのかなと思った
でもたいていパターンマッチすれば済むしtailSafeやtailDefあるからそれほど気にならない
525デフォルトの名無しさん:2013/06/09(日) 10:47:49.68 ID:FF7F/XIY!
木とリストを勉強し終えた。
何か、”これしてみろ”って問題ない?出来れば木やリスト関連で初学者にも出来るグライ簡単なの。
現在、完全木をリストから作ることには成功した。
リストは好きはピザをテーマに簡単なレコード構文を作って遊んでる程度。
おねがいします。
526デフォルトの名無しさん:2013/06/09(日) 11:07:50.14
勉強の仕方が義務教育時代と同じだね。
とりあえず体系的に順に学んで、理解の程度をテストした後は、
いつか実戦で使う時まで忘れている、と。

ひと通り基礎文法を理解して入門を終えたのなら、逆にしてみたらどう?
とりあえず何か作ってみたいアプリを考えて、それを作っていくうちに、
このデータは木構造にするといいかもと思いつき、木構造を勉強する、と。
527デフォルトの名無しさん:2013/06/09(日) 11:39:16.53 ID:FF7F/XIY!
なるほど、他の言語を勉強するときに使わせてもらいます。
出来れば簡単なゲーム(スペースインベーダー)なんか作りたいけど. Haskellでのゲーム作成方法ないからな〜。
もう木から特定の要素を抽出しろとか、リストを使っての計算とかちょっと飽きてしまったので、
何か皆さんが”初心者はこれが出来たらいいぞ〜”的な問題があったらうれしい。
javaならのんびりと簡単なゲーム作るのに。
528デフォルトの名無しさん:2013/06/09(日) 12:05:55.84
>>526
そういう方法は勧められない。
529デフォルトの名無しさん:2013/06/09(日) 12:09:39.69
HaskellのSDLライブラリを使ってLazy FooのSDL Tutorialsをやってみるとかだな
やってるうちに「これならCの方が楽」って絶対思うから
そこでFRPとかFreeMonadとか調べるとどんどん世界が広がる
530デフォルトの名無しさん:2013/06/09(日) 12:21:14.36
>やってるうちに「これならCの方が楽」って絶対思うから
さすがにそれはない
531デフォルトの名無しさん:2013/06/09(日) 13:30:54.97
>>527
> Haskellでのゲーム作成方法ないからな〜

それが義務教育時代の勉強みたいと言っているのだが・・・

スペースインベーダーを作ってみたいのなら、それを作るのに必要なものは何か考えようよ。
グラフィックスをスクリーンに描く事、コントローラーからの入力を処理する事、
時間の経過に伴ってキャラクタを生んだり消したりする事、などなど。

で、それをするのに今自分に不足している知識は何か考えてみればいいじゃん。

そして、こういう事をやりたくて、こういう事をする必要があるんだけど、
Haskell ではどうやってやるの? こういう方法を考えてみたけどうまくいかない、
とか質問すればいいんだよ。

最初は個々の事柄に対してそれぞれバラバラに集めた方法やテクニックを継ぎ接ぎするんだから、
きっとHaskell熟練者みたいな綺麗な形にはまとめられないと思う。
でも、そこから少しずつブラッシュアップしたり、時には一から作り直したりするんだよ。

俺はそうやって勉強していくのをお勧めする。
質問時には、俺の持っている知識が役に立ちそうならアドバイスするし。
(他の人もアドバイスしてくれるでしょう)


> 何か皆さんが”初心者はこれが出来たらいいぞ〜”的な問題があったらうれしい。

言っておくけど、君はもうとっくに初心者じゃないんだよ。
いつになったら初心者気分が抜けるのかな。
誰かに、これができたら初心者卒業だと認めてもらわないと不安かな。

(ちなみに、Haskellでインベーダーゲームを作る方法の一つを紹介した
[The Yampa Archade] という論文がフリーで読めるが、いきなりこれはお勧めしない)
532531:2013/06/09(日) 13:32:26.72
>>531
お勧めはしないとは言え、論文のタイトルを間違えたらアカンな

[The Yampa Arcade] でした
533デフォルトの名無しさん:2013/06/09(日) 13:44:15.30 ID:FF7F/XIY!
>>531
甘い考えだと分かり反省します。
同時に、提案ありがとうございます。
ゲーム作りの前にまずは基礎を固めることにします。
論文は面白そうなのですが、如何せん知識が無いので基礎が出来たらにします。
534531:2013/06/09(日) 14:39:41.82
>>533
甘いかどうかは知らんし、反省してもらわんでもいいよ。
俺の方法が正しいという確証は全くない。

単に経験上良かったんでお勧めの方法だから、一度断られても2度くらいは勧める。

安心してくれ、3度は勧めん。
現に >>528 のように反対してる人もいるわけだし。
535デフォルトの名無しさん:2013/06/09(日) 16:14:19.36
では、まず質問ですが、Haskellでスクリーンに絵を描くにはどうしたらいいですか?
536デフォルトの名無しさん:2013/06/09(日) 16:44:31.07
まず服を脱ぎます
537デフォルトの名無しさん:2013/06/09(日) 16:52:22.52
>>535
PostScriptを勉強する。
538デフォルトの名無しさん:2013/06/09(日) 17:23:01.80
>>535
私の知っている限りでは、大きく3つの方法がある。

OpenGL や DirectX などを使う方法。
OS の描画用 API を直に使う方法。
GTK などの SDK にある描画機能(要はAPIのラッパーだが)を使う方法。

何が適しているかは目的によると思う。
ゲームを作るのであれば OpenGL などを使うほうが良いし、
GUI の一部として描くのであれば API や GTK などを使うほうが良いだろう。

まずは目的を一つに絞り、「Haskell OpenGL」や「Haskell GTK」などでググってみてはどうだろうか。
これらは絵を描く常套手段などで、解説サイトも他の話題に比べれば比較的充実している。

その上で、更に細かい部分で分からなければ、質問すればいいと思う。
539538:2013/06/09(日) 17:25:14.24
>>538

誤) これらは絵を描く常套手段などで、

正) これらは絵を描く常套手段なので、
540デフォルトの名無しさん:2013/06/09(日) 20:07:42.82 ID:FF7F/XIY!
質問ばっかでゴメンナサイ。
[1..4] > [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
みたいに出力したい。
pairUp :: [a] -> [(a, a)]
pairUp list = case (list) of
[] -> []
[x, y] -> [(x, y)]
(x:y:xs) -> (x, y) : pairUp (x:xs)だと
[(1,2),(1,3),(1,4)]までしか出ない。
(x:y:xs) -> (x, y) : pairUp (x:xs) ++ pairUp (y:xs)
やると出力カオス。
541デフォルトの名無しさん:2013/06/09(日) 20:22:05.24
pairUp :: [a] -> [(a, a)]
pairUp [] = []
pairUp (x:xs) = map ((,) x) xs ++ pairUp xs
542デフォルトの名無しさん:2013/06/09(日) 21:00:11.50
pairUp xs=[(x,y)|x<-xs,y<-[x..last xs],x/=y]
543デフォルトの名無しさん:2013/06/09(日) 21:01:55.18
Haskellでグラフィックスをやりたいならglossかfree-gameを使おう
544デフォルトの名無しさん:2013/06/09(日) 21:05:09.30 ID:FF7F/XIY!
>>541
ありがとうございます。
mapは理解しているのですが、((,)x)はどう言う風に動くのでしょうか?
結果から見れば明白なのですが、preludeの関数を使わずにしたいので。
p [1..4]++p[2..4]++p[3..4]みたいにループで出来たらいいなと思ってます。
545デフォルトの名無しさん:2013/06/09(日) 21:12:27.75
>>544
(,)はタプルを作る関数
(,) 1 2は(1,2)と同じ
((,) x)は、これにxを部分適用したもの
546デフォルトの名無しさん:2013/06/09(日) 21:28:29.11 ID:FF7F/XIY!
なるほど。色々な関数があるんですね。
勉強になりました。
547デフォルトの名無しさん:2013/06/09(日) 21:30:57.00
>>544
541はまさにそういうループになっているけど。
mapを使わずになら、
p _ [] = []
p x (y:ys) = (x,y):(p x ys)

pairUp :: [a] -> [(a, a)]
pairUp [] = []
pairUp (x:xs) = p x xs ++ pairUp xs
548デフォルトの名無しさん:2013/06/10(月) 04:15:28.33
(++)もPreludeだからこうでなければ

import Prelude ()

map f [] = []
map f (x:xs) = f x : map f xs

[] ++ ys = ys
(x:xs) ++ ys = x : (xs ++ ys)

pairUp [] = []
pairUp (x:xs) = map ((,) x) xs ++ pairUp xs

つまり、素直にPreludeを使えってことだ
使わない理由がわからない
549デフォルトの名無しさん:2013/06/10(月) 05:39:37.30
これはなんでこうなの?

四の五の言わずに黙ってやれ!

武術の修行中に一々この型のこの動作は何故こんな風にするのですか
なんて訊く奴があるか!

体得すれば自ずと解る!

会得して尚一家言あればそのとき初めて口を開け!

励まぬ者に文句垂れる資格なし!

修行するぞ修行するぞ修行するぞ
550デフォルトの名無しさん:2013/06/10(月) 09:03:32.68
一、清く正しく美しく、散歩に読書にニコニコ貯金、週末は釣り、ゴルフ、写経

二、世のため人のため社会のため

三、Love & Peace & Togetherness

四、ごめんなさい、ひとこと言えるその勇気

五、味の乱れは心の乱れ、心の乱れは家庭の乱れ、家庭の乱れは社会の乱れ、
   社会の乱れは国の乱れ、国の乱れは宇宙の乱れ

六、ニンニク入れますか?
551デフォルトの名無しさん:2013/06/10(月) 11:05:11.14
(show a) ++ " " ++ (show b)
\x y -> compare (snd x) (snd y)
みたいに2引数関数の引数を同じ関数を適用してから〜の流れを
sndとかshowとかを1回書くだけでよい方法はありますか
552デフォルトの名無しさん:2013/06/10(月) 11:47:26.95
Data.Function.on

(++) `on` show
compare `on` snd
553デフォルトの名無しさん:2013/06/10(月) 11:59:19.81
(*ゝω・)ノ アリガd♪
554548:2013/06/10(月) 13:12:14.00
>>549
言葉が悪かったな、本当に済まなかった。
言いたかったことはこれ
初心者はPrelude禁止とか変な縛りはせず、
Preludeの中の関数の定義を読むか、
自分から書きなおした方がいいんじゃないか、勉強的に

関数型プログラミングをするのは、難しい問題を分解して
多くの簡単で小さな問題を解く関数を書くことではないか。
だからmapを使え。mapがなにしてるかわからないのなら
書きなおして身につける方がいい

僕は上の母語の日本語じゃない奴なので
変な文&正しくないマナーは許してくれ(汗
555デフォルトの名無しさん:2013/06/10(月) 19:08:11.83 ID:lZ0F4JgH!
>> 547, 548
ありがとうございます。
出きるだけprelude関数を使いたくなかった理由はjavaやってる時に、
ずっとライブラリーを貼って付けるみたいな作業を感じたので。
それにしても、Haskell意外と面白いな。これからもっと勉強します。
556デフォルトの名無しさん:2013/06/10(月) 20:17:18.37
Javaは全然知らんが、mapやfoldは
関数型の基本だから覚えるべし。
557デフォルトの名無しさん:2013/06/10(月) 20:32:08.37 ID:lZ0F4JgH!
>>556
foldlって無限のリストでも使用できるんですよね。
ま〜take, drop, map, zip, filter位は何とか覚えるようにしてます。
Haskell覚えること多いな。
algbraic type は自分でdata使って独自の型を作れるのは分かったノですが,abstract data typeが理解できない。
既存のIntやBool型などブラックボックス化されてるのがそうなのですか?
558デフォルトの名無しさん:2013/06/10(月) 21:43:32.16
>>554
purelude は弾けても fuga は死にそうです‥‥
559デフォルトの名無しさん:2013/06/10(月) 23:18:41.40
>>557
本一冊読破すればそのような基本的な疑問はすべて解消すると思う
(まあ抽象データ型は関数型に限った話じゃないと思うが)
Prelude関数を自分で書いてみるのはHaskellの基本的なテクニックを学べる点では良い
ただプログラム書くのにいちいち定義してたら面倒だからライブラリがあるんでないのかね
これはどんな言語でも同じだと思うけど。さらにいえばファイル入出力とかのコードはどの言語でも
似たようなつまらないコードを書かざるをえない。こういう作業感はやることに依存すると思う。
560デフォルトの名無しさん:2013/06/11(火) 04:43:03.72
君達に許された時間は有限なんだ
車輪の再発明にかまけてる時間があるのか
561デフォルトの名無しさん:2013/06/11(火) 06:06:00.66
>>559
「ふつうの・・・」では無理ね。
562デフォルトの名無しさん:2013/06/11(火) 06:45:03.82
>>560
再発明しかお金がもらえないんです
563デフォルトの名無しさん:2013/06/11(火) 11:15:06.31
習作から入る事前提のプログラミング教育も問題だけどな。
564デフォルトの名無しさん:2013/06/11(火) 23:08:35.87
>>542
pairUp [1,3,5]
はどういう結果になるのが正しいと思ってる?
565デフォルトの名無しさん:2013/06/11(火) 23:26:39.31
>>557
抽象データ型は代数とみなせるから代数データ型とも言う事があるというだけで2つは同じもの。

構造化プログラミングはプログラムの連続分解というものを導入する事で大規模ソフトウェアの
開発を可能にしたけれど、データ構造の変更とデータ構造を操作する手続きの変更に弱かった。
抽象データ型を導入することでその欠点を補いつつ構造化プログラミングが可能になった。
(プログラムの連続分解をするにあたって有害だったのがgoto文)

Haskellでは例えば昔話題になったオードリー・タンのperl6は構造化プログラミングを実践してた。
ただ、抽象データ型はあんまつかってなかったと思う。
566デフォルトの名無しさん:2013/06/11(火) 23:33:20.87
いやー構成要素の並びが外部に影響する代数データ型を抽象データ型とはとても言えない
567デフォルトの名無しさん:2013/06/11(火) 23:41:09.19
せやね
568デフォルトの名無しさん:2013/06/11(火) 23:48:13.30
並びについては知らないな。ゴーゲン以降出てきたのか?そんな話。
569デフォルトの名無しさん:2013/06/11(火) 23:55:19.69
あとついでに、今思えば、オードリー・タンのpugsはHaskellだからというよりも
Haskellで構造化プログラミングをやったから大規模開発ができたというのが正しいと思う。
570デフォルトの名無しさん:2013/06/12(水) 13:54:46.68
僕は数学オリンピックで上位ですがC言語しか使ってません
知り合いの人は中学数学すらおぼつかないバカなのにHaskell使ってることを自慢してきます
どうすればいいでしょうか?
571デフォルトの名無しさん:2013/06/12(水) 14:04:35.02
算数はすごいけど数学はすごくない
572デフォルトの名無しさん:2013/06/12(水) 17:56:37.86
>>570
くだらないことを質問するな
573デフォルトの名無しさん:2013/06/12(水) 20:58:46.80
Haskell使ってみたいけど作りたいものがない
574デフォルトの名無しさん:2013/06/12(水) 21:12:07.51
だから何だ?
575デフォルトの名無しさん:2013/06/13(木) 00:20:21.19
カレーでも作ってろ
576デフォルトの名無しさん:2013/06/13(木) 04:39:36.23
>>573
ナンプレパズルを解くプログラム
577デフォルトの名無しさん:2013/06/13(木) 10:51:56.41
>>557
> ま〜take, drop, map, zip, filter位は何とか覚えるようにしてます。
> Haskell覚えること多いな。

いや、その辺は現代的なLispの影響を受けた言語の基本かと。
578デフォルトの名無しさん:2013/06/13(木) 21:36:42.93
>>573
解説サイト作れ
579デフォルトの名無しさん:2013/06/14(金) 12:33:39.45
確かに入門向けの解説がないから、初心者向けのが、作者の理解と共に読めるサイトがあったらいいな。
580デフォルトの名無しさん:2013/06/14(金) 13:38:17.60
>>575
おれは評価する
581デフォルトの名無しさん:2013/06/14(金) 16:28:04.48
haskellでeval男の人って…
582デフォルトの名無しさん:2013/06/14(金) 16:30:11.48
>>580
お前575だろ
583デフォルトの名無しさん:2013/06/15(土) 00:08:38.79
>>575
俺も評価する
584デフォルトの名無しさん:2013/06/15(土) 00:18:06.54
俺は遅延評価する
585デフォルトの名無しさん:2013/06/15(土) 00:28:12.51
あぶねえ
こんな微妙なネタで被るところだった
586デフォルトの名無しさん:2013/06/16(日) 03:18:07.64
Haskellを使うために必要な知識を得たくて勉強してるのに、「モナド」という単語のせいで、Haskellプログラムを表現するためだけに必要な本来の目的とは関係ない特殊な知識へ労力がミスリードされてる気がする
587デフォルトの名無しさん:2013/06/16(日) 08:26:58.96 ID:F2SjiwBC!
ttp://www.haskell.org/haskellwiki/OpenGLTutorial1
の下の方に、四色で彩られた四角形の描写があります。
color $ (Color3 (1.0::GLfloat) 0 0)
vertex $ (Vertex3 (0::GLfloat) 0 0)のColor3やVertex3はメソッドだと分かったノですが、
parse error on input `color' とでました。
何がいけないのでしょうか?

import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT

main :: IO ()
main = do
(progname, _) <- getArgsAndInitialize
createWindow "Display a screen"
displayCallback $= display
mainLoop
display :: IO ()
display = do
clear [ColorBuffer]
renderPrimitive Quads $ do
color $ (Color3 (1.0::GLfloat) 0 0)
vertex $ (Vertex3 (0::GLfloat) 0 0)
vertex $ (Vertex3 (0::GLfloat) 0.2 0)
vertex $ (Vertex3 (0.2::GLfloat) 0.2 0)
vertex $ (Vertex3 (0.2::GLfloat) 0 0)
color $ (Color3 (0::GLfloat) 1 0)
vertex $ (Vertex3 (0::GLfloat) 0 0)
vertex $ (Vertex3 (0::GLfloat) (-0.2) 0)
~~~
flush
588デフォルトの名無しさん:2013/06/16(日) 09:07:18.73
>>587
コピペしてimportとmainを追加したらコンパイル通ったよ
(実行したらウィンドウシステムが落ちたけどたぶん俺の環境の問題)
コピペミスじゃないか?
589デフォルトの名無しさん:2013/06/16(日) 16:07:27.56 ID:F2SjiwBC!
>>588
多分何処かにミスがあったのだと思います。コンパイーラーは通ったのですが、どうやってmainを呼べばいいんでしょうか?
今まではghciからmainを呼んでいたのですが。
Haskell ? ghc -package GLUT game.hs -o game. ?
[1 of 1] Compiling Main ( game.hs, game.o )
Linking game. ...
Haskell ? main
zsh: correct main to man [nyae]? n
zsh: command not found: main
590デフォルトの名無しさん:2013/06/16(日) 17:10:28.04
./game
591デフォルトの名無しさん:2013/06/16(日) 21:09:33.37
>>584
言い得て妙だな
(必要になるまで575の評価をしない)
592デフォルトの名無しさん:2013/06/16(日) 21:24:19.88 ID:F2SjiwBC!
>>590
おお、ありがとうございます。
593デフォルトの名無しさん:2013/06/17(月) 04:44:22.94
>>586
叙述トリックだ
594デフォルトの名無しさん:2013/06/17(月) 08:47:10.52
モナドモナドしたいからhaskell勉強するんだよ
595デフォルトの名無しさん:2013/06/17(月) 11:14:29.81
最小完全定義の説明ってちょっと分かりづらくないですかね
具体的には、Eqのインスタンスを宣言するときに(==), (/=)のどちらかを実装するって話(すごH本、wikibooksで確認)
いきなりEqクラスのデフォルト実装が循環定義になってるのを見せられると一瞬面食らう
学習上であまり直感的じゃない部分だと思うんだけど
ググってもあまり悲鳴が上がってないのが不思議
(ブログを見ると「らしい」という曖昧に理解してる感がある文章に出会える)
596デフォルトの名無しさん:2013/06/17(月) 11:48:08.06
>モナドモナドしたいからhaskell勉強するんだよ
上からのフェロモンで動いてる昆虫そのもの
597デフォルトの名無しさん:2013/06/17(月) 15:57:31.37
>>595
(==)だけ実装してる場合
x /= y を簡約化すると
not (x == y) -- x /= y の定義
not False -- (==は実装済みなので) x == y = False だとして
True -- not の定義
というふうになる
(/=)だけ実装してる場合も同様
普通(デフォルト)は==の否定(not)は/=と定義されるよね(逆もまた然り)という
実装が与えられてるだけで、そんなの関係ねえと思う人は(==)も(/=)も定義すればよい
data Human = Human { age :: Int, sex :: Int }
instance Eq Human where
x == y = sex x == sex y -- 左辺と右辺の(==)は違う
x /= y = age x /= age y
Q. John(19)はMary(19)は同じ(==)人物か
A. いいえ
Q. じゃあ二人は違う(/=)人なのね
A. いいえ
Q. ぐぬぬ
ってなるけど(最小完全定義の説明にはなってないかな
598デフォルトの名無しさん:2013/06/17(月) 16:13:40.07
循環定義になってるから、どっちかをオーバーライドして使ってね、という
意図ということでいいと思うけどな。

で、排中律が成立しているか、みたいなチェックの枠組は言語にはないよ、と。
599デフォルトの名無しさん:2013/06/17(月) 16:13:52.83
いや595はもう理解してるんでしょ
最初見たときは戸惑った
これじゃあ無限に巡回するじゃないか、と
ただそこで深く悩むことはなく
そのあとに出てきた信号をインスタンスにする例で
すぐに理解できた
600デフォルトの名無しさん:2013/06/17(月) 21:25:09.17
>>586
ミスリードで思い出したけど
このリードって導くの意味のリードだったってつい最近まで知らんかったの思い出した
読むの方だと思ってたwwwwwww
601デフォルトの名無しさん:2013/06/17(月) 23:04:10.61
今、英和辞典で misslead を探してどこにも無いと焦ったバカが日本に数万人は居るな
602デフォルトの名無しさん:2013/06/18(火) 00:10:00.88
Haskellプログラマが数万人も居るなら日本は安泰だな。
603デフォルトの名無しさん:2013/06/18(火) 00:58:21.30
モナドが云々は、純粋関数型のIOを歴史的にみるといいんでないかい。
http://www2.gssm.otsuka.tsukuba.ac.jp/staff/kuno/lectures/12/2012-04-TopicsPL6.pdf
といっても、そうなると焦点がそこに絞られちゃうからこんな感じでよいのでは?
http://www.sampou.org/haskell/tutorial-j/io.html
604デフォルトの名無しさん:2013/06/19(水) 00:25:45.13
IOモナドはC言語の世界でいうとyaccに近い
という理解でよろしいでしょうか?
605デフォルトの名無しさん:2013/06/19(水) 06:29:26.34
ヤックル!ヤックル!
606デフォルトの名無しさん:2013/06/19(水) 07:13:57.60
>>604
なぜ?
607デフォルトの名無しさん:2013/06/19(水) 09:12:46.56
なんでpipeとかもっと適切なのを思わないんだろ
608デフォルトの名無しさん:2013/06/19(水) 09:18:26.09
>>602
本当にそうなら、作ればいいだけではないか。
609デフォルトの名無しさん:2013/06/20(木) 22:59:37.42
質問です

これがOKで
Prelude> product [x | x <- [1..10000] , mod x 10 /= 0 , mod x 10 /= 2 , mod x 10 /= 5]

これがNGなのは何故ですか?
Prelude> product [x | x <- [1..10000] , not $ (mod x 10) <- [0,2,5] ]
<interactive>:15:36: Parse error in pattern: mod
610デフォルトの名無しさん:2013/06/20(木) 23:22:08.48
>>609

[x | x <- [1..1000] , y <- [0,2,5], not $ (mod x 10 == y) ]
611デフォルトの名無しさん:2013/06/20(木) 23:33:50.07
product $ filter (\x -> (and (map (\y -> (not $ mod x 10 == y)) [0,2,5]))) [1..100]
612デフォルトの名無しさん:2013/06/20(木) 23:38:31.57
>>609
・mod の構文が間違っている
・(mod ...) が Int 型とマッチングしない
・[x| x <- ...., y <- ....] は (x,y) の全組み合わせを生成して、重複を削除せずにxだけ並べる
613デフォルトの名無しさん:2013/06/21(金) 00:09:06.83
ん?GHCiだと通ったけど
Prelude> product [x | x <- [1..10000], mod x 10 /= 0, mod x 10 /= 2, mod x 10 /= 5]
614609:2013/06/21(金) 00:58:46.81
>>613
代名詞が分かり辛かったですが、"これ"は上を指しています

>>612
:t mod で確かめましたが、mod での行き先(?)は Int とは限らないのですか…
では、
Prelude> :i Integral で
instance Integral Integer
instance Integral Int
とあるのにも関わらず、(mod ...) が [0,2,5] :: [Int]
の要素である Int 型として推論されないのはなぜですか?

ググる際のキーワードも教えていただけると有難いです
615デフォルトの名無しさん:2013/06/21(金) 01:01:11.01
>>614 下を指しています
616デフォルトの名無しさん:2013/06/21(金) 02:01:36.60
>>614
リスト内包表記 [ x | x <- hoge ] の正体は hoge >>= \x -> [x]
だから<-の左辺でパターンマッチ例えば(x:xs)とか(x,y)を使える
だけど普通の関数と同様に(mod x 10)というパターンマッチは使えない
617デフォルトの名無しさん:2013/06/23(日) 18:36:49.35
説明がかみ合ってないので
モナド難しい!と思われた初心者をまた逃したな
618デフォルトの名無しさん:2013/06/23(日) 19:34:36.60
fact n = fact-tail n 1
    where fact-tail 1 acc = 1
        fact-tail n acc = fact-tail (n - 1) (acc * n)

みたいに素直に再帰で書き下せるところをいちいち末尾再帰に書き換えるように
なってしまいました。

こういうのってプログラム見にくいんじゃないかなぁと思いますが、
どうでしょうか?

好きにしろって言われるかもしれませんが
619デフォルトの名無しさん:2013/06/23(日) 19:39:39.27
>>618
見にくくなるかなぁと思いながら、それでもわざわざ末尾再帰にするくらいだから、
パフォーマンスの向上を狙っているのだと思う。

それが、「どれほどの」向上に繋がっているのか正しく理解しているのなら、
それでいいんでないか?
トレードオフでパフォーマンス側をとったというだけのことだから。

どれほどの向上なんだろ? という状態だったら、直ちに調査してみることを勧める。
620デフォルトの名無しさん:2013/06/23(日) 20:13:36.12
がんばれ〜
621デフォルトの名無しさん:2013/06/23(日) 20:32:23.73
おれは逆に、何でも末尾再帰で書いてたのが、Haskell 勉強してからはfold系が使えないか考えるようになったなぁ。
622デフォルトの名無しさん:2013/06/24(月) 02:23:24.02
何でもかんでも末尾再帰で書く理由は自動プログラミング
出力されるコードが末尾再帰になるようにプログラムを帰納するテクニックがある

別の言い方をすると、出力の一覧を見てコードを書くときに、頭を使わずに同じ手順でコードを書くときは、末尾再帰の方が楽な場合がある
(手は猛烈に動かすが、頭は使わないという意味で)
623デフォルトの名無しさん:2013/06/24(月) 12:41:37.00
お、おう
624デフォルトの名無しさん:2013/06/24(月) 15:01:35.61
狐憑き Haskell kita-
625デフォルトの名無しさん:2013/06/24(月) 19:36:40.75
代数データ型の値に関する次の2つの更新方法は、
実行効率で違いはあるのでしょうか。

data D = D { x :: Int, y :: Int, z :: Int }
d = D 1 2 3

{方法1} d' = D 5 6 7
{方法2} d' = d { x = 5, y = 6, z = 7}

部分的に更新するのではなく、全てのフィールドの値を更新するとして、です。


GHC のバージョンは 7.6.3 です。
626デフォルトの名無しさん:2013/06/24(月) 20:44:50.76
>>625
違いはない。
コンパイルの途中で同じコードになる。
627デフォルトの名無しさん:2013/06/24(月) 21:48:17.00
>>626
ありがとうございました。
628デフォルトの名無しさん:2013/06/24(月) 22:43:19.95
>>625
不安なら、中間コードを生成して中を覗けばいいと思う
629デフォルトの名無しさん:2013/06/25(火) 12:57:13.87
>>618のコードってどういう意図なの?
630デフォルトの名無しさん:2013/06/25(火) 19:44:03.76
スタックを消費しない
631デフォルトの名無しさん:2013/06/25(火) 19:54:39.46
なんか遅延評価だと末尾再帰の効果はあんまりないみたいな話なかったっけ
うろ覚え
632デフォルトの名無しさん:2013/06/25(火) 20:22:43.95
素朴な実装だと再帰の深さ分だけサンクをヒープに作るので
メモリ消費量的には余り変わらないという話じゃない?
633デフォルトの名無しさん:2013/06/25(火) 20:34:26.43
なんか「末尾再帰化はあんま気にすんな」みたいな結論だけ見た記憶がある
実際バリバリ使ってる人達はその辺どうしてるんでしょ
634デフォルトの名無しさん:2013/06/25(火) 21:59:34.70
末尾再帰最適化はちゃんと効果あるし再帰が深くなるなら重要だよ

>>632
>素朴な実装だと再帰の深さ分だけサンクをヒープに作るので
それは末尾再帰とは直交した問題
末尾再帰にした上で、サンクを作らないようにseqや!を使えばいいだけ
635デフォルトの名無しさん:2013/06/25(火) 22:21:52.19
しかしあの当時は21世紀になっても末尾再帰化を人手でやる羽目になるとは思いもよらなんだ…
思ったより進化してないなあ
636デフォルトの名無しさん:2013/06/25(火) 22:49:05.80
末尾再帰ってどうやったら自動化できるの?
637618:2013/06/26(水) 00:17:25.70
>>619
>>621
>>622

見難くないならまぁいいかな。

ご指摘の点を読み返してみて、自分はその関数がどういうものかという定義で
考えているのではなく、CやJavaのforループでカウンタと累積変数を動かしているのを
頭を使わず末尾再帰に書き下しているのだと思う。

できるだけfoldを使えるように精進するよ。
638618:2013/06/26(水) 00:35:50.85
>>629
factだと自明すぎて例として不適切だったでしょうか

いちおう繰り返しを行う関数を作るときは、必要な引数を受ける名前を定義して、
内部で末尾再帰のカウンタと累積変数をもちいた定義を行うということを示したつもりでした。

これでは動かんというのならごめんなさい。
Haskell慣れてないんです。
特にwhereのかかる範囲とか。
lisp、schemeの括弧が懐かしいです。
639デフォルトの名無しさん:2013/06/26(水) 01:41:38.28
末尾再帰という言葉で十分かと
640デフォルトの名無しさん:2013/06/26(水) 06:22:49.98
末尾再帰って Wikipedia とか見てもよく分からなかったんだけど、
この間の放送大学の「データ構造とプログラミング 9 再帰」見てようやく理解した。
641デフォルトの名無しさん:2013/06/26(水) 07:21:21.31
>>639
Prologなんかだと、末尾再帰ができていない処理系は使い物にならないし、
末尾再帰を意識して書かないと、動かないこともある。Prologの場合は、
末尾以前の全てのサブゴールの決定性が問われるとか、特殊な条件が付くが、
Haskellだとどうなのか、とかの理解は必要だと思う。
642デフォルトの名無しさん:2013/06/26(水) 09:43:03.34
必ずしも再帰に限られないから、その言葉は良くない
643デフォルトの名無しさん:2013/06/26(水) 10:04:14.10
放送大学そんなコースもあるのか
644641:2013/06/26(水) 17:06:31.77
末尾再帰の最適化ができていない処理系は使い物にならない。ですね。
645デフォルトの名無しさん:2013/06/26(水) 18:09:07.83
末尾呼び出し、tail callだな
646デフォルトの名無しさん:2013/06/26(水) 20:16:06.11
私は、tail callがjumpになる、という言い方を説明のためには使うけど
647デフォルトの名無しさん:2013/06/26(水) 20:35:30.04
>>646
shemeの継続?
648デフォルトの名無しさん:2013/06/26(水) 21:10:53.39
Haskell において、ある関数の定義が末尾再帰になっているかどうかをどうやって確かめる?
別の言い方をすれば、何を以って末尾再帰だと断定できる?

最後に自分自身を「呼び出す」ような形になっている、という言い方はできないよね。
関数を呼ぶのは評価が行われる時だから、引数の方が後に呼び出されるかもしれないし。
649デフォルトの名無しさん:2013/06/26(水) 23:34:33.45
Haskellはどんなプログラムを作るのに向いているのでしょうか?
C#とHaskellの使い分けの方針とかありますか?
650デフォルトの名無しさん:2013/06/26(水) 23:56:54.05
ageながら宗教色のある質問を投げ込むスタイル
651デフォルトの名無しさん:2013/06/27(木) 00:13:46.56
>>649
C# と同様に、極限まで処理速度を求められる分野以外なら何でもいい。
「言語」として向いている分野というのは特に無い。

使い分ける必要はなく、使い慣れたものを使えばいい。
652デフォルトの名無しさん:2013/06/27(木) 07:56:45.02
>>648
f x = f ...
みたいに、右辺の一番外側が自分自身を呼んでいればいい
ただし、caseとlet(や、構文糖であるifとwhere)が挟まっていてもok
f x = case x of [] -> 1; hd:tl -> f tl
みたいに

この形でなくても末尾再帰になることもあって、例えば
f x = putStrLn x >> f
だと、一番外側の呼び出しは(>>)だけど、IOモナドの(>>)ならfを一番外側で呼ぶので、
間接的に末尾再帰になる
653641:2013/06/27(木) 08:31:53.67
>>652
ついでに整理してください。
末尾再帰だと何が起こるのですか。
654デフォルトの名無しさん:2013/06/27(木) 09:24:25.91
呼び出しが、行ったきりのジャンプに最適化される
655デフォルトの名無しさん:2013/06/27(木) 22:47:52.52
よく考えたらこっちから行くのになんで呼び出しっていうんだろう
656デフォルトの名無しさん:2013/06/27(木) 23:11:08.43
callの直訳
657デフォルトの名無しさん:2013/06/27(木) 23:14:55.19
電話掛けるもの、スパイ活動を指令するのもcall

関係ないけど、コールドゲームはcoldじゃなくてcalled game。
試合終了が宣言されたゲームだから。
658デフォルトの名無しさん:2013/06/27(木) 23:15:12.96
>>656
なぜ call なのか、という質問ではないのか?
659デフォルトの名無しさん:2013/06/27(木) 23:17:58.67
なぜ 呼び出す なのか、という質問だ。
660デフォルトの名無しさん:2013/06/27(木) 23:32:21.34
returnが戻るだから、本来対になる言葉はgo?
661デフォルトの名無しさん:2013/06/27(木) 23:38:55.24
もともとサブルーチンはjumpするものだった
誰かがcallの方がいいと考えたんだと思う
662デフォルトの名無しさん:2013/06/27(木) 23:53:53.65
捉え方の違いじゃね
ハードウェアを意識するか しないか
663デフォルトの名無しさん:2013/06/28(金) 00:04:06.32
お前ら、冷静になってよく考えろ

どーでもいい質問じゃね?
664デフォルトの名無しさん:2013/06/28(金) 00:25:00.39
どーでもいい質問をスルーしたらこのスレで話すこと無くなるだろ……
665デフォルトの名無しさん:2013/06/28(金) 00:50:25.68
東洋哲学的な精神やな
666デフォルトの名無しさん:2013/06/28(金) 09:55:25.48
>>661
EDSACの用語で言うなら、インライン展開で使うもの(呼ぶわけでもジャンプするわけでもない)は
オープンサブルーチン、ジャンプして使うものはクローズドサブルーチンと言ったけど、
後者の場合、戻り番地をレジスタで渡して、自己書き換えして戻ってたから、事実上callと言える。
スタック的なものが無かったから再帰呼び出しは(簡単には)できなかったけど。
667デフォルトの名無しさん:2013/06/28(金) 20:04:26.42
EDSACに行って戻るサブルーチンがあったのはその通りだけど
戻る仕組みを含めて(Wheeler)jumpと呼んでいたわけで、
やはりcallになったのはきっかけが別にあったんじゃないの
668デフォルトの名無しさん:2013/06/29(土) 21:49:35.70
呼び方にこだわるんなら、68kでもJSRだからジャンプだし、それにこだわる意味は無いんじゃない?
669デフォルトの名無しさん:2013/06/29(土) 22:04:34.25
すごくどうでもいい話だな。
670デフォルトの名無しさん:2013/06/29(土) 23:28:51.62
haskellには関数呼び出しなどという命令的な概念はない。
あるのは関数適用式とその評価のみ
671デフォルトの名無しさん:2013/06/29(土) 23:53:18.52
なんかのセリフみたい
672デフォルトの名無しさん:2013/06/30(日) 01:27:45.52
>>670
>>655の疑問はHaskellに対して言っているのではなくて
それを実装しているレイヤーに対して言っているんだよ。
673デフォルトの名無しさん:2013/06/30(日) 07:15:04.04
マクロアセンブラの calling sequence の CALL だろう。
674デフォルトの名無しさん:2013/06/30(日) 11:19:45.78
>>672
>>670 は暗に「スレチだ馬鹿」というニュアンスを込めているのかもしれん。
675デフォルトの名無しさん:2013/06/30(日) 11:50:40.16
我々の間にはチームプレイなどという都合のよい言い訳は存在せん。
あるとすればスタンドプレーから生じるチームワークだけだ。
676デフォルトの名無しさん:2013/06/30(日) 12:31:28.27
知的ぶってるけど何も生産性のない
そして芸術としてもゴミに等しい無価値なやつら
哀れ

微生物以下
677デフォルトの名無しさん:2013/06/30(日) 12:54:17.39
>>676
久しぶり!元気してた?
678デフォルトの名無しさん:2013/06/30(日) 15:13:01.09
パール忍者最近見ないな
679デフォルトの名無しさん:2013/06/30(日) 15:19:27.70
召喚するなよ
680デフォルトの名無しさん:2013/06/30(日) 15:42:44.49
自分で自分を召還したんですか?
681デフォルトの名無しさん:2013/06/30(日) 15:47:20.05
あとAransk
682デフォルトの名無しさん:2013/06/30(日) 16:21:33.89
random-1.0.1.1 パッケージの System.Random モジュール内の関数に関して質問です。

左閉半開区間 [0, 1) のランダムな浮動小数点のリストを確実に得るには、
random 関数を使って自分でリストを作るしかないでしょうか。

randomR 関数は直接リストを得られますが、閉区間 [lo, hi] なんですよね。
しかも、次の説明も何やら怪しいですし。

For continuous types there is no requirement that the values
lo and hi are ever produced, but they may be, depending on
the implementation and the interval.

しかし、randomR の実装を見てみると、結局 random 関数を使っています。
正確には、random 関数の戻り値の乱数の方を v とすると、
2.0 * (0.5 * lo + v * (0.5 * hi - 0.5 * lo)) です。
random 関数が左閉半開区間なので、randomR も左閉半開区間になりますよね。
(もちろん、浮動小数点の場合の話です)

説明と違うような気がしますが、この違いを説明したのが上記の英文の部分でしょうか。
683デフォルトの名無しさん:2013/06/30(日) 16:29:09.55
randomsは?
684デフォルトの名無しさん:2013/06/30(日) 16:47:23.96
>>683
あぁそうか、randoms 関数を使えばいいのか。
馬鹿だったわ、ありがと。

でもそれとは別に、randomR 関数の説明って、
なんであんな変な条件みたいなのがあるんだろ。
685デフォルトの名無しさん:2013/06/30(日) 16:57:00.42
連続だと閉区間でも上限下限は絶対に出力しないというのは一種の制約だから。
[lo, hi]なのに(lo, hi)と同じ実装を許容するなら但し書きを書くのが適切。
686デフォルトの名無しさん:2013/06/30(日) 18:01:43.49
>>685
でも、>>682 の作り方なら下限は出力されるんじゃない?

「絶対」ではなく「実装依存」ってこと?
687デフォルトの名無しさん:2013/06/30(日) 21:38:38.36
>>684
足下は初めは平身低頭に知恵を乞いておきながら、用が済めば急にタメ口になるとは何としたことか
688デフォルトの名無しさん:2013/06/30(日) 21:55:55.54
死ぬほどどうでもいい
689デフォルトの名無しさん:2013/06/30(日) 22:16:19.65
>>687
ホントごめん。

初めは質問者専用の口調で書いたのだけど、2回目の時にそれを忘れてて、
3回目で、なんかもういいや、ってなってしまった。
690デフォルトの名無しさん:2013/06/30(日) 22:44:07.97
かまへん、かまへん
691デフォルトの名無しさん:2013/06/30(日) 23:11:37.34
書いてる途中で自分の口調が分からなくなるのはたまにある
まあ自分はやらかしたことないけど(梯子外し)
692デフォルトの名無しさん:2013/07/01(月) 23:59:59.30
せやな
693デフォルトの名無しさん:2013/07/02(火) 16:40:13.24
wikipediaとは違うwikibooksに項目があった
ttp://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96
あと英文のmonadの項目誰か訳してくれい(泣
694デフォルトの名無しさん:2013/07/02(火) 23:32:30.31
人に頼ってないで英語の勉強を始めろ!
695デフォルトの名無しさん:2013/07/03(水) 00:14:06.01
英語が俺の勉強をすべき
696デフォルトの名無しさん:2013/07/03(水) 07:02:19.73
>>695
勉強したが、こいつは無理って諦められたんだよ
697デフォルトの名無しさん:2013/07/03(水) 21:05:58.96
>>695
思考の柵が吹き飛んだ
698デフォルトの名無しさん:2013/07/03(水) 21:26:18.37
>>693
まってろよ、今大熊さんの本を読んでるところなんだ
699デフォルトの名無しさん:2013/07/05(金) 03:59:37.06
Lispがある程度わかってる人(SICP半分ぐらいまで読んだ)向けの
Haskell入門書ってないでしょうか
700デフォルトの名無しさん:2013/07/05(金) 04:14:08.35
シクプってなに?そんなに凄いの?
読んでないとモグリなの?
701デフォルトの名無しさん:2013/07/05(金) 08:16:11.76
>>700
読み終わるころにはlisp処理系の自作ができる
702デフォルトの名無しさん:2013/07/05(金) 12:43:01.06
>>699
結論から言えば、Lisp が分かる人をターゲットにした Haskell の入門書はありません。

Haskell を学ぶに当たって、Lisp が分かっている事そのものはたいして役に立たちません。
強いて言えば、Lisp で参照透過性を意識したプログラミングに慣れていれば、
Haskell のその部分で躓くことはないだろうという程度です。
なので、そのような入門書を出版する動機がないのでしょう。

しかし、Haskell の Haskell らしさが出る部分はそれだけではありません。
どのような入門書にも、参照透過性を含め他の Haskell らしさの部分は解説してあります。


ちなみに、SICP で学んだ事は他のどのような言語でプログラムする際にも活きます。
703デフォルトの名無しさん:2013/07/05(金) 14:24:45.36
過去スレにこんなのがあった。
http://ja.wikibooks.org/wiki/48時間でSchemeを書こう

> このチュートリアルの対象読者は主に以下の2種類です。

LispかSchemeを知っていて、Haskellを学びたい人
プログラミング言語を何も知らないけれども、一定の背景知識を持っていてコンピュータに詳しい人
704デフォルトの名無しさん:2013/07/05(金) 18:04:16.34
>>703
それを入門書の代わりに使うのなら、
素直に普通の入門書を読んだ方が良いような気がするなぁ

まぁターゲットとしては >>699 にドンピシャだけど
705デフォルトの名無しさん:2013/07/05(金) 20:25:39.25
lispもCも経由せずに、はじめてのコンピュータ言語でいきなりhaskellを教えるカリキュラムがあってもいいはず
706デフォルトの名無しさん:2013/07/05(金) 21:15:48.88
IFPHは学部初年度向けと書いてあるしプログラミングの事前知識も必要なかったはず
707デフォルトの名無しさん:2013/07/05(金) 21:52:36.59
皆んなHaskellを何に使ってる?
俺は趣味で、ゲートICの立体構造をアルゴリズムと見なして、どんな構造なら性能を上げられそうかのシミュレーションに使ってるけど。
708デフォルトの名無しさん:2013/07/05(金) 22:11:11.89
はあ、そうですか
709デフォルトの名無しさん:2013/07/05(金) 22:23:12.65
事務処理のスクリプト最強
710デフォルトの名無しさん:2013/07/05(金) 23:14:01.54
クイックソート
711デフォルトの名無しさん:2013/07/05(金) 23:45:04.04
世界平和のために使ってる
712デフォルトの名無しさん:2013/07/06(土) 08:37:18.29
>>710
それは本物のクイックソートか?
713デフォルトの名無しさん:2013/07/06(土) 10:39:45.89
>>712
1) クイックソートって、列から適当な要素を選択して、
2) それよりも小さい要素を集めた列と、大きい要素を集めた列を作り、
3) 作られた2つの列に対して 1)、2) を施し、列を連結する、ものだよね。

このアルゴリズムの骨組みを守りつつ、
平均・最良の計算量が O(n log n) で、最悪が O(n^2) になっていれば、
どれほど馬鹿な実装方法を使おうが、どれほど処理に時間かかろうが、
どれもみんなクイックソートを名乗っていいと思う。

Haskell の稚拙なクイックソートの例は入門サイトや入門書にはたいてい載ってるし、
どんなバカでも理解できるだろうし実装できる。

だから >>710 のは、いくら何でも偽物ってことはないだろ。
というか Haskell の偽物のクイックソートの例を見てみたい。


と思ったのだが、どうだろう?
714デフォルトの名無しさん:2013/07/06(土) 11:01:06.56
至高のクイックソートを用意しました
715デフォルトの名無しさん:2013/07/06(土) 11:03:55.94
このクイックソートを実装したのは誰だあっ!
716デフォルトの名無しさん:2013/07/06(土) 11:05:15.17
俺のクイックソートは一味違うぜ
717デフォルトの名無しさん:2013/07/06(土) 11:06:54.29
でもHaskellも悪いんですよ
718デフォルトの名無しさん:2013/07/06(土) 14:07:10.83
実はHaskellとクイックソートって相性悪いよね
719デフォルトの名無しさん:2013/07/06(土) 14:13:03.21
Haskellerは
zipperの説明を読むだけでエクスタシーに達します
720デフォルトの名無しさん:2013/07/06(土) 14:18:21.65
なんで大元の論文を引きもしないんだろうか
721デフォルトの名無しさん:2013/07/06(土) 15:59:50.40
面倒だから
722デフォルトの名無しさん:2013/07/06(土) 18:40:10.34
都合の悪いものはモナドにしてネイティブで実装すればよい
723デフォルトの名無しさん:2013/07/06(土) 20:06:45.67
わずか2ページってクイックソートの論文だったっけ?
724デフォルトの名無しさん:2013/07/06(土) 20:26:34.61
>>713
>>712じゃないけど、Haskellのよくあるクイックソートは、
空間計算量が最悪O(n^2)になるという点で普通のクイックソートと違って怪しい
725デフォルトの名無しさん:2013/07/06(土) 20:43:21.72
>>724
量子コンピュータが実現した世界で何言ってんだ?
726デフォルトの名無しさん:2013/07/06(土) 21:42:22.13
またHaskellのクイックソートが偽物とか言う奴が現れたか…

twitterでも今年に入ってからこの話題で盛り上がったようだ
まとめのタイトルが笑える
http://togetter.com/li/445854
727デフォルトの名無しさん:2013/07/06(土) 22:19:42.23
>>724
怪しいというのが曖昧でよく分からないのですが、
「空間計算量が最悪でもO(nlogn)である」というのは、
クイックソートである事の必要条件なのでしょうか。
728デフォルトの名無しさん:2013/07/06(土) 22:27:57.64
>>727
俺にも分からん
729デフォルトの名無しさん:2013/07/06(土) 22:31:16.30
名前のとおり速けりゃいいんだよ
730デフォルトの名無しさん:2013/07/06(土) 22:41:50.17
そうやってフザケる話の流れではないような気がする
731デフォルトの名無しさん:2013/07/06(土) 22:47:59.72
とりあえず、よくあるもっとも簡単な実装はこれかな。

qs :: (Ord a) => [a] -> [a]
qs [] = []
qs (x:xs) = qs (filter (< x) xs) ++ [x] ++ qs (filter (> x) xs)

空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?
732デフォルトの名無しさん:2013/07/06(土) 23:31:02.57
>>713で正しいよ

なんかwikipediaのクイックソートのページにも実用性が云々と書かれているけど、そもそもリストという
データ構造自体がソートと相性が悪いんだから、そんなこと言っても仕方ないと思うけどね

大量のデータを扱うなら他のデータ構造を使うべきだし、ごく少量のデータなら入門書の実装の
方がむしろ実用的だろう

>>731
それだと重複した要素が消えることないかな?
733デフォルトの名無しさん:2013/07/06(土) 23:48:29.04
なんかの入門書でHaskellにはクイックソートよりよいソートがあるって書いたあったんだけど何ソート?
734デフォルトの名無しさん:2013/07/07(日) 00:36:03.82
>>733
データモデルとデータの追加でよいソートは異なる
735デフォルトの名無しさん:2013/07/07(日) 01:07:23.20
>>731
>空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?
入力が既に正順か逆順にソートされている場合。O(n^2)になるのは正順か逆順のどちらか
だけなんだけど忘れた。この板のHaskell関係の過去スレの一つに議論があったはず
(ちょっと探したけど見つからなかった、曖昧でごめん)
736デフォルトの名無しさん:2013/07/07(日) 01:16:57.21
見つけた。Part 7の881から
737デフォルトの名無しさん:2013/07/07(日) 01:32:38.33
>>715
コーディングの合間に喫煙していたと何故判ったのですか!?
738デフォルトの名無しさん:2013/07/07(日) 01:41:21.81
Cで作ってHaskellから呼び出すだけのライブラリ

Haskellで一から作ったライブラリ

どっちが幸せになれるの
739デフォルトの名無しさん:2013/07/07(日) 01:52:25.35
*Main> :type (+) (-)
(+) (-)
:: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a

これを解説してください。(+) を数ではない (-) に適用できる?
740デフォルトの名無しさん:2013/07/07(日) 05:23:19.62
>>715で笑ってしまった
恥ずかしい
741デフォルトの名無しさん:2013/07/07(日) 05:51:25.64
>>739
ヒント:カリー
742デフォルトの名無しさん:2013/07/07(日) 08:09:29.76
f :: Num (a -> a -> a) => (a -> a -> a)
x :: Num a => a
y :: Num a => a
(+)(-) f x yのかたちで呼び出すんだろうけど
Num (a -> a -> a)が意味不明すぎる
自然数をラムダ関数で表現するやつかな
743デフォルトの名無しさん:2013/07/07(日) 08:11:32.38
型クラスNumのインスタンスとして
Numとして解釈できるラムダ関数を定義すれば良いんだよな
えーとどんなだっけ
744デフォルトの名無しさん:2013/07/07(日) 08:45:28.98
(゚д゚)
745デフォルトの名無しさん:2013/07/07(日) 09:49:08.20
>>739
(-)はデフォルトでは「数」じゃないけど、インスタンスを定義すれば数になる
たとえばNumInstancesパッケージのData.NumInstances.Function
http://hackage.haskell.org/packages/archive/NumInstances/1.3/doc/html/src/Data-NumInstances-Function.html
をインポートすると、
instance (Num b) => Num (a -> b)
が定義されるので、例えば(Int -> Int -> Int)を加減乗除できるようになる
746デフォルトの名無しさん:2013/07/07(日) 11:20:03.25
>>732
すまんすまん、= を書き忘れてた。
< か > のどちらかに = を追加して考えて。

>>735 >>736
モリタポ使っても、なぜか Part 7 が見れない。

>>731 のような感じのクイックソートの実装だと、
A ++ B ++ C という形の式が大枠であるよね。

これを順に弱頭部正規形にして評価していくとき、最悪の場合、
左側の ++ 演算子が評価可能になるまで(++の左辺が x:xs の形になるまで)ずっと、
(((・・・((A'' ++ B '' ++ C'') ++ B' ++ C'))・・・))) ++ B ++ C
というような再帰的な形で左側が伸びていくと思う。

未評価の A'' や B' などが何個作られるかというと、
qs 関数が適用するリストの長さを n とすると、ざっと見積もって
3 + 2 * (n - 1) 個かな。
(最初の 3 は一番深い所の A++B++C で、2 は ()++B++C の B と C)

最悪ここまで式が伸びきるので、空間計算量は O(n) ではないか、
と俺は思ったんだが、どこで勘違いをしているのか分からない。

過去ログ Part 7 が見られるようになったら調べてみるけど、
今の所自分の頭ではこう考えた。
747デフォルトの名無しさん:2013/07/07(日) 12:12:01.34
>>739

> (+) を数ではない (-) に適用できる?
できない。

*Main> :type (+) (-)
(+) (-) :: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a

これが言っているのは、ざっくりいえば「もし、(-)が数であれば、(-)に(+)を適用できますよ」ということ。

まず、プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるようにしてあげなければならない。
首尾よくそれが実現できたら、晴れて(+)を(-)に適用できる。
748デフォルトの名無しさん:2013/07/07(日) 13:30:17.71
>>747 >>745
ありがとうございます。
> プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるように
これが実際できてしまう、というのが、Data.NumInstances なのか。
749デフォルトの名無しさん:2013/07/07(日) 14:32:22.22
Haskellはすごいのでがんばれば何でもできる
Wikipediaのラムダ計算の自然数と算術の項目に
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97#.E8.87.AA.E7.84.B6.E6.95.B0.E3.81.A8.E7.AE.97.E8.A1.93

0 := \f->\x->x
1 := \f->\x->f x
2 := \f->\x->f (f x)
3 := \f->\x->f (f (f x))
(+) = \m->\n->\f->\x-> m (f (n f x))

としてラムダ関数で自然数の計算をシミュレートする方法が載ってる
750デフォルトの名無しさん:2013/07/07(日) 15:14:11.28
>>749
それだと自然数の型が(forall a. (a -> a) -> a)みたいになって、
>>739で要求されてる(a -> a -> a)とは別物
751デフォルトの名無しさん:2013/07/07(日) 15:15:10.84
ごめん、forall a. a -> (a -> a) -> aね
752デフォルトの名無しさん:2013/07/07(日) 20:53:40.62
>>749
(+) が間違ってるな。
(+) := \m->\n->\f->\x-> m f (n f x)
753デフォルトの名無しさん:2013/07/08(月) 11:04:29.63 ID:t6uYFe0B!
haskellが他の言語と違うのはside effect freeだから!
と本に書いてあるのですが、他の言語でも出来そうな気がするのですが?
nibai :: Int ->Int
nibai n = 2*n

void nibai(int n){
value = 2*n;}
754デフォルトの名無しさん:2013/07/08(月) 11:27:28.06
ホントだ!すごい!
755デフォルトの名無しさん:2013/07/08(月) 12:42:58.45
>>753
「haskellが他の言語と違うのはside effect freeだから!」
と書かれていた本のタイトル名を教えてください。
756デフォルトの名無しさん:2013/07/08(月) 13:55:37.59
整数を受けとり二倍して何も返さずシカトする
そんな関数に私もなりたい
757デフォルトの名無しさん:2013/07/08(月) 17:57:29.51
いやな奴だな
758デフォルトの名無しさん:2013/07/08(月) 18:36:50.54
副作用はツンデレ
759デフォルトの名無しさん:2013/07/08(月) 18:39:46.86
参照透過性は甘え
760デフォルトの名無しさん:2013/07/08(月) 19:08:01.90
>>753
ああ、全ての行が見てるとムズムズする
761デフォルトの名無しさん:2013/07/09(火) 01:27:28.06
ヤンデレと病んでるは似ている。
762デフォルトの名無しさん:2013/07/09(火) 23:51:46.60 ID:7EcXvLZJ!
質問です。
Not in scope: `GLFW.defaultDisplayOptions'
Not in scope: `GLFW.setWindowPosition'
とエラーが出ました。
参照しているttp://www.youtube.com/watch?v=LIlBvBT6dIcでは使えていますが何がいけないのでしょうか
import qualified Graphics.UI.GLFW as GLFW
import Graphics.Rendering.OpenGL.Raw

main = do
GLFW.initialize
GLFW.openWindow
GLFW.defaultDisplayOptions
GLFW.setWindowPosition $ 110
clear Colour{red = 0, green = 0, blue = 1, alpha = 0.1}
GLFW.swapBuffers
GLFW.sleep 5
data Colour = Colour {red, green, blue, alpha :: GLclampf}

clear :: Colour -> IO()
clear (Colour(red, green, blue, alpha)) = do
glClearColor red green blue alpha
(glClear . fromIntegral) gl_COLOR_BUFFER_BIT
763デフォルトの名無しさん:2013/07/10(水) 00:49:00.95
javaでもside effect free できるってhttp://masuda220.jugem.jp/?eid=335
に書いてあったけどクラスの価値をほとんど捨ててる設計じゃん。
764デフォルトの名無しさん:2013/07/10(水) 01:50:02.95
手続き型の本質は副作用にあり
765デフォルトの名無しさん:2013/07/10(水) 05:46:58.79
     //
    / /パカ
    / /
   / /ハ,,ハ
   / ヽ(=゚ω゚)ノ__ぉはぃょぅ
  // (  x ) /
  " ̄ ̄ ̄ ̄
766デフォルトの名無しさん:2013/07/10(水) 07:06:04.02
>>762
パッケージが違う
動画で使ってるのはGLFWでなくてGLFW-bの方
767デフォルトの名無しさん:2013/07/10(水) 07:19:13.71
>>762
GLFW-b パッケージにはその関数はあるけど、GLFW パッケージにはないよ。
768デフォルトの名無しさん:2013/07/10(水) 20:19:08.54 ID:cVdIS5P/!
ありがとうございます。GLFW-bですか。
どうやって使うのか調べてきます。
けど、動画を見る限りじゃGLFW-bが見当たらないのですが。
769デフォルトの名無しさん:2013/07/11(木) 21:12:10.05
>>733
マージ
770デフォルトの名無しさん:2013/07/13(土) 01:50:18.31
>>769
それマージで言ったん?ソートすんならすぐ出せ
マージなら2ちゃんねらソート力を挙げて列べるが
771デフォルトの名無しさん:2013/07/13(土) 16:53:25.35 ID:Hq+EmFHl!
原始再帰関数(primitive recursion)とは一体なんなのでしょうか?
ttp://stackoverflow.com/questions/1712237/how-does-primitive-recursion-differ-from-normal-recursionの回答に
「原始再帰関数とは他の原始再帰関数で定義されいて自然数の構造の再帰である。」とありますが、
イマイチ分かりません。
例えば、自然数を使った
fac::Int->Int
fac x
| x > 0 = x*fac(x-1)
|x==0 = 1
は原始再帰関数で、
inverse::String->String
inverse value = case (value) of
[]->[]
(x:xs)-> inverse xs ++ [x]
は原始再帰関数では無い。
ということでしょうか?
base caseにヒットして関数が終了するのであればそうなのかな〜と思っていたのですが。
772デフォルトの名無しさん:2013/07/13(土) 17:07:00.20
>>771
その関数の性質を帰納法で証明できる関数だと理解していたが、違うだろうか
773デフォルトの名無しさん:2013/07/13(土) 17:08:12.22
ゲーデル数化すればinverseも自然数上の原始帰納関数にできる。
もちろん文字列上の原始帰納関数ということで問題ないが。
774デフォルトの名無しさん:2013/07/13(土) 17:11:26.97
チューリングマシンの意味で計算可能な関数は原始帰納関数で表現できる
775デフォルトの名無しさん:2013/07/13(土) 17:36:03.31
いや出来ない。
チューリング機械計算可能関数には一般帰納関数も含まれるから。
776デフォルトの名無しさん:2013/07/13(土) 18:05:18.77 ID:Hq+EmFHl!
あっ、帰納法でか?

ん?では普通の帰納関数とはなんでしょうか?
上の方に一般帰納関数というのがありますが。
777デフォルトの名無しさん:2013/07/13(土) 18:11:45.18
その辺はwikipediaで調べてからまた質問して。
Haskellの話題じゃないし。
778デフォルトの名無しさん:2013/07/13(土) 19:13:37.84 ID:Hq+EmFHl!
>>777
確かにスレチだ。すみませんでした。
779デフォルトの名無しさん:2013/07/14(日) 07:45:01.28
今ホットなライブラリは?
780デフォルトの名無しさん:2013/07/14(日) 09:17:12.15
C や Java、OCaml や Lisp などではこんな質問はまず無いのに、
なんで Haskell だと「今一番熱い漫画は?」みたいなノリで頻繁に投げかけられるんだろ。

Haskell の最新事情を追いたかったら、こんな所で質問するより、
メーリングリストにでも登録して議論してた方が何倍も良いと思う。
781デフォルトの名無しさん:2013/07/14(日) 11:12:16.54
Haskell界にくると頭のいい人が一杯いて何か新しい、面白いことをやっている

そう考えていた時期が私にもありました
782デフォルトの名無しさん:2013/07/14(日) 11:23:47.54
ライブラリのインストールがめんどくさいです

バージョンに関係なく、ライブラリのzipファイルをコピーするだけでOKにしてほしいです
783デフォルトの名無しさん:2013/07/14(日) 11:23:48.47
Haskellは数学を知る者が数学の言葉でコンピューティングしたいという要求から存在する言語
数学を知らないものには猫に小判
かく言う俺は数学の記述法自体が過去の遺産を引きずって不合理極まりないと思っているが
784デフォルトの名無しさん:2013/07/14(日) 11:56:42.12
言語処理が文系科目に分類されている日本では理解されないでしょう
785デフォルトの名無しさん:2013/07/14(日) 13:21:18.57
自然言語処理は機械翻訳から始まってるし、文系に分類してる所はまずないと思うぞ。
計算言語学は計量言語学から来てて、元々言語学だから文系になってると思うが。

いずれにしろ、理系と文系を分ける発想(多分、旧制の時代の理科と文科から
来てると思うが)に縛られているうちは、生成文法みたいな革新的な発展が
生まれてくることは望めないだろうねぇw
786デフォルトの名無しさん:2013/07/14(日) 13:33:44.63
>>783-785
そんな的外れな話をHaskellスレでして恥かしくない?
787デフォルトの名無しさん:2013/07/14(日) 13:43:24.08
>>785
>生成文法
この前古本屋にいったら生成文法がらみの古書が山積み‥‥‥
よっぽどはやったんですねえ、チョムスキー御大あいもかわらず大気炎をあげてらっしゃる「テロ、テロと皆はいうがアメリカが最大のテロ国家」‥‥
788デフォルトの名無しさん:2013/07/14(日) 13:50:14.37
あー、当たり前のものになったもの(たとえば「構造化プログラミング」)を、
昔流行っただけで廃れたもの、と勘違いするパターンねw
789デフォルトの名無しさん:2013/07/14(日) 14:27:48.07
>>788
regular grammar あるいは regular expression って生成文法全体からすると生成規則はかなり制限されていると思う
いや、それはいいとして、DFA と「文法」をリンクさせる、とかもチョムスキー以降なの?
今の計算機言語の特に文法の考え方はチョムスキー以降の産物なの?
790デフォルトの名無しさん:2013/07/14(日) 14:40:01.08
>>782
ライブラリのzipファイルをコピーするだけでOKの場合、いつコンパイルするの?

そのライブラリが依存している別のライブラリは自分で調べてダウンロードするの?
791デフォルトの名無しさん:2013/07/14(日) 14:42:39.14
>>789
自分で調べろよ、スレ違いだよ。
792デフォルトの名無しさん:2013/07/14(日) 14:51:28.94
>>790
いろんなバージョンのバイナリがzipで固まってて、実行するときに選ぶようにするんだよ
プラットフォームだけで実行できるように、依存してるのも全部zipに入れておくんだよ
793デフォルトの名無しさん:2013/07/14(日) 15:15:27.05
>>783
俺も同じ事を感じてる。しかし多分全然違う視点なんだろうね。
スレチスマソ
794デフォルトの名無しさん:2013/07/14(日) 15:22:04.82
論文に書くそのままの表現でプログラミングしたいという欲求でできたのがHaskellだと認識してる
795デフォルトの名無しさん:2013/07/14(日) 15:22:46.10
>>789
チョムスキー階層
http://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A7%E3%83%A0%E3%82%B9%E3%82%AD%E3%83%BC%E9%9A%8E%E5%B1%A4
> チョムスキー階層(-かいそう、Chomsky Hierarchy)とは、
> 形式言語を生成する形式文法のクラスの包含階層である。
> これは「句構造文法」(Phrase Structure Grammars)の階層とも呼ばれ、
> 1956年にノーム・チョムスキーが発表した。
796デフォルトの名無しさん:2013/07/14(日) 15:58:53.70
>>794
わたしは初耳ですけど、あなたの予想ではなく委員会メンバーの発言?

論文に書くそのままの表現、とはどういったものなのでしょうか。
論文に「何を」書く際の表現方法の事なのでしょうか。

論文に書くそのままの表現という事において、
Haskell 以前の言語では何が不満だったのでしょうか。

[A History of Haskell] によると、Haskell の主な目的は
バラバラだった既存の関数型言語の統合と、実用的なアプリも作れる関数型言語を作る事、
この2点だとわたしは感じたのですが、どうでしょうか。
797デフォルトの名無しさん:2013/07/14(日) 16:13:36.19
>>796
その実用的じゃないから統合する必要すらなかった関数型言語群を、わざわざ統合したいという欲求の源は何だったのか?
私は、論文に書くそのままの表現でプログラミングしたいという欲求だと思う

具体的には、論文の中の、帰納的証明で使われる表記と概念の数学的表現とDSLの仕様で使われる表現そのままをソースコードに書きたいという欲求
798デフォルトの名無しさん:2013/07/14(日) 17:13:57.75
>>796
最後の段落は、英国関数型言語界の統一言語プロジェクトを立ち上げた趣旨だな。

>>797
それは(事実かどうかは別として)言語仕様の設計趣旨じゃないかな。
799618:2013/07/14(日) 18:56:00.53
素朴な質問なんだけど
'$'より'.'で関数を結合させた方がいいみたいな風潮があるようだけれど
なんで?
800デフォルトの名無しさん:2013/07/14(日) 18:56:21.17
cabalだっけ、ライプラリのインストール、失敗率が高い。
haskell platformに初めから付いているライブラリ以外、結局・・使い物にならないのでは?
801799:2013/07/14(日) 18:58:06.37
規制で書けなかったのが誤操作で投稿されてしまった。

流れぶち切ってすまん
802デフォルトの名無しさん:2013/07/14(日) 19:06:55.23
ちなみにHaskell以前は論文にアルゴリズム書く時はBurnさん風が多数派だった。
Miranda的というか。
803デフォルトの名無しさん:2013/07/14(日) 19:33:47.14
>>799
(1) 打鍵数が減る
(2) ($)よりも(.)を使ったほうが解かりやすいことがまれにある
(3) 宗教的理由
804デフォルトの名無しさん:2013/07/14(日) 20:13:32.81
>>800
例えばfree-gameはインストール失敗する。
glossはglossとHaskell platform 特定のバージョンの組み合わせでインストール成功。

インストール失敗する度にcabalによってインストールしたファイルをすべて削除して、
haskell platformをアンインストールして再インストール。
再インストールする時、バージョンを1つ前にしたり。

試行錯誤してインストールに成功することもあれば、
結局どうやってもインストール失敗することがある。
 
 正直、うんざり・・。
805デフォルトの名無しさん:2013/07/14(日) 22:33:14.28
インストールみたいな状態変化は苦手なのさ
806デフォルトの名無しさん:2013/07/14(日) 22:45:07.38
Haskell Platform なんて使わずに GHC + Cabal を使っておけば
ライブラリのインストールは多少マシになる。

更に、Windows なんて使わずに Linux 系を使っておけばもう少しだけマシになる。
807デフォルトの名無しさん:2013/07/14(日) 23:30:46.64
インストールは破壊的挿入なのか?
808デフォルトの名無しさん:2013/07/14(日) 23:34:50.13
更に、Haskellなんて使わなければもう少しだけマシになる。
809デフォルトの名無しさん:2013/07/15(月) 00:13:22.69
>>804
お前がどういう環境を使っていてインストールがどうやって失敗するかを書かないとどうしようもない
ここで質問しても良いけど、ユーザ数がすごく多いパッケージじゃないなら
パッケージのバグトラッカやメーリングリストで直接報告した方が解決が早いと思う
とりあえずcabal install free-gameを実行してみたけど普通に成功した(Linux, amd64, GHC 7.6.3)
810デフォルトの名無しさん:2013/07/15(月) 07:27:41.82
セックスは破壊的挿入
811デフォルトの名無しさん:2013/07/15(月) 07:30:36.39
>>781
:(;゙゚'ω゚'):やってないのか……?
812デフォルトの名無しさん:2013/07/15(月) 12:38:22.36
>>810
この前挿入しようとしたら例外が起きてボトムが返された

どうなってんだよアイツ
813デフォルトの名無しさん:2013/07/15(月) 13:02:49.70
俺もfree-gameインストールしようとして失敗したところなので
ネタじゃなく自分いつレスしたのかと思った
cabal-dev使えばいいんじゃね? 使い方良くわからないんでゆっくり調べてる最中だけど
814デフォルトの名無しさん:2013/07/15(月) 18:22:36.71
free-gameは、GLFW-bが最新だと動かないね。
GLFW-b-0.1.0.5を入れなおしたらインストールできたよ。
815デフォルトの名無しさん:2013/07/15(月) 18:56:38.38
その辺はcabalが勝手に管理してくれてるけどねえ。
自分でインストールしたりもしてるわけ?
816デフォルトの名無しさん:2013/07/15(月) 19:17:05.22
色々調べてhsenvがいいかなと思ったけどwindowsではどうしてもインストールできなさそう(cygwinでもだめ)
なので悔しくて枕を濡らしている
817デフォルトの名無しさん:2013/07/15(月) 19:28:25.36
Windowsは諦めてLinuxの仮想環境で。
818デフォルトの名無しさん:2013/07/15(月) 19:45:15.88
動かなかったら自分でなんとかするさ。
free-gameがupdateされて、GLFW-bのバージョン指定が修正されてるね。
819デフォルトの名無しさん:2013/07/15(月) 19:55:35.61
>>809
一応こっちの状況を書くと。

free-gameインストール失敗 (0.9.3, 0.9.3.1, 0.9.3.2, 0.9.3.3全部失敗)
Windows7 Haskell platform 2013.2.0.0 (GHC 7.6.3)
Windows8 Haskell platform 2013.2.0.0 (GHC 7.6.3)
Windows7 Haskell platform 2012.4.0.0 (GHC 7.4.2)
Windows8 Haskell platform 2012.4.0.0 (GHC 7.4.2)

glossインストール失敗
Windows7 Haskell platform 2013.2.0.0 (GHC 7.6.3) gloss最新
Windows8 Haskell platform 2013.2.0.0 (GHC 7.6.3) gloss最新
Windows7 Haskell platform 2012.4.0.0 (GHC 7.4.2) gloss最新
Windows8 Haskell platform 2012.4.0.0 (GHC 7.4.2) gloss最新

glossインストール成功
Windows7 Haskell platform 2013.2.0.0 (GHC 7.6.3) ?gloss-1.7.7.201204.1. ※コンパイル後ファイル実行時に暴走
Windows8 Haskell platform 2013.2.0.0 (GHC 7.6.3) ?gloss-1.7.7.201204.1.
820デフォルトの名無しさん:2013/07/15(月) 19:57:02.89
>>819 glossインストール成功の部分訂正
glossインストール成功
Windows7 Haskell platform 2012.4.0.0 (GHC 7.4.2) ?gloss-1.7.7.201204.1. ※コンパイル後ファイル実行時に暴走
Windows8 Haskell platform 2012.4.0.0 (GHC 7.4.2) ?gloss-1.7.7.201204.1.
821デフォルトの名無しさん:2013/07/15(月) 20:01:15.20
他のパッケージもインストールの失敗が多い。
文字コードのライブラリをインストールしようとして上手くイカず・・。

UTF-16とShiftJISの相互変換、結局自作したよ・・。
単なる対応表があればいいので、文字コードライブラリ不要だった。
822デフォルトの名無しさん:2013/07/15(月) 20:11:11.29
Windows版か、、、
Windows版は、作者が全く対応を考慮していなくてどうやっても
動かない場合があるから諦めが肝心。
823デフォルトの名無しさん:2013/07/15(月) 20:15:43.60
でもゲームって言ったらWindowsで動くもの作りたいですよね
Haskellをそこまでして使うのかという意見は置いておいて
824デフォルトの名無しさん:2013/07/15(月) 20:27:12.86
じゃあ頑張って。
825デフォルトの名無しさん:2013/07/15(月) 20:27:26.90
free-game 再度インストールしたら成功。
0.9.3.3→0.9.3.4のupdateによるものかな。

free-gameインストール成功 ( 0.9.3.4)
Windows7 Haskell platform 2013.2.0.0 (GHC 7.6.3)
826デフォルトの名無しさん:2013/07/15(月) 20:43:41.50
>>822
そこで諦めるなよ!作者に文句言ったりパッチ送ったりしろよ!
827デフォルトの名無しさん:2013/07/15(月) 20:48:40.59
でもインストールのエラーメッセージにExitFailure 1が出るとログ見る気力とか出ないよね(クズ)
828デフォルトの名無しさん:2013/07/15(月) 21:14:42.67
作者に文句言っていいもんなの?
HakageDBがよく出来てるから、ソース見て調べればある程度
見当がつく場合も多いけど、全くこりゃお手上げって場合も
あるわけで。
829デフォルトの名無しさん:2013/07/15(月) 22:30:16.20
なんだぁHaskellアプリって思ったより暴走するんだね(´・ω・`)
830デフォルトの名無しさん:2013/07/15(月) 22:46:16.00
でも純粋だから、たとえ誤ってHDD消去しても安心
831デフォルトの名無しさん:2013/07/16(火) 00:49:31.07
純粋な悪
832デフォルトの名無しさん:2013/07/16(火) 02:13:23.74
>>830
まずはIOモナドを消し去らないと……
833デフォルトの名無しさん:2013/07/16(火) 12:01:58.18
消去自体がモナドなのに
834デフォルトの名無しさん:2013/07/16(火) 15:40:40.25
何でhoogleすぐ死んでしまうん?
835デフォルトの名無しさん:2013/07/16(火) 20:25:37.77 ID:8cjRsBsv!
自然数を扱った原始帰納関数は多分こうだと思うのですが、
fac :: Int -> Int
fac n
|n==0 = 1
|n > 0 = n * fac(n-1)
| otherwise = error"No neg num" --ベースケースを0とし、nが0以上ならnー1とす。

代数的データ型でいい例はあるでしょうか?コンストラクターとつかったやつがあればいいのですが。
836デフォルトの名無しさん:2013/07/17(水) 15:14:55.24
foldrで書ける関数は原子再帰的である
837デフォルトの名無しさん:2013/07/17(水) 22:28:35.46
むしろ原子帰納的でない関数を考える方が難しい
ackermannくらいか
838デフォルトの名無しさん:2013/07/18(木) 01:57:40.88
futumorphism
839835:2013/07/18(木) 20:05:01.43 ID:y4brIquX!
何故か規制喰らった。
原始でコンストラクタ使った例は
data Tree a = Null | Node (Tree a) (Tree a)

size :: Tree a -> Int
size tree = case (tree) of
Null -> 0
Node lt rt -> 1 + size lt + size rt
でいいのかな?
関数は最終的にNullにパタンマッチして0を返すから演算が終了する。
n-1ないけど
f :: Int -> Int
f n
| n == 0 = 1
| n < 0 = f (n+1)
も原始帰納になるでしょうか?
自然数を扱うときはn-1が必要だからこれは違う(普通の帰納)?
840デフォルトの名無しさん:2013/07/18(木) 20:51:31.72
>>839
安心しろ
君レベルの人が作る関数はすべて原始帰納だから
841デフォルトの名無しさん:2013/07/18(木) 21:16:41.21 ID:y4brIquX!
>>840
分かりました。ありがとうございます。
原始帰納ってベースケースにヒットして演算が終了すると思っているのですが,
そうじゃない帰納ってどんなのがあるでしょうか?
色々あると思うのですが。原始帰納の数の方が少ない気がする。
842デフォルトの名無しさん:2013/07/19(金) 00:50:47.36
ふつうの関数は全部 原始帰納的でしょ

(+) :: Nat->Nat->Nat
(*) :: Nat->Nat->Nat
fact :: Nat->Nat

とか
それでアッカーマン関数は原始帰納ではない有名な例であると
843デフォルトの名無しさん:2013/07/19(金) 00:58:01.16
f(m.n)が原始帰納的でないとf(m.n)の上限を見積もるような
f(m.n) < f(m+g(n),n-1)となるようなg(n)が定義可能だけど計算不可能になったりする
844デフォルトの名無しさん:2013/07/19(金) 14:44:37.18
なんでcabalはアンインストールの面倒を見てくれないんですか?
845デフォルトの名無しさん:2013/07/19(金) 17:55:05.01 ID:1YZrtrs7!
なるほど、普通の関数は全部原始帰納ですか。
説明ありがとうございました。
846デフォルトの名無しさん:2013/07/19(金) 18:00:59.48
数学、特に整数論はほとんど原始帰納関数だけど、
コンピュータではそうでもない。
847デフォルトの名無しさん:2013/07/19(金) 21:21:43.26 ID:1YZrtrs7!
?
>>839など、
プログラムである関数があったとして、ベースケースにマッチしてその関数が終了するのであれば、それは帰納関数だと思うのですが。
間違っていたらすみません。
848デフォルトの名無しさん:2013/07/19(金) 22:41:11.28
包含関係だろ。
849デフォルトの名無しさん:2013/07/20(土) 12:52:30.94
ほとんどいたるところで原始帰納関数
850デフォルトの名無しさん:2013/07/20(土) 12:57:58.07
高々可算無限個にすぎない
851デフォルトの名無しさん:2013/07/21(日) 17:10:37.00
投票行けよ
852デフォルトの名無しさん:2013/07/21(日) 17:17:56.60
投票に行くと、公約を破った政治家を暗殺する義務が発生するしな…
853デフォルトの名無しさん:2013/07/21(日) 18:03:01.18
投票に行くと、結果を全て受け入れる義務が発生するしな…
滅亡へ向けひた走る関数実行中
854デフォルトの名無しさん:2013/07/21(日) 18:17:59.03
>>852,853
場違いの話題でスレを汚したのでHaskellに関する話題を提供する義務が発生しました
855デフォルトの名無しさん:2013/07/21(日) 18:49:03.54
じゃあミカサ・アッカーマンをhaskellで記述してください
856デフォルトの名無しさん:2013/07/21(日) 20:36:11.05
自民党圧勝!
本当にうれしいわ
お前らゴミクズみたいな中途半端なインテリゲンチャ気取りが悔しがる顔を想像するとな!!
857デフォルトの名無しさん:2013/07/22(月) 03:27:35.89
スレチな上にポルポト派か
858デフォルトの名無しさん:2013/07/22(月) 06:52:24.25
Perl忍者最近見ないな
859デフォルトの名無しさん:2013/07/22(月) 22:22:53.85
ポルポトは間違っていない
純粋に理論を追及した結果が大虐殺なだけ
理論が間違ってたことを指摘しないと、いつまでたってもデバッグは終了しない
860デフォルトの名無しさん:2013/07/22(月) 22:38:56.14
スレチだ
他所でやってくれ
861デフォルトの名無しさん:2013/07/23(火) 00:00:59.47
Haskellスレにスレチという言葉は無い
862デフォルトの名無しさん:2013/07/23(火) 07:02:00.29
スレチの意味も分からんのか?
863デフォルトの名無しさん:2013/07/23(火) 10:44:00.74
haskellとhaswellの違いについて教えてくだされ
864デフォルトの名無しさん:2013/07/23(火) 10:51:13.75
どちらもトランザクション機能が期待されている
865デフォルトの名無しさん:2013/07/23(火) 10:57:46.46
866デフォルトの名無しさん:2013/07/23(火) 15:49:24.04
もっと抽象的にわかりやすく
867デフォルトの名無しさん:2013/07/23(火) 15:54:21.96
乱暴に書いた筆記体のkとwは似てる。
868デフォルトの名無しさん:2013/07/23(火) 16:46:59.74
違いを答えろよお前ら
869デフォルトの名無しさん:2013/07/24(水) 00:11:39.61
授業のときは何も知らない純粋な顔をして受けてあげなよ・・・。
870デフォルトの名無しさん:2013/07/24(水) 10:36:36.55
[不純関数型言語とは ][検索]

もしかして: すごいH本
871デフォルトの名無しさん:2013/07/24(水) 20:48:01.05
[不純異性交遊とは ][検索]

もしかして: すごいH本
872デフォルトの名無しさん:2013/07/24(水) 20:54:23.60
モナドの中では少女は奔放になります
というえろげ
873デフォルトの名無しさん:2013/07/24(水) 22:02:50.01
諸君、議論したまえ
874デフォルトの名無しさん:2013/07/25(木) 01:01:40.92
スレチとは何だったのか
875デフォルトの名無しさん:2013/07/26(金) 20:55:34.20
もっと盛り上げてよ
Haskellたんが蛹のまま何ヶ月も動かないの!
876デフォルトの名無しさん:2013/07/26(金) 20:57:59.09
使う必要なければ無理に使うこともない
877デフォルトの名無しさん:2013/07/26(金) 21:04:07.63
桶 蛸 蚕 蛹
878デフォルトの名無しさん:2013/07/28(日) 23:15:26.22
「Ant Farming」(実験ばかりして実りのない学者タイプ)

お前らまさにこれだよな
879デフォルトの名無しさん:2013/07/28(日) 23:22:43.54
お前等ゴミクズはこういう誰も使わなさそうな単語が大好きだもんな
見つけておいたことに感謝しろよ

「Ant Farming」(実験ばかりして実りのない学者タイプ)
880デフォルトの名無しさん:2013/07/29(月) 06:57:55.36
スレチ
881デフォルトの名無しさん:2013/07/29(月) 09:49:40.34
Perl忍者最近見ないな
882デフォルトの名無しさん:2013/07/29(月) 23:24:51.24
Haskellって(Schemeも結構そうだけど)
RubyやJava、Cと比べて
プログラムが横に長くなると思うんだけど
(インデントが深くなるから?)

エディタ上で見るときは横に広げればいいんだけど
印刷すると見難くならない ?

みんなどうしてるの?
883デフォルトの名無しさん:2013/07/30(火) 04:11:07.47
印刷横向きにして
A4の縦に2P表示
884デフォルトの名無しさん:2013/07/30(火) 08:57:39.31
縮小して印刷すればええがな。
あまり長すぎる行は折り返せばいいし。
幅は印刷する前に分かるんだから自動化は可能。
885デフォルトの名無しさん:2013/07/30(火) 09:54:52.50
わざわざ紙という劣化メディアを選択する理由って、やっぱ老害レビューワー?
886デフォルトの名無しさん:2013/07/30(火) 10:10:58.79
紙いいじゃん 温もりがあって
887デフォルトの名無しさん:2013/07/30(火) 12:40:51.03
紙には、「簡単に」手書きメモや書き込みができるという利点もある。
888デフォルトの名無しさん:2013/07/31(水) 07:27:27.38
は? 寧ろHaskellでコーディングするようになって一行80文字以内を徹底するようになったんだけど?

Vimで窓区切ってそのスペースで見渡せるコーディング身に付いたんだけど?
889デフォルトの名無しさん:2013/07/31(水) 07:57:50.50
唐突威圧おじさんやめろ
890デフォルトの名無しさん:2013/07/31(水) 11:09:09.27
威圧のこころは母ごころ
891デフォルトの名無しさん:2013/07/31(水) 12:02:06.21
は??
892デフォルトの名無しさん:2013/07/31(水) 18:57:45.59
押せば命の泉湧く
はーっはっはっは
893デフォルトの名無しさん:2013/07/31(水) 20:13:39.68
マクロ使ってもいいんだってPreludeが教えてくれた
ifdefの嵐にくじけない心を貰った
894デフォルトの名無しさん:2013/07/31(水) 20:38:17.44
いまどきIDE使わずにVim使う情弱がいるとは…
895デフォルトの名無しさん:2013/07/31(水) 20:43:43.70
それは言語による
896デフォルトの名無しさん:2013/08/01(木) 00:07:59.02
IDEが必要なのってJavaみたいな糞言語だけでしょ?
897デフォルトの名無しさん:2013/08/01(木) 00:22:26.91
それはIDEの出来による
898デフォルトの名無しさん:2013/08/01(木) 00:25:01.96
論理が破綻している
899デフォルトの名無しさん:2013/08/01(木) 01:25:06.56
APIがたくさんあればどんな言語だって必要なんじゃね?
900デフォルトの名無しさん:2013/08/01(木) 07:01:25.33
>>899
なぜ?

IDE って「統合開発環境」だよね。
APIがたくさんある事で、何と何を統合する必要が出てくるの?
901デフォルトの名無しさん:2013/08/01(木) 07:05:18.58
(笑)
902デフォルトの名無しさん:2013/08/01(木) 07:13:32.36
すごいどうでもいい
903デフォルトの名無しさん:2013/08/01(木) 08:17:53.47
>>900
コードスニペット程度の使い方をしているとエスパー。
904デフォルトの名無しさん:2013/08/01(木) 09:39:47.92
その程度の使い方ならそれこそVimで十分じゃないか……
905デフォルトの名無しさん:2013/08/01(木) 12:39:04.48
>>902
すごいどうでもいい事だが、本来は「すごくどうでもいい」な
906デフォルトの名無しさん:2013/08/01(木) 16:17:44.76
言語の乱れは生活の乱れ
907デフォルトの名無しさん:2013/08/01(木) 19:49:03.40
スペック低すぎてIDE動かないんだろどうせ
作者すら恥じたvi系のエディタを使うのは素人の遊びくらいだ
908デフォルトの名無しさん:2013/08/01(木) 20:17:26.40
学習レベルだけど、とりあえずvim使っている。
vi系はどのOSでも動くし、vi使えれば実用上問題が発生しないことも実証されている。
909デフォルトの名無しさん:2013/08/01(木) 20:43:47.95
だいたい Haskell の IDE ってまともなのあるか?
910デフォルトの名無しさん:2013/08/01(木) 20:47:31.85
>作者すら恥じたvi系のエディタ
あの化石発言いまだに引っ張るやついるけど、
いい加減今のVimと当時のvi一緒にすんなよ
911デフォルトの名無しさん:2013/08/01(木) 21:33:37.74
平和だなぁ
912デフォルトの名無しさん:2013/08/01(木) 21:38:35.43
のどかに銃弾が飛び交ってますわね
913デフォルトの名無しさん:2013/08/01(木) 21:43:31.09
>>907
上でAPIがどうこう言ってた人?
914デフォルトの名無しさん:2013/08/01(木) 21:54:26.03
そんなことよりモナドのえろげはまだですか?
915デフォルトの名無しさん:2013/08/01(木) 22:00:56.27
unsafePerformIOしたらダメなの〜
916デフォルトの名無しさん:2013/08/02(金) 09:39:32.50 ID:FUuzvtAU!
>>909
俺も知りたい。
eclipseFP とか使っているひといないかな?
917デフォルトの名無しさん:2013/08/05(月) 18:18:54.05
小手先の技術しか学ばない無能(その場しのぎで、将来を見通した深い考えのないこと

どこもこんなのばっか
918デフォルトの名無しさん:2013/08/05(月) 22:51:51.52
おい随分抽象的だな
ハスケルらしい
919デフォルトの名無しさん:2013/08/05(月) 22:54:49.43
いつ消えるかもわからんものに記憶力を割く気がしない
920デフォルトの名無しさん:2013/08/05(月) 23:50:55.10
>>918
なあ?ゴミクズは抽象的なのがすきなんだろ?
だから抽象的にバカにしてやったんだがね
921デフォルトの名無しさん:2013/08/05(月) 23:52:19.14
お、おう……
922デフォルトの名無しさん:2013/08/06(火) 00:21:18.09
抽象的と聞いて、「複雑化」「単純化」のどちらを連想するかで、プログラミング適正が診断出来る。
923デフォルトの名無しさん:2013/08/06(火) 00:23:21.45
プログラマなら「具体化」と言わないと…
924デフォルトの名無しさん:2013/08/06(火) 11:25:42.90
難解になるかわりに単純になる
という印象
925デフォルトの名無しさん:2013/08/06(火) 12:50:39.36
概念・実用両方面で、どこまでモナドを理解できているかを測るテストはないでしょうか。

なんとなく頭では分かっているような気がしますが、人にわかりやすく説明できるかと言われると、
何からどのような順で説明したらいいかとか含めて自信がなく、自分の理解度がよく分からない。

クイズやテストみたいな形で出題されると、理解度を客観的に測れるのではないかと思うのですが・・・
926デフォルトの名無しさん:2013/08/06(火) 12:58:37.70
数学の一般人向けの本を立ち読みしてて、最後の20ページくらいでいきなりモナドとプログラミングの話が出てきてビビった
非決定性計算から説明してたから物凄く分かりやすかったけど、タイトル見るの忘れた
927デフォルトの名無しさん:2013/08/06(火) 13:07:43.89
モナドグランプリ
928デフォルトの名無しさん:2013/08/06(火) 13:15:17.26
>>926
その本知りたい。お願いだから思い出して。
929デフォルトの名無しさん:2013/08/06(火) 13:22:48.86
>>923
それは既にプログラマ。
930デフォルトの名無しさん:2013/08/06(火) 13:29:27.29
>>927
せーがー
931デフォルトの名無しさん:2013/08/06(火) 19:14:26.65
>>928
本屋に行ったけどもうなかった
今年の4月に数学の新刊コーナーにあったと思う

非決定性計算演算子Pと確率計算演算子Dの似ている部分を抽象化して取り出したモノがモナドTだという説明は今まで読んだ中で一番分かりやすかった
932デフォルトの名無しさん:2013/08/06(火) 20:42:01.03
他はどういう内容なの?
そっちから探したほうが早い気がする。
933デフォルトの名無しさん:2013/08/06(火) 21:00:46.14
>>932
単行本だけど章ごとのアンソロジーみたいになってて、全部で5章くらいあって、最後の章にいきなりモナドが出てきた
他の章は応用数学だけどモナドとは無関係で独立した内容だった気がする
934デフォルトの名無しさん:2013/08/06(火) 21:27:55.06
離散数学系?
935デフォルトの名無しさん:2013/08/06(火) 21:33:34.53
是非特定求む

数学関連新刊一覧
http://www.roy.hi-ho.ne.jp/shomoku/ntb/4/a01.htm
936デフォルトの名無しさん:2013/08/06(火) 21:48:15.74
937デフォルトの名無しさん:2013/08/06(火) 21:55:11.19
論集みたいなものか
蓮尾一郎という人がそれっぽいね
ttp://www.iwanami.co.jp/moreinfo/0050950/top.html
938デフォルトの名無しさん:2013/08/06(火) 22:32:23.68
数学できないゴミクズほど数学の重要性をわめきはじめるよな
なんでだろう?
戒めてるのかな
苦労したからほざいてるのかな?

そういうゴミクズは穀すべきだね
939デフォルトの名無しさん:2013/08/06(火) 22:35:47.30
スレチ
940デフォルトの名無しさん:2013/08/06(火) 22:45:19.44
何か嫌なことがあったんだろうけどファビョりすぎ
941デフォルトの名無しさん:2013/08/06(火) 22:48:56.51
スレチというより鼬
942デフォルトの名無しさん:2013/08/06(火) 23:01:05.84
喚いているのが>>938だけな件について
943デフォルトの名無しさん:2013/08/06(火) 23:33:47.63
>>936
ありがとう
944デフォルトの名無しさん:2013/08/06(火) 23:51:36.55
えさをあたえないでください
945デフォルトの名無しさん:2013/08/07(水) 13:23:36.54
お前ら本当にモナドが好きなんだな・・・
946デフォルトの名無しさん:2013/08/07(水) 13:58:38.14
モナドはお菓子のホームラン王ですから
947デフォルトの名無しさん:2013/08/07(水) 15:17:28.56
最中?
948デフォルトの名無しさん:2013/08/07(水) 17:49:31.16
スレチというより、うちはイタチ
949デフォルトの名無しさん:2013/08/07(水) 17:58:42.84
モナド コモナド マゴモナド
950デフォルトの名無しさん:2013/08/07(水) 21:20:41.02
上で出てた本を本屋で立ち読みしてきた
モナドそのものの説明は分かりやすいけど、型とモナドの関係はあんまり分からなかった
951デフォルトの名無しさん:2013/08/08(木) 06:40:15.24
>>947
ナボナ知らない世代?
哀しいなぁ
952デフォルトの名無しさん:2013/08/08(木) 17:14:08.18
最近いじり始めたんだけど
もう統合開発環境に慣れてるから
テキストエディタとコマンド辛い
953デフォルトの名無しさん:2013/08/08(木) 17:32:42.00
また、そっちに話戻すのかよ!
954デフォルトの名無しさん:2013/08/08(木) 19:34:40.02
>>952
大丈夫、エディタもすぐ慣れる

いつまでも慣れなければ歳のせいだから諦めろ
955デフォルトの名無しさん:2013/08/08(木) 19:38:46.35
むしろ、IDEは、いちいちキーボードから手をはなしてマウスをさわるのが嫌になる
956デフォルトの名無しさん:2013/08/08(木) 19:55:19.87
どんだけしょぼいIDE使ってるんだよ……
957デフォルトの名無しさん:2013/08/09(金) 06:17:24.37
早くハスケルでIDE創れよ
958デフォルトの名無しさん:2013/08/09(金) 07:06:35.69
Haskellでできたエディタとかあるの?
959デフォルトの名無しさん:2013/08/09(金) 10:01:44.61
cabal install yi
960デフォルトの名無しさん:2013/08/09(金) 11:31:56.67
emacs とターミナルで十分なのは俺だけか…
逆に、何を求めてIDEを使うのかが分からない
961デフォルトの名無しさん:2013/08/09(金) 11:35:20.57
haskellならsublimetextとvimで良い
962デフォルトの名無しさん:2013/08/09(金) 12:40:30.78
>>960
・コードと連動したウィジェットのペタ貼りによるGUIアプリの開発
・Cabal を用いたパッケージ化やテストなどの支援
・弱頭部正規化の様子やサンクなどコンパイラ内部の挙動も晒したデバッガ
・コード解析
・プロファイリングの支援

この辺りを一つに統合した、見た目や操作がシンプルな IDE を求む。
963デフォルトの名無しさん:2013/08/09(金) 14:18:33.78
>>962
コードと連動したウィジェットの
というところで既にわからん(笑)
964デフォルトの名無しさん:2013/08/09(金) 16:38:18.18
ん、俺はGUIだけは欲しいと思ったな
他は統合されてなくてもいい
965デフォルトの名無しさん:2013/08/09(金) 18:12:07.67
>>963
どこが面白かったのかよく分からんが、要するにWIZIWIGなGUI開発ツールだ。
(WIZIWIG ももう死語かもしれんが)

ここでいうウィジェットというのは、Win32APIでいうところのウィンドウクラスが定義されたパーツだ。
wxやGTKなどではほぼ同じものをウィジェットと呼んでいる。
それらをWIZIWIGなGUI開発ツール上で仮想的なウィンドウにペタペタ貼っていくことで、
各ウィジェットのウィンドウ上の位置やサイズ、挙動などを直感的に定義していく。
これがよくあるIDEの機能の一つだ。

コードと連動したというのは、WIZIWIGなGUI開発ツール上でウィジェットを貼った際に、
実行時にそのウィジェットが表示されるようにプログラムコードも自動的に変更される機能だ。
逆、つまりコードを改変することでGUI開発ツール上のウィジェットが変更される機能もある。
VisualStudioのC#用にはそんな機能もあったはず(他の言語はしらん、あるかもしれん)。
ウィジェットの主だった定義をプログラムコードではなくXMLなどのファイルに分離させる場合は、
もちろんそのXMLファイルも連動する。

そのような機能を持ったGUI開発ツールがHaskell用のIDEに統合されているといいな、という話だ。


既に分からんということは、その先も分からんのか?
だったら面倒だが説明してやるぞ。
966デフォルトの名無しさん:2013/08/09(金) 18:53:54.02
まずライブラリのリンク機能を用意しなくっちゃね
967デフォルトの名無しさん:2013/08/09(金) 19:03:03.68
>>965
WYSIWYGな
968デフォルトの名無しさん:2013/08/09(金) 19:22:17.08
>>967
そうだったけ

まぁいいや
969デフォルトの名無しさん:2013/08/09(金) 21:39:08.69
>>965
> 既に分からんということは、その先も分からんのか?
> だったら面倒だが説明してやるぞ。

ふつーは自分で調べろってながれかと思えば
説明してくれるとはありがたい。

963ではないけれど説明してくれると幸いです。

Visual Studio とXCodeとEmacsの補完してくれるやつ(AC?)
使ったことあるんだけれど、選択候補が現れるたびに、
メニューが開いたり、(上下)キーを奪われたりでいまいちいらっとした。

なんかのWebページ見たんだけど、IntelliSenseがあると
ドキュメントを見なくて済むそうな。
でも、そんなの危なっかしくない ?
970デフォルトの名無しさん:2013/08/09(金) 21:46:20.21
>968
What You See Is What You Get のアクロニムなんだから
まぁいいやはいかんでしょ
971デフォルトの名無しさん:2013/08/09(金) 22:24:38.94
>>969
よし、至極面倒だが説明しよう。

・Cabal を用いたパッケージ化やテストなどの支援
HackageDBにアップ時に Cabal でパッケージ化したり、
Cabal で自動テストを書く際に *.cabal ファイルを書かなきゃならんが、
http://itpro.nikkeibp.co.jp/article/COLUMN/20121106/435201/?ST=ittrend
http://itpro.nikkeibp.co.jp/article/COLUMN/20121205/442042/?ST=ittrend
これをみると分かるように、手書きでこれをするのはちょっと死ねる。
GUIでダイアグラムやプロパティシートをちょちょっといじって設定できると便利。

・弱頭部正規形の様子やサンクなどコンパイラ内部の挙動も晒したデバッガ
>>962 では正規化と書いたが正規形の間違いだ)
トレースしたり、printf デバッグをして変数の値を調べても、
「なんでこんな値になってんだよ」と思うことはしばしばある。
GHC が関数を評価(弱頭部正規形にまで簡約)している様子や、
その瞬間のサンク(未評価の関数)が何かわかると超便利だ。
たとえば、本当にメモ化されているのか、わざわざ処理時間を測らなくても分かるわけだ。
ガベージコレクトの様子も分かると尚良い、スペースリークの原因が容易に分かるかもしれん。

・コード解析
コードの静的な解析だ。

・プロファイリングの支援
複数のプロファイリング結果(普通のコード、最適化を施したコード、もっと最適化を施したコードなど)
を比較検討するための支援があるといい。
計算効率が改善されたのはこのコードのこの部分のおかげだという事をコードにメモ書きできたり、
そこにプロファイリング結果のグラフを貼り付けたりできると便利だろ。

こういうことが、Emacs から個々の機能を呼び出して個別にインタラクトするのではなく、
IDE として統合されていて、全ての機能が情報を共有していて有機的に機能すれば素晴らしい。
972デフォルトの名無しさん:2013/08/10(土) 00:02:16.79
個別にインタラクト以上に何が必要なのか全くわからんのだが
973デフォルトの名無しさん:2013/08/10(土) 00:12:04.40
そもそもEmacsから呼べる必要性すら感じない機能ばっかりなんだけど……
974デフォルトの名無しさん:2013/08/10(土) 01:06:16.58
効率がまったく違うんだけど
給料泥棒すぎる
975デフォルトの名無しさん:2013/08/10(土) 01:14:56.57
ああ、説明できないのね。理解した
976デフォルトの名無しさん:2013/08/10(土) 01:46:35.99
理解早いな
977デフォルトの名無しさん:2013/08/10(土) 01:50:25.01
ソースの編集だけはemacsでやりたい
978デフォルトの名無しさん:2013/08/10(土) 02:06:28.79
IDEの利点って、コード解析と補完を統合したIntelliSenceとか、コード解析と編集を統合したリファクタリング機能とかじゃないの
>>971は何と何を統合してどんな機能を実現したいんだ?
979デフォルトの名無しさん:2013/08/10(土) 02:11:14.22
IDEの利点は、たとえどんなに使いにくくて効率が悪くても、同じ方法同じスクリーンショットで開発手順を教育できるという点です
980デフォルトの名無しさん:2013/08/10(土) 12:09:37.96
使い分けりゃいいだけなのに
無能はすぐ否定するんだから
981デフォルトの名無しさん:2013/08/10(土) 12:26:14.56
IDE厨は低能揃いだなぁ
982デフォルトの名無しさん:2013/08/10(土) 12:31:13.05
機能詰め込めば解決すると思ってるからな
IDE使ってない人間は単に個々の機能使い分けてるだけなのに
983デフォルトの名無しさん:2013/08/10(土) 12:39:48.97
IDE使わない人は関数の呼び出し階層どうやって調査してるの?
984デフォルトの名無しさん:2013/08/10(土) 12:46:25.36
ん?遥か昔からtagジャンプと呼ばれてるアレ?
985デフォルトの名無しさん:2013/08/10(土) 13:05:54.90
統合環境を馬鹿にしてる奴は、つまり自分のことしか考えていない。
統合環境を使いたくない奴は使わなければいいだけのこと。
haskellが広く普及するためには避けられないことだ。
986デフォルトの名無しさん:2013/08/10(土) 13:08:05.88
Haskellなんて趣味でしか使わんからw
987デフォルトの名無しさん:2013/08/10(土) 13:32:14.46
大規模システムに使われている例はすでにある。
一年ほど前の日経コンピュータ?に載ってる。

つまり、趣味でしか使わんからと言ってる奴は、ただの世間知らず。

haskellがもっと広く普及するためには統合環境は不可欠。
使いたくない奴は使わなければいいだけのこと。
988デフォルトの名無しさん:2013/08/10(土) 13:33:05.23
>>984
タグジャンプじゃなくて目的の関数を呼び出してる関数を再帰的に全部列挙する機能
もちろん列挙した関数へジャンプできる
この機能がないと中規模以上のプロジェクトでは仕事にならない気がする
市場トラブルで即日対応が求められるような場合もちんたらemacsとかやってるのかっていう素朴な疑問
989デフォルトの名無しさん:2013/08/10(土) 13:35:18.91
統合環境を馬鹿にしてるんじゃなくて
統合環境がないと不便だなんて言ってる似非プログラマを馬鹿にしている
990デフォルトの名無しさん:2013/08/10(土) 13:37:46.16
日経コンピュータw
まあそれでなくては困るなw
991デフォルトの名無しさん:2013/08/10(土) 13:39:06.20
便利なツールを使わない玄人思考の似非プログラマっているよね…
趣味ならテクニックに溺れるのは勝手だけど人生は短いよ?
992デフォルトの名無しさん:2013/08/10(土) 13:40:56.25
統合環境を馬鹿にしてないのに、ないと不便だと言ったら似非?
統合環境のどこに価値を見出してるのか意味不明
993デフォルトの名無しさん:2013/08/10(土) 13:41:47.71
使い分けだって言ってるのにまだ理解できてないんだな
自分の希望を自分で叶えず長文で垂れ流すだけの奴に言っても無駄かな
994デフォルトの名無しさん:2013/08/10(土) 13:42:54.71
まあ関数の呼び出し機能でタグジャンプなんて出てくる時点で
化石みたいな環境から改善する努力を怠ってる人間だと言うのは想像できる
995デフォルトの名無しさん:2013/08/10(土) 13:46:28.81
それ具体的にどう使い分けてんのか言わないと説得力ないで
まあ挙げられんだろうが
996デフォルトの名無しさん:2013/08/10(土) 13:54:01.32
>>995
具体的に使う頻度が高いのはGUIデザイナとリファクタぐらい
設計は今のところ単体のが効率いいから触ってないし
どうだ?統合環境だから何もかも便利とは限らないだろう
997デフォルトの名無しさん:2013/08/10(土) 13:55:02.09
一行消えてたぜ
エディタは使ってない奴多いんじゃないかなと書いた
998デフォルトの名無しさん:2013/08/10(土) 13:56:12.40
おまいら次スレがですね
999デフォルトの名無しさん:2013/08/10(土) 13:57:16.52
そろそろ消え
1000デフォルトの名無しさん:2013/08/10(土) 14:48:51.93
>>985
Haskellが広く普及なんて永遠にしないのに、なんでそんなこと気にするんだ?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。