関数型プログラミング言語Haskell Part22
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2013/03/23(土) 12:34:19.09ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
Part20 ttp://toro.2ch.net/test/read.cgi/tech/1350428908/
Part21 ttp://toro.2ch.net/test/read.cgi/tech/1358702176/
0002デフォルトの名無しさん
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
0003デフォルトの名無しさん
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
0004デフォルトの名無しさん
2013/03/23(土) 20:06:48.43私がこの世界に求める優しさのすべて―
それがHaskellなんだと。
あぁ この世界の女性がみんなHaskellになったら
なんてすてきな世界なんだろうと考えました。
レトルトカレーしか作れぬお前がHaskellになったところで
そ れ は H a s k e l l で は な い !
0005デフォルトの名無しさん
2013/03/23(土) 20:13:25.01Haskellにはチンポ入れる穴がないだろ
0006デフォルトの名無しさん
2013/03/23(土) 20:34:16.030007デフォルトの名無しさん
2013/03/24(日) 17:26:46.7515分で始める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スレに書いたほうがウケる
0008デフォルトの名無しさん
2013/03/24(日) 17:28:24.21言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0009デフォルトの名無しさん
2013/03/24(日) 17:51:57.400010デフォルトの名無しさん
2013/03/24(日) 18:26:53.82http://th.nao.ac.jp/meeting/rironkon11/oral-files/muranushi.pdf
御使い乙、代わりにこれをあげよう
0011デフォルトの名無しさん
2013/03/24(日) 20:15:47.91scalaなんかで解析してるから進みが遅いんだな・・・
0012デフォルトの名無しさん
2013/03/25(月) 09:20:06.300013デフォルトの名無しさん
2013/03/25(月) 15:35:24.77この言語で作ったGUIも遅延評価になるの?
GUIが遅延評価になるってのが自分で言っててよくわかんないんだけど
2chブラウザなんか作ったとして、スレッドを読み込んだ時点で
先の方のレスはまだ表示させる必要ないから
データの解釈とレンダリングは必要になる(実際にそのレス番に着く)までしないとかさ
そういう、特に工夫しなくてもデフォルトで遅延評価になってることを類推するじゃん?
0014デフォルトの名無しさん
2013/03/25(月) 15:59:33.76特殊な裏ワザを使わなければ遅延評価
ただし、評価生成されるのは、「表示」じゃなくて「表示するプロセス」
0015デフォルトの名無しさん
2013/03/25(月) 16:05:28.04gtkとか使う場合、描画タイミングとかはwidgetにお任せだよ。
0016デフォルトの名無しさん
2013/03/25(月) 16:13:57.560017デフォルトの名無しさん
2013/03/25(月) 16:21:02.330018デフォルトの名無しさん
2013/03/26(火) 00:58:12.02君はいつもそういう極論しか言えないよね
0019デフォルトの名無しさん
2013/03/26(火) 03:18:28.10並列計算
0020デフォルトの名無しさん
2013/03/26(火) 09:19:52.440021デフォルトの名無しさん
2013/03/26(火) 10:32:50.06>>11 の暴論っぷりはスルーかいw
0022デフォルトの名無しさん
2013/03/26(火) 15:57:14.31よし
0023デフォルトの名無しさん
2013/03/27(水) 16:35:57.90なんでApplicativeのpureとMonadのreturnが分かれてるんだ
歴史的経緯は分かるんだけど、Applicativeを導入するときにpureじゃなくてreturnって名前にすりゃよかったじゃん
0024デフォルトの名無しさん
2013/03/27(水) 17:05:52.71(/・ω・)/ 透けるぅー!
0025デフォルトの名無しさん
2013/03/27(水) 18:59:27.80return の方がおかしいと思うのは俺だけか?
0026デフォルトの名無しさん
2013/03/27(水) 19:07:29.53歴史的経緯が分かってて、その提案なの?
0027デフォルトの名無しさん
2013/03/27(水) 19:26:25.290028デフォルトの名無しさん
2013/03/27(水) 19:55:05.54違いについて質問しようと思った経緯を教えて欲しい。
それによって返答が違う。
たとえば、**や〜〜などの共通項を見つけたが、
あまりにも似すぎているために、逆に違いがあるのか気になった、とか。
スレチだったりバカな理由なら以後は無視する。
0029デフォルトの名無しさん
2013/03/27(水) 19:56:31.430030デフォルトの名無しさん
2013/03/27(水) 20:02:37.790031デフォルトの名無しさん
2013/03/27(水) 20:18:19.710032デフォルトの名無しさん
2013/03/27(水) 20:45:37.050033デフォルトの名無しさん
2013/03/27(水) 20:49:44.150034デフォルトの名無しさん
2013/03/27(水) 22:48:24.96今ホットなライブラリの話でもしててくれ
0035デフォルトの名無しさん
2013/03/28(木) 03:43:19.830036デフォルトの名無しさん
2013/03/28(木) 10:29:28.24ハンス・バルドゥンクだろう。グリーンの使い方の名手として
知られたらしいが、あまり発色の良いものは残っていないらしい。
0037デフォルトの名無しさん
2013/03/28(木) 10:42:41.451980年代前半から古典主義建築のオーダーだとか、ファサードの研究に
結構利用されていたのだが。
0038デフォルトの名無しさん
2013/03/28(木) 10:47:25.850039デフォルトの名無しさん
2013/03/28(木) 11:05:51.1084-5年頃だから前半ではなくて中頃だった。建設省建築研究所での
Prolog-KABAを使った研究が有名。浮動小数点数も扱えない処理系で
何ができたかは疑問ですが。
それとは全く別の話だが、こちらは海外でPrologのプログラミングで
黄金分割の研究をしたものもあった。
0040デフォルトの名無しさん
2013/03/28(木) 11:22:13.38GitHubにはあると思うけど。
0041デフォルトの名無しさん
2013/03/29(金) 02:07:27.940042デフォルトの名無しさん
2013/03/29(金) 06:59:08.790043デフォルトの名無しさん
2013/03/29(金) 07:34:38.310044デフォルトの名無しさん
2013/03/29(金) 08:17:56.13hoge :: a -> b として境界条件外はundefinedするべきか
よく迷うけど指針ってありますか? (b自体はMaybe型じゃないとして)
0045デフォルトの名無しさん
2013/03/29(金) 12:39:27.020046デフォルトの名無しさん
2013/03/29(金) 12:41:39.37境界条件外だった場合に、その事を何かに伝達したいのなら Maybe b の方が良いだろうし
0047デフォルトの名無しさん
2013/03/29(金) 16:36:42.12Left "" はその何倍食うの?
0048デフォルトの名無しさん
2013/03/29(金) 19:28:07.82数学の関数として考えるとき、定義域(domain)に未定義はあり得ない
引数が定義域の範囲の外にあるなら、それは例外として処理すべき
0049デフォルトの名無しさん
2013/03/29(金) 21:28:04.300050デフォルトの名無しさん
2013/03/29(金) 22:47:07.90http://www.amazon.co.jp/dp/4274069117/
くっそ高いけど
0051デフォルトの名無しさん
2013/03/29(金) 22:51:19.53ですよねぇ。価値ある情報が無料じゃないのは許されないと思います。
0052デフォルトの名無しさん
2013/03/29(金) 22:52:16.670053デフォルトの名無しさん
2013/03/29(金) 23:06:02.40有理関数(分母と分子が多項式になってる分数で定義される関数)なんかは、
分母がゼロになるところを定義域から外すようにすると、有理関数
を定義するのに先立って分母がゼロになるところを求めておいてそれを
除外したところを定義域とするようにしないといけないのであり得ませんね
0054デフォルトの名無しさん
2013/03/29(金) 23:10:04.560055デフォルトの名無しさん
2013/03/29(金) 23:18:14.16英語版買ったばかりなのに........
0056デフォルトの名無しさん
2013/03/29(金) 23:24:56.02ラムダ社に社名変更すべき
0057デフォルトの名無しさん
2013/03/29(金) 23:50:25.09まじで。偉業だな。
大学一年の推薦図書決定だなw
0058デフォルトの名無しさん
2013/03/29(金) 23:51:50.56そんなに気に障ったの?
0059デフォルトの名無しさん
2013/03/30(土) 00:05:53.190060デフォルトの名無しさん
2013/03/30(土) 01:12:54.270061デフォルトの名無しさん
2013/03/30(土) 01:19:16.35高次多項式の零点を求めることになるから、それは一般に計算不可能
関数の計算が問題にする時点で正則関数に限定されており、つまり、分母に零になった時点で例外にしなければならない
特異点を例外にしないのは、高階関数や数式処理をする場合だけにすべき
0062デフォルトの名無しさん
2013/03/30(土) 02:06:19.670063デフォルトの名無しさん
2013/03/30(土) 02:31:33.33高階関数=積分
数式処理=通分
0064デフォルトの名無しさん
2013/03/30(土) 07:15:46.75これだと原語のほうが読みやすいぞ。
超訳よりはマシだが、もうちょいこなれた日本語にできんかったんかね?
0065デフォルトの名無しさん
2013/03/30(土) 10:56:46.880066デフォルトの名無しさん
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 みたいに結果をだしたい。
0067デフォルトの名無しさん
2013/04/01(月) 12:08:21.660068デフォルトの名無しさん
2013/04/01(月) 12:14:23.30KazuとかHikuなど data Keisan = [Moji]みたいにして?
0069デフォルトの名無しさん
2013/04/01(月) 12:30:16.34Prologだと以下のような定義となる。Haskellだってあるでしょ。
数式が全部文字に置き換えられたモノから数式に戻して計算する(_リスト,_式,結果) :-
演算子を置換する(_リスト,_演算子を置換されたリスト),
atomic_list_concat(_演算子を置換されたリスト,' ',_式文字列),
atom_to_term(_式文字列,_式,_),
_結果 is _式.
007069
2013/04/01(月) 12:32:12.68数式が全部文字に置き換えられたモノから数式に戻して計算する(_リスト,_式,_結果) :-
結果の前のアンダースコアが落ちていました。これだとfailしてしまいます。
0071デフォルトの名無しさん
2013/04/01(月) 13:37:16.710072デフォルトの名無しさん
2013/04/01(月) 15:51:33.18ttp://pastebin.com/200nZjPm
0073デフォルトの名無しさん
2013/04/01(月) 16:46:27.98log 6 を log 2 + log 3みたいにちゃんと扱ってくれるライブラリないの?
logで猛烈に四則演算繰り返すと絶対非負であることが証明できる演算が負になっちゃったりして困るの
エントロピー関連の計算でさもありなんでしょ?
0074デフォルトの名無しさん
2013/04/01(月) 17:37:35.36ttp://www.haskell.org/haskellwiki/Libraries_and_tools/Mathematics#Computer_Algebra
あんまないのか?
それっぽいキーワードで検索すると他にも出てくるけど、これでキマリ、みたいなのはないっぽい。
0075デフォルトの名無しさん
2013/04/01(月) 18:07:14.37数式処理システムはpythonのsympyぐらいでは
他言語じゃhaskell含めて寡聞にして聞かないわ
0076デフォルトの名無しさん
2013/04/01(月) 21:26:00.270077デフォルトの名無しさん
2013/04/01(月) 21:29:37.780078デフォルトの名無しさん
2013/04/01(月) 21:32:04.160079デフォルトの名無しさん
2013/04/01(月) 21:40:09.51昔は演習の時間にschemeで数式処理システムを作らされてた
Haskellだとスマートに作れそうな気がするんだけどな
0080デフォルトの名無しさん
2013/04/01(月) 21:49:23.730081デフォルトの名無しさん
2013/04/01(月) 22:04:40.150082デフォルトの名無しさん
2013/04/01(月) 22:17:00.71作ってる奴の頭が良すぎる。
0083デフォルトの名無しさん
2013/04/02(火) 00:57:11.100084デフォルトの名無しさん
2013/04/02(火) 01:23:58.970085デフォルトの名無しさん
2013/04/02(火) 16:01:29.500086デフォルトの名無しさん
2013/04/03(水) 00:03:19.350087デフォルトの名無しさん
2013/04/03(水) 00:43:07.871日経ってもまだ理解できない
0088デフォルトの名無しさん
2013/04/03(水) 00:53:05.06一日で理解できたら相当頭いい。
あと、いろんなものがモナドになってるけど、「いろいろなものが経験的にモナドで表せる」だけで
モナド最強無敵完璧究極とかは明確に間違い。
モナドで不足するところを補うためにあとから色々アイデアが出てる。
圏論的な意味でモナドはかなり良い抽象化であるにもかかわらず
関数型言語ではなぜそれが不十分な抽象化であり得るか:
Hask圏が「ふつうの圏」ではなく豊穣圏の一種だから、だと思われる。
0089デフォルトの名無しさん
2013/04/03(水) 00:54:50.090090デフォルトの名無しさん
2013/04/03(水) 01:07:15.65009188
2013/04/03(水) 01:16:30.20先に現象があるのであって、「豊穣圏だから」って言い方だと先に理論が
あるみたいな言い方で極めて質が悪い。
0092デフォルトの名無しさん
2013/04/03(水) 01:17:54.37だれか夏コミで書いてたけど。豊穣圏などという大砲を持ちだして雀を撃つような
真似は良くない。
0093デフォルトの名無しさん
2013/04/03(水) 01:31:50.88多少手を動かして「普通の型を関手の世界に持ち上げる」とか「文脈を注入する」
という言葉の上での感覚は掴んだけど
例えばこのへんhttp://d.hatena.ne.jp/shunsuk/20101215/1292414064で関数合成
(fmap f g) == f ・ g
できることすら気づいていなかった自分の頭の硬さにおののく
0094デフォルトの名無しさん
2013/04/03(水) 01:40:28.700095デフォルトの名無しさん
2013/04/03(水) 01:43:35.200096デフォルトの名無しさん
2013/04/03(水) 05:21:12.620097デフォルトの名無しさん
2013/04/03(水) 09:29:44.25初心者なので考えてもまだ理解できない。
今はなんとかこれで出来ないかと苦戦中。
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
0098デフォルトの名無しさん
2013/04/03(水) 09:49:26.80プログラミング以前に、まず問題を分けて。
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 という値を求める、というのがやりたいことなの?
0099デフォルトの名無しさん
2013/04/03(水) 18:44:29.760100デフォルトの名無しさん
2013/04/03(水) 22:28:46.99ぼくはこんな嫌味を覚えたよ自慢、うざっ
0101デフォルトの名無しさん
2013/04/03(水) 22:57:47.560102デフォルトの名無しさん
2013/04/03(水) 22:59:47.410103デフォルトの名無しさん
2013/04/03(水) 23:21:18.950104デフォルトの名無しさん
2013/04/03(水) 23:25:15.530105デフォルトの名無しさん
2013/04/03(水) 23:53:53.23たとえば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 としてコードが洗練されているほど、振る舞いが追いにくい印象。
もしかしたら、同じようにできるのかも知れんが、何かコツでもあるのかな。
0106デフォルトの名無しさん
2013/04/04(木) 00:07:15.63わざわざ取り組む必要もない。
0107105
2013/04/04(木) 00:09:56.48なぜそのようなことを言うのでしょうか。
不便なんて思っていません。
使いたいから使っています。
仕組みを理解したいからコードリーディングに挑戦しています。
0108デフォルトの名無しさん
2013/04/04(木) 00:30:25.57出たなうんこ野郎
こいつは屁理屈こねるために質問してくる
相手するだけ無駄
0109デフォルトの名無しさん
2013/04/04(木) 00:44:27.94それに105が屁理屈とも思わんし。言ってることが理解できないけどさ。
0110デフォルトの名無しさん
2013/04/04(木) 00:53:34.290111デフォルトの名無しさん
2013/04/04(木) 01:17:14.290112デフォルトの名無しさん
2013/04/04(木) 05:23:19.58コミケでHaskellの本売ってるの?
0113デフォルトの名無しさん
2013/04/04(木) 05:49:20.62それ、Haskellの問題つーより宣言型の問題な
0114デフォルトの名無しさん
2013/04/04(木) 21:30:28.84いわゆる技術系サークルってのはあって電子工作やらプログラミングやら扱ってる本
書いてるね。Haskellはあったかなぁ??
0115デフォルトの名無しさん
2013/04/04(木) 21:46:29.00思い出しついでにちょっとサイト見に行ったら新刊イカ娘と関係なくなってるじゃねえか
0116デフォルトの名無しさん
2013/04/05(金) 10:48:38.33g (x:xs) (y:ys)
| (x:xs) == [] && (y:ys) == [] = 1
| otherwise = x*y + g xs ys
処理終わらない。助けて
0117デフォルトの名無しさん
2013/04/05(金) 12:53:02.20それだと、空リストら適用した時点で例外が起きるんだが
「処理終わらない」の意味をもう少し明確に述べてみ
0118デフォルトの名無しさん
2013/04/05(金) 13:33:13.49多分間違い : (x:xs) == [] && (y;ys) == [] = 0?
g [1,2,3:[]] [4,5,6:[]] -> (1*4 + 2*5 + 3*6 + []* [] ) -> 32になるはず
0119デフォルトの名無しさん
2013/04/05(金) 14:03:32.08g[]_=0
g(x;xs)(y:ys)=x*y+g xs ys
0120デフォルトの名無しさん
2013/04/05(金) 14:38:01.150121デフォルトの名無しさん
2013/04/05(金) 15:05:17.280122デフォルトの名無しさん
2013/04/05(金) 15:09:30.43(x:xs)はすでに何かあるから[]ではないと言うことですね。
納得しました。
0123デフォルトの名無しさん
2013/04/06(土) 00:45:30.840124デフォルトの名無しさん
2013/04/06(土) 01:23:44.88[1,2,3:[]]
こんなリストはねえ。1:2:3:[]か、[1,2,3]だボケ
んで、後者は前者の糖衣構文
(xs)であれば[]もマッチする
(x:xs)に[]がマッチしない理由は、「何かあるから」ではなく、[]が値コンストラクタ ":" を使ってないから。
0125デフォルトの名無しさん
2013/04/06(土) 08:00:26.38ave関数でなぜか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) ))
0126デフォルトの名無しさん
2013/04/06(土) 08:36:07.910127デフォルトの名無しさん
2013/04/06(土) 10:36:13.07Haskell作者しぬの?
0128デフォルトの名無しさん
2013/04/06(土) 10:38:34.450129デフォルトの名無しさん
2013/04/06(土) 11:07:47.12バックスラッシュの方が使ってはいけない領域を
制御記号として使用したのだから非があるのでは。
0130デフォルトの名無しさん
2013/04/06(土) 11:32:01.950131デフォルトの名無しさん
2013/04/06(土) 11:33:30.90では
0132デフォルトの名無しさん
2013/04/06(土) 11:36:55.84バックスラッシュってパールみたいで嫌い
0133デフォルトの名無しさん
2013/04/06(土) 11:41:40.51ローカルに自由に使用するべき文字領域を。
0134デフォルトの名無しさん
2013/04/06(土) 13:54:43.940135デフォルトの名無しさん
2013/04/06(土) 14:04:47.780136デフォルトの名無しさん
2013/04/06(土) 16:36:10.75ラムダを制するものは稼げるエンジニアになれる、ということ。
0137デフォルトの名無しさん
2013/04/06(土) 16:51:33.16おっさんプログラミング板くんだりまでやって来てネカマすることないだろ
0138デフォルトの名無しさん
2013/04/06(土) 18:20:16.73data Ordered a = Ordered (a->a->Ordering) a
instance Ord (Ordered a) where
compare (Ordered compare' x) (Ordered _ y) = compare' x y
って型を新しく作る?
0139デフォルトの名無しさん
2013/04/06(土) 18:22:05.47value :: [Float] -> [Float]
この型でいいの?
0140デフォルトの名無しさん
2013/04/06(土) 18:48:55.710141デフォルトの名無しさん
2013/04/06(土) 19:17:18.25既定とは異なる順序で比較というのが今ひとつ分かりません。
データ型の定義時に Ord クラスを deriving するのが、
既定の順序で比較することに当たるのでしょうか。
そうであれば、既定とは異なる順序で比較するのは、
単に Ord クラスのインスタンスを自身で定義する事に当たると思いますが、
質問の例をみると、どうもそのような単純な話ではなさそうですね。
まず、どのような時に既定とは異なる順序で比較したくなるのか、
そのケースを例示していただけると、応えてくれる方が増えると思います。
あと、余計なお世話ですが、直感に反した不自然な計算(比較)を定義すると、
やっかいなバグに繋がりやすいので、注意が必要です。
0142デフォルトの名無しさん
2013/04/06(土) 19:39:59.62除算の型は (/) :: Fractional a => a -> a -> a です。
length :: [a] -> Int
は、IntがFractionalのインスタンスではありません
fromIntegralを使うなどして型を合わせましょう
どこの学生さんだろう。ひどい教え方されてんなあ。
0143デフォルトの名無しさん
2013/04/06(土) 19:52:36.23あるアルゴリズムがあって
有限個のデータ(具体的には関数記号)に適切な順序構造を与えたときに停止して適切な結果を返してくれるのですが
その順序構造を探すためにプログラム中で順序を動的に変えたいです
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
0144デフォルトの名無しさん
2013/04/06(土) 20:00:36.82これじゃだめなの?
http://www.wdic.org/w/TECH/%E3%82%B7%E3%83%A5%E3%83%AF%E3%83%AB%E3%83%84%E5%A4%89%E6%8F%9B
0145デフォルトの名無しさん
2013/04/06(土) 20:07:42.07データと、それに付随する優先順位をペアにして持つ、
という単純な方法ではやりにくい、あるいはマズイですか?
0146デフォルトの名無しさん
2013/04/06(土) 20:39:09.44data Ordered a = Ordered [a] a -- [a]は優先順位を表現したリスト
ということですね?
同じく今はこれで行こうと思っています
0147デフォルトの名無しさん
2013/04/06(土) 20:46:35.79いや、本当は違う事を言ったんだけど・・・
私は Data.IntMap a でキーを優先順位に、
a 型をそのデータにしたものを想像してました。
>>143 の状況がよく分からなかったので、
たぶん私トンチンカンな事言ってます。
0148デフォルトの名無しさん
2013/04/06(土) 20:48:13.510149デフォルトの名無しさん
2013/04/06(土) 21:00:44.62ありがとうございます。出来ました。
つまり、除算の時はFractionalクラスじゃなきゃダメでその為に適切な数値に解釈してあげる必要があると。
0150デフォルトの名無しさん
2013/04/06(土) 21:42:36.920151デフォルトの名無しさん
2013/04/06(土) 22:50:15.97すみません。どういうコードになったのか、差し支えなかったら、
もう一度載せてください。
0152デフォルトの名無しさん
2013/04/06(土) 23:30:28.79ave :: [Float] -> Float
ave (x:xs) = (sum (x:xs)) / (fromIntegral (length (x:xs))) -- length -> Int, which is not fractional
このようになりました
0153デフォルトの名無しさん
2013/04/06(土) 23:53:23.110154デフォルトの名無しさん
2013/04/07(日) 00:11:38.23ちゃんと、思った通りに動いているか、確認した?
特にvalueの方
0155デフォルトの名無しさん
2013/04/07(日) 01:03:08.630156デフォルトの名無しさん
2013/04/07(日) 06:40:05.31なんとか動いてます。
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
0157デフォルトの名無しさん
2013/04/07(日) 07:49:49.17いつの間にか全然違うではないかw
0158デフォルトの名無しさん
2013/04/07(日) 09:11:21.820159デフォルトの名無しさん
2013/04/07(日) 10:55:35.290160デフォルトの名無しさん
2013/04/07(日) 11:07:50.45初心者ほど最強言語とか訳分からん理由で選ぶからな
挫折する姿が目に浮かぶようだ
0161デフォルトの名無しさん
2013/04/07(日) 11:10:10.27ありがとうございます。
0162デフォルトの名無しさん
2013/04/07(日) 11:24:27.03はい。それが王道となりつつあります。
0163デフォルトの名無しさん
2013/04/07(日) 11:33:13.630164デフォルトの名無しさん
2013/04/07(日) 11:33:36.63正直、あんなもの勉強するくらいなら最初からHaskellでリスト処理を学ぶ方が良い。
0165デフォルトの名無しさん
2013/04/07(日) 11:42:44.91そこは勘弁。
>>158
華麗なコード書きたいけど、どうしても無理。
ラムダに行く前にまだまだ練習が必要だと思う。
0166デフォルトの名無しさん
2013/04/07(日) 11:55:33.26まあ、C の言語仕様はシンプルだからな
はっきり言って、知的好奇心をそそるものではないよね
C++ の template は、そこそこ面白いんだけど、実践言語であれは無いだろとも思う
0167デフォルトの名無しさん
2013/04/07(日) 11:59:35.78Cでメモリリークを潰して廻るより苦痛だけどな
まあトイプログラムで遊んでるレベルじゃ関係ないけど
0168デフォルトの名無しさん
2013/04/07(日) 12:01:03.15ave xs = sum xs / fromIntegral (length xs)
0169デフォルトの名無しさん
2013/04/07(日) 12:08:22.390170デフォルトの名無しさん
2013/04/07(日) 12:11:14.14残りリスト要素の平均じゃなかったの。
0171168だけど日本人じゃないから変な日本語は許してな
2013/04/07(日) 12:19:59.77そうだったな、すまん
value xs = zipWith (/) xs (map ave (tails xs))
0172デフォルトの名無しさん
2013/04/07(日) 14:01:10.42>C言語の某定番教科書はポインタと構造体の解説が延々と続く。
どれ?
0173デフォルトの名無しさん
2013/04/07(日) 14:10:23.37俺はよりコンピュータの本質に近い方を選ぶ
0174デフォルトの名無しさん
2013/04/07(日) 14:14:32.28コンピュータの本質に近く無いと申すか
確かにそうですね
0175デフォルトの名無しさん
2013/04/07(日) 15:17:04.03そのコンピュータというのがハードの事なら、より近いのはC言語だな
もし計算を意味するのならHaskellの方が近いな
0176デフォルトの名無しさん
2013/04/07(日) 15:42:26.12たんなる理論的なからくりだろう>再帰
0177デフォルトの名無しさん
2013/04/07(日) 17:56:41.74チューリングマシンとラムダ計算のどちらが本質か、だなんて誰にも決められない。
0178デフォルトの名無しさん
2013/04/07(日) 18:15:01.360179デフォルトの名無しさん
2013/04/07(日) 18:44:06.430180デフォルトの名無しさん
2013/04/07(日) 18:51:44.96そもそも自然数が再帰の構造なんだから
0181デフォルトの名無しさん
2013/04/07(日) 19:11:30.890182デフォルトの名無しさん
2013/04/07(日) 19:32:57.56自動定理証明に応用できる
0183デフォルトの名無しさん
2013/04/07(日) 19:46:45.410184デフォルトの名無しさん
2013/04/07(日) 20:01:24.84最近流行ってるのは抽象による形式手法だけど、C言語ベースでの形式手法も研究されてるし。
0185デフォルトの名無しさん
2013/04/07(日) 20:27:08.19実践では抽象しないと開発が間に合わないんだよね。
0186デフォルトの名無しさん
2013/04/07(日) 20:52:52.110187デフォルトの名無しさん
2013/04/07(日) 20:55:39.32マジで?!
0188デフォルトの名無しさん
2013/04/07(日) 21:39:37.770189デフォルトの名無しさん
2013/04/08(月) 02:21:59.090190デフォルトの名無しさん
2013/04/08(月) 04:39:05.59本物の形式手法は抽象度の高い仕様から
Adaサブセットやアセンブリまでをカバーして
それぞれのレベルでテストや証明をした上で
相互にトレーサブルにする。
つまり、どっちも本質。
0191デフォルトの名無しさん
2013/04/08(月) 06:43:16.27C/C++等の抽象度が低い、というのが今ひとつ理解できないのだが、この場合の抽象度とは何を意味するのだろうか?
言い換えるとC/C++でも抽象度が高い記述があるのだろうか?
抽象度が高い=ての込んだ複雑な「からくり」がついただけ、という史観はそろそろカビが生えてきたようだ‥‥
0192デフォルトの名無しさん
2013/04/08(月) 11:15:43.10副作用のない関数と式の組み合わせで書けるものはそう書いたほうが良いね。
0193デフォルトの名無しさん
2013/04/08(月) 19:47:50.78fortranの設計者(バッカス先生)はチューリング賞講演で、
fortranの中で意味があるのは代入文の右辺だけだと言ってた。
0194デフォルトの名無しさん
2013/04/08(月) 22:31:21.020195デフォルトの名無しさん
2013/04/08(月) 22:34:50.48計算モデルにはレイヤなんて概念は存在しないw
0196デフォルトの名無しさん
2013/04/08(月) 22:59:54.66実装に実装を重ねてハード寄りの泥臭さから遠ざかったところに高級言語があるんだから
ハードウェアの本質がそこにあるはずがないって話
0197デフォルトの名無しさん
2013/04/08(月) 23:06:44.08ゲーデル数が数学の定理に比べて泥臭くないのと同じ
むしろ洗練されている
0198デフォルトの名無しさん
2013/04/08(月) 23:17:35.81そういうのが洗練されてるって言うつもりでいる?
0199デフォルトの名無しさん
2013/04/08(月) 23:21:24.73高水準言語で見ればnop並んでる
最も低水準の機械語で見ればコードの端から端まで2進数というたった一種類に抽象化された数が並んでるだけ
0200デフォルトの名無しさん
2013/04/08(月) 23:25:00.570201デフォルトの名無しさん
2013/04/08(月) 23:47:58.930202デフォルトの名無しさん
2013/04/09(火) 01:01:33.080203デフォルトの名無しさん
2013/04/09(火) 01:17:36.250204デフォルトの名無しさん
2013/04/09(火) 01:25:49.730205デフォルトの名無しさん
2013/04/09(火) 01:37:28.97最強の俺言語として生まれたハングルを指して言ってるならあれだけど
0206デフォルトの名無しさん
2013/04/09(火) 02:12:20.33語の列を元と同じ動作をする範囲で抽象化して再び提示しても元の語の列になるという意味で
語の列が抽象化という作用により不動になるプログラミング言語を完成させたとき、その言語は機械語と同型である
0207デフォルトの名無しさん
2013/04/09(火) 02:20:52.25日本語で書いてあるはずなのに、意味が分からないんだ
0208デフォルトの名無しさん
2013/04/09(火) 02:28:04.88そのプログラミング言語は機械語である
ゆえに機械語こそが最高に抽象化された言語である
0209デフォルトの名無しさん
2013/04/09(火) 02:40:44.15実際、機械語の操作的意味論の美しさといったら…
0210デフォルトの名無しさん
2013/04/09(火) 06:00:31.600211デフォルトの名無しさん
2013/04/09(火) 07:09:20.20はっきり言って、なにを言っているのかわからない。
0212デフォルトの名無しさん
2013/04/09(火) 22:33:26.370213デフォルトの名無しさん
2013/04/09(火) 22:59:28.840214デフォルトの名無しさん
2013/04/10(水) 00:12:02.180215デフォルトの名無しさん
2013/04/10(水) 00:15:45.44匿名とはいえ、失礼いたしました。(_O_)
0216デフォルトの名無しさん
2013/04/10(水) 00:29:33.56何とかしてくれよ
0217デフォルトの名無しさん
2013/04/10(水) 01:21:41.46言葉遊び=プログラミング
0218デフォルトの名無しさん
2013/04/12(金) 00:00:06.730219デフォルトの名無しさん
2013/04/12(金) 00:19:25.55無いよね?
0220デフォルトの名無しさん
2013/04/12(金) 05:05:31.67Monad ⊂ Functor みたいにサブクラス宣言があればいいのに
0221デフォルトの名無しさん
2013/04/12(金) 07:01:04.050222デフォルトの名無しさん
2013/04/12(金) 10:08:01.28なんだそれふざけてるの
0223デフォルトの名無しさん
2013/04/12(金) 22:34:40.22むしろ有害
0224デフォルトの名無しさん
2013/04/12(金) 23:37:48.820225デフォルトの名無しさん
2013/04/13(土) 01:12:51.31$ \g -> g . g $ "b"; return $ x++y; }
"aabzzaabzzbzz"
色々実験してるけどContモナドが継続の意味も含めさっぱり分からない…
0226デフォルトの名無しさん
2013/04/13(土) 10:13:06.61これのHaskellの部分は見た?
0227デフォルトの名無しさん
2013/04/13(土) 12:11:28.44良さそうなpdfをリンクから見つけたので読んできます
http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-j.pdf
0228デフォルトの名無しさん
2013/04/13(土) 18:46:31.540229デフォルトの名無しさん
2013/04/13(土) 18:50:38.000230デフォルトの名無しさん
2013/04/13(土) 20:26:57.25リワハのライブラリって何?
0231デフォルトの名無しさん
2013/04/13(土) 20:44:44.280232デフォルトの名無しさん
2013/04/13(土) 22:20:41.840233デフォルトの名無しさん
2013/04/13(土) 22:23:49.48まあ接続詞が1つしかない文章にこれ以上突っ込んでも仕方ない気がするけど
0234デフォルトの名無しさん
2013/04/14(日) 15:38:54.380235デフォルトの名無しさん
2013/04/14(日) 17:49:32.350236デフォルトの名無しさん
2013/04/14(日) 18:38:09.36く/・ ⌒ヽ
| 3 (∪ ̄]
く、・ (∩ ̄]
0237デフォルトの名無しさん
2013/04/14(日) 22:23:52.552ちんこ1金玉だな
0238デフォルトの名無しさん
2013/04/15(月) 15:04:25.83く/・ ⌒ヽ
| 3 (∪ ̄]
く、・ (∩ ̄]
0239デフォルトの名無しさん
2013/04/17(水) 02:08:13.62Prelude> 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)
0240デフォルトの名無しさん
2013/04/17(水) 13:01:01.94ったりめえだとしか言い様がないんですが
あと、
f = (,,)
0241デフォルトの名無しさん
2013/04/17(水) 23:21:25.370242デフォルトの名無しさん
2013/04/17(水) 23:26:23.890243デフォルトの名無しさん
2013/04/17(水) 23:30:06.01rev :: [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の働きがいまいちわからない。
0244デフォルトの名無しさん
2013/04/17(水) 23:40:33.410245デフォルトの名無しさん
2013/04/17(水) 23:58:13.130246デフォルトの名無しさん
2013/04/18(木) 22:10:36.220247デフォルトの名無しさん
2013/04/18(木) 22:20:10.590248デフォルトの名無しさん
2013/04/19(金) 04:47:17.130249デフォルトの名無しさん
2013/04/19(金) 05:17:43.69haskellの人は賢くてポイントフリーや既存の関数を使いまわすのが得意な人が多いせいか、
他人のコードはperlのワンライナーに似た難読性がある。
0250デフォルトの名無しさん
2013/04/19(金) 20:24:23.77残りは自分自身に再帰、みたいな構造にしたほうがいいよ、という仕掛け。
でも慣れるまでは気にせずLispやMLでやるみたいに補助変数に溜め込むコードを
書いてればいいんじゃないかと思うけど。
0251デフォルトの名無しさん
2013/04/19(金) 20:38:58.170252デフォルトの名無しさん
2013/04/19(金) 21:12:55.900253デフォルトの名無しさん
2013/04/20(土) 06:56:48.030254デフォルトの名無しさん
2013/04/23(火) 04:52:34.040255デフォルトの名無しさん
2013/04/23(火) 21:59:42.010256デフォルトの名無しさん
2013/04/24(水) 01:15:26.740257デフォルトの名無しさん
2013/04/24(水) 04:51:10.380258デフォルトの名無しさん
2013/04/25(木) 02:09:17.880259デフォルトの名無しさん
2013/04/25(木) 04:36:30.68HaswellでTSX実装されたらソフトウェアトランザクショナルメモリは要らん子になるの?
0260デフォルトの名無しさん
2013/04/25(木) 09:44:26.66手始めにSTMに組み込まれるんじゃね?
0261デフォルトの名無しさん
2013/04/25(木) 10:17:02.42http://csl.stanford.edu/~christos/publications/2007.tm_tutorial.pact.pdf
http://software.intel.com/en-us/articles/intel-c-stm-compiler-prototype-edition
0262デフォルトの名無しさん
2013/04/25(木) 10:41:53.81TSXでSTMも速くなりますけど?
0263デフォルトの名無しさん
2013/04/25(木) 11:23:46.58予定は未定で予定ですらないのは当分実現しないって事だ
0264デフォルトの名無しさん
2013/04/28(日) 16:37:54.930265デフォルトの名無しさん
2013/04/28(日) 17:53:42.26そんなの待ってても来ないよ
自分で探せ
探す気がないんなら、これでも解読してろ
Wormholes: Introducing Effects to FRP
http://haskell.cs.yale.edu/?post_type=publication&p=802
0266デフォルトの名無しさん
2013/04/28(日) 20:32:07.10http://hackage.haskell.org/trac/summer-of-code/report/1
0267デフォルトの名無しさん
2013/04/28(日) 21:01:43.48アイデア閃いだけど実装面倒いからお前らやってくんない?
あ、でも閃いたのは俺だから、そこ忘れずに
ってやつか
0268デフォルトの名無しさん
2013/04/28(日) 21:06:35.550269デフォルトの名無しさん
2013/04/28(日) 21:16:01.960270デフォルトの名無しさん
2013/04/28(日) 21:19:05.430271デフォルトの名無しさん
2013/04/28(日) 22:27:14.61未だに Arrow がよく分からないのです。
再帰を表現するために ArrowLoop クラスがあるそうなのですが、
具体的にはどのようにして再帰を作るのでしょうか。
例えば階乗を計算する Int -> Int 型の関数を loop 関数を使って作るとしたら、
どのような式になるでしょうか。
0272デフォルトの名無しさん
2013/04/29(月) 07:47:17.94>再帰を表現するために 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))
0273デフォルトの名無しさん
2013/04/29(月) 11:52:07.16> 再帰というより、ループのある回路を実現する
それが主なんですか。
私が勉強して感じたところでは、Arrow というのは Monad と同様に
「計算」というものを抽象化して捉える見方のひとつ、こちらが本質だと思ってました。
ループというのは、再帰でループも表現できる、という感じで二次的なもの、だと。
(直感では Haskell にループという概念は似合わないような気がしてならないのですが)
> それは例題がおかしい。やろうとしてることがArrowと関係ない
私は何か重大な思い違いをしているっぽいので、
今のうちに頭をリセットして勉強しなおしてみます。
ありがとうございました。
0274デフォルトの名無しさん
2013/04/29(月) 12:18:35.83コンパイラ書くなら パターンマッチがある ocaml, f#, scala, haskellだよね、と思って検討中なのですが
haskellで書くのはヤメテおいたほうがいいでしょうかね?
0275デフォルトの名無しさん
2013/04/29(月) 13:07:21.90> haskellで書くのはヤメテおいたほうがいいでしょうかね?
そのように思ったのは、何か不安材料でもあったから?
ghc だって Haskell で書かれているから、理論的にはなんの問題も無い。
あとは慣れとか、コンパイラ作成の参考資料の充実さの問題だと思うよ。
その点で言えば、挙げられた4言語は資料あまりないね。
どれも似たりよったりだ。
0276デフォルトの名無しさん
2013/04/29(月) 13:17:20.25I/Oの形見が狭そうなのは避けるのが無難かな、と思いまして
0277デフォルトの名無しさん
2013/04/29(月) 14:09:23.25Haskellをメインで使って楽しんでいる立場の俺には、
IOの形見が狭いなどとは全く感じられないのだがな。
そもそもだ、コンパイラにおいてIOが必要なのはどこだ?
外部からコンパイルするソースや設定ファイルを読み取る部分と、
コンパイルされたオブジェクトコードを外部に出力する部分、
全体の処理のうちこの両端の部分しか思いつかない。
不特定多数が気軽にいじれるようにしたいのは、
IOではなく、その間の処理の部分ではないのか?
0278デフォルトの名無しさん
2013/04/29(月) 15:46:36.55Haskellをメインで使ってるってパフォーマンスは満足いく?
haskellで使ってないはずのメモリ使用量が徐々に増えていかないサーバって書ける?
モナディウスもメモリ使用量の増加が止まらないわけだけど
0279デフォルトの名無しさん
2013/04/29(月) 16:26:10.47今はmonaris
0280デフォルトの名無しさん
2013/04/29(月) 16:31:25.74なにか勘違いをしている感じを受けるのだが・・・
別に仕事でメイン使っているわけではなく、
趣味で幾種類かの言語でプログラムを楽しんでいて、
その中でHaskellが一番面白いからメインで使っているだけだよ。
> Haskellをメインで使ってるってパフォーマンスは満足いく?
はじめ満足いかなくて、時間かけて根気よく改善していったことは度々ある。
その時の自分の力ではどうにもできないレベルまでいったと感じたら、
「今回はけっこう勉強になったな」と前向きに考えて、
そのテーマでは活動停止、あるいは休止する。
> haskellで使ってないはずのメモリ使用量が徐々に増えていかないサーバって書ける?
知らん、サーバーは興味ない。
サーバー上で動くWebアプリのフレームワークには多少興味あるが。
> モナディウスもメモリ使用量の増加が止まらないわけだけど
んなこと言われてもな。
モナディウスはなぜメモリ使用量の増加が止まらないんだ?
現時点で分かっている範囲で原因をリストアップしてみて、
その原因に関係有りそうな技術資料を ACM なんかで漁ってみてはどうだ。
あと、ゲームの実装なら、最新のFRPライブラリを使ってみてはどうだ。
『FRPの話』(http://maoe.hatenadiary.jp/entry/2012/12/24/011414)
ここの話だと、最近のはリークもかなら改善されているらしい。
0281デフォルトの名無しさん
2013/04/29(月) 17:48:17.79横からすまん
>Haskellをメインで使ってるってパフォーマンスは満足いく?
それなりに。俺の経験だと、Cと張り合おうと思うと苦しい
(やってできないことはないと思うけど)
Cより2〜3倍遅い速度なら、ちょっとパフォーマンスに気を付けるだけで達成できることが多い
>haskellで使ってないはずのメモリ使用量が徐々に増えていかないサーバって書ける?
もちろん
>モナディウスもメモリ使用量の増加が止まらないわけだけど
それはバグ。Haskellは遅延評価のせいでうっかりspace leakを仕込みやすい
直せないspace leakはない。もちろん直すのも手間がかかるのでトレードオフだけど
0282デフォルトの名無しさん
2013/04/29(月) 17:49:45.27原因不明のspace leakを直すのならまずプロファイルを取るのがいいよ
頭で考えたり論文を漁ったりしても滅多に役に立たない
0283デフォルトの名無しさん
2013/04/29(月) 17:52:05.170284デフォルトの名無しさん
2013/04/29(月) 17:57:21.84http://itpro.nikkeibp.co.jp/article/COLUMN/20070403/267180/?ST=develop
(ライフラリの話は古くなってるけど)
0285デフォルトの名無しさん
2013/04/29(月) 18:24:19.730286デフォルトの名無しさん
2013/04/29(月) 18:42:39.46すまん、俺(>>280)の
> モナディウスはなぜメモリ使用量の増加が止まらないんだ?
これは、自分で理由を調べてみてくれと >>278 に促す意味なのだが・・・
そもそも、使ってないはずのメモリ使用量が徐々に増えていかないサーバは書けるかどうか、
という質問に添えられているからには、モナディウスでは増えていくのだが、
増えていかないようにはできるのか、それはサーバー作りでもできるのか、という問だろ。
だったら、まずモナディウスではなぜ増えるのかを調べるのが先だろ。
(そして、その原因と解決はサーバー作りに関係するのかを調べる)
で、それは他人に任せず、まずは自分で調べるべきだと思うぞ。
他人の疑問じゃなく自分の疑問なんだから。
0287デフォルトの名無しさん
2013/04/29(月) 23:12:35.76>だったら、まずモナディウスではなぜ増えるのかを調べるのが先だろ。
その通りだけど、
>現時点で分かっている範囲で原因をリストアップしてみて、
>その原因に関係有りそうな技術資料を ACM なんかで漁ってみてはどうだ。
こういうアドバイスが的外れだと言いたかった
0288デフォルトの名無しさん
2013/04/30(火) 02:33:50.97286がハスケルでどの程度の事ができるのか知りたいだけの質問じゃないのか?
0289デフォルトの名無しさん
2013/04/30(火) 04:10:48.360290デフォルトの名無しさん
2013/04/30(火) 07:01:53.22俺(287,282)は質問してないよ
0291デフォルトの名無しさん
2013/04/30(火) 07:10:01.48的外れだと分かるのなら、的は何なのか具体的に説明してみてくれ。
0292デフォルトの名無しさん
2013/04/30(火) 07:53:27.56>>282に書いた
0293デフォルトの名無しさん
2013/04/30(火) 12:43:09.95space leakが起こる仕組みじゃないの?
モナディウス「も」と言ってるわけだし、モナディウスを例に出したのは、
そう言えば確かモナディウスもスペースリーク起こしてたよね、ってニュアンスじゃね
0294デフォルトの名無しさん
2013/04/30(火) 16:47:54.89実行開始してから結果が出るまでの時間
プログラムが出来上がるまでの時間
役に立つか確信の持てないものを創る場合は後者を重視し
確信が持てたら前者を重視する
確信の度合いの変化に応じて最適化に注ぐ情熱の量を切り替える
この切り替えはときに道具を変えることも含まれる
確信を持つ主体はなにか?
プログラマか?所属組織か?社会か?
そして俺は何を言いたいのか?
0295デフォルトの名無しさん
2013/04/30(火) 16:55:13.010296デフォルトの名無しさん
2013/04/30(火) 20:46:35.130297デフォルトの名無しさん
2013/04/30(火) 20:58:19.17concatを定義を使ってある関数を作ろうとしたんだけどエラー出てワケワカメ。たすけて
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)
0298デフォルトの名無しさん
2013/04/30(火) 22:28:17.39> (x:xs) -> concatenate x ++ concatenate' (concatenate xs)
(x:xs) -> concatenate x ++ concatenate' xs
じゃない?
0299デフォルトの名無しさん
2013/04/30(火) 22:36:35.56ありがとう!何でconcatenate関数を使ったんだろう?
気を付けます。
0300デフォルトの名無しさん
2013/04/30(火) 23:06:19.800301デフォルトの名無しさん
2013/04/30(火) 23:13:44.130302デフォルトの名無しさん
2013/05/01(水) 00:52:43.770303デフォルトの名無しさん
2013/05/01(水) 01:06:04.180304デフォルトの名無しさん
2013/05/01(水) 07:37:17.47「使えないのが不満」に対して何も答えてない
0305デフォルトの名無しさん
2013/05/01(水) 07:43:35.670306デフォルトの名無しさん
2013/05/01(水) 08:06:37.120307デフォルトの名無しさん
2013/05/01(水) 08:06:39.170308デフォルトの名無しさん
2013/05/01(水) 09:49:33.39おれは演算子間のスペースは空けとかないと不安でしかたない
0309デフォルトの名無しさん
2013/05/01(水) 10:28:27.040310デフォルトの名無しさん
2013/05/01(水) 10:38:05.95do-something
doSomething
do_something
明らかにハイフンが自然。異論は認める。
0311デフォルトの名無しさん
2013/05/01(水) 11:12:22.76スペースの代わりだと思っていた。
0312デフォルトの名無しさん
2013/05/01(水) 11:13:05.38x : xs はマヌケ
0313デフォルトの名無しさん
2013/05/01(水) 11:44:05.660314デフォルトの名無しさん
2013/05/01(水) 11:49:43.940315デフォルトの名無しさん
2013/05/01(水) 12:39:02.280316デフォルトの名無しさん
2013/05/01(水) 12:45:38.66単項演算子と二項演算子のどちらの可能性もあって
しかもカリー化もあるんだから
0317デフォルトの名無しさん
2013/05/01(水) 13:18:34.08一番エレガントな解決法だけど、HMI的には微妙。
0318デフォルトの名無しさん
2013/05/01(水) 15:32:07.130319デフォルトの名無しさん
2013/05/01(水) 22:47:38.28おれはスペース空けたい派。x:xs って書くと窮屈。
0320デフォルトの名無しさん
2013/05/01(水) 23:32:01.040321デフォルトの名無しさん
2013/05/02(木) 01:53:20.62うん。
けど海外でdoSomethingの書き方が嫌いな人はdo_something使ってる。
0322デフォルトの名無しさん
2013/05/02(木) 03:11:29.110323デフォルトの名無しさん
2013/05/02(木) 14:18:28.38アンダースコアはスペースの代わり。
記号前後のスペースは必要。バグが極端に減る。入れない奴は自己中の証拠と知れ。
0324デフォルトの名無しさん
2013/05/02(木) 14:43:22.080325デフォルトの名無しさん
2013/05/02(木) 20:51:09.46ぱっと見、x:xsとxxsの違いがわからない
スペースあけないのはバカかゴミだけ
0326デフォルトの名無しさん
2013/05/02(木) 20:54:24.050327デフォルトの名無しさん
2013/05/02(木) 21:04:51.46実際のところ、ぱっと見x:xsとxxsの違いが分からないなんて事は無いな。
(見やすい等幅フォント使ってるし)
でも、言いたいことは分かる。
Haskellで使う全ての記号についてというのは言い過ぎだが、
記号と識別の間を開けた方が見やすい場合は少なくないね。
0328デフォルトの名無しさん
2013/05/02(木) 21:06:42.600329デフォルトの名無しさん
2013/05/02(木) 21:19:50.10x:xsはもうひと固まりとして認識できるレベルで頻出だから空けない
0330デフォルトの名無しさん
2013/05/02(木) 21:29:26.23良いこと言うね、同意。
0331デフォルトの名無しさん
2013/05/02(木) 21:39:45.91ひどい(ひどいよぉ)
0332デフォルトの名無しさん
2013/05/02(木) 22:07:59.07>>326 は皮肉だろ
標準ライブラリをざっと見てみると、パターンとして現れる場合は (x:xs) とくっつけて、
式として現れる場合は x : xs と離している傾向があるような気がする。
0333デフォルトの名無しさん
2013/05/02(木) 22:09:37.180334デフォルトの名無しさん
2013/05/02(木) 22:15:58.44>>331 はアニソンの歌詞だろ
0335デフォルトの名無しさん
2013/05/02(木) 22:25:14.18すまん、それは知らなかった
0336デフォルトの名無しさん
2013/05/02(木) 22:45:31.070337デフォルトの名無しさん
2013/05/02(木) 23:06:18.10↑キーが押されたら押され続けた時間に応じてキャラが小ジャンプ、大ジャンプするサンプルください
GHC platformのみインストールされた環境で動くもので
画面描画のバックエンドはopengl+glutでお願いします
0338デフォルトの名無しさん
2013/05/03(金) 03:40:50.280339デフォルトの名無しさん
2013/05/03(金) 16:17:19.490340デフォルトの名無しさん
2013/05/03(金) 21:44:20.080341デフォルトの名無しさん
2013/05/05(日) 13:09:09.38uniq :: 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に思えるのですが、
何か見落としているのでしょうか。
0342デフォルトの名無しさん
2013/05/05(日) 13:54:52.700343デフォルトの名無しさん
2013/05/05(日) 13:57:21.20こちらも、ghc 7.6.2 で問題なかった。
0344デフォルトの名無しさん
2013/05/05(日) 14:04:39.23パターンじゃなくて、ガードに問題がある
== と /= ですべての状態をカバーしてると思われてない
uniq :: Eq a => [a] -> [a]
uniq [] = []
uniq [x] = [x]
uniq (x1:xs@(x2:_))
| x1 == x2 = uniq xs
| otherwise = x1 : uniq xs
でok
あるいは /= の実装で otherwise を使えばokかと
0345デフォルトの名無しさん
2013/05/05(日) 14:09:47.420346341
2013/05/05(日) 14:14:24.16確かに==と/=だと、それぞれの演算子の意味を解析しないと
exhaustiveかどうか分からないですからね
/=の実装がotherwiseとおっしゃっているのは、
f x | hoge x = True
| otherwise = false
notF x = not $ f x
のような実装をすればパターンマッチで判定が出来るから、
という事ですか?
0347デフォルトの名無しさん
2013/05/06(月) 00:09:01.320348デフォルトの名無しさん
2013/05/06(月) 16:44:01.16ドキュメント
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フォルダの中に入ってる
0349デフォルトの名無しさん
2013/05/07(火) 00:13:00.710350デフォルトの名無しさん
2013/05/07(火) 16:32:56.45ID:+yPWQW2x0351デフォルトの名無しさん
2013/05/07(火) 17:07:59.90asTypeOf 3 Int16
とかできたらいいのにな
0352デフォルトの名無しさん
2013/05/07(火) 19:35:34.67に書いたパルズ解答ソフトについて。
Haskellに慣れるための習作として作っているけれども。
計算時間は、目標…2秒以内に到達。C++版より多少遅い程度まで改善させた。
ソースコードサイズ(未参照コード含む)
C++版 167kB
Haskell版 54kB(3月中旬版)
Haskell版 68kB(5月前半版)
計算時間
C++版 1.77秒
Haskell版 38.2秒(3月中旬版)
Haskell版 1.93秒(5月前半版)
プロファイル機能は役にたった。
予想外に演算負荷を使っていたところがあった。
これで、Haskell に慣れたと言っていいかな。
次に本番…ゲーム作成に取り掛かりたいと思う。
0353デフォルトの名無しさん
2013/05/07(火) 23:09:48.16バイナリパッケージをダウンロードするだけだよね
もしかして他に何か必要なファイルとか他にあるの?
0354デフォルトの名無しさん
2013/05/07(火) 23:20:46.580355デフォルトの名無しさん
2013/05/07(火) 23:31:46.79もう一回ダウンロードしてみる
0356デフォルトの名無しさん
2013/05/08(水) 00:25:49.79単純にGHCをインストールするよりHaskell Platformをインストールしろと公式が推奨してるだろ
というかそもそもGHC.exeを開くってなんだ? 何がしたいんだ? 訳がわからんぞ
0357デフォルトの名無しさん
2013/05/08(水) 00:42:38.56それならだめだ
0358デフォルトの名無しさん
2013/05/08(水) 21:33:24.03initials :: 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のスコープ内だと思うのですが...
0359デフォルトの名無しさん
2013/05/08(水) 21:39:24.65だろ
0360デフォルトの名無しさん
2013/05/08(水) 21:40:42.800361デフォルトの名無しさん
2013/05/08(水) 21:43:45.020362デフォルトの名無しさん
2013/05/09(木) 00:32:12.14高度な変態だな
0363デフォルトの名無しさん
2013/05/09(木) 00:34:57.850364デフォルトの名無しさん
2013/05/09(木) 00:47:11.910365デフォルトの名無しさん
2013/05/09(木) 01:17:09.85てかまず一流のメモリリーカーになりそう
0366デフォルトの名無しさん
2013/05/09(木) 01:35:45.700367デフォルトの名無しさん
2013/05/09(木) 01:37:05.140368デフォルトの名無しさん
2013/05/09(木) 02:00:46.110369デフォルトの名無しさん
2013/05/09(木) 02:03:45.980370デフォルトの名無しさん
2013/05/09(木) 02:09:37.37例えばHaskellとか
0371デフォルトの名無しさん
2013/05/09(木) 02:27:59.490372デフォルトの名無しさん
2013/05/09(木) 07:32:28.680373デフォルトの名無しさん
2013/05/09(木) 18:01:33.24圏Xのクライスリ圏X_Tは
互いに圏論的双対?
0374デフォルトの名無しさん
2013/05/09(木) 21:09:13.300375デフォルトの名無しさん
2013/05/09(木) 21:53:45.440376デフォルトの名無しさん
2013/05/09(木) 23:06:49.17優れたアイデアをスマートに表現したいだけだ
0377デフォルトの名無しさん
2013/05/11(土) 06:13:51.100378デフォルトの名無しさん
2013/05/11(土) 07:05:30.730379デフォルトの名無しさん
2013/05/11(土) 07:20:05.70機械語で書くのが一番スマートな表現だと思うぞ。
0380デフォルトの名無しさん
2013/05/11(土) 11:00:15.16一発完動的な意味でかな?
0381377
2013/05/11(土) 13:44:31.86型システムに頼るのはダメな奴。
あと、エディタとかコンパイラ使う奴もな。
0382デフォルトの名無しさん
2013/05/11(土) 14:16:54.35どうせならコンピュータも使うなよなw
0383デフォルトの名無しさん
2013/05/11(土) 15:17:47.21インダイレクトアドレッシングモードは決して使わずに
プログラム自己書き換えとダイレクトアドレッシングモードで対応してるのかよ
機械語命令セットにインダイレクトアドレッシングモードを導入するのはある種の抽象化なんだよ
Haskellの場合はその抽象化の度合いが常人には理解できないレベルまで昇華してるだけ
0384デフォルトの名無しさん
2013/05/11(土) 15:49:02.150385デフォルトの名無しさん
2013/05/11(土) 16:24:07.74ジャンプ命令のオペランド自己書き換えで戻るんだよな。
0386デフォルトの名無しさん
2013/05/12(日) 04:32:12.510387デフォルトの名無しさん
2013/05/12(日) 06:35:51.440388デフォルトの名無しさん
2013/05/12(日) 07:10:13.64ところが、不思議なほど、型がチェックして問題を弾いてくれる。めんどくさい、と最初は思ってたけど、慣れると実にいいね。
少なくとも型に関しては人間だと見逃す矛盾を確実に防げる道具、としてはオレは型システムに頼ってる。
>>387
コアファイルはちゃんと調べるのか?
0389デフォルトの名無しさん
2013/05/12(日) 07:20:44.91強型に懐疑的だったことなんてなくて
最初から強型を使っている信者さんだよ
0390388
2013/05/12(日) 07:37:44.59えー、おれのよく使う言語ってperlとCommon Lisp なんだけど。型信者じゃないよ。
それに型検査がめんどくさいなぁ、とは思ってる。うまく言えないが、自分がプログラム書いてるというより、書かされてるような感じはある。
0391デフォルトの名無しさん
2013/05/12(日) 09:06:06.100392デフォルトの名無しさん
2013/05/12(日) 10:14:17.830393デフォルトの名無しさん
2013/05/12(日) 13:59:44.860394デフォルトの名無しさん
2013/05/12(日) 14:12:31.390395デフォルトの名無しさん
2013/05/12(日) 16:13:42.22役割や使い所などが詳しく書かれたWebページはありますか。
英語でも構いません。
ちなみに「本物のプログラマはHaskellを使う」の説明は難しくて理解出来ませんでした。
http://itpro.nikkeibp.co.jp/article/COLUMN/20080603/305833/?P=2
型の一番外側や内側という表現がまず分かりません。
例えば f :: a -> b -> c という関数の場合、a は外側でしょうか、c は内側でしょうか。
また、applyTupleのfにおける多相性がapplyTuple自身に成り立つという表現も分かりませんでした。
分からない部分はとりあえず無視して読み進めましたが、分からない部分が次々と増えていくだけでした。
0396デフォルトの名無しさん
2013/05/12(日) 18:06:52.47f :: a -> b -> c
と書いたら、
f :: forall a b c. (a -> b -> c)
という意味になる。つまりforallが型全体にかかる。これが「一番外側」の意味
これ以外の場所にforallが必要なら、明示しないといけない。例えば、
f :: forall a c. (a -> (forall b. b) -> c)
0397デフォルトの名無しさん
2013/05/12(日) 18:46:17.88すいません、違いが分かりません。
f :: forall a b c. (a -> b -> c)
f :: forall a c. (a -> (forall b. b) -> c)
前者では認められる定義(関数の内容)が、後者では認められない定義やその逆など、
具体例を出していただけると嬉しいです。
0398デフォルトの名無しさん
2013/05/12(日) 20:12:31.15このばあい、どっちにしてもまともな定義は与えられないから、
使う側で比較した方が分かりやすいと思う
(f True True)は、前者ならOK、後者なら型エラー(Trueはforall b.bでないので)
(f True undefined)なら、前者でも後者でもOK
0399デフォルトの名無しさん
2013/05/12(日) 20:34:45.73せっかく例を説明していただいたのに、申し訳ないです。
よく分かりません。
> Trueはforall b.bでないので
前者の関数も b について forall なのに何故? と疑問に思ってしまいます。
(b だけではないのですが)
forall は全称量化で、全ての〜について、という意味ですよね。
後者の関数で、全ての〜について、と言っているのは a も b も(c も) だと思うのですが、
なぜ a に対する「全ての〜について」の「全て」の中には True が含まれていて、
b に対する「全ての〜について」の「全て」の中には True が含まれないのでしょうか。
0400デフォルトの名無しさん
2013/05/12(日) 21:00:57.37(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も)
0401デフォルトの名無しさん
2013/05/12(日) 21:37:10.13ID:FOfpj64p!f :: (Num a) => a -> a -> a
f x y = sqrt (fromIntegral (x +y))
でNumでもEqでもダメ。
0402デフォルトの名無しさん
2013/05/12(日) 21:54:37.510403デフォルトの名無しさん
2013/05/13(月) 06:09:44.22f :: (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 までは決して特定していないということを……」
カイジ「……な!? て、てめぇ! 汚ねぇぞ! 同じことじゃあねえか!」
利根川「浅い。……浅いなぁ、カイジ君。
君はこのゲームのルールをまるでわかっちゃあいない」
カイジ「」ざわ……ざわ……
0404デフォルトの名無しさん
2013/05/13(月) 07:23:29.20すいません、これでも、まるでわかっちゃいない状態です。
> 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も、ということではないかと。
もし私の考えの方が間違っているのなら、私は根本から大きく勘違いをしているかもしれません。
0405デフォルトの名無しさん
2013/05/13(月) 09:15:38.32Haskellって難しいですね・・・
ということになる。
0406デフォルトの名無しさん
2013/05/13(月) 11:50:30.83f 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 の動作の違い。これが何に役立つかは知りません。
0407デフォルトの名無しさん
2013/05/13(月) 16:47:54.87××× a => 〜
A∃a
Num a => 〜
Ord a => 〜
:
こゆこと?
0408デフォルトの名無しさん
2013/05/13(月) 16:53:32.83ではなく寧ろ
∀←自由で な く ち ゃ い け な いという 不 自由
的な?
制限することを制限する的な?
0409デフォルトの名無しさん
2013/05/13(月) 18:02:23.20> 一方 g の場合は、「”どのような関数でも受け取れる関数”、しか受け取りません」という意味。
とても分かりやすい説明で、こんな私でも理解出来ました。
f の forall はこの関数全体に言及していて、
g の forall は第1引数として適用する関数のことのみ言及しているのですね。
これで内側や外側という言い回しも分かり、すっきりしました。
ありがとうございました。
今まで説明してくださった方も、ありがとうございました。
理解出来なくて申し訳なかったです。
0410デフォルトの名無しさん
2013/05/13(月) 18:15:25.51> これが f と g の動作の違い。これが何に役立つかは知りません。
fの方は適用されている文脈によってaが限定されることがある。
gはそれを許さない。
0411デフォルトの名無しさん
2013/05/13(月) 21:08:58.54ID:PrnnR3SJ!Integral もダメなんだ。
Haskellのクラスややこしいな。
ところで、パターンマッチとガードの違いって、パターンマッチはタイプをチェックして、ガードは値をチェックの認識でいいの?
0412デフォルトの名無しさん
2013/05/13(月) 21:40:22.590413デフォルトの名無しさん
2013/05/14(火) 00:03:59.85述語論理で使う∀も同じ意味だと思うが
0414デフォルトの名無しさん
2013/05/14(火) 01:03:52.840415デフォルトの名無しさん
2013/05/14(火) 06:53:54.53ID:XUYxe5VW!ありがと。
0416デフォルトの名無しさん
2013/05/14(火) 07:50:37.25全然違う
0417デフォルトの名無しさん
2013/05/14(火) 22:17:48.75ID:XUYxe5VW!data Hoge = True | False
f :: Int -> Hoge
f x = if (x=2) then True else False
みたいにHogeタイプを確定してくれるものだと思ってた。
0418デフォルトの名無しさん
2013/05/15(水) 00:31:15.320419デフォルトの名無しさん
2013/05/15(水) 00:51:38.29412,416の意見に惑わされるな
他人の意見に惑わされるな
お前がどうするかだ! お前がどう動くかだ!
お前がどうするかだ! お前がどう動くかだ!!
決めるのは誰だ? やるのは誰だ? 行くのは誰だ?
そう お前だ! お前が舵を取れ!
お前が行け! お前が走れ! お前が行くから道になる
前へ 前へ 前へ 前へ ただただひたすら前へ突き進めばいい
わかるか! わかるか! お前が決めろ お前がしっかり舵を取れ
0420デフォルトの名無しさん
2013/05/15(水) 09:48:34.340421デフォルトの名無しさん
2013/05/15(水) 11:06:47.110422デフォルトの名無しさん
2013/05/15(水) 13:17:18.57関数型は理系・知的
という書き込みをみたらバカはなんて思うか
知的に憧れ関数型をやるに1万円
0423デフォルトの名無しさん
2013/05/15(水) 13:34:44.35・本物のプログラマはHaskellを使う
自信が無いプログラマや社会事情を知らない独学者の心のスキをついたキャッチフレーズ
・手続き型言語はオワコン、関数型言語の時代
IT特有の最先端の物を取り入れるという美徳心理をついたこと
・手続き型言語=一般人 関数型言語=変態
人と違うように思われたいという選民意識を釣ったこと
0424デフォルトの名無しさん
2013/05/15(水) 14:13:01.260425デフォルトの名無しさん
2013/05/15(水) 16:47:21.37お前が消えて喜ぶ奴にお前のオールを任せるな
0426デフォルトの名無しさん
2013/05/15(水) 19:57:55.330427デフォルトの名無しさん
2013/05/15(水) 22:24:12.220428デフォルトの名無しさん
2013/05/15(水) 22:44:11.572枚目を参考にしながら
よろしくお願いします
http://i.imgur.com/pqa6Bk4.jpg
http://i.imgur.com/R8FsYBJ.jpg
0429デフォルトの名無しさん
2013/05/15(水) 22:45:03.160430デフォルトの名無しさん
2013/05/16(木) 00:07:18.35パターンマッチは値コンストラクタをマッチさせる。その例だと
f 2 = True
f x = False
みたいに書くのがパターンマッチ
f x | x == 2 = True
| otherwise = False
みたいに引数の性質によって場合分けするのがガード
型を確定どうのは型推論の話だと初学者がマジレスしてみるテスト
0431デフォルトの名無しさん
2013/05/16(木) 03:31:22.700432デフォルトの名無しさん
2013/05/16(木) 04:31:47.770433デフォルトの名無しさん
2013/05/16(木) 07:36:44.340434デフォルトの名無しさん
2013/05/16(木) 07:57:15.87「あって」とは?
0435デフォルトの名無しさん
2013/05/16(木) 08:06:05.350436デフォルトの名無しさん
2013/05/16(木) 11:53:47.98fって値コンストラクターなん?
0437デフォルトの名無しさん
2013/05/16(木) 17:45:58.750438デフォルトの名無しさん
2013/05/16(木) 17:51:46.01comb :: 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
こんな使い分け。
0439デフォルトの名無しさん
2013/05/16(木) 18:24:32.33Prologと関数型言語は持ちつ持たれつ進んでいくのが一番いいよ。
0440デフォルトの名無しさん
2013/05/16(木) 19:12:04.820441デフォルトの名無しさん
2013/05/17(金) 13:00:50.42マチクタビレタ〜
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < Haskell Platform 2013.2.0.0 まだ〜?
\_/⊂ ⊂_ ) \_____________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| 愛媛みかん |/
0442デフォルトの名無しさん
2013/05/19(日) 23:44:52.160443デフォルトの名無しさん
2013/05/20(月) 00:08:19.530444デフォルトの名無しさん
2013/05/20(月) 07:00:45.93Emacs + haskell-mode
0445デフォルトの名無しさん
2013/05/20(月) 07:09:44.51vim + hdevtools
0446デフォルトの名無しさん
2013/05/20(月) 15:32:57.020447デフォルトの名無しさん
2013/05/20(月) 20:17:09.78http://hackage.haskell.org/package/hdevtools
0448デフォルトの名無しさん
2013/05/20(月) 23:00:40.75sublime textがいいかもな
0449デフォルトの名無しさん
2013/05/21(火) 06:55:43.87初耳だな
0450デフォルトの名無しさん
2013/05/21(火) 08:41:53.58何でもかんでもvim使えとかemacs使えという人ならいっぱいいるけどww
0451デフォルトの名無しさん
2013/05/21(火) 09:22:10.27hoogleとかghs-modには大分前から対応してる
0452デフォルトの名無しさん
2013/05/21(火) 09:56:09.260453デフォルトの名無しさん
2013/05/21(火) 12:39:49.89Emacs 自体が使いやすいから、haskell-mode の開発が止まっても、仕方なく使い続けてる。
Haskell で C# や Java みたいに GUI パーツをペタペタ貼ったり、
ロジックをグラフィカルに定義できる様になれば、専用の開発環境に移るかもしれん。
さすがに、そういうのが Emacs で気持よくできるようになるとは思えないからね。
0454デフォルトの名無しさん
2013/05/21(火) 14:03:05.090455デフォルトの名無しさん
2013/05/21(火) 15:11:15.550456デフォルトの名無しさん
2013/05/21(火) 19:27:05.11http://hackage.haskell.org/package/yi-0.6.5.0
最終アップデートが2012年3月
それまでだいたい半年に1回くらいのペースで定期的にアップデートしてきたのに・・・
0457デフォルトの名無しさん
2013/05/21(火) 19:32:41.53俺は Linux だからいいけと、Windows で簡単にインストールできるようにならんと、流行らんな
0458デフォルトの名無しさん
2013/05/30(木) 18:55:48.240459デフォルトの名無しさん
2013/05/30(木) 20:38:48.49ID:WFTkAEQe!0460デフォルトの名無しさん
2013/05/30(木) 21:18:33.96どぞ
0461デフォルトの名無しさん
2013/05/30(木) 21:36:00.73ID:WFTkAEQe!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))
0462デフォルトの名無しさん
2013/05/30(木) 22:02:32.130463デフォルトの名無しさん
2013/05/30(木) 22:20:15.44ID: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"
0464デフォルトの名無しさん
2013/05/30(木) 22:46:41.040465デフォルトの名無しさん
2013/05/30(木) 23:11:33.94[] -> [[]] を[] -> []
とするんだよ。
0466デフォルトの名無しさん
2013/05/30(木) 23:25:30.45ID:WFTkAEQe![a] : [[]] -> [[a], ... []]にならないのだろうか?
[a]:[]はエラーな気がするのだが。
0467デフォルトの名無しさん
2013/05/30(木) 23:28:24.79なぜ、[a]:[]がエラーだと思うの?
0468デフォルトの名無しさん
2013/05/31(金) 00:12:00.47ID:8/3B9ldc!例えば、[1]:[2] -> error. しかし、1:[2] -> ok 見たいな?
間違ってました。
[1]:[]は[[1]]になるんだね。(1:[]) -> [1]の延長見たいなものか。
ありがとうございます。
0469デフォルトの名無しさん
2013/05/31(金) 07:30:24.940470デフォルトの名無しさん
2013/05/31(金) 19:54:30.74ID:8/3B9ldc!"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
0471デフォルトの名無しさん
2013/05/31(金) 20:55:58.86エラーメッセージ読めよ。
0472デフォルトの名無しさん
2013/05/31(金) 23:36:01.66compress (x:xs) = reverse $ foldl (\a y -> if head a == y then a else (y:a)) [x] xs
どうもすっきりしない…
[]を特別扱いしない方法はないでしょうか?
0473デフォルトの名無しさん
2013/05/31(金) 23:58:00.94head a と y が等しい場合を特別扱いしてるくせに・・・
0474デフォルトの名無しさん
2013/06/01(土) 00:50:55.280475デフォルトの名無しさん
2013/06/01(土) 11:24:15.57ID:05NwpYWl!終了させるにはどうすれば良いかな。
試しに[x]->[x]入れたら無限に津尽くし。
0476デフォルトの名無しさん
2013/06/01(土) 12:10:42.800477デフォルトの名無しさん
2013/06/01(土) 12:51:27.14compress&#160;list&#160;=&#160;case&#160;(list)&#160;of
&#160;[]&#160;->&#160;[]
&#160;(_:_)&#160;->&#160;(findDuplicate&#160;list)
&#160;&#160;where
&#160;&#160;&#160;&#160;findDuplicate&#160;::&#160;(Eq&#160;a)&#160;=>&#160;[a]&#160;->&#160;[a]
&#160;&#160;&#160;&#160;findDuplicate&#160;list&#160;=&#160;case&#160;(list)&#160;of
&#160;&#160;&#160;&#160;&#160;&#160;[x]->[x]
&#160;&#160;&#160;&#160;&#160;&#160;(x:y:xs)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|&#160;x==y->&#160;findDuplicate&#160;(y:xs)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|&#160;otherwise&#160;->&#160;x&#160;:&#160;compress&#160;(y:xs)
------------------------------------
comp2&#160;[]=[]
comp2&#160;[x]=[x]
comp2&#160;(x:y:xs)|x==y&#160;=&#160;comp2(y:xs)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|otherwise&#160;=&#160;x:comp2(y:xs)
0478477
2013/06/01(土) 12:52:38.510479デフォルトの名無しさん
2013/06/01(土) 12:59:49.83ID:05NwpYWl!できればcompress "f" > "f"みたにしたかったけど、いいか。
ありがとう。
0480デフォルトの名無しさん
2013/06/01(土) 13:30:05.310481デフォルトの名無しさん
2013/06/01(土) 13:55:08.25deleteDuplicate list element = case (list) of
[] -> []
(x:xs)
| x == element -> deleteDuplicate (xs) element
| otherwise -> list
0482デフォルトの名無しさん
2013/06/03(月) 20:25:21.69ID: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
0483デフォルトの名無しさん
2013/06/03(月) 21:57:27.37> 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を取り出せる
0484デフォルトの名無しさん
2013/06/03(月) 22:19:55.39ID:vG7d+PED!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)
0485デフォルトの名無しさん
2013/06/03(月) 23:01:15.32(Person _ ,name ,_) と (Person _ name _) は違うよ
()を,で区切ってあるのはタプルというPersonとは異なる型(リストみたいなやつ)だから
0486デフォルトの名無しさん
2013/06/04(火) 07:04:07.14ID:3+1kYpm8!おお!出来た。有難うございます。
data Person = Person {c :: Class , name :: Name , age :: Age}deriving (Show)に
"," があったので引数のほうにも入れないといけないと思っていました。
0487デフォルトの名無しさん
2013/06/04(火) 07:15:35.000488デフォルトの名無しさん
2013/06/04(火) 07:41:23.74上は下の糖衣構文
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
0489デフォルトの名無しさん
2013/06/04(火) 11:05:46.59読みようが無いってのが実際だろうな
知ってる事が英語ならまだしも
知らない事を英語で書かれても
意味がわかるわけない
0490デフォルトの名無しさん
2013/06/04(火) 11:21:05.010491デフォルトの名無しさん
2013/06/04(火) 12:02:49.72なんとなく繋がりが分かってきた
0492デフォルトの名無しさん
2013/06/04(火) 12:11:40.24なんとなく平面上で繋がりはイメージできた
0493デフォルトの名無しさん
2013/06/04(火) 15:12:33.46ID:3+1kYpm8!なるほど。
data T = T {a::A, b::B, c::C}の時は引数にカンマがいらなくて、data T = T (A,B,C)の時は要るのか。
砂糖構文調べてみる。
0494デフォルトの名無しさん
2013/06/04(火) 19:23:25.51勘違いをしていなければいいのだが・・・
data TT = T (A,B,C)と定義されたデータ型があるときに、
let a = T (1, 2, 3) みたいに括弧とカンマを使って記述することになるのは、
「関数(データコンストラクタ T)の引数がひとつのタプルだから」だよ
0495デフォルトの名無しさん
2013/06/04(火) 20:19:53.37ID:3+1kYpm8!何か勘違いをしていたみたい。ありがとうございます。
もう一つ質問してもいいでしょうか??
例えば、
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]
0496デフォルトの名無しさん
2013/06/04(火) 21:27:08.28youngSort 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]
0497デフォルトの名無しさん
2013/06/04(火) 21:52:49.33ID:3+1kYpm8!ありがとうございます。
何となく関数型が分かってきた感じがします。
頑張ってモナドまで行こっと。
0498デフォルトの名無しさん
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/
0499デフォルトの名無しさん
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型であるべきですから
僕は母語が日本語じゃないから変な文は許してね
0500デフォルトの名無しさん
2013/06/05(水) 14:12:51.94どこの国の人?
0501デフォルトの名無しさん
2013/06/05(水) 14:15:22.300502499
2013/06/05(水) 15:27:05.68プログラミングスレであまり語るものにならないと思うんですけど
(まあそれを言っちゃったら最初からわざわざ日本人じゃないよーとは言うべきじゃないんですけどね)
と、ごちゃごちゃ言っといて
アメリカ人です
Haskell楽しいお
0504デフォルトの名無しさん
2013/06/05(水) 18:58:40.58ID: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の関数は使わない方向でおねがいしたいのですが。
0505デフォルトの名無しさん
2013/06/05(水) 19:37:33.83mkTree :: (Ord a) => [a] -> Tree a
mkTree list = case (list) of
[] -> Empty
(x:xs) -> insert x $ mkTree xs
0506デフォルトの名無しさん
2013/06/06(木) 23:14:31.03ID:E5gkHTLj!ありがとうございます。
これを元にバランス木を作ってみたいと思います。
0507デフォルトの名無しさん
2013/06/08(土) 16:21:21.49ID:qUSgaMZw!3:[]の[3]じゃなくて?
0508デフォルトの名無しさん
2013/06/08(土) 17:40:19.93map f xs はリストxsの各要素に対して関数fを適用した結果をリストとして返す
(map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn])
要素数0のリスト[]に対しては適用するリストの中身がないので[]を返す
map は f :: a -> b という関数 を 受け取って
g :: [a] -> [b] という関数を返す関数と考えるとよいかも
関数gの引数が[]のとき、返り値として最もふさわしい値は[]以外には考えにくいでしょう?
0509デフォルトの名無しさん
2013/06/08(土) 21:58:18.920510デフォルトの名無しさん
2013/06/08(土) 22:00:32.67ID:qUSgaMZw!なるほど。
[]に(3:)しても、[]に要素がないから[]を返される訳なのか。
ありがとうございます。
所で、だれかHaskell99 やってる人いないかな。62Bむずかしい。
0511デフォルトの名無しさん
2013/06/08(土) 22:04:18.77自分で tail をそのように再定義すれば済む話ではないか?
0512デフォルトの名無しさん
2013/06/08(土) 22:25:29.24自分で書くより標準ライブラリ使う方が保守性は格段に上がるんだから
0513デフォルトの名無しさん
2013/06/08(土) 22:36:10.36Haskell99か元はprolog向けなんだな。
こういうのはだいたい、1の時を考える。
N-1が成り立つとしてNを考える。
あとは、再帰で書けばいいんだよ。
0514デフォルトの名無しさん
2013/06/08(土) 22:42:42.86保守性というのは、これ以降あなたが作るプログラムの保守の話でしょ?
あなたが tail [] == [] の仕様が欲しいと言っているのだから。
自分のプログラムに tail [] == [] である関数を組み込む程度で
保守性が下がる理由が分からない
自分でユーティリティ関数を集めたモジュールを作るのと同じだと思うけど。
0515デフォルトの名無しさん
2013/06/08(土) 22:54:07.590516デフォルトの名無しさん
2013/06/08(土) 22:54:14.49>508的な考えも一理ある
> g :: [a] -> [b] という関数を返す関数と考えるとよいかも
> 関数gの引数が[]のとき、返り値として最もふさわしい値は[]以外には考えにくいでしょう?
0517デフォルトの名無しさん
2013/06/08(土) 23:12:41.17チームでプログラムしているのなら、
チーム用のユーティリティモジュールに自作 tail を入れればいいのでは?
0518デフォルトの名無しさん
2013/06/08(土) 23:36:13.700519デフォルトの名無しさん
2013/06/08(土) 23:44:41.56ID:qUSgaMZw!なるほど。
Haskellでもインベーダーみたいなの作りたいけど、言語自体自分には難しいから夢のまた夢。
ま〜まずはモナドなど勉強します。
なにかオススメのサイトとかありますか?
0520デフォルトの名無しさん
2013/06/09(日) 00:00:13.56今Haskellで日常的にプログラムしている人の中でも、
モナドをまとまった一つの項目として学んではいない人は多いと思う。
よく分からんが使っているうちになんとなく少し分かったという体験を、
知らず知らずの間に塵のように積み重ねてきたんじゃないかな。
0521デフォルトの名無しさん
2013/06/09(日) 00:04:39.35そりゃIOを使ったプログラムを自分なりにコピペ改変しながらやろうとして
上手くいかなくて、この do 記法はモナドの操作のシンタックスシュガーであり
みたいな解説があったからそうかではIOちゃんと使えるようになるためには
モナド知らんといかんなぁと思ったんだろ。
んでもって、冷静になってIOぐらいだったら do 記法の使い方の
例からなんとなく使えるようになるじゃんか…という真実にたどり着いた
あと、「ところで、なんでIOみたいな普通の言語が普通に持ってる機能を
モナドなどというケッタイなもので実装したのか、そのデザインには
なにか神秘的な力があるのではないだろうか。ゼノブレイドでもモナドが
スゴイって言ってたし…」 と気になってやっぱりモナド知りたいぞーとなった人がいても
不思議じゃないし。
0523デフォルトの名無しさん
2013/06/09(日) 07:39:39.83Common Lisp だと cdr nil = nil だけど、
Scheme だと cdr nil = error だね。
どっちが正しいかは、信じる教義に依る。
0524デフォルトの名無しさん
2013/06/09(日) 08:11:37.76でもたいていパターンマッチすれば済むしtailSafeやtailDefあるからそれほど気にならない
0525デフォルトの名無しさん
2013/06/09(日) 10:47:49.68ID:FF7F/XIY!何か、”これしてみろ”って問題ない?出来れば木やリスト関連で初学者にも出来るグライ簡単なの。
現在、完全木をリストから作ることには成功した。
リストは好きはピザをテーマに簡単なレコード構文を作って遊んでる程度。
おねがいします。
0526デフォルトの名無しさん
2013/06/09(日) 11:07:50.14とりあえず体系的に順に学んで、理解の程度をテストした後は、
いつか実戦で使う時まで忘れている、と。
ひと通り基礎文法を理解して入門を終えたのなら、逆にしてみたらどう?
とりあえず何か作ってみたいアプリを考えて、それを作っていくうちに、
このデータは木構造にするといいかもと思いつき、木構造を勉強する、と。
0527デフォルトの名無しさん
2013/06/09(日) 11:39:16.53ID:FF7F/XIY!出来れば簡単なゲーム(スペースインベーダー)なんか作りたいけど. Haskellでのゲーム作成方法ないからな〜。
もう木から特定の要素を抽出しろとか、リストを使っての計算とかちょっと飽きてしまったので、
何か皆さんが”初心者はこれが出来たらいいぞ〜”的な問題があったらうれしい。
javaならのんびりと簡単なゲーム作るのに。
0528デフォルトの名無しさん
2013/06/09(日) 12:05:55.84そういう方法は勧められない。
0529デフォルトの名無しさん
2013/06/09(日) 12:09:39.69やってるうちに「これならCの方が楽」って絶対思うから
そこでFRPとかFreeMonadとか調べるとどんどん世界が広がる
0530デフォルトの名無しさん
2013/06/09(日) 12:21:14.36さすがにそれはない
0531デフォルトの名無しさん
2013/06/09(日) 13:30:54.97> Haskellでのゲーム作成方法ないからな〜
それが義務教育時代の勉強みたいと言っているのだが・・・
スペースインベーダーを作ってみたいのなら、それを作るのに必要なものは何か考えようよ。
グラフィックスをスクリーンに描く事、コントローラーからの入力を処理する事、
時間の経過に伴ってキャラクタを生んだり消したりする事、などなど。
で、それをするのに今自分に不足している知識は何か考えてみればいいじゃん。
そして、こういう事をやりたくて、こういう事をする必要があるんだけど、
Haskell ではどうやってやるの? こういう方法を考えてみたけどうまくいかない、
とか質問すればいいんだよ。
最初は個々の事柄に対してそれぞれバラバラに集めた方法やテクニックを継ぎ接ぎするんだから、
きっとHaskell熟練者みたいな綺麗な形にはまとめられないと思う。
でも、そこから少しずつブラッシュアップしたり、時には一から作り直したりするんだよ。
俺はそうやって勉強していくのをお勧めする。
質問時には、俺の持っている知識が役に立ちそうならアドバイスするし。
(他の人もアドバイスしてくれるでしょう)
> 何か皆さんが”初心者はこれが出来たらいいぞ〜”的な問題があったらうれしい。
言っておくけど、君はもうとっくに初心者じゃないんだよ。
いつになったら初心者気分が抜けるのかな。
誰かに、これができたら初心者卒業だと認めてもらわないと不安かな。
(ちなみに、Haskellでインベーダーゲームを作る方法の一つを紹介した
[The Yampa Archade] という論文がフリーで読めるが、いきなりこれはお勧めしない)
0533デフォルトの名無しさん
2013/06/09(日) 13:44:15.30ID:FF7F/XIY!甘い考えだと分かり反省します。
同時に、提案ありがとうございます。
ゲーム作りの前にまずは基礎を固めることにします。
論文は面白そうなのですが、如何せん知識が無いので基礎が出来たらにします。
0534531
2013/06/09(日) 14:39:41.82甘いかどうかは知らんし、反省してもらわんでもいいよ。
俺の方法が正しいという確証は全くない。
単に経験上良かったんでお勧めの方法だから、一度断られても2度くらいは勧める。
安心してくれ、3度は勧めん。
現に >>528 のように反対してる人もいるわけだし。
0535デフォルトの名無しさん
2013/06/09(日) 16:14:19.360536デフォルトの名無しさん
2013/06/09(日) 16:44:31.070537デフォルトの名無しさん
2013/06/09(日) 16:52:22.52PostScriptを勉強する。
0538デフォルトの名無しさん
2013/06/09(日) 17:23:01.80私の知っている限りでは、大きく3つの方法がある。
OpenGL や DirectX などを使う方法。
OS の描画用 API を直に使う方法。
GTK などの SDK にある描画機能(要はAPIのラッパーだが)を使う方法。
何が適しているかは目的によると思う。
ゲームを作るのであれば OpenGL などを使うほうが良いし、
GUI の一部として描くのであれば API や GTK などを使うほうが良いだろう。
まずは目的を一つに絞り、「Haskell OpenGL」や「Haskell GTK」などでググってみてはどうだろうか。
これらは絵を描く常套手段などで、解説サイトも他の話題に比べれば比較的充実している。
その上で、更に細かい部分で分からなければ、質問すればいいと思う。
0540デフォルトの名無しさん
2013/06/09(日) 20:07:42.82ID: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)
やると出力カオス。
0541デフォルトの名無しさん
2013/06/09(日) 20:22:05.24pairUp [] = []
pairUp (x:xs) = map ((,) x) xs ++ pairUp xs
0542デフォルトの名無しさん
2013/06/09(日) 21:00:11.500543デフォルトの名無しさん
2013/06/09(日) 21:01:55.180544デフォルトの名無しさん
2013/06/09(日) 21:05:09.30ID:FF7F/XIY!ありがとうございます。
mapは理解しているのですが、((,)x)はどう言う風に動くのでしょうか?
結果から見れば明白なのですが、preludeの関数を使わずにしたいので。
p [1..4]++p[2..4]++p[3..4]みたいにループで出来たらいいなと思ってます。
0545デフォルトの名無しさん
2013/06/09(日) 21:12:27.75(,)はタプルを作る関数
(,) 1 2は(1,2)と同じ
((,) x)は、これにxを部分適用したもの
0546デフォルトの名無しさん
2013/06/09(日) 21:28:29.11ID:FF7F/XIY!勉強になりました。
0547デフォルトの名無しさん
2013/06/09(日) 21:30:57.00541はまさにそういうループになっているけど。
mapを使わずになら、
p _ [] = []
p x (y:ys) = (x,y):(p x ys)
pairUp :: [a] -> [(a, a)]
pairUp [] = []
pairUp (x:xs) = p x xs ++ pairUp xs
0548デフォルトの名無しさん
2013/06/10(月) 04:15:28.33import 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を使えってことだ
使わない理由がわからない
0549デフォルトの名無しさん
2013/06/10(月) 05:39:37.30四の五の言わずに黙ってやれ!
武術の修行中に一々この型のこの動作は何故こんな風にするのですか
なんて訊く奴があるか!
体得すれば自ずと解る!
会得して尚一家言あればそのとき初めて口を開け!
励まぬ者に文句垂れる資格なし!
修行するぞ修行するぞ修行するぞ
0550デフォルトの名無しさん
2013/06/10(月) 09:03:32.68二、世のため人のため社会のため
三、Love & Peace & Togetherness
四、ごめんなさい、ひとこと言えるその勇気
五、味の乱れは心の乱れ、心の乱れは家庭の乱れ、家庭の乱れは社会の乱れ、
社会の乱れは国の乱れ、国の乱れは宇宙の乱れ
六、ニンニク入れますか?
0551デフォルトの名無しさん
2013/06/10(月) 11:05:11.14\x y -> compare (snd x) (snd y)
みたいに2引数関数の引数を同じ関数を適用してから〜の流れを
sndとかshowとかを1回書くだけでよい方法はありますか
0552デフォルトの名無しさん
2013/06/10(月) 11:47:26.95(++) `on` show
compare `on` snd
0553デフォルトの名無しさん
2013/06/10(月) 11:59:19.810554548
2013/06/10(月) 13:12:14.00言葉が悪かったな、本当に済まなかった。
言いたかったことはこれ
初心者はPrelude禁止とか変な縛りはせず、
Preludeの中の関数の定義を読むか、
自分から書きなおした方がいいんじゃないか、勉強的に
関数型プログラミングをするのは、難しい問題を分解して
多くの簡単で小さな問題を解く関数を書くことではないか。
だからmapを使え。mapがなにしてるかわからないのなら
書きなおして身につける方がいい
僕は上の母語の日本語じゃない奴なので
変な文&正しくないマナーは許してくれ(汗
0555デフォルトの名無しさん
2013/06/10(月) 19:08:11.83ID:lZ0F4JgH!ありがとうございます。
出きるだけprelude関数を使いたくなかった理由はjavaやってる時に、
ずっとライブラリーを貼って付けるみたいな作業を感じたので。
それにしても、Haskell意外と面白いな。これからもっと勉強します。
0556デフォルトの名無しさん
2013/06/10(月) 20:17:18.37関数型の基本だから覚えるべし。
0557デフォルトの名無しさん
2013/06/10(月) 20:32:08.37ID:lZ0F4JgH!foldlって無限のリストでも使用できるんですよね。
ま〜take, drop, map, zip, filter位は何とか覚えるようにしてます。
Haskell覚えること多いな。
algbraic type は自分でdata使って独自の型を作れるのは分かったノですが,abstract data typeが理解できない。
既存のIntやBool型などブラックボックス化されてるのがそうなのですか?
0558デフォルトの名無しさん
2013/06/10(月) 21:43:32.16purelude は弾けても fuga は死にそうです‥‥
0559デフォルトの名無しさん
2013/06/10(月) 23:18:41.40本一冊読破すればそのような基本的な疑問はすべて解消すると思う
(まあ抽象データ型は関数型に限った話じゃないと思うが)
Prelude関数を自分で書いてみるのはHaskellの基本的なテクニックを学べる点では良い
ただプログラム書くのにいちいち定義してたら面倒だからライブラリがあるんでないのかね
これはどんな言語でも同じだと思うけど。さらにいえばファイル入出力とかのコードはどの言語でも
似たようなつまらないコードを書かざるをえない。こういう作業感はやることに依存すると思う。
0560デフォルトの名無しさん
2013/06/11(火) 04:43:03.72車輪の再発明にかまけてる時間があるのか
0561デフォルトの名無しさん
2013/06/11(火) 06:06:00.66「ふつうの・・・」では無理ね。
0562デフォルトの名無しさん
2013/06/11(火) 06:45:03.82再発明しかお金がもらえないんです
0563デフォルトの名無しさん
2013/06/11(火) 11:15:06.310564デフォルトの名無しさん
2013/06/11(火) 23:08:35.87pairUp [1,3,5]
はどういう結果になるのが正しいと思ってる?
0565デフォルトの名無しさん
2013/06/11(火) 23:26:39.31抽象データ型は代数とみなせるから代数データ型とも言う事があるというだけで2つは同じもの。
構造化プログラミングはプログラムの連続分解というものを導入する事で大規模ソフトウェアの
開発を可能にしたけれど、データ構造の変更とデータ構造を操作する手続きの変更に弱かった。
抽象データ型を導入することでその欠点を補いつつ構造化プログラミングが可能になった。
(プログラムの連続分解をするにあたって有害だったのがgoto文)
Haskellでは例えば昔話題になったオードリー・タンのperl6は構造化プログラミングを実践してた。
ただ、抽象データ型はあんまつかってなかったと思う。
0566デフォルトの名無しさん
2013/06/11(火) 23:33:20.870567デフォルトの名無しさん
2013/06/11(火) 23:41:09.190568デフォルトの名無しさん
2013/06/11(火) 23:48:13.300569デフォルトの名無しさん
2013/06/11(火) 23:55:19.69Haskellで構造化プログラミングをやったから大規模開発ができたというのが正しいと思う。
0570デフォルトの名無しさん
2013/06/12(水) 13:54:46.68知り合いの人は中学数学すらおぼつかないバカなのにHaskell使ってることを自慢してきます
どうすればいいでしょうか?
0571デフォルトの名無しさん
2013/06/12(水) 14:04:35.020572デフォルトの名無しさん
2013/06/12(水) 17:56:37.86くだらないことを質問するな
0573デフォルトの名無しさん
2013/06/12(水) 20:58:46.800574デフォルトの名無しさん
2013/06/12(水) 21:12:07.510575デフォルトの名無しさん
2013/06/13(木) 00:20:21.190576デフォルトの名無しさん
2013/06/13(木) 04:39:36.23ナンプレパズルを解くプログラム
0577デフォルトの名無しさん
2013/06/13(木) 10:51:56.41> ま〜take, drop, map, zip, filter位は何とか覚えるようにしてます。
> Haskell覚えること多いな。
いや、その辺は現代的なLispの影響を受けた言語の基本かと。
0578デフォルトの名無しさん
2013/06/13(木) 21:36:42.93解説サイト作れ
0579デフォルトの名無しさん
2013/06/14(金) 12:33:39.450580デフォルトの名無しさん
2013/06/14(金) 13:38:17.60おれは評価する
0581デフォルトの名無しさん
2013/06/14(金) 16:28:04.480582デフォルトの名無しさん
2013/06/14(金) 16:30:11.48お前575だろ
0583デフォルトの名無しさん
2013/06/15(土) 00:08:38.79俺も評価する
0584デフォルトの名無しさん
2013/06/15(土) 00:18:06.540585デフォルトの名無しさん
2013/06/15(土) 00:28:12.51こんな微妙なネタで被るところだった
0586デフォルトの名無しさん
2013/06/16(日) 03:18:07.640587デフォルトの名無しさん
2013/06/16(日) 08:26:58.96ID:F2SjiwBC!の下の方に、四色で彩られた四角形の描写があります。
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
0588デフォルトの名無しさん
2013/06/16(日) 09:07:18.73コピペしてimportとmainを追加したらコンパイル通ったよ
(実行したらウィンドウシステムが落ちたけどたぶん俺の環境の問題)
コピペミスじゃないか?
0589デフォルトの名無しさん
2013/06/16(日) 16:07:27.56ID:F2SjiwBC!多分何処かにミスがあったのだと思います。コンパイーラーは通ったのですが、どうやって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
0590デフォルトの名無しさん
2013/06/16(日) 17:10:28.040591デフォルトの名無しさん
2013/06/16(日) 21:09:33.37言い得て妙だな
(必要になるまで575の評価をしない)
0592デフォルトの名無しさん
2013/06/16(日) 21:24:19.88ID:F2SjiwBC!おお、ありがとうございます。
0593デフォルトの名無しさん
2013/06/17(月) 04:44:22.94叙述トリックだ
0594デフォルトの名無しさん
2013/06/17(月) 08:47:10.520595デフォルトの名無しさん
2013/06/17(月) 11:14:29.81具体的には、Eqのインスタンスを宣言するときに(==), (/=)のどちらかを実装するって話(すごH本、wikibooksで確認)
いきなりEqクラスのデフォルト実装が循環定義になってるのを見せられると一瞬面食らう
学習上であまり直感的じゃない部分だと思うんだけど
ググってもあまり悲鳴が上がってないのが不思議
(ブログを見ると「らしい」という曖昧に理解してる感がある文章に出会える)
0596デフォルトの名無しさん
2013/06/17(月) 11:48:08.06上からのフェロモンで動いてる昆虫そのもの
0597デフォルトの名無しさん
2013/06/17(月) 15:57:31.37(==)だけ実装してる場合
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. ぐぬぬ
ってなるけど(最小完全定義の説明にはなってないかな
0598デフォルトの名無しさん
2013/06/17(月) 16:13:40.07意図ということでいいと思うけどな。
で、排中律が成立しているか、みたいなチェックの枠組は言語にはないよ、と。
0599デフォルトの名無しさん
2013/06/17(月) 16:13:52.83最初見たときは戸惑った
これじゃあ無限に巡回するじゃないか、と
ただそこで深く悩むことはなく
そのあとに出てきた信号をインスタンスにする例で
すぐに理解できた
0600デフォルトの名無しさん
2013/06/17(月) 21:25:09.17ミスリードで思い出したけど
このリードって導くの意味のリードだったってつい最近まで知らんかったの思い出した
読むの方だと思ってたwwwwwww
0601デフォルトの名無しさん
2013/06/17(月) 23:04:10.610602デフォルトの名無しさん
2013/06/18(火) 00:10:00.880603デフォルトの名無しさん
2013/06/18(火) 00:58:21.30http://www2.gssm.otsuka.tsukuba.ac.jp/staff/kuno/lectures/12/2012-04-TopicsPL6.pdf
といっても、そうなると焦点がそこに絞られちゃうからこんな感じでよいのでは?
http://www.sampou.org/haskell/tutorial-j/io.html
0604デフォルトの名無しさん
2013/06/19(水) 00:25:45.13という理解でよろしいでしょうか?
0605デフォルトの名無しさん
2013/06/19(水) 06:29:26.340606デフォルトの名無しさん
2013/06/19(水) 07:13:57.60なぜ?
0607デフォルトの名無しさん
2013/06/19(水) 09:12:46.560608デフォルトの名無しさん
2013/06/19(水) 09:18:26.09本当にそうなら、作ればいいだけではないか。
0609デフォルトの名無しさん
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
0610デフォルトの名無しさん
2013/06/20(木) 23:22:08.48[x | x <- [1..1000] , y <- [0,2,5], not $ (mod x 10 == y) ]
0611デフォルトの名無しさん
2013/06/20(木) 23:33:50.070612デフォルトの名無しさん
2013/06/20(木) 23:38:31.57・mod の構文が間違っている
・(mod ...) が Int 型とマッチングしない
・[x| x <- ...., y <- ....] は (x,y) の全組み合わせを生成して、重複を削除せずにxだけ並べる
0613デフォルトの名無しさん
2013/06/21(金) 00:09:06.83Prelude> product [x | x <- [1..10000], mod x 10 /= 0, mod x 10 /= 2, mod x 10 /= 5]
0614609
2013/06/21(金) 00:58:46.81代名詞が分かり辛かったですが、"これ"は上を指しています
>>612
:t mod で確かめましたが、mod での行き先(?)は Int とは限らないのですか…
では、
Prelude> :i Integral で
instance Integral Integer
instance Integral Int
とあるのにも関わらず、(mod ...) が [0,2,5] :: [Int]
の要素である Int 型として推論されないのはなぜですか?
ググる際のキーワードも教えていただけると有難いです
0615デフォルトの名無しさん
2013/06/21(金) 01:01:11.010616デフォルトの名無しさん
2013/06/21(金) 02:01:36.60リスト内包表記 [ x | x <- hoge ] の正体は hoge >>= \x -> [x]
だから<-の左辺でパターンマッチ例えば(x:xs)とか(x,y)を使える
だけど普通の関数と同様に(mod x 10)というパターンマッチは使えない
0617デフォルトの名無しさん
2013/06/23(日) 18:36:49.35モナド難しい!と思われた初心者をまた逃したな
0618デフォルトの名無しさん
2013/06/23(日) 19:34:36.60where fact-tail 1 acc = 1
fact-tail n acc = fact-tail (n - 1) (acc * n)
みたいに素直に再帰で書き下せるところをいちいち末尾再帰に書き換えるように
なってしまいました。
こういうのってプログラム見にくいんじゃないかなぁと思いますが、
どうでしょうか?
好きにしろって言われるかもしれませんが
0619デフォルトの名無しさん
2013/06/23(日) 19:39:39.27見にくくなるかなぁと思いながら、それでもわざわざ末尾再帰にするくらいだから、
パフォーマンスの向上を狙っているのだと思う。
それが、「どれほどの」向上に繋がっているのか正しく理解しているのなら、
それでいいんでないか?
トレードオフでパフォーマンス側をとったというだけのことだから。
どれほどの向上なんだろ? という状態だったら、直ちに調査してみることを勧める。
0620デフォルトの名無しさん
2013/06/23(日) 20:13:36.120621デフォルトの名無しさん
2013/06/23(日) 20:32:23.730622デフォルトの名無しさん
2013/06/24(月) 02:23:24.02出力されるコードが末尾再帰になるようにプログラムを帰納するテクニックがある
別の言い方をすると、出力の一覧を見てコードを書くときに、頭を使わずに同じ手順でコードを書くときは、末尾再帰の方が楽な場合がある
(手は猛烈に動かすが、頭は使わないという意味で)
0623デフォルトの名無しさん
2013/06/24(月) 12:41:37.000624デフォルトの名無しさん
2013/06/24(月) 15:01:35.610625デフォルトの名無しさん
2013/06/24(月) 19:36:40.75実行効率で違いはあるのでしょうか。
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 です。
0626デフォルトの名無しさん
2013/06/24(月) 20:44:50.76違いはない。
コンパイルの途中で同じコードになる。
0627デフォルトの名無しさん
2013/06/24(月) 21:48:17.00ありがとうございました。
0628デフォルトの名無しさん
2013/06/24(月) 22:43:19.95不安なら、中間コードを生成して中を覗けばいいと思う
0629デフォルトの名無しさん
2013/06/25(火) 12:57:13.870630デフォルトの名無しさん
2013/06/25(火) 19:44:03.760631デフォルトの名無しさん
2013/06/25(火) 19:54:39.46うろ覚え
0632デフォルトの名無しさん
2013/06/25(火) 20:22:43.95メモリ消費量的には余り変わらないという話じゃない?
0633デフォルトの名無しさん
2013/06/25(火) 20:34:26.43実際バリバリ使ってる人達はその辺どうしてるんでしょ
0634デフォルトの名無しさん
2013/06/25(火) 21:59:34.70>>632
>素朴な実装だと再帰の深さ分だけサンクをヒープに作るので
それは末尾再帰とは直交した問題
末尾再帰にした上で、サンクを作らないようにseqや!を使えばいいだけ
0635デフォルトの名無しさん
2013/06/25(火) 22:21:52.19思ったより進化してないなあ
0636デフォルトの名無しさん
2013/06/25(火) 22:49:05.800637618
2013/06/26(水) 00:17:25.70>>621
>>622
見難くないならまぁいいかな。
ご指摘の点を読み返してみて、自分はその関数がどういうものかという定義で
考えているのではなく、CやJavaのforループでカウンタと累積変数を動かしているのを
頭を使わず末尾再帰に書き下しているのだと思う。
できるだけfoldを使えるように精進するよ。
0638618
2013/06/26(水) 00:35:50.85factだと自明すぎて例として不適切だったでしょうか
いちおう繰り返しを行う関数を作るときは、必要な引数を受ける名前を定義して、
内部で末尾再帰のカウンタと累積変数をもちいた定義を行うということを示したつもりでした。
これでは動かんというのならごめんなさい。
Haskell慣れてないんです。
特にwhereのかかる範囲とか。
lisp、schemeの括弧が懐かしいです。
0639デフォルトの名無しさん
2013/06/26(水) 01:41:38.280640デフォルトの名無しさん
2013/06/26(水) 06:22:49.98この間の放送大学の「データ構造とプログラミング 9 再帰」見てようやく理解した。
0641デフォルトの名無しさん
2013/06/26(水) 07:21:21.31Prologなんかだと、末尾再帰ができていない処理系は使い物にならないし、
末尾再帰を意識して書かないと、動かないこともある。Prologの場合は、
末尾以前の全てのサブゴールの決定性が問われるとか、特殊な条件が付くが、
Haskellだとどうなのか、とかの理解は必要だと思う。
0642デフォルトの名無しさん
2013/06/26(水) 09:43:03.340643デフォルトの名無しさん
2013/06/26(水) 10:04:14.100644641
2013/06/26(水) 17:06:31.770645デフォルトの名無しさん
2013/06/26(水) 18:09:07.830646デフォルトの名無しさん
2013/06/26(水) 20:16:06.110647デフォルトの名無しさん
2013/06/26(水) 20:35:30.04shemeの継続?
0648デフォルトの名無しさん
2013/06/26(水) 21:10:53.39別の言い方をすれば、何を以って末尾再帰だと断定できる?
最後に自分自身を「呼び出す」ような形になっている、という言い方はできないよね。
関数を呼ぶのは評価が行われる時だから、引数の方が後に呼び出されるかもしれないし。
0649デフォルトの名無しさん
2013/06/26(水) 23:34:33.45C#とHaskellの使い分けの方針とかありますか?
0650デフォルトの名無しさん
2013/06/26(水) 23:56:54.050651デフォルトの名無しさん
2013/06/27(木) 00:13:46.56C# と同様に、極限まで処理速度を求められる分野以外なら何でもいい。
「言語」として向いている分野というのは特に無い。
使い分ける必要はなく、使い慣れたものを使えばいい。
0652デフォルトの名無しさん
2013/06/27(木) 07:56:45.02f x = f ...
みたいに、右辺の一番外側が自分自身を呼んでいればいい
ただし、caseとlet(や、構文糖であるifとwhere)が挟まっていてもok
f x = case x of [] -> 1; hd:tl -> f tl
みたいに
この形でなくても末尾再帰になることもあって、例えば
f x = putStrLn x >> f
だと、一番外側の呼び出しは(>>)だけど、IOモナドの(>>)ならfを一番外側で呼ぶので、
間接的に末尾再帰になる
0654デフォルトの名無しさん
2013/06/27(木) 09:24:25.910655デフォルトの名無しさん
2013/06/27(木) 22:47:52.520656デフォルトの名無しさん
2013/06/27(木) 23:11:08.430657デフォルトの名無しさん
2013/06/27(木) 23:14:55.19関係ないけど、コールドゲームはcoldじゃなくてcalled game。
試合終了が宣言されたゲームだから。
0658デフォルトの名無しさん
2013/06/27(木) 23:15:12.96なぜ call なのか、という質問ではないのか?
0659デフォルトの名無しさん
2013/06/27(木) 23:17:58.670660デフォルトの名無しさん
2013/06/27(木) 23:32:21.340661デフォルトの名無しさん
2013/06/27(木) 23:38:55.24誰かがcallの方がいいと考えたんだと思う
0662デフォルトの名無しさん
2013/06/27(木) 23:53:53.65ハードウェアを意識するか しないか
0663デフォルトの名無しさん
2013/06/28(金) 00:04:06.32どーでもいい質問じゃね?
0664デフォルトの名無しさん
2013/06/28(金) 00:25:00.390665デフォルトの名無しさん
2013/06/28(金) 00:50:25.680666デフォルトの名無しさん
2013/06/28(金) 09:55:25.48EDSACの用語で言うなら、インライン展開で使うもの(呼ぶわけでもジャンプするわけでもない)は
オープンサブルーチン、ジャンプして使うものはクローズドサブルーチンと言ったけど、
後者の場合、戻り番地をレジスタで渡して、自己書き換えして戻ってたから、事実上callと言える。
スタック的なものが無かったから再帰呼び出しは(簡単には)できなかったけど。
0667デフォルトの名無しさん
2013/06/28(金) 20:04:26.42戻る仕組みを含めて(Wheeler)jumpと呼んでいたわけで、
やはりcallになったのはきっかけが別にあったんじゃないの
0668デフォルトの名無しさん
2013/06/29(土) 21:49:35.700669デフォルトの名無しさん
2013/06/29(土) 22:04:34.250670デフォルトの名無しさん
2013/06/29(土) 23:28:51.62あるのは関数適用式とその評価のみ
0671デフォルトの名無しさん
2013/06/29(土) 23:53:18.520672デフォルトの名無しさん
2013/06/30(日) 01:27:45.52>>655の疑問はHaskellに対して言っているのではなくて
それを実装しているレイヤーに対して言っているんだよ。
0673デフォルトの名無しさん
2013/06/30(日) 07:15:04.040674デフォルトの名無しさん
2013/06/30(日) 11:19:45.78>>670 は暗に「スレチだ馬鹿」というニュアンスを込めているのかもしれん。
0675デフォルトの名無しさん
2013/06/30(日) 11:50:40.16あるとすればスタンドプレーから生じるチームワークだけだ。
0676デフォルトの名無しさん
2013/06/30(日) 12:31:28.27そして芸術としてもゴミに等しい無価値なやつら
哀れ
微生物以下
0677デフォルトの名無しさん
2013/06/30(日) 12:54:17.39久しぶり!元気してた?
0678デフォルトの名無しさん
2013/06/30(日) 15:13:01.090679デフォルトの名無しさん
2013/06/30(日) 15:19:27.700680デフォルトの名無しさん
2013/06/30(日) 15:42:44.490681デフォルトの名無しさん
2013/06/30(日) 15:47:20.050682デフォルトの名無しさん
2013/06/30(日) 16:21:33.89左閉半開区間 [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 も左閉半開区間になりますよね。
(もちろん、浮動小数点の場合の話です)
説明と違うような気がしますが、この違いを説明したのが上記の英文の部分でしょうか。
0683デフォルトの名無しさん
2013/06/30(日) 16:29:09.550684デフォルトの名無しさん
2013/06/30(日) 16:47:23.96あぁそうか、randoms 関数を使えばいいのか。
馬鹿だったわ、ありがと。
でもそれとは別に、randomR 関数の説明って、
なんであんな変な条件みたいなのがあるんだろ。
0685デフォルトの名無しさん
2013/06/30(日) 16:57:00.42[lo, hi]なのに(lo, hi)と同じ実装を許容するなら但し書きを書くのが適切。
0686デフォルトの名無しさん
2013/06/30(日) 18:01:43.49でも、>>682 の作り方なら下限は出力されるんじゃない?
「絶対」ではなく「実装依存」ってこと?
0687デフォルトの名無しさん
2013/06/30(日) 21:38:38.36足下は初めは平身低頭に知恵を乞いておきながら、用が済めば急にタメ口になるとは何としたことか
0688デフォルトの名無しさん
2013/06/30(日) 21:55:55.540689デフォルトの名無しさん
2013/06/30(日) 22:16:19.65ホントごめん。
初めは質問者専用の口調で書いたのだけど、2回目の時にそれを忘れてて、
3回目で、なんかもういいや、ってなってしまった。
0690デフォルトの名無しさん
2013/06/30(日) 22:44:07.970691デフォルトの名無しさん
2013/06/30(日) 23:11:37.34まあ自分はやらかしたことないけど(梯子外し)
0692デフォルトの名無しさん
2013/07/01(月) NY:AN:NY.AN0693デフォルトの名無しさん
2013/07/02(火) NY:AN:NY.ANttp://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96
あと英文のmonadの項目誰か訳してくれい(泣
0694デフォルトの名無しさん
2013/07/02(火) NY:AN:NY.AN0695デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN0696デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN勉強したが、こいつは無理って諦められたんだよ
0697デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN思考の柵が吹き飛んだ
0698デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.ANまってろよ、今大熊さんの本を読んでるところなんだ
0699デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.ANHaskell入門書ってないでしょうか
0700デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN読んでないとモグリなの?
0701デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN読み終わるころにはlisp処理系の自作ができる
0702デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN結論から言えば、Lisp が分かる人をターゲットにした Haskell の入門書はありません。
Haskell を学ぶに当たって、Lisp が分かっている事そのものはたいして役に立たちません。
強いて言えば、Lisp で参照透過性を意識したプログラミングに慣れていれば、
Haskell のその部分で躓くことはないだろうという程度です。
なので、そのような入門書を出版する動機がないのでしょう。
しかし、Haskell の Haskell らしさが出る部分はそれだけではありません。
どのような入門書にも、参照透過性を含め他の Haskell らしさの部分は解説してあります。
ちなみに、SICP で学んだ事は他のどのような言語でプログラムする際にも活きます。
0703デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.ANhttp://ja.wikibooks.org/wiki/48時間でSchemeを書こう
> このチュートリアルの対象読者は主に以下の2種類です。
LispかSchemeを知っていて、Haskellを学びたい人
プログラミング言語を何も知らないけれども、一定の背景知識を持っていてコンピュータに詳しい人
0704デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.ANそれを入門書の代わりに使うのなら、
素直に普通の入門書を読んだ方が良いような気がするなぁ
まぁターゲットとしては >>699 にドンピシャだけど
0705デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0706デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0707デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN俺は趣味で、ゲートICの立体構造をアルゴリズムと見なして、どんな構造なら性能を上げられそうかのシミュレーションに使ってるけど。
0708デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0709デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0710デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0711デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0712デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANそれは本物のクイックソートか?
0713デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN1) クイックソートって、列から適当な要素を選択して、
2) それよりも小さい要素を集めた列と、大きい要素を集めた列を作り、
3) 作られた2つの列に対して 1)、2) を施し、列を連結する、ものだよね。
このアルゴリズムの骨組みを守りつつ、
平均・最良の計算量が O(n log n) で、最悪が O(n^2) になっていれば、
どれほど馬鹿な実装方法を使おうが、どれほど処理に時間かかろうが、
どれもみんなクイックソートを名乗っていいと思う。
Haskell の稚拙なクイックソートの例は入門サイトや入門書にはたいてい載ってるし、
どんなバカでも理解できるだろうし実装できる。
だから >>710 のは、いくら何でも偽物ってことはないだろ。
というか Haskell の偽物のクイックソートの例を見てみたい。
と思ったのだが、どうだろう?
0714デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0715デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0716デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0717デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0718デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0719デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANzipperの説明を読むだけでエクスタシーに達します
0720デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0721デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0722デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0723デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0724デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN>>712じゃないけど、Haskellのよくあるクイックソートは、
空間計算量が最悪O(n^2)になるという点で普通のクイックソートと違って怪しい
0725デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN量子コンピュータが実現した世界で何言ってんだ?
0726デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANtwitterでも今年に入ってからこの話題で盛り上がったようだ
まとめのタイトルが笑える
http://togetter.com/li/445854
0727デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN怪しいというのが曖昧でよく分からないのですが、
「空間計算量が最悪でもO(nlogn)である」というのは、
クイックソートである事の必要条件なのでしょうか。
0728デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN俺にも分からん
0729デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0730デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0731デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANqs :: (Ord a) => [a] -> [a]
qs [] = []
qs (x:xs) = qs (filter (< x) xs) ++ [x] ++ qs (filter (> x) xs)
空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?
0732デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANなんかwikipediaのクイックソートのページにも実用性が云々と書かれているけど、そもそもリストという
データ構造自体がソートと相性が悪いんだから、そんなこと言っても仕方ないと思うけどね
大量のデータを扱うなら他のデータ構造を使うべきだし、ごく少量のデータなら入門書の実装の
方がむしろ実用的だろう
>>731
それだと重複した要素が消えることないかな?
0733デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0734デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANデータモデルとデータの追加でよいソートは異なる
0735デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN>空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?
入力が既に正順か逆順にソートされている場合。O(n^2)になるのは正順か逆順のどちらか
だけなんだけど忘れた。この板のHaskell関係の過去スレの一つに議論があったはず
(ちょっと探したけど見つからなかった、曖昧でごめん)
0736デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN0737デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANコーディングの合間に喫煙していたと何故判ったのですか!?
0738デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANHaskellで一から作ったライブラリ
どっちが幸せになれるの
0739デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN(+) (-)
:: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a
これを解説してください。(+) を数ではない (-) に適用できる?
0740デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN恥ずかしい
0741デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANヒント:カリー
0742デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANx :: Num a => a
y :: Num a => a
(+)(-) f x yのかたちで呼び出すんだろうけど
Num (a -> a -> a)が意味不明すぎる
自然数をラムダ関数で表現するやつかな
0743デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANNumとして解釈できるラムダ関数を定義すれば良いんだよな
えーとどんなだっけ
0744デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN0745デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN(-)はデフォルトでは「数」じゃないけど、インスタンスを定義すれば数になる
たとえば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)を加減乗除できるようになる
0746デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANすまんすまん、= を書き忘れてた。
< か > のどちらかに = を追加して考えて。
>>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 が見られるようになったら調べてみるけど、
今の所自分の頭ではこう考えた。
0747デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN> (+) を数ではない (-) に適用できる?
できない。
*Main> :type (+) (-)
(+) (-) :: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a
これが言っているのは、ざっくりいえば「もし、(-)が数であれば、(-)に(+)を適用できますよ」ということ。
まず、プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるようにしてあげなければならない。
首尾よくそれが実現できたら、晴れて(+)を(-)に適用できる。
0748デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANありがとうございます。
> プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるように
これが実際できてしまう、というのが、Data.NumInstances なのか。
0749デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANWikipediaのラムダ計算の自然数と算術の項目に
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))
としてラムダ関数で自然数の計算をシミュレートする方法が載ってる
0750デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANそれだと自然数の型が(forall a. (a -> a) -> a)みたいになって、
>>739で要求されてる(a -> a -> a)とは別物
0751デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN0752デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN(+) が間違ってるな。
(+) := \m->\n->\f->\x-> m f (n f x)
0753デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANID:t6uYFe0B!と本に書いてあるのですが、他の言語でも出来そうな気がするのですが?
nibai :: Int ->Int
nibai n = 2*n
void nibai(int n){
value = 2*n;}
0754デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0755デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN「haskellが他の言語と違うのはside effect freeだから!」
と書かれていた本のタイトル名を教えてください。
0756デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANそんな関数に私もなりたい
0757デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0758デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0759デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0760デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANああ、全ての行が見てるとムズムズする
0761デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0762デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANID: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
0763デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANに書いてあったけどクラスの価値をほとんど捨ててる設計じゃん。
0764デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.AN0765デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.AN/ /パカ
/ /
/ /ハ,,ハ
/ ヽ(=゚ω゚)ノ__ぉはぃょぅ
// ( x ) /
" ̄ ̄ ̄ ̄
0766デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANパッケージが違う
動画で使ってるのはGLFWでなくてGLFW-bの方
0767デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANGLFW-b パッケージにはその関数はあるけど、GLFW パッケージにはないよ。
0768デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANID:cVdIS5P/!どうやって使うのか調べてきます。
けど、動画を見る限りじゃGLFW-bが見当たらないのですが。
0769デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.ANマージ
0770デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANそれマージで言ったん?ソートすんならすぐ出せ
マージなら2ちゃんねらソート力を挙げて列べるが
0771デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANID:Hq+EmFHl!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にヒットして関数が終了するのであればそうなのかな〜と思っていたのですが。
0772デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANその関数の性質を帰納法で証明できる関数だと理解していたが、違うだろうか
0773デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANもちろん文字列上の原始帰納関数ということで問題ないが。
0774デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.AN0775デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANチューリング機械計算可能関数には一般帰納関数も含まれるから。
0776デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANID:Hq+EmFHl!ん?では普通の帰納関数とはなんでしょうか?
上の方に一般帰納関数というのがありますが。
0777デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANHaskellの話題じゃないし。
0778デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANID:Hq+EmFHl!確かにスレチだ。すみませんでした。
0779デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN0780デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANなんで Haskell だと「今一番熱い漫画は?」みたいなノリで頻繁に投げかけられるんだろ。
Haskell の最新事情を追いたかったら、こんな所で質問するより、
メーリングリストにでも登録して議論してた方が何倍も良いと思う。
0781デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANそう考えていた時期が私にもありました
0782デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANバージョンに関係なく、ライブラリのzipファイルをコピーするだけでOKにしてほしいです
0783デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN数学を知らないものには猫に小判
かく言う俺は数学の記述法自体が過去の遺産を引きずって不合理極まりないと思っているが
0784デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN0785デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN計算言語学は計量言語学から来てて、元々言語学だから文系になってると思うが。
いずれにしろ、理系と文系を分ける発想(多分、旧制の時代の理科と文科から
来てると思うが)に縛られているうちは、生成文法みたいな革新的な発展が
生まれてくることは望めないだろうねぇw
0786デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANそんな的外れな話をHaskellスレでして恥かしくない?
0787デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN>生成文法
この前古本屋にいったら生成文法がらみの古書が山積み‥‥‥
よっぽどはやったんですねえ、チョムスキー御大あいもかわらず大気炎をあげてらっしゃる「テロ、テロと皆はいうがアメリカが最大のテロ国家」‥‥
0788デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN昔流行っただけで廃れたもの、と勘違いするパターンねw
0789デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANregular grammar あるいは regular expression って生成文法全体からすると生成規則はかなり制限されていると思う
いや、それはいいとして、DFA と「文法」をリンクさせる、とかもチョムスキー以降なの?
今の計算機言語の特に文法の考え方はチョムスキー以降の産物なの?
0790デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANライブラリのzipファイルをコピーするだけでOKの場合、いつコンパイルするの?
そのライブラリが依存している別のライブラリは自分で調べてダウンロードするの?
0791デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN自分で調べろよ、スレ違いだよ。
0792デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANいろんなバージョンのバイナリがzipで固まってて、実行するときに選ぶようにするんだよ
プラットフォームだけで実行できるように、依存してるのも全部zipに入れておくんだよ
0793デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN俺も同じ事を感じてる。しかし多分全然違う視点なんだろうね。
スレチスマソ
0794デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN0795デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANチョムスキー階層
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年にノーム・チョムスキーが発表した。
0796デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANわたしは初耳ですけど、あなたの予想ではなく委員会メンバーの発言?
論文に書くそのままの表現、とはどういったものなのでしょうか。
論文に「何を」書く際の表現方法の事なのでしょうか。
論文に書くそのままの表現という事において、
Haskell 以前の言語では何が不満だったのでしょうか。
[A History of Haskell] によると、Haskell の主な目的は
バラバラだった既存の関数型言語の統合と、実用的なアプリも作れる関数型言語を作る事、
この2点だとわたしは感じたのですが、どうでしょうか。
0797デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANその実用的じゃないから統合する必要すらなかった関数型言語群を、わざわざ統合したいという欲求の源は何だったのか?
私は、論文に書くそのままの表現でプログラミングしたいという欲求だと思う
具体的には、論文の中の、帰納的証明で使われる表記と概念の数学的表現とDSLの仕様で使われる表現そのままをソースコードに書きたいという欲求
0798デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN最後の段落は、英国関数型言語界の統一言語プロジェクトを立ち上げた趣旨だな。
>>797
それは(事実かどうかは別として)言語仕様の設計趣旨じゃないかな。
0799618
2013/07/14(日) NY:AN:NY.AN'$'より'.'で関数を結合させた方がいいみたいな風潮があるようだけれど
なんで?
0800デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANhaskell platformに初めから付いているライブラリ以外、結局・・使い物にならないのでは?
0801799
2013/07/14(日) NY:AN:NY.AN流れぶち切ってすまん
0802デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANMiranda的というか。
0803デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN(1) 打鍵数が減る
(2) ($)よりも(.)を使ったほうが解かりやすいことがまれにある
(3) 宗教的理由
0804デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN例えばfree-gameはインストール失敗する。
glossはglossとHaskell platform 特定のバージョンの組み合わせでインストール成功。
インストール失敗する度にcabalによってインストールしたファイルをすべて削除して、
haskell platformをアンインストールして再インストール。
再インストールする時、バージョンを1つ前にしたり。
試行錯誤してインストールに成功することもあれば、
結局どうやってもインストール失敗することがある。
正直、うんざり・・。
0805デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN0806デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANライブラリのインストールは多少マシになる。
更に、Windows なんて使わずに Linux 系を使っておけばもう少しだけマシになる。
0807デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN0808デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN0809デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANお前がどういう環境を使っていてインストールがどうやって失敗するかを書かないとどうしようもない
ここで質問しても良いけど、ユーザ数がすごく多いパッケージじゃないなら
パッケージのバグトラッカやメーリングリストで直接報告した方が解決が早いと思う
とりあえずcabal install free-gameを実行してみたけど普通に成功した(Linux, amd64, GHC 7.6.3)
0810デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN0811デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN:(;゙゚'ω゚'):やってないのか……?
0812デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANこの前挿入しようとしたら例外が起きてボトムが返された
どうなってんだよアイツ
0813デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANネタじゃなく自分いつレスしたのかと思った
cabal-dev使えばいいんじゃね? 使い方良くわからないんでゆっくり調べてる最中だけど
0814デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANGLFW-b-0.1.0.5を入れなおしたらインストールできたよ。
0815デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN自分でインストールしたりもしてるわけ?
0816デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANなので悔しくて枕を濡らしている
0817デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN0818デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANfree-gameがupdateされて、GLFW-bのバージョン指定が修正されてるね。
0819デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN一応こっちの状況を書くと。
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.
0820デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANglossインストール成功
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.
0821デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN文字コードのライブラリをインストールしようとして上手くイカず・・。
UTF-16とShiftJISの相互変換、結局自作したよ・・。
単なる対応表があればいいので、文字コードライブラリ不要だった。
0822デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANWindows版は、作者が全く対応を考慮していなくてどうやっても
動かない場合があるから諦めが肝心。
0823デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANHaskellをそこまでして使うのかという意見は置いておいて
0824デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN0825デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN0.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)
0826デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANそこで諦めるなよ!作者に文句言ったりパッチ送ったりしろよ!
0827デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN0828デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.ANHakageDBがよく出来てるから、ソース見て調べればある程度
見当がつく場合も多いけど、全くこりゃお手上げって場合も
あるわけで。
0829デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN0830デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN0831デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.AN0832デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANまずはIOモナドを消し去らないと……
0833デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.AN0834デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.AN0835デフォルトの名無しさん
2013/07/16(火) NY:AN:NY.ANID: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とす。
代数的データ型でいい例はあるでしょうか?コンストラクターとつかったやつがあればいいのですが。
0836デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN0837デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANackermannくらいか
0838デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.AN0839835
2013/07/18(木) NY:AN:NY.ANID: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が必要だからこれは違う(普通の帰納)?
0840デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.AN安心しろ
君レベルの人が作る関数はすべて原始帰納だから
0841デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANID:y4brIquX!分かりました。ありがとうございます。
原始帰納ってベースケースにヒットして演算が終了すると思っているのですが,
そうじゃない帰納ってどんなのがあるでしょうか?
色々あると思うのですが。原始帰納の数の方が少ない気がする。
0842デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.AN(+) :: Nat->Nat->Nat
(*) :: Nat->Nat->Nat
fact :: Nat->Nat
とか
それでアッカーマン関数は原始帰納ではない有名な例であると
0843デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.ANf(m.n) < f(m+g(n),n-1)となるようなg(n)が定義可能だけど計算不可能になったりする
0844デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.AN0845デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.ANID:1YZrtrs7!説明ありがとうございました。
0846デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.ANコンピュータではそうでもない。
0847デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.ANID:1YZrtrs7!>>839など、
プログラムである関数があったとして、ベースケースにマッチしてその関数が終了するのであれば、それは帰納関数だと思うのですが。
間違っていたらすみません。
0848デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.AN0849デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.AN0850デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.AN0851デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0852デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0853デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN滅亡へ向けひた走る関数実行中
0854デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN場違いの話題でスレを汚したのでHaskellに関する話題を提供する義務が発生しました
0855デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0856デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN本当にうれしいわ
お前らゴミクズみたいな中途半端なインテリゲンチャ気取りが悔しがる顔を想像するとな!!
0857デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0858デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0859デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN純粋に理論を追及した結果が大虐殺なだけ
理論が間違ってたことを指摘しないと、いつまでたってもデバッグは終了しない
0860デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN他所でやってくれ
0861デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0862デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0863デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0864デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0865デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANhttp://www.h-online.com/newsticker/news/item/Processor-Whispers-About-Haskell-and-Haswell-1389507.html
0866デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0867デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0868デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0869デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN0870デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANもしかして: すごいH本
0871デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANもしかして: すごいH本
0872デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANというえろげ
0873デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN0874デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN0875デフォルトの名無しさん
2013/07/26(金) NY:AN:NY.ANHaskellたんが蛹のまま何ヶ月も動かないの!
0876デフォルトの名無しさん
2013/07/26(金) NY:AN:NY.AN0877デフォルトの名無しさん
2013/07/26(金) NY:AN:NY.AN0878デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANお前らまさにこれだよな
0879デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN見つけておいたことに感謝しろよ
「Ant Farming」(実験ばかりして実りのない学者タイプ)
0880デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN0881デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN0882デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.ANRubyやJava、Cと比べて
プログラムが横に長くなると思うんだけど
(インデントが深くなるから?)
エディタ上で見るときは横に広げればいいんだけど
印刷すると見難くならない ?
みんなどうしてるの?
0883デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANA4の縦に2P表示
0884デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANあまり長すぎる行は折り返せばいいし。
幅は印刷する前に分かるんだから自動化は可能。
0885デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0886デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0887デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0888デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.ANVimで窓区切ってそのスペースで見渡せるコーディング身に付いたんだけど?
0889デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0890デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0891デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0892デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.ANはーっはっはっは
0893デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.ANifdefの嵐にくじけない心を貰った
0894デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0895デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0896デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0897デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0898デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0899デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0900デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANなぜ?
IDE って「統合開発環境」だよね。
APIがたくさんある事で、何と何を統合する必要が出てくるの?
0901デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0902デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0903デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANコードスニペット程度の使い方をしているとエスパー。
0904デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0905デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANすごいどうでもいい事だが、本来は「すごくどうでもいい」な
0906デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0907デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN作者すら恥じたvi系のエディタを使うのは素人の遊びくらいだ
0908デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANvi系はどのOSでも動くし、vi使えれば実用上問題が発生しないことも実証されている。
0909デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0910デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANあの化石発言いまだに引っ張るやついるけど、
いい加減今のVimと当時のvi一緒にすんなよ
0911デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0912デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0913デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN上でAPIがどうこう言ってた人?
0914デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0915デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0916デフォルトの名無しさん
2013/08/02(金) NY:AN:NY.ANID:FUuzvtAU!俺も知りたい。
eclipseFP とか使っているひといないかな?
0917デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.ANどこもこんなのばっか
0918デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.ANハスケルらしい
0919デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0920デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.ANなあ?ゴミクズは抽象的なのがすきなんだろ?
だから抽象的にバカにしてやったんだがね
0921デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0922デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0923デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0924デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANという印象
0925デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANなんとなく頭では分かっているような気がしますが、人にわかりやすく説明できるかと言われると、
何からどのような順で説明したらいいかとか含めて自信がなく、自分の理解度がよく分からない。
クイズやテストみたいな形で出題されると、理解度を客観的に測れるのではないかと思うのですが・・・
0926デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN非決定性計算から説明してたから物凄く分かりやすかったけど、タイトル見るの忘れた
0927デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0928デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANその本知りたい。お願いだから思い出して。
0929デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANそれは既にプログラマ。
0930デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANせーがー
0931デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN本屋に行ったけどもうなかった
今年の4月に数学の新刊コーナーにあったと思う
非決定性計算演算子Pと確率計算演算子Dの似ている部分を抽象化して取り出したモノがモナドTだという説明は今まで読んだ中で一番分かりやすかった
0932デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANそっちから探したほうが早い気がする。
0933デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN単行本だけど章ごとのアンソロジーみたいになってて、全部で5章くらいあって、最後の章にいきなりモナドが出てきた
他の章は応用数学だけどモナドとは無関係で独立した内容だった気がする
0934デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0935デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN数学関連新刊一覧
http://www.roy.hi-ho.ne.jp/shomoku/ntb/4/a01.htm
0936デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANhttp://www.amazon.co.jp/%E8%B6%8A%E5%A2%83%E3%81%99%E3%82%8B%E6%95%B0%E5%AD%A6-%E8%A5%BF%E6%B5%A6-%E5%BB%89%E6%94%BF/dp/4000050958/ref=sr_1_1?s=books&ie=UTF8&qid=1375793177&sr=1-1
最後の方の章を立ち読みすれば分かると思われ
0937デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN蓮尾一郎という人がそれっぽいね
ttp://www.iwanami.co.jp/moreinfo/0050950/top.html
0938デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANなんでだろう?
戒めてるのかな
苦労したからほざいてるのかな?
そういうゴミクズは穀すべきだね
0939デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0940デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0941デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0942デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0943デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANありがとう
0944デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN0945デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN0946デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN0947デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN0948デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN0949デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN0950デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANモナドそのものの説明は分かりやすいけど、型とモナドの関係はあんまり分からなかった
0951デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.ANナボナ知らない世代?
哀しいなぁ
0952デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.ANもう統合開発環境に慣れてるから
テキストエディタとコマンド辛い
0953デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.AN0954デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.AN大丈夫、エディタもすぐ慣れる
いつまでも慣れなければ歳のせいだから諦めろ
0955デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.AN0956デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.AN0957デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0958デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0959デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0960デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN逆に、何を求めてIDEを使うのかが分からない
0961デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0962デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN・コードと連動したウィジェットのペタ貼りによるGUIアプリの開発
・Cabal を用いたパッケージ化やテストなどの支援
・弱頭部正規化の様子やサンクなどコンパイラ内部の挙動も晒したデバッガ
・コード解析
・プロファイリングの支援
この辺りを一つに統合した、見た目や操作がシンプルな IDE を求む。
0963デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANコードと連動したウィジェットの
というところで既にわからん(笑)
0964デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN他は統合されてなくてもいい
0965デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANどこが面白かったのかよく分からんが、要するにWIZIWIGなGUI開発ツールだ。
(WIZIWIG ももう死語かもしれんが)
ここでいうウィジェットというのは、Win32APIでいうところのウィンドウクラスが定義されたパーツだ。
wxやGTKなどではほぼ同じものをウィジェットと呼んでいる。
それらをWIZIWIGなGUI開発ツール上で仮想的なウィンドウにペタペタ貼っていくことで、
各ウィジェットのウィンドウ上の位置やサイズ、挙動などを直感的に定義していく。
これがよくあるIDEの機能の一つだ。
コードと連動したというのは、WIZIWIGなGUI開発ツール上でウィジェットを貼った際に、
実行時にそのウィジェットが表示されるようにプログラムコードも自動的に変更される機能だ。
逆、つまりコードを改変することでGUI開発ツール上のウィジェットが変更される機能もある。
VisualStudioのC#用にはそんな機能もあったはず(他の言語はしらん、あるかもしれん)。
ウィジェットの主だった定義をプログラムコードではなくXMLなどのファイルに分離させる場合は、
もちろんそのXMLファイルも連動する。
そのような機能を持ったGUI開発ツールがHaskell用のIDEに統合されているといいな、という話だ。
既に分からんということは、その先も分からんのか?
だったら面倒だが説明してやるぞ。
0966デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0967デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANWYSIWYGな
0968デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANそうだったけ
まぁいいや
0969デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN> 既に分からんということは、その先も分からんのか?
> だったら面倒だが説明してやるぞ。
ふつーは自分で調べろってながれかと思えば
説明してくれるとはありがたい。
963ではないけれど説明してくれると幸いです。
Visual Studio とXCodeとEmacsの補完してくれるやつ(AC?)
使ったことあるんだけれど、選択候補が現れるたびに、
メニューが開いたり、(上下)キーを奪われたりでいまいちいらっとした。
なんかのWebページ見たんだけど、IntelliSenseがあると
ドキュメントを見なくて済むそうな。
でも、そんなの危なっかしくない ?
0970デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANWhat You See Is What You Get のアクロニムなんだから
まぁいいやはいかんでしょ
0971デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANよし、至極面倒だが説明しよう。
・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 として統合されていて、全ての機能が情報を共有していて有機的に機能すれば素晴らしい。
0972デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0973デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0974デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN給料泥棒すぎる
0975デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0976デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0977デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0978デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN>>971は何と何を統合してどんな機能を実現したいんだ?
0979デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0980デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN無能はすぐ否定するんだから
0981デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0982デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANIDE使ってない人間は単に個々の機能使い分けてるだけなのに
0983デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0984デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0985デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN統合環境を使いたくない奴は使わなければいいだけのこと。
haskellが広く普及するためには避けられないことだ。
0986デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0987デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN一年ほど前の日経コンピュータ?に載ってる。
つまり、趣味でしか使わんからと言ってる奴は、ただの世間知らず。
haskellがもっと広く普及するためには統合環境は不可欠。
使いたくない奴は使わなければいいだけのこと。
0988デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANタグジャンプじゃなくて目的の関数を呼び出してる関数を再帰的に全部列挙する機能
もちろん列挙した関数へジャンプできる
この機能がないと中規模以上のプロジェクトでは仕事にならない気がする
市場トラブルで即日対応が求められるような場合もちんたらemacsとかやってるのかっていう素朴な疑問
0989デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN統合環境がないと不便だなんて言ってる似非プログラマを馬鹿にしている
0990デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANまあそれでなくては困るなw
0991デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN趣味ならテクニックに溺れるのは勝手だけど人生は短いよ?
0992デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN統合環境のどこに価値を見出してるのか意味不明
0993デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN自分の希望を自分で叶えず長文で垂れ流すだけの奴に言っても無駄かな
0994デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN化石みたいな環境から改善する努力を怠ってる人間だと言うのは想像できる
0995デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANまあ挙げられんだろうが
0996デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN具体的に使う頻度が高いのはGUIデザイナとリファクタぐらい
設計は今のところ単体のが効率いいから触ってないし
どうだ?統合環境だから何もかも便利とは限らないだろう
0997デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANエディタは使ってない奴多いんじゃないかなと書いた
0998デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0999デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN1000デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANHaskellが広く普及なんて永遠にしないのに、なんでそんなこと気にするんだ?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。