関数型プログラミング言語Haskell Part14
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/03/06(日) 13:32:08.91ttp://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/
2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに?または全角スペースを使うことができます。
0002デフォルトの名無しさん
2011/03/06(日) 13:36:32.17・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
0003デフォルトの名無しさん
2011/03/06(日) 14:00:18.76・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
こんなもんでどうでしょう
0004デフォルトの名無しさん
2011/03/06(日) 14:07:15.39ちょろっと追加
ふーぐる
Haskell API search Engine
ttp://www.haskell.org/hoogle/
簡単な使い方
1.検索バーに関数名を入れて検索
例 map
2.検索バーに型名を入れて検索
例 (a -> b) -> [a] -> [b]
0005デフォルトの名無しさん
2011/03/06(日) 14:16:11.35ところで Hoogle と Hayoo って機能的には同等?
俺は Hoogle の方が発音しやすいから、ずっとこっちを使ってるが
というか、人に勧めるのに「ひゃゆぅ〜」って言うの恥ずかしい
0006デフォルトの名無しさん
2011/03/06(日) 14:39:20.38Hoogle:公式、最新データ
Hayoo:Holumbusプロジェクトの一部で、検索結果に使用例も出る
みたいな感じ?
使ってる人いれば適当にフォローお願いします
0007デフォルトの名無しさん
2011/03/06(日) 15:00:41.770008デフォルトの名無しさん
2011/03/06(日) 15:47:55.870009デフォルトの名無しさん
2011/03/06(日) 15:50:15.350010デフォルトの名無しさん
2011/03/06(日) 19:40:40.85最近気になったので聞いてみる
Haskellって人工知能との相性はどうなんだろ
0011デフォルトの名無しさん
2011/03/06(日) 19:44:10.990012デフォルトの名無しさん
2011/03/06(日) 20:06:27.56ACM にもその手の論文が結構ある
Haskell Wiki にも記事があって、色んな人が研究してることが分る
http://www.haskell.org/haskellwiki/AI
それほど興味が無いから答えになってなくて悪いが
0013デフォルトの名無しさん
2011/03/06(日) 20:55:02.42論文を書きやすいという意味で、Haskellと人工知能の相性はすこぶる良い
0014デフォルトの名無しさん
2011/03/06(日) 21:15:40.28C言語でAIとかの本も出てたし、本質的にはそうなんだろうけど、人工知能と言えばPrologってイメージが有るじゃ無いですか
>>12-13
ありがとです
何か、詰碁を解くのに向いてるとか聞いたんで、ひょっとして?と思ったんですよね
0015デフォルトの名無しさん
2011/03/06(日) 22:40:42.53> 何か、詰碁を解くのに向いてるとか聞いたんで
これですよね
http://www.shido.info/hs/haskell1.html
http://www.shido.info/hs/haskell12.html
AI のアプローチがどのようなものか知りませんが、
この詰碁を解くプログラムは経路探索ですね
おそらく将棋や碁、オセロなんかの終盤における「読み切り」と同じかと
0016デフォルトの名無しさん
2011/03/07(月) 21:20:47.980017デフォルトの名無しさん
2011/03/08(火) 01:30:35.02ぶっちゃけ可変配列の書式が楽な言語は全部AIに向いている
0018デフォルトの名無しさん
2011/03/09(水) 15:04:56.44callCC f = Cont $ \k -> runCont (f (\a -> Cont $ \_ -> k a)) k
これの最後のkって必ず評価されないと思うんだけど合ってるのかな
0019デフォルトの名無しさん
2011/03/09(水) 17:34:40.08じゃ最初に評価されるんでないの?
0020デフォルトの名無しさん
2011/03/09(水) 18:13:08.53runCont (f (\a -> Cont $ \_ -> k a))に適用する方のkはCont $ \_ -> k aで捨てられてるから、
それならundefinedに置き換えても問題なく動くんじゃないの、と
0021デフォルトの名無しさん
2011/03/09(水) 18:21:08.240022デフォルトの名無しさん
2011/03/09(水) 20:01:07.13久しぶりに見たら、Haskell、4つのAllのベンチで
どれもCの3倍以内の速度が出てて、
全てOCamlよりも速いんだけど何が起こったの?
0023デフォルトの名無しさん
2011/03/09(水) 22:14:09.80新しい仲間が発売されるらしい。
Learn You a Haskell for Great Good: A Guide for Beginners
ttp://www.amazon.co.jp/exec/obidos/ASIN/1593272839/
webで見られるんだっけ
0024デフォルトの名無しさん
2011/03/11(金) 11:53:44.710025デフォルトの名無しさん
2011/03/11(金) 22:21:16.22なにこの日本人好みなデザイン。俺得。
0026デフォルトの名無しさん
2011/03/12(土) 00:31:28.410027デフォルトの名無しさん
2011/03/12(土) 01:52:03.930028デフォルトの名無しさん
2011/03/12(土) 01:57:31.06ネットに繋げられるならいつでもハスケれるよ!
http://tryhaskell.org/
明日は冷えるらしいから暖かくして風邪引かない様にね
0029デフォルトの名無しさん
2011/03/12(土) 18:49:15.12-fglasgow-extsを拒否するようになって、大地の神さまが激怒されただよ
0030デフォルトの名無しさん
2011/03/13(日) 12:06:26.480031479
2011/03/13(日) 13:55:50.34思わず震災さえもネタにしてしまうのは、
普段から抽象的な思考に努めているHaskeller特有の発想なのだろうか?
それとも自分達は一般人には手の届かない特別なプログラミングをしているという、
潜在的な選民意識の現れなのだろうか?
関西大震災発生直後の現地取材で
「まるで温泉街のようだ」とコメントした某TBSの故アナウンサを憶い出す。
関西大震災で知人が被災した経験のある自分には、
そんなHaskellerの感性が理解できない、理解したくない。
0032デフォルトの名無しさん
2011/03/13(日) 14:14:22.07全部同一人物だと思っている
0033デフォルトの名無しさん
2011/03/13(日) 14:18:55.980034デフォルトの名無しさん
2011/03/13(日) 14:30:14.250035デフォルトの名無しさん
2011/03/13(日) 14:39:15.12ここにパッケージ gtk(gtk2hs)がインストールできない
(パッケージ gtk2hs-buildtools はインストール済み)
cabal gtk と実行すると、cairo のビルドが完了して Registering cairo-0.12.0... の段階で
「setup.exe: internal error: unexpected package db stack: [UserPackageDB]」となる
それでもインストール処理が続く
次に glib のビルドも完了して Registering glib-0.12.0... の段階でまたもや
「setup.exe: internal error: unexpected package db stack: [UserPackageDB]」となる
その後、cabal: Error: some packages failed to install: となり、
cairo と glib で例外が発生して、インストールが未完で終了した
パッケージの説明を見る限りは、ghc 7.0 でも問題ないそうだが、
なにか処理が足らないのだろうか
Haskell Platform 2010.2.0.0 では次の作業手順で gtk がインストールできてたから
全く同じ手順でインストールしてみたのだが
1. http://www.gtk.org/download-windows.html で gtk の All-in-one bundles の 2.16 をダウンロードし、
"c:\" 下に展開し、bin ディレクトリへのパスを環境変数に追加する
2. Haskell Platform フォルダ内の mingw\bin ディレクトリへのパスも環境変数に追加する
3. cabal install gtk2hs-buildtools を実行してから cabal install gtk を実行する
0036Perl忍者 ◆M5ZWRnXOj6
2011/03/14(月) 19:21:49.11http://hibari.2ch.net/test/read.cgi/linux/1300097049/
0037デフォルトの名無しさん
2011/03/15(火) 14:58:12.81詳しい本おしえてください。
0038デフォルトの名無しさん
2011/03/15(火) 15:15:07.85命令文の実行順を基礎数学だけを用いて表現したモデルがモナド
命令文の順序付き重複集合をモナドで表現したことで、新たに何かが生まれたという話は聞かない
ただ、モナドで表現できたことで論文を大量生産できた
0039デフォルトの名無しさん
2011/03/15(火) 17:06:18.34http://www.sampou.org/haskell/a-a-monads/html/
0040デフォルトの名無しさん
2011/03/15(火) 17:47:03.19で、そこにモナドがあってその性質はうんたらかんたらとかそういう内容
モナドを使えば典型的な計算を綺麗に構成できるって事はまぁそれなりに嬉しい事なんじゃないのかな
0041デフォルトの名無しさん
2011/03/16(水) 01:00:52.450042デフォルトの名無しさん
2011/03/16(水) 13:08:25.76アーカイブがダウソロードできないのだが(藁
0043デフォルトの名無しさん
2011/03/16(水) 18:43:10.890044デフォルトの名無しさん
2011/03/17(木) 01:33:16.11ネットがナローバンドだから…
0045デフォルトの名無しさん
2011/03/17(木) 17:07:24.740046デフォルトの名無しさん
2011/03/20(日) 17:41:09.18よそのGUIライブラリのDLLをHaskellで使いたいんだけど、IOが遅延されてこまってる。
createWindowみたいなIO()の関数があっても、
これを出力と認識してないみたいで最後まで実行されないんだ。
0047デフォルトの名無しさん
2011/03/20(日) 19:57:53.60HaskellはIO動作を勝手に遅延したりしないよ
0048デフォルトの名無しさん
2011/03/20(日) 21:09:20.42IO(a->b)の(a->b)の副作用のある関数が返ってきてて、その関数を実行してないのが問題だったっぽい。
thx
0049デフォルトの名無しさん
2011/03/21(月) 07:41:51.33> IO(a->b)の(a->b)の副作用のある関数が返ってきてて
それなら、IO (a -> IO b) であるべきなんじゃ…
0050デフォルトの名無しさん
2011/03/21(月) 11:12:08.27というかVisualC++で作ったDLLの引数がある関数を呼んだら
Segmentation fault/access violation in generated code
って怒られた。runghcなら通るのに、コンパイルして実行するときだけ……。
005149
2011/03/22(火) 05:57:11.86どうつまづいているのかよく分からんが、FunPtr や ForeignPtr を使わないといけないのかもしれん。
このへん↓に解説がある:
http://www.haskell.org/ghc/docs/6.8.3/html/libraries/base/Foreign-Ptr.html#t%3AFunPtr
0052デフォルトの名無しさん
2011/03/22(火) 21:49:40.52原因はDLLの関数をHaskellで定義するときに、stdcallにしてたのが原因だった。
ccallにしないと駄目なのね。基準がわからんぜ。
とりあえずDirectXの関数をDLLにエクスポートしてライフゲーム実装するところまではできたから、
あとは何とかなりそう。
猛者たちのスレを汚してすまんね。
0053デフォルトの名無しさん
2011/03/22(火) 23:12:20.26適当なソケットに
setSocketOption sock RecvTimeOut 1
とすると以下の例外が出ます
*** Exception: setSocketOption: invalid argument (Invalid argument)
ソースを見てみると setSocketOption は ffi で setsockopt を呼んでいるように見えました
setsockopt でタイムアウトを設定する場合は、struct timeval で秒数を指定してポインタを渡す必要があります
しかし、setSocketOption では Int で秒数を指定してポインタを渡しているようでした
エラーの原因は、上記で正しいですか?ffi は初めてなのでほとんど理解できませんでした。
もしそうだとすれば、このバグを報告するとしたらどこが正しいですか?
Maintainer に直接メールするのが正しいですか?バグ登録をする専用のページなどがありますか?
0054デフォルトの名無しさん
2011/03/23(水) 09:06:17.27http://trac.haskell.org/network/ticket/23
があがってるから、認識はされていると思うけど、早く対応してもらいたければ
github の issue にあげるのがいいんじゃない?
https://github.com/haskell/network/issues
0055デフォルトの名無しさん
2011/03/24(木) 08:38:54.640056デフォルトの名無しさん
2011/03/24(木) 08:58:34.930057デフォルトの名無しさん
2011/03/24(木) 11:47:03.640058デフォルトの名無しさん
2011/03/24(木) 12:23:32.95だいたい基準値の3倍程度の放射能なら一生飲み続けても高々0.07%ガン発生率がアップするだけだし、
浄水器使ってればさらに下がるでしょ。
気にしてる奴の方がストレスが原因で禿げるか死ぬかするw
0059デフォルトの名無しさん
2011/03/24(木) 12:35:36.01数年後、忘れた頃にインフルエンザとかで病院行って尿検査したら、
溜まった分が一気に評価されるぞ
0060デフォルトの名無しさん
2011/03/24(木) 12:50:13.130061デフォルトの名無しさん
2011/03/24(木) 12:50:36.16どこでそんなデマを…
0062デフォルトの名無しさん
2011/03/24(木) 16:26:50.33浄水器に放射性物質が溜まったら楽しそうね。
0063デフォルトの名無しさん
2011/03/24(木) 16:45:56.610064デフォルトの名無しさん
2011/03/24(木) 16:49:21.56人間死ぬまでに50%の確率で発がんするんだってさ。
50.07%に発がん率がアップしたとして気にするの?
0065デフォルトの名無しさん
2011/03/24(木) 17:05:48.541人の母集合を対象に癌になるかならないかというのは確率じゃねーよwww
0066デフォルトの名無しさん
2011/03/24(木) 17:11:58.50一人?
いや、複数だが。
0067デフォルトの名無しさん
2011/03/24(木) 20:44:46.18いいえ、複数です。
だろ
0068デフォルトの名無しさん
2011/03/25(金) 00:15:26.040069デフォルトの名無しさん
2011/03/25(金) 03:53:53.96ろ過システムは、溜ったヤツがたまにポロって取れて流れてくるから
0070デフォルトの名無しさん
2011/03/25(金) 07:20:10.390071デフォルトの名無しさん
2011/03/25(金) 07:36:47.61遅延評価は、溜ったヤツがたまにポロって取れて流れてくるから
0072デフォルトの名無しさん
2011/03/25(金) 08:22:56.12どうかご安心ください
0073デフォルトの名無しさん
2011/03/25(金) 12:42:45.60こんな Haskell 関係の記事があったら読みたい
ってのは何かある?
俺は Arrow を実際のアプリ製作でどう使うのかとか、
あのライブラリではこういう目的でこう使ってる、
みたい解説がある本が読みたい
0074デフォルトの名無しさん
2011/03/25(金) 13:12:12.43http://twitpic.com/45946f
0075デフォルトの名無しさん
2011/03/25(金) 13:25:48.04はじめは反時計回りにみえた。
たぶん、時計回りに見えるのが正しいだろうから(理由は省略)、オレの能力には小さな問題があるんだろう。
0076デフォルトの名無しさん
2011/03/25(金) 13:51:12.490077デフォルトの名無しさん
2011/03/25(金) 13:54:33.470078デフォルトの名無しさん
2011/03/25(金) 14:03:04.250079デフォルトの名無しさん
2011/03/25(金) 14:59:46.19これで、反時計回りに見えるって、どんな理屈なんだろうと、
画像の差を意識してたら、乳首に気がついて、
乳首が見えるってことは、ブラしてないんだろ?
なんで、揺れないんだ?って不思議に思いながら乳首を見つめていたら、
今度は、反時計回りにしか見えなくなっちゃった。
0080デフォルトの名無しさん
2011/03/25(金) 17:16:02.720081デフォルトの名無しさん
2011/03/25(金) 17:20:07.940082デフォルトの名無しさん
2011/03/25(金) 19:23:12.780083デフォルトの名無しさん
2011/03/25(金) 19:56:14.72時計回り・反時計回りどっちもできるようになった!
0084デフォルトの名無しさん
2011/03/29(火) 11:37:35.600085デフォルトの名無しさん
2011/03/31(木) 17:46:27.57Haskellのリテラルとか式とかdoの中の文とかは既存の文法を基本的に使って、そこに少しだけ新しい文法を入れたい。
そのためには、基本的な構文要素の出来合いのパーサーがあって、それをパーサーコンビネータで組み合わせて使用できればうれしい。
で、探してみると、haskell-src-extsライブラリというのはあったけど、繰り返しとか、選言とかのコンビネータはないよね。
どうすればいい?
haskell-src-extsの上にどうにかしてコンビネータを自分で実装する?
あるいは、基本的なリテラルとかの構文要素もParsecとかでパーサーを作ったほうが早い?
それとも、haskell-src-exts + Parsec みたいなテクニックが存在する?
0086デフォルトの名無しさん
2011/04/04(月) 10:31:55.610087デフォルトの名無しさん
2011/04/04(月) 18:47:50.790088デフォルトの名無しさん
2011/04/05(火) 00:35:16.510089デフォルトの名無しさん
2011/04/05(火) 16:57:08.580090デフォルトの名無しさん
2011/04/05(火) 17:57:20.40Windowsで動けば良いなら、面倒くさいけど、Win32APIバインディングを直接たたくのが無難。
LinuxではGTKを以前Cで使い込んだことがあるから、Gtk2Hsを試したことがあるけど、最新版のGHCに対応してない時期があって使わなくなった。
もっとも、その後動きがあって、その状況は改善されている、たぶん。
面倒くさくてもよいならX11バインディングを使う道もある。
(他のUnix系も同様のはず)
クロスプラットフォームなら、WxHaskellが良く使われている印象だけど、オレはなじめなかった。
3DCGをやりたいならGLUTもある。
HaskellのGUIライブラリは基本的に他言語のライブラリのバインディングなので、選択基準としては、他の言語で使うときとほとんど同じになるだろう:
1. どのOSで動かしたいか
2. 何をしたいか。ダイアログが一つ表示できればそれでよいのか。統合開発環境みたいな複雑なGUIアプリケーションを作りたいのか。あるいはゲームか。
3. 使ったことがあるか。資料は豊富か(他言語向けの資料でも良い)。
0091デフォルトの名無しさん
2011/04/05(火) 18:27:44.290092デフォルトの名無しさん
2011/04/05(火) 19:40:30.48hs-dotnet (http://hackage.haskell.org/package/hs-dotnet)
これで .NET Framework を叩いてくれ
WPF ではなく普通にウィンドウと適当なボタンを表示して、
何か反応させることはできたが、俺はそこで力尽きた
.NET Framework が叩けるんだから当然 WPF も扱えると思うが、
それで「Haskell から直接叩けた」ことになるのかは知らん
0093デフォルトの名無しさん
2011/04/05(火) 20:35:43.714/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
009435
2011/04/06(水) 19:57:54.79解決したのでお知らせする
結論から言うと、恐らく gtk-0.12.0 パッケージの作者のミスだと思われるため、
下記の解決方法はバージョンアップで意味を成さなくなると思う(そうなって欲しい)
http://hackage.haskell.org/trac/hackage/ticket/812
このページに載っているとおり、パッケージの tar.gz ファイルを展開し、
中の Gtk2hsSetup.hs ファイルの内容を一部書き換えてから cabal install する
ただし、gtk-0.12.0 に依存し Gtk2hsSetup.hs を持つ全てのパッケージについて、
同様の方法で個別にインストールする必要がある、しかも依存関係の順に
Gtk2hsSetup.hs ファイルを修正すべきパッケージは以下の通り
・gio-0.12.0
・glib-0.12.0
・pango-0.12.0
・cairo-0.12.0
・gtk-0.12.0
他の依存パッケージは普通にネット越しにインストールすればいい
0095デフォルトの名無しさん
2011/04/06(水) 21:02:18.99乙。こういう問題解決の報告って良いよね。
0096デフォルトの名無しさん
2011/04/07(木) 01:19:05.94ぐぐったら出てきたのだけど、StackOverflowの1件のみだったので日本語で書いておく。
build.plはghc7未対応だから諦めて手作業(Manual Installation参照)。
runhaskell Setup.hs buildするとQtc/Core/Attributes.hsが583行目でエラーするので583行目を下記のように書き換える。
reject' = (Qslot "reject()", \_ -> ())
0097デフォルトの名無しさん
2011/04/10(日) 03:54:27.20009897
2011/04/10(日) 03:57:40.00標準入出力の方は問題なく動いています。
0099デフォルトの名無しさん
2011/04/10(日) 04:14:23.920100デフォルトの名無しさん
2011/04/10(日) 04:30:37.86System.Environment.UTF8
Codec.Binary.UTF8.String (decodeString)
0101デフォルトの名無しさん
2011/04/10(日) 11:34:59.70OS環境のロケールと、コマンド引数、ファイル名の符号化が一致していないのではなくって?
そういうことをhaskellプログラム側でごちゃごちゃやるより(できないとは言わない)、OSのセットアップとか、作業パスを見直したほうが良いと思う。
0102Perl忍者lvl4 ◆M5ZWRnXOj6
2011/04/10(日) 13:48:13.06>2011/01/28
http://hibari.2ch.net/test/read.cgi/prog/1291518728/
>1 :amachang撲滅振興協議会:2010/12/05(日) 12:12:08
> amachangが憎い・・・・amachangが許せない・・・・
> ククク・・・・クククククク・・・・・
> クックックックックックックッ・・・・・
> クー、クー、クー、クー、クー、クー・・・・・
>
> もう許せない。
> もはや沸き上がる滅意を抑えることが出来ない!!!
0103デフォルトの名無しさん
2011/04/10(日) 16:27:41.04Codec.Binary.UTF8.StringのdecodeStringとencodeStringの2つで解決しました。
ありがとうございました。
>>101
恐らく>>100を前提に書いて下さったと思うのですが、そこにすら至ってませんでした。
0104g
2011/04/11(月) 00:29:18.930105デフォルトの名無しさん
2011/04/11(月) 21:14:50.48毎回ネタが濃くて楽しみにしてるんだけど、更新日守ったのって1月だけだよね
早く次のネタこないかな
0106デフォルトの名無しさん
2011/04/12(火) 11:27:42.51みんなどこ見て各パッケージの使い方覚えてるの?
0107デフォルトの名無しさん
2011/04/12(火) 11:54:15.100108デフォルトの名無しさん
2011/04/12(火) 12:50:17.23ソースも見る
それで分からなかったら、基になってる論文などを漁ってみる
0109デフォルトの名無しさん
2011/04/12(火) 15:00:24.31参考になりました。ありがとう。
0110デフォルトの名無しさん
2011/04/13(水) 16:59:33.200111デフォルトの名無しさん
2011/04/14(木) 04:19:16.44haddockするの面倒です
屡々エラーでるし
目的のパッケージが多数の他パッケージに依存していた場合なんて
発狂しそうです
0112デフォルトの名無しさん
2011/04/14(木) 07:28:39.50そうすれば cabal install でドキュメントも自動的にインストールされる
(依存パッケージのドキュメントも全て自動でインストールされる)
インストール先も config ファイルで設定できる
デフォルトでは\doc フォルダ内
index.html や doc-index-*.html ファイルらも自動で融合してくれる
0113デフォルトの名無しさん
2011/04/14(木) 09:37:25.98runghc Setup configureからやってるんです
キャバルって確か依存グラフ作って必要なのをダウンロードするんですよね
英語ドキュンメントに確かにhaddockを内部呼び出しするっぽい事書いてありましたが
いずれにせよキャバルは無理だと思います
0114デフォルトの名無しさん
2011/04/14(木) 12:42:22.48ドキュメントをインストールするのに
依存関係を考慮して順番を気にする必要は無いはずだから、
スクリプトでも書いて自動化させればいいだけだと思うが
Haskell で書いたっていいわけだし
何が問題なんだ?
0115デフォルトの名無しさん
2011/04/14(木) 12:47:42.54ローカルレポジトリのパスを指定できる項目もある
手元の全依存パッケージをそこにぶち込めば、
"cabal install パッケージ名" でドキュメントも含めて全て
全自動でローカルからインストールされるんじゃないか?
俺は興味ないから詳しくは知らんが、調べてみる価値はあるかも
0116デフォルトの名無しさん
2011/04/14(木) 13:00:10.67有り難うございました
0117デフォルトの名無しさん
2011/04/14(木) 13:19:05.940118デフォルトの名無しさん
2011/04/14(木) 20:08:18.94There and Back Again: Arrows for Invertible Programming
という論文にたどり着いたことはある
まぁ、使い方という言うか、どちらかと言えば意味が知りたかったんだが
0119デフォルトの名無しさん
2011/04/15(金) 05:09:31.70サンプルからヒストグラムを生成してくれるライブラリは無いようですね
0120デフォルトの名無しさん
2011/04/15(金) 07:19:20.21そういうことではない?
0121デフォルトの名無しさん
2011/04/15(金) 17:15:38.50もう浦島だな。苦笑
ところで
N + K パターン って 再帰とは違うの? 再帰であることの十分条件?
それでアマゾンみてるとcraft3eになって10年以上ぶりに改定されるんやね。
なんかなにもかも浦島です。
0122デフォルトの名無しさん
2011/04/15(金) 19:07:20.29N+K パターンは再帰とは何も関係ない
f (x+1) = x
という関数 f を 4 に適用すれば 3 + 1 の 3 と変数 x が束縛される(x = 3)
ただそれだけの話
正確な意味論は
http://www.haskell.org/onlinereport/exps.html#sect3.17.3
ここの Figure 4 にある case s を見てくれ
意味は分かるだろ
0123デフォルトの名無しさん
2011/04/15(金) 19:18:26.62そうゆうことか。さんくす。
0124デフォルトの名無しさん
2011/04/15(金) 19:48:23.950125デフォルトの名無しさん
2011/04/15(金) 23:39:58.070126デフォルトの名無しさん
2011/04/15(金) 23:59:13.440127デフォルトの名無しさん
2011/04/16(土) 00:55:27.91Real World Haskell 第6章10節に、望まれても愛されてもいないので、
Haskell標準の次期改訂からは間違いなく外されるでしょうと言わしめた
単相性制限の有用性について詳しく
0128デフォルトの名無しさん
2011/04/16(土) 05:04:39.85x :: Integer
x = 1
と書くより、
x = 1
と書いたほうが短い。
・・・・・・じつは、haskell report 98を読んだが、よく分からなかった。
なんか、
x = let {a = 1} in (a, a)
y :: (Int, Float)
y = x
みたいなコードがかけるとイヤだ、みたいなことが書いてあった。
それと、exportするときに型が決まっていたほうがうれしいでしょ、みたいなことが書いてあって、そりゃコンパイラの最適化はしやすいだろうと思ったが、よく分からん。
0129デフォルトの名無しさん
2011/04/16(土) 05:12:01.35最近はそれに代わるより扱いやすい制限があるの?
0130デフォルトの名無しさん
2011/04/16(土) 12:31:55.28型が決定できなくなるってこと?
たしかに、単相性制限がなければ、型が決定できなくなるケースは増えるけど、そういった問題がなくなるわけじゃない。
例えば
f s = show $ read s
みたいなコードは単相性制限があろうとなかろうとエラーになる。
そもそも、型の不一致でエラーがでないようにするためには最も一般的な多相型が推論できればそれでよいのであり、またそのような型を推論してくれほうが便利・
そして、単相性制限があると、かえって最も一般的な多相型を推論することを妨害する。
0131デフォルトの名無しさん
2011/04/16(土) 13:47:29.300132デフォルトの名無しさん
2011/04/16(土) 19:12:55.650133デフォルトの名無しさん
2011/04/16(土) 19:19:23.66あまりにレベルが違いすぎて何度も書き込みをキャンセルした漏れが
泣きながら通りすぎます。
0134デフォルトの名無しさん
2011/04/16(土) 22:21:30.610135デフォルトの名無しさん
2011/04/17(日) 00:13:43.75http://mainichi.jp/select/today/news/images/20110417k0000m030039000p_size5.jpg
0136デフォルトの名無しさん
2011/04/17(日) 09:16:39.74俺の考え方を押し付ける相手がいないと困るからな。
0137デフォルトの名無しさん
2011/04/17(日) 10:00:49.14どうでもいいが、ときどき論文に出てくるサブセットの意味論は
操作意味論 + 表示意味論で、余り純粋ではないね。
男なら表示意味論で非同期例外やI/Oも込みで押し通すべき。
0138デフォルトの名無しさん
2011/04/17(日) 10:26:58.64公式にはない
ない理由が「言語設計者たちが考えること」って本に書かれてたと思う
0139デフォルトの名無しさん
2011/04/17(日) 10:54:07.650140デフォルトの名無しさん
2011/04/17(日) 11:05:55.630141デフォルトの名無しさん
2011/04/17(日) 11:43:40.03>>3 にある "A History of Haskell" にも書かれている
3.4 Haskell has no formal semantics
要するに、急を要する仕事ではなかったし、
それでユーザーも実装者も何とかやっていけるだろうし
そもそもユーザーにとっては型チェックが通れば意味論なんてどうでもいいだろ
それに意味論を完全に定義しちゃうと、
新機能を追加したりシェイプアップするのにかなり時間がかかる
いちいち新たに意味論を考えて既存のものとの整合性を考慮しなきゃならないからね
意味論の完全性を過剰に求めるのは、むしろ言語の進化を阻害するんだよ
とのこと
>>139
100% 完全に意味論が定義された Standard ML に比べれば、
意味論の定義の完全性という点では、理論的には全言語が Standard ML 以下だ
0142デフォルトの名無しさん
2011/04/19(火) 06:10:30.280143デフォルトの名無しさん
2011/04/19(火) 06:13:01.82Emacs と Vim どっち好き?
0144デフォルトの名無しさん
2011/04/20(水) 16:19:47.610145デフォルトの名無しさん
2011/04/20(水) 19:13:14.580146デフォルトの名無しさん
2011/04/21(木) 19:19:07.820147デフォルトの名無しさん
2011/04/21(木) 21:30:15.72矢印キーで移動とかやってられんわ
0148デフォルトの名無しさん
2011/04/22(金) 07:06:29.18まあ例によってctrlだからvi派には合わんだろうが
0149デフォルトの名無しさん
2011/04/22(金) 14:52:39.390150デフォルトの名無しさん
2011/04/22(金) 16:44:10.720151デフォルトの名無しさん
2011/04/22(金) 19:06:28.68Vimのエミュレーションモードあるみたいだよ。
Features:
Emacs, Vim and Cua (subset) emulations provided by default
0152デフォルトの名無しさん
2011/04/22(金) 22:23:30.43そのときに、行列の100万くらいある要素のごく一部だけを更新するんです
これってもしかして、行列を更新するたびに、いちいち100万くらいの要素全部をコピーし直さなくちゃいけないんでしょうか?
0153デフォルトの名無しさん
2011/04/22(金) 23:59:43.83PreludeにもインポートされているData.ArrayのArrayを使っているなら、基本的にはそうでしょ。
ただ、「行列を更新するたびに」の「行列を更新」のタイミングは、遅延評価がかかっているとは思うけど。
対応方法としては
・IOモナド、Stateモナドの破壊的更新のできる配列を使う - 手続き的になるのが良いのか悪いのか。更新の回数は完全に制御できる
・配列ではなくData.Map(平衡二分探索木…のはず)を使う - 100万もの要素を扱うのはどうなんだろうという気がするけど、プログラミングとしては楽だと思う
・私は使ったことないけど、これ→http://itpro.nikkeibp.co.jp/article/COLUMN/20101013/352848/?ST=ittrend ただ、いつ最適化されるのか読みきるのはHaskellへの慣れが相当いりそう
ところで、その100万くらい要素がある行列って、もっと小さなブロックに分解できないものなの?
1000 * 1000の「配列 のリスト」にするだけでも相当変わると思うんだけど。
0154デフォルトの名無しさん
2011/04/23(土) 00:37:20.460155デフォルトの名無しさん
2011/04/23(土) 00:39:34.411000×1000の行列で、対角線に沿って要素に非ゼロの数字が入ってて、対角線から離れるとほとんど要素は0
で、ノイズとしてところどころ(1000個くらい)に非ゼロの数値が入ってる
どの要素にノイズが乗るかは、まるで決まっていない
計算するときには、対角線を中心に1000〜5000個の要素だけがコロコロ更新される
ノイズ部分は絶対値が0に近づく方向にだけ更新される
要素が0のところは絶対に更新されない
やっぱり破壊的更新しないとダメですかね…
0156デフォルトの名無しさん
2011/04/23(土) 00:46:40.10よく分かってないんですけど、STArray って、破壊的更新してるんじゃないんですよね?
0157デフォルトの名無しさん
2011/04/23(土) 00:50:37.27Haskellでもmutableな配列はIOに汚染させずに使える
STモナドを調べておくれ
0158デフォルトの名無しさん
2011/04/23(土) 04:48:55.48それならリストでもMapでもいけると思う。
だって、リストなりMapに存在しないデータをゼロとみなせば、実際に保持しておく必要のあるデータは千のオーダーなんでしょ。
Data.MapのfindWithDefaultとinsertで楽勝じゃね?
0159デフォルトの名無しさん
2011/04/23(土) 14:29:47.66プログラムを書くときにはどの位置の要素にゼロじゃないデータが入るかわからないけど、上手にできますかね
0160デフォルトの名無しさん
2011/04/23(土) 16:18:28.950じゃない要素だけ値と座標を持てばいいんじゃない?
んでmapやhashを使えば要素数が増えても参照時間はそんな伸びないし。
残りは仮想的に扱えばいいように思える。
0161デフォルトの名無しさん
2011/04/23(土) 16:31:28.92Data.MapのMapを前提に。
コードとしては、Data.MapのMapはkeyとvalueのペアの辞書だから、座標(Int, Int)をkeyにして、0でないデータを追加していけば良いだけ。
keyはこんなんで良かろう。
(compareをうまく定義すれば対角線に近いほど木のrootに近くできなくはないと思うけど、現実的な方法が思いつかなかった)
data Cord = Cord {-# UNPACK #-} !Int {-# UNPACK #-} !Int
deriving (Show, Eq)
instance Ord Cord where
compare (Cord ax ay) (Cord bx by) = compare ax bx `mappend` compare ay by
「上手に」というのはパフォーマンスの話なら、ちょっとむずかしい。
空間的には、100万要素の配列よりも、千〜万の二本木のほうが小さいだろう。
速度的には、やっぱり100万要素の配列を破壊的に更新したほうが早いだろうな。
最初のデータを全部入れて木を構築するのにちょっと時間がかかるはずだけど、それは最初の一回だけだし、千から一万のデータなら気にするほどのことではなかろうと思う。
また、最初の木を構築するときに0のデータは入れないとして、データを更新するときに0にしたものを削除するかどうかはちょっと悩む。
0のデータがある程度たまってから一気に木を再構築するのが良さそうに思えるけど、よく分からん。
アプリケーションにもよると思う。更新より参照のほうがはるかに回数が多いなら、こまめに0のデータを削除したほうが良いはず。
0162デフォルトの名無しさん
2011/04/23(土) 16:55:42.08Haskellってコードの作成コストと保守コストは低いかもしれんが、プログラマを養成するコストがとんでもないことにならないか?
0163デフォルトの名無しさん
2011/04/23(土) 17:05:00.33Haskellで得られる生産性の高さはHaskellを学ぶ労力と釣り合わないってことさ
0164デフォルトの名無しさん
2011/04/23(土) 17:14:18.16希望から絶望への相転移エネルギーを回収することで宇宙のエントロピーは減少するのさ。
0165デフォルトの名無しさん
2011/04/23(土) 17:27:26.610166デフォルトの名無しさん
2011/04/23(土) 21:59:09.730167デフォルトの名無しさん
2011/04/23(土) 22:12:59.710168デフォルトの名無しさん
2011/04/23(土) 22:40:36.42この手の問題は、IOモナドやSTモナドで配列の破壊的更新をしてしまうという解は常にあるわけで、「Haskellらしさ」にこだわらなければ他の言語よりむずかしいということはないと思う。
モナドって何さ? というのはたしかに説明するのが難しいけど、そこはまぁ、LISPとかと同じように「変数に値をバインドしている」と考えることにすればいいわけで。
「変数に値をバインド」というのは何さ? 変数って値を入れておく箱じゃないの? といわれたら、これまた面倒だが、そこまでBASIC時代の人は無視しても良いと…
破壊的更新はHaskellらしくないと嫌う風潮があるけど、状態モナドを使ったほうが自然なアルゴリズム、破壊的更新のほうが理解しやすいプログラムというのはありえ、そういうときに破壊的更新を躊躇するのはむしろ良くないことだと思う。
0169デフォルトの名無しさん
2011/04/23(土) 23:20:42.81(プログラミング言語や人の思考)あってのものなので
破壊的更新をする手続き的なプログラムの方が表現しやすい、だから、
破壊的更新をするアルゴリズムを採用する
破壊的更新をしない宣言的なプログラムの方が表現しやすい、だから、
破壊的更新をしないアルゴリズムを採用する
というのが本来目指す姿であって、まずはこのように考える
当然その時の自分の能力によっては、そんなに上手く行かないかもしれない
しかし、解きたい問題の本質を考えて数式で表現できれば、
破壊的更新をしないアルゴリズムを見つけやすくなる
この辺りは「Pearls of Functional Algorithm Design」で大いに学べる
もしどうしても破壊的更新をしなければならなくなった場合でも、
Haskell は逐次的にちまちまと更新するのは苦手だが、
一気に更新するのはメモリ効率的にも速度的にも記述的にもそれほど問題ない
それをするためにもできるだけ宣言的なプログラムを目指すのは意味がある
>>152 は何となく初めに破壊的更新をするアルゴリズムを採用し、
それを Haskell でどう表現しようかと、本来とは逆の思考をしているように感じる
例えば手続き型を対象とした数値計算の解説書の方法を Haskell に移植するとか
既に破壊的更新をしないアルゴリズムについて考えた後であれば余計なお世話であった
0170デフォルトの名無しさん
2011/04/23(土) 23:41:54.16全体を丸ごと置き換えることだけ考えてれば楽ちんなんだがな
0171デフォルトの名無しさん
2011/04/23(土) 23:44:57.270172デフォルトの名無しさん
2011/04/23(土) 23:48:33.610173デフォルトの名無しさん
2011/04/23(土) 23:54:51.840174デフォルトの名無しさん
2011/04/24(日) 00:02:52.800175デフォルトの名無しさん
2011/04/24(日) 00:35:55.98F#への新参者だが丸ごと書き換えるのはいろいろと楽でいいねぇ。
大方の場合、パフォーマンスでも問題ないし。
0176デフォルトの名無しさん
2011/04/24(日) 07:11:17.72エントロピーって単語を使ってみたかっただけだよな?
頼むからそうだと言ってくれ
0177デフォルトの名無しさん
2011/04/24(日) 10:11:39.70魔法少女まどか☆マギカって知ってるかい?
0178デフォルトの名無しさん
2011/04/24(日) 10:52:49.220179デフォルトの名無しさん
2011/04/24(日) 10:55:28.580180デフォルトの名無しさん
2011/04/24(日) 11:02:28.28が皆無なのと同じことだ
0181デフォルトの名無しさん
2011/04/24(日) 11:10:04.05それを深読みしたり現実の世界と繋げたりすることは二の次で、
まずは純粋に楽しめよ
Haskellも関数型とかモナドとかはとりあえず二の次で、
まずは純粋に楽しめよ
0182デフォルトの名無しさん
2011/04/24(日) 11:28:14.570183デフォルトの名無しさん
2011/04/24(日) 11:37:48.100184デフォルトの名無しさん
2011/04/24(日) 11:56:54.31それも大いに大事だが、そちらはお前ががんばってくれ
おれは純粋に楽しむ
0185デフォルトの名無しさん
2011/04/24(日) 11:58:31.29本格SFでさえ専門家から見ればプププなんじゃないの?
食らえ!アローモナド!
くくく……単相性制限下においてそのようなコンパイルなど通らぬわっ!
しまった!チュドーン……
くらいいい加減なものじゃないか
小説の専門用語なんて
0186デフォルトの名無しさん
2011/04/24(日) 12:07:15.74だってふぁn
0187デフォルトの名無しさん
2011/04/24(日) 12:31:55.84→プログラマの創造性が生かされる
→良いプログラムが出来上がる
→顧客増える
→ビジネス成功
0188デフォルトの名無しさん
2011/04/24(日) 12:32:40.680189デフォルトの名無しさん
2011/04/24(日) 12:42:43.02当たり前みたいだし短いけど、中身もあっていいタイトルだよな
0190デフォルトの名無しさん
2011/04/24(日) 12:51:28.370191デフォルトの名無しさん
2011/04/24(日) 13:05:08.30初めて聞いた
0192デフォルトの名無しさん
2011/04/24(日) 13:07:03.210193デフォルトの名無しさん
2011/04/24(日) 13:12:10.67coqとかagdaみたいな定理証明系を利用して高い信頼性を持ったコードを書くとかそういうやつかw
0194デフォルトの名無しさん
2011/04/24(日) 13:23:48.440195デフォルトの名無しさん
2011/04/24(日) 13:35:56.950196デフォルトの名無しさん
2011/04/24(日) 13:39:30.190197デフォルトの名無しさん
2011/04/24(日) 14:23:38.920198デフォルトの名無しさん
2011/04/24(日) 14:33:02.82就職できるとかできないなんて低レベルな話にも興味がない。
0199デフォルトの名無しさん
2011/04/24(日) 14:42:47.01関数型言語の知識を知っていると良いコードを書けるから仕事で役に立つというのはあると思う
0200デフォルトの名無しさん
2011/04/24(日) 14:57:47.71ハスケラー=社会性0の人ということで馬鹿にしてんのか?
0201デフォルトの名無しさん
2011/04/24(日) 15:03:33.24F#だがバリバリ製品コードで使ってるぞ(´・ω・`)
0202デフォルトの名無しさん
2011/04/24(日) 15:08:43.91次がC言語
次がJava
次がC++
だいぶ離れて次がBasic
0203デフォルトの名無しさん
2011/04/24(日) 15:12:15.61Simon Thompsonが書いたErlang本を読んだ
filterやreverseを自分で実装させるあたり
教育的配慮に富んだ本だなと思って読み進めていたところ
3章の練習問題がコンパイラ作成で悶絶した
Haskellerというのは社会性がないというか
手加減を知らない人たちなんだろうな。そう思った
0204デフォルトの名無しさん
2011/04/24(日) 15:30:08.39=計算機科学はもちろんのこと、数理論理学や情報理論などの基礎理論にも通じている
=技術を使うだけではなく技術を生み出すことにも長けている
=イノベーティブな技術を展開し常に業界を牽引していく人材
0205デフォルトの名無しさん
2011/04/24(日) 15:41:42.60むしろ、計算機科学と情報理論に通じてる人にはHaskellは難しい
0206デフォルトの名無しさん
2011/04/24(日) 15:57:25.90もっと詳しく聞かせてくれ
0207デフォルトの名無しさん
2011/04/24(日) 16:08:57.92ハードウェア→アセンブラ→C・Java→Haskell のルートよりも、
論理学→基礎数学→Haskell のルートの方が楽
0208デフォルトの名無しさん
2011/04/24(日) 16:33:35.20明らかに前者のほうが敷居が低い。
中卒・高卒でもなんとかなるレベル。
後者は数学的センスが無いと無理。
0209デフォルトの名無しさん
2011/04/24(日) 16:34:39.63「使うだけならね」w
0210デフォルトの名無しさん
2011/04/24(日) 16:35:37.96> filterやreverseを自分で実装させるあたり
> 教育的配慮に富んだ本だなと思って読み進めていたところ
> 3章の練習問題がコンパイラ作成で悶絶した
ワロタ
RWHで基礎が終わったな、というところで出てきた実践トピックが画像認識だったところで、オレもあせった
0211デフォルトの名無しさん
2011/04/24(日) 16:39:11.57メモリアドレスとか、レジスタとか、スタックとかを抽象化せずに、ああやって、こうやって、こうやればやりたいことができるというパズルを解くのは、それはそれで一種のセンスがいると思う…
たぶん世間のほとんどの人はそういうパズルはとけない。
0212デフォルトの名無しさん
2011/04/24(日) 16:52:36.660213デフォルトの名無しさん
2011/04/24(日) 16:54:14.65GHC
0214デフォルトの名無しさん
2011/04/24(日) 16:54:17.93そういう経験は中学・高校で済ませた。
高校時代はZ80で制御するマイクロマウスで大会にも出場したし、
あるゲーム雑誌にも自作のゲームを投稿したりした。
知識基盤がいらないテクニックだけなら中高生でも簡単に習得できるんだよ。
テクノロジーとテクニックは違う。
テクノロジーは知識の蓄積が必要で他人に伝えることもできるが、
テクニックは個人の修練でしかない。
大学では物理学を学び、大学院では計算機科学と整数論を学んだ。
大学時代はスパコンでシミュレーションプログラミングをしたし、
院卒後ある人工衛星のプロジェクトにも参加してプログラムを担当したが、
主に物理と数学の知識が役に立った。
0215デフォルトの名無しさん
2011/04/24(日) 16:56:24.99Haskellは論文を書くための言語
0216デフォルトの名無しさん
2011/04/24(日) 17:49:23.83論文を書くためにHaskellを使った例(タイトル)をいくつか挙げてくれ
0217デフォルトの名無しさん
2011/04/24(日) 17:55:16.51http://arxiv.org/find/all/1/ti:+Haskell/0/1/0/all/0/1
http://arxiv.org/find/all/1/abs:+Haskell/0/1/0/all/0/1
0218デフォルトの名無しさん
2011/04/24(日) 18:07:02.26研究のためにHaskellを利用したんだよ
Haskellを手段として行った目的は論文を書くことじゃなくて、研究だよ
>>215 は論文を書くのが目的、その手段がHaskellだと
実に馬鹿なこと考えてるんだよ
0219デフォルトの名無しさん
2011/04/24(日) 18:16:11.12大学の研究者にとっては論文を書くのが目的
研究は論文を書くための手段でしかない(研究しない方が論文を書けるなら研究なんかしない)
Haskellはその研究の手段でしかない
研究業績とは研究への熱意じゃなくて論文の数
0220デフォルトの名無しさん
2011/04/24(日) 18:27:57.550221デフォルトの名無しさん
2011/04/24(日) 19:02:34.79その域を超えられないなんて可哀想
0222デフォルトの名無しさん
2011/04/24(日) 19:10:48.26その域を越えられたらもう論文書かなくてもいいのかな・・・
0223デフォルトの名無しさん
2011/04/24(日) 19:41:42.850224デフォルトの名無しさん
2011/04/24(日) 19:41:47.54昔、先生が言ってた
0225デフォルトの名無しさん
2011/04/24(日) 20:00:30.30学生なら論文とかくだらないこと考えてないでもっと面白いことかんがえろ。
0226デフォルトの名無しさん
2011/04/24(日) 20:42:08.41ごめん
0227デフォルトの名無しさん
2011/04/24(日) 20:53:38.09二つ目のリストにある「Yacc is dead」というタイトルがカッコ良すぎるんだが。
中の「Cargo cult parsing」という言い回しもカッコいい。
0228デフォルトの名無しさん
2011/04/24(日) 21:02:55.140229デフォルトの名無しさん
2011/04/24(日) 21:19:50.240230デフォルトの名無しさん
2011/04/24(日) 21:39:24.65なんと言うか、関数型言語の本って出せる機会が少ないからなのか、入門書なのに入門書の域を越えて詰め込もうとする傾向は有るな
ちゃんと入門者向けの本、中級者向けの本、上級者向けの本って別れたら、むしろ手続き型言語より分かりやすいのに
0231デフォルトの名無しさん
2011/04/24(日) 21:42:50.27無駄が大杉
c・java -> haskell
算数 -> haskell
で十分
んで、後者の方が楽
haskellなんぞ、算数の知識があれば十分理解出来る
0232デフォルトの名無しさん
2011/04/24(日) 21:43:16.700233デフォルトの名無しさん
2011/04/24(日) 21:53:20.70Haskellを覚えるのが目的だなんて、貧相な奴だな。
0234デフォルトの名無しさん
2011/04/24(日) 21:58:15.47他の知識はhaskell使える様になってから覚えれば良いだろ
初心者に知識の詰め込みを強要し過ぎ
0235デフォルトの名無しさん
2011/04/24(日) 22:01:03.840236デフォルトの名無しさん
2011/04/24(日) 22:04:47.62ある日世界中に散らばってしまったクリスOkasakiの知識を集めながら、ジョブを得(ry
0237デフォルトの名無しさん
2011/04/24(日) 22:52:14.20そういうの、あたしは嫌いじゃないな
誰か あらいぐまハスケルたん 描いて
0238デフォルトの名無しさん
2011/04/25(月) 06:57:45.670239デフォルトの名無しさん
2011/04/25(月) 07:12:03.420240デフォルトの名無しさん
2011/04/25(月) 08:49:18.180241デフォルトの名無しさん
2011/04/25(月) 09:43:17.410242デフォルトの名無しさん
2011/04/25(月) 09:58:54.350243デフォルトの名無しさん
2011/04/25(月) 12:48:28.06学校の成績はほどほどだけど妙に偏った知識があって、メガネで、ぼさぼさの頭でTシャツの上にカーディガンでキャンパスにくる。
合コンでは、一人でウーロンハイを飲んでいて、声をかけたら「いや、楽しんでますよ」とか曖昧な笑顔をする。
オレの嫁にしてやる。
0244デフォルトの名無しさん
2011/04/25(月) 13:12:21.900245デフォルトの名無しさん
2011/04/25(月) 13:19:51.14haskellを目的と勘違いしているやつがこのスレには多そうだが
女は道具としてなら使うだろう。
0246デフォルトの名無しさん
2011/04/25(月) 13:24:43.55それとも最適化かかる?
0247デフォルトの名無しさん
2011/04/25(月) 13:33:06.99何のライブラリを使ってとか全然分からん
0248デフォルトの名無しさん
2011/04/25(月) 13:46:20.79{- scrach.hs -}
module Srach (x, y) where
x = flip (+) 10 20
y = (+) 100 200
この単純なコードを ghc -O2 -fforce-recomp -ddump-simpl scrach.hs してみた(かなり要約):
Srach.y2 = GHC.Integer.Type.S# 100
Srach.y1 = GHC.Integer.Type.S# 200
Srach.y = GHC.Integer.plusInteger Srach.y2 Srach.y1
Srach.x2 = GHC.Integer.Type.S# 20
Srach.x1 = GHC.Integer.Type.S# 10
Srach.x = GHC.Integer.plusInteger Srach.x2 Srach.x1
この例では、最適化されると分かる。
0249デフォルトの名無しさん
2011/04/25(月) 14:10:53.57なるほど、つまり単純なケースでは最適化かかるみたいだけど
複雑なケースではわからないから
結局の所実測してみて使うか決めるしかないんだ
一々下らない事訊くんじゃないこのうすのろ
って事ですね有り難うございました(´・ω・`)
0250デフォルトの名無しさん
2011/04/25(月) 14:11:38.13haskell http server でググれば?
…方向性として三つあると思う。
一つ目。
UNIXのSocket(あるいはWindowsのWinSoketだっけ?)プログラミングをすでにCで習得しているなら、ちょっとした実験は、そのAPIのHaskellバインディングを使うのが簡単だろうな。
簡単なWebクライアント・プログラムを書いたことがあるが、それの動作確認・デバックのためのサーバースタブ側はこれで作った。
二つ目。
サーバーはApacheかなんかを動かして、ghcであらかじめ用意しておいた実行形式ファイルをキックする。
これも試したことある。
個人サイトでちょっと試してみたいなら、たぶん、一番簡単。
runghcをキックするスクリプトを書いて、Apacheからはそれをキックするようにすれば、事前のコンパイルも必要なかろう。
三つ目。
なんらかのフレームワークを使う。
http://www.haskell.org/haskellwiki/Web/Frameworks
オレはどれも試したことない。
0251デフォルトの名無しさん
2011/04/25(月) 14:22:45.67空気めないやつってよくいわれない?
0252デフォルトの名無しさん
2011/04/25(月) 14:40:50.64代わりに僕がと思いまして
0253デフォルトの名無しさん
2011/04/25(月) 16:30:52.53ありがとう
runghcが使えるってのは便利だね
apacheからキックする方法で試してみる
0254デフォルトの名無しさん
2011/04/27(水) 10:44:17.460255デフォルトの名無しさん
2011/04/27(水) 11:15:10.700256デフォルトの名無しさん
2011/04/27(水) 11:21:28.490257デフォルトの名無しさん
2011/04/27(水) 11:23:25.590258デフォルトの名無しさん
2011/04/27(水) 12:13:04.960259デフォルトの名無しさん
2011/04/27(水) 12:42:46.42Allow じゃなくて Arrow な
Arrow の何が知りたいのか具体的に聞いてくれ
0260デフォルトの名無しさん
2011/04/27(水) 12:44:46.870261デフォルトの名無しさん
2011/04/27(水) 12:45:40.830262デフォルトの名無しさん
2011/04/27(水) 12:47:03.67Arrowと同じアイデアをArrow登場以前にHaskellで実装されていたのなら教えてくれ
0263デフォルトの名無しさん
2011/04/27(水) 12:50:27.820264デフォルトの名無しさん
2011/04/27(水) 12:53:54.32真の用途は?
0265デフォルトの名無しさん
2011/04/27(水) 13:00:37.110266デフォルトの名無しさん
2011/04/27(水) 13:04:46.680267デフォルトの名無しさん
2011/04/27(水) 14:01:28.24関数 f :S→Tの矢印が矢のように見えるだろ。
この矢の一般化が圏論と言われているのだよ。
別名アーチェリーともいう。
0268デフォルトの名無しさん
2011/04/27(水) 14:08:17.350269デフォルトの名無しさん
2011/04/27(水) 14:15:23.47:(;゙゚'ω゚'):マジで?
0270デフォルトの名無しさん
2011/04/27(水) 14:28:19.230271デフォルトの名無しさん
2011/04/27(水) 15:48:11.88その親父ギャグはつまんない。親父ギャグって脳の老化なんだってよ。
0272デフォルトの名無しさん
2011/04/27(水) 15:53:54.16それマジで言ったん?ソースあんならすぐ出せ
マジなら2ちゃんねら総力上げて書き直すが
0273デフォルトの名無しさん
2011/04/27(水) 15:56:07.78法学&司法:作戦参謀
馴れ合い:兵隊召集&前線指揮
少年犯罪:少年法を盾に活動
無職・だめ:鉄砲玉要員
野鳥観察:見張り要員
vip:祭り要員
モ娘(狼):ストーキング
河川・ダム:水攻め
園芸:穴掘り要員
車・バイク:交通、特攻
オカルト:儀式
PC各種:IT部隊
ダウソ:サイバーテロ
ハード・業界板:工作活動
案内:情報管理、資料作成&管理
無線:独自の通信網構築
ニュー速:情報収集
写真撮影:盗撮、記録映像
ネトヲチ:ネット監視
実況(番組):マスコミ情報確認
就職&転職:企業調査
社会・世評:世論調査&操作
男性論女性論:プロファイリング
世界情勢:世界に発信
マスコミ:タレコミ
警察:通報
アウトロー:丁寧に苦情申し立て
ちくり裏事情:密告
運営:工作員排除
0274デフォルトの名無しさん
2011/04/27(水) 15:56:54.07議員・選挙&政治家語録:政治介入
運輸・交通:物資運搬
花火:火薬調達
科学&物理&生物:BC兵器開発
郵便・郵政:ヒットマン用衣装提供
FLASH:FLASH製作
半角二次:応援ポスター制作、漫画・アニメ系板住民釣る
ダンス:応援ダンス製作
AA:AA製作
音楽各種板:鼓舞
お菓子:うまい棒補給
環境・電力:自家発電
ペット・癒し:精神安定
介護・福祉:負傷者介護
ボランティア:各種サポート
戦国時代:動かざること山の如し
ネ実:現実逃避
自衛隊:最終兵器
0275デフォルトの名無しさん
2011/04/27(水) 18:34:43.03そもそも、射るのは矢の方で的じゃない
矢を射て的を得るだ
0276デフォルトの名無しさん
2011/04/27(水) 19:29:07.000277デフォルトの名無しさん
2011/04/27(水) 20:31:36.36写像なんだから「単写」「全写」とすべきだったのではないのか。
0278デフォルトの名無しさん
2011/04/27(水) 21:29:23.28そんなこと考えたこともなかった。
jectがラテン語で「投げる」という意味らしいから、「写す」よりも「射る」のほうが若干違いかな。
0279デフォルトの名無しさん
2011/04/27(水) 21:30:20.23×違いかな。
○近いかな。
0280デフォルトの名無しさん
2011/04/27(水) 21:42:45.12矢印を書いて説明してたから
0281デフォルトの名無しさん
2011/04/27(水) 21:44:48.670282デフォルトの名無しさん
2011/04/27(水) 21:47:58.81むしろ、injection と return をごっちゃにしてるのを問題にすべき
0283デフォルトの名無しさん
2011/04/28(木) 00:08:54.760284デフォルトの名無しさん
2011/04/28(木) 03:47:39.780285デフォルトの名無しさん
2011/04/28(木) 14:17:52.660286デフォルトの名無しさん
2011/04/28(木) 17:01:05.92更新に必要な部分は、もちろん以前のものを破壊的更新せずにコピーしているはずなので、その意味ではイミュータブル。
しかし、以前のスレで話題になったリストと同じだけど、運がよければコピーしなければならない「更新に必要な部分」は少ない。
削除や追加で木のローテーションが起きなければ、「更新に必要な部分」は木の根元から更新したい葉まで一直線に結んだ部分だと思う。
ローテーションが起きれば最悪、木全部を作り直しと同じ空間コストじゃないかな。
0287デフォルトの名無しさん
2011/04/28(木) 17:21:16.760288デフォルトの名無しさん
2011/04/28(木) 20:43:52.36回転一回あたりに確保されるメモリの大きさは定数で、
回転の回数は最大でも木の高さに等しい
0289デフォルトの名無しさん
2011/04/29(金) 11:19:56.09葉同士の比較まで潜った後その上の幹に一旦戻って別の前提条件で比較
(重いので葉同士の比較が失敗した時だけ行うようにしたい)とかするには
現在見ている木の上を参照するために潜るたびに現在の木そのものを渡す
つまり一つ上の木を常に保持するようにしなきゃならんのですかね?
0290デフォルトの名無しさん
2011/04/29(金) 20:31:21.23「比較が失敗した」ことを示す値を返して、
一つ上のレベルはその値を見て対処すればいいんじゃね
0291デフォルトの名無しさん
2011/04/30(土) 08:27:51.940292デフォルトの名無しさん
2011/04/30(土) 11:42:29.230293デフォルトの名無しさん
2011/04/30(土) 11:46:22.590294デフォルトの名無しさん
2011/04/30(土) 11:55:53.87信じられないだろ
0295デフォルトの名無しさん
2011/04/30(土) 11:56:51.50そのギャグが面白いと思う人ってどのくらい居るんだろ
0296デフォルトの名無しさん
2011/04/30(土) 12:17:44.990297デフォルトの名無しさん
2011/04/30(土) 12:29:27.280298デフォルトの名無しさん
2011/04/30(土) 12:40:35.92オレ言語のインタープリタを作ってCPSに変換するとコンパイラになるとか
意味ないな
0299デフォルトの名無しさん
2011/04/30(土) 12:43:21.96末尾再帰にすることによって確実に処理速度が上がる言語であれば、
処理速度を上げるために多少視認性を犠牲にしてでも末尾再帰にする意味はある
たんに悟りを得るための公案では断じてない
が、本来は(というか理想は)コンパイラがその書き換えを自動でやるべきこと
例えば GHC の場合、末尾再帰ではなく deforestation の話だが、
ソース中にヒントを書いておくことでプログラマの代わりにコンパイラが
自動でやってくれる(まだまだ完璧ではないが)
0300デフォルトの名無しさん
2011/04/30(土) 14:47:16.22C++には適わなくともせめてJavaには勝って欲しい
0301デフォルトの名無しさん
2011/04/30(土) 14:54:03.14プログラマが工夫しなければ、まだまだ遅いな
0302デフォルトの名無しさん
2011/04/30(土) 15:34:49.890303デフォルトの名無しさん
2011/04/30(土) 15:57:19.870304デフォルトの名無しさん
2011/04/30(土) 16:01:00.09・論文を書くときに数学的な表現を統一できる
・「これは末尾再帰で表現きるから、定理○○が成り立つ」みたいな言い方ができる
・末尾再帰専用の高速化手法がある
・というか、Schemeは全部の関数が継続渡し
0305デフォルトの名無しさん
2011/04/30(土) 16:06:11.32実行時間だけ考えればアセンブラ最高だし
航空機のプログラミング言語見たことあるけど、Cのソースコードにアセンブラが埋め込んであった
0306デフォルトの名無しさん
2011/04/30(土) 16:24:12.32悠長にゴミ集めしてる場合じゃない局面があると思うの
0307デフォルトの名無しさん
2011/04/30(土) 16:38:09.79型システムだけ使ってメモリ管理は手でやるとかもありそう
sel4みたいにverificationのみに使うとか
0308デフォルトの名無しさん
2011/04/30(土) 16:48:35.090309デフォルトの名無しさん
2011/04/30(土) 17:13:27.58航空機の場合、悠長にゴミ集めしてる場合じゃない局面では無い時に必死でゴミ集めして、
悠長にゴミ集めしてる場合じゃない局面でゴミ集めしないで働ける保証があるなら、GC が使える
その保証を得るのが難しいと思うが
エヴァのマギシステムの場合、ヒトと同じような思考をするコンピュータなので、
そもそもGC的な意味でのゴミがゴミで無くなる
人の記憶も不要な記憶(短期記憶でさえ)がゴミとして消されるわけじゃなく、
以前の記憶やその後に作られた記憶と絡み合う
0310デフォルトの名無しさん
2011/04/30(土) 17:16:44.470311デフォルトの名無しさん
2011/04/30(土) 17:21:28.45MAGIはそもそもノイマン式コンピュータかどうか…
あれ、有機体を使ってあっても驚かない。
JavaでリアルタイムGCを使ってロボットを動かす研究とかあるから、いずれは飛行機のデバイスもGCを使うようになるかも。
あと、個人的には、一つ二つのユニットがGCで時間かかりすぎ→強制リブートとなっても、冗長性を保っていれば問題ない、っていう発想はありえると思う。
そういう思想は飛行機とか、医療機器とかの世界ではまだまだ受け入れられないかな。
0312デフォルトの名無しさん
2011/04/30(土) 17:21:53.24例外的にそういう局面に急に陥る事もあると考えると
やはり危ないのでは
0313デフォルトの名無しさん
2011/04/30(土) 17:29:33.97途中で消えるオブジェクトを用意してはならない
全部staticでメモリが用意される
と昔に習った気がする
0314デフォルトの名無しさん
2011/05/01(日) 02:42:08.24succ n = n : map (+1) (succ n)
は計算に O(n^2) の時間がかかるが、
succ n = let ns = n : map (+1) ns ; in ns
にすれば改善できる、と書かれていました。
(オーダーが下がるとは明記されていない)
前者は succ n を毎回簡約しなければならないのに対して、
後者は最初に1回だけ簡約すれば、それが ns の参照先として保存されるため、
簡約ステップ数が前者に比べて少なくて済むのは分かります。
しかし、ノートに簡約ステップを書き出してみたところ、
後者も依然として O(n^2) のステップ数が必要に感じたのですが、
オーダーは実際には下がっているのでしょうか?
0315デフォルトの名無しさん
2011/05/01(日) 04:23:26.98succ n = n : map (+1) (succ n)
これ↑無限ループのような気がします
0316デフォルトの名無しさん
2011/05/01(日) 05:36:44.26nの値は計算量に関係ないよな。take m (succ n)の評価を考える
まずリスト部分だけ簡約すると、
let
x1 = n + 1
x2 = x1 + 1
x3 = x2 + 1
(...略...)
xm = xm' + 1
in n : x1 : x2 : x3 : ...略... : xm : []
みたいになる。ここまで簡約する計算量がO(m)
ここから足し算をすべて計算するのもO(m)だから、合わせてO(m)時間
0317デフォルトの名無しさん
2011/05/01(日) 06:57:01.00>>316のいうとおり、nの大きさは計算量に関係ないが、しかし、take m (succ n)としたとき前者はO(m^2)、後者はO(m)のオーダーになっているように思う。
前者はいわば
let
x1 = n
x2 = n + 1
x3 = n + 1 + 1
x4 = n + 1 + 1 + 1
・
・
・
in x1 : x2 : x3 : x4 ...
のような計算をしている。しかし、後者は
let
x1 = n
x2 = x1 + 1
x3 = x2 + 1
x4 = x3 + 1
・
・
・
in x1 : x2 : x3 : x4...
のような計算をしている。
前者はx1、x2...に相当するようなものを覚えていないが、後者はnsの中で覚えているので。
簡約と一緒に、コンスセルの間の矢印を書いたほうが良い。
そうすれば、前者だといちいち計算しなおしているものを、後者だと共有していることが分かるはず。
0320デフォルトの名無しさん
2011/05/01(日) 08:39:16.51コンスセルのグラフが評価のたびに書き換わっていくイメージ
で書くと良いかも。
0321デフォルトの名無しさん
2011/05/01(日) 10:22:21.44A + B + ... T m * Tm + ...という形になるからO(m^2)
A + B + ... C * (T m) + ...という形になるからO(m)とかそういう手法は無いの?
0322デフォルトの名無しさん
2011/05/01(日) 13:29:46.92Can anyone show the way to parse (and convert to a list afterward)
"(3)[1e-2,0.1,1.0]"
which means
(length)[elements]
...Sorry about English. Please reply in Japanese!
0323デフォルトの名無しさん
2011/05/01(日) 14:09:13.39import Text.ParserCombinators.Parsec
import Text.ParserCombinators.Parsec.Language
import Text.ParserCombinators.Parsec.Token
sizedListParser :: CharParser st [Double]
sizedListParser = do
size <- between (char '(') (char ')') int
list <- between (char '[') (char ']') $
double `sepBy` char ','
if fromIntegral (length list) == size
then return list
else fail "length mismatch"
int :: CharParser st Integer
int = decimal haskell
double :: CharParser st Double
double = float haskell
0324デフォルトの名無しさん
2011/05/01(日) 14:23:34.00It rejects minus sign and integer mixed array, but I'll try to figure it out.
Hope there's a good documentation on the parsec...
0325デフォルトの名無しさん
2011/05/01(日) 14:43:35.680326314
2011/05/01(日) 14:45:41.62私も自分で take m で計算量を調べてました。
まだ納得できないです。
後者の計算で、次のようなステップを考えてました。
take の第1引数の引き算を端折ったり、冗長なステップもありますが、
問題はそこではありません。
[01] take 3 (succ 1)
[02] take 3 ns -- <== ns = 1 : map (+1) ns
[03] take 3 (1 : map (+1) ns)
[04] 1 : take 2 (tail ns)
[05] 1 : take 2 (map (+1) ns)
[06] 1 : take 2 (map (+1) (1 : map (+1) ns))
[07] 1 : take 2 (((+1)1) : map (+1) (tail ns))
[08] 1 : ((+1)1) : take 1 (map (+1) (tail ns))
[09] 1 : ((+1)1) : take 1 (map (+1) (map (+1) ns))
[10] 1 : ((+1)1) : take 1 (map (+1) (map (+1) (1 : map (+1) ns)))
[11] 1 : ((+1)1) : take 1 (map (+1) (((+1)1) : map (+1) ns))
コンスセルの指しているものをグラフを描いて考えてみたのですが、どうしても、
[11] の左側の ((+1)1) と右側の ((+1)1) が別物にしか思えないです。
つまり、たまたま同じ引数に同じ関数を適用しているだけで、
結局のところ2回同じ計算しなければならないと思います。
これらが同じものを指しているのなら、
>>317 の後者のようにリストの各要素は定数時間で計算できるのですが、
別物を指しているように見えるので、リストの各要素は線形時間かかるように見えます。
(全体の計算量というのは結局のところ、簡約ではなくプリミティブな計算の量ですよね)
なぜ左側の ((+1)1) と右側の ((+1)1) が同じものと言えるのか、もう少し考えてみます。
(ちなみに、(+1) は両者で同じ物、1 も両者で同じ物だと思います)
0327デフォルトの名無しさん
2011/05/01(日) 17:35:44.94Haskellでデバッグするときってどうするんですかね?
putStrを挿入したら、関数の型がIOに変わってしまいますけど、他に方法ないですかね?
0328デフォルトの名無しさん
2011/05/01(日) 17:55:21.50putStrじゃなくてDebug.Trace.traceを挿入する
0329デフォルトの名無しさん
2011/05/01(日) 18:05:31.500330デフォルトの名無しさん
2011/05/01(日) 18:11:33.56これ、便利ですな
import Debug.Trace
frac :: Int -> Int
frac 0 = 1
frac n = (Debug.Trace.trace (show n) n) * frac (n-1) * (Debug.Trace.trace (show n) 1)
0331デフォルトの名無しさん
2011/05/01(日) 18:16:05.340332デフォルトの名無しさん
2011/05/01(日) 18:16:44.17Debug.Traceかな:
http://www.haskell.org/ghc/docs/7.0.1/html/libraries/base-4.3.0.0/Debug-Trace.html
基本的な使い方は、
import Debug.Trace
myFunc a b = trace "myFunc" $ a + b
みたいにすれば、myFuncが呼び出されるごとに、myFuncがプリントされる。
ただ、Haskellでは、デバッグするときに、ある関数がいつ評価されるのかにあまり意味はなくって、ある関数の引数と返り値が意図した対応をしているのかが問題になるので、
Debug.Traceのtraceも、関数がいつ評価されたかを確認するよりも、関数の引数と返り値をチェックするために使うように自然になっていくように思う。
それなら、Test.QuickCheckを使ったほうがスマートなんじゃね? と思いつつ、いまでもDebug.Traceユーザーなオレ。
0333デフォルトの名無しさん
2011/05/01(日) 19:37:35.710334デフォルトの名無しさん
2011/05/01(日) 19:40:23.020335デフォルトの名無しさん
2011/05/01(日) 19:55:01.130336314
2011/05/01(日) 23:02:38.55take と map の定義がそれぞれ次のものだとします。
(再帰を停止させる条件は省きます)
take n (x:xs) = n : take (n-1) xs
map f (x:xs) = (f x) : map f xs
succ の定義として >>314 の後者を使い、take n (succ 1) の計算で、
x1:x2:x3: ・・・ : (take 0・・・)の形になるまで簡約させるとします。
x1 や x2 自体はまだ評価しません。
この場合において、take や map の左辺を右辺で置き換える(評価する)回数を調べました。
take を置き換える回数を t、map を置き換える回数を m と略記すると、
n t m
1 1 0
2 2 1
3 3 3
4 4 6
2行目は take 2 (succ 1) の場合に take が 2 回、map が 1 回置き換えられるという意味です。
他の行も同様です。
map を置き換える回数は n に対して O(n^2) のオーダーです。
なので、take n (succ 1) を計算するのに少なくとも O(n^2) の計算量は必要になると思います。
しかし実際は皆さんの言われるように O(n) だと思うので、
この考え方は間違っているはずなのですが、何処が間違っているのか分かりません。
0337デフォルトの名無しさん
2011/05/01(日) 23:14:18.64>326を見たけど、つまづきの原因はここだと思う。
> [11] の左側の ((+1)1) と右側の ((+1)1) が別物にしか思えないです。
グラフ簡約ではこれは同じ物になるということがわかれば、O(m)だと
納得できるんじゃないかな。
ポイントはns = 1 : map (+1) nsの両辺のnsは同じ実体を参照していること。
だから、いくら展開されても実体は常にひとつしかない。
0338314
2011/05/02(月) 07:54:24.73変数が指し示しているものを細かく確認していきます。
ここで、「同じものを指している」という言葉は、
グラフ簡約で同じ対象を指し示しているという意味で使ってます。
succ の定義として >>314 の後者を使い、take 3 (succ 1) の計算で、
take 3 (succ 1)
= take 3 (1 : map (+1) ns)
ここで、2段目の式の変数 ns は
take の第2引数であるリスト 1 : map (+1) ns を 指していますよね。
次に、
take 3 (1 : map (+1) ns)
= 1 : take 2 (map (+1) ns)
= 1 : take 2 (map (+1) (1 : map (+1) ns)
ここで、3段目の式の2つの変数 map は同じ関数を指していますよね。
そして、変数 ns はリスト 1 : map (+1) ns を指している。
次に、
1 : take 2 (map (+1) (1 : map (+1) ns))
= 1 : take 2 (((+1)1) : map (+1) (map (+1) ns))
ここで、2段目の式の変数 ns が指しているものは、
((+1)1) : map (+1) (map (+1) ns) というリストではなく、
1 : map (+1) ns というリストですよね。
まずここまで合ってるでしょうか?
0339デフォルトの名無しさん
2011/05/02(月) 09:33:03.55あってない。
まず、最初の状態はこのような循環構造になっている。
ns -> 1 : map (+1) ns
^----------+
実体をわかりやすくするために、上のmap (+1) nsをns1と表す。
つまり ns = 1 : ns1とする。
簡約は次のように進む。
take 3 (succ 1)
= take 3 (1 : ns1)
= 1 : take 2 ns1
さらに簡約を進めるためにはns1の評価が必要になる。
ns1はmap (+1) nsなので、これを簡約すると
map内のパターンマッチによりnsが先頭(1)と残り(ns1)にわけられ、
先頭には(+1)、残りにはmap (+1)が適用される。
= 1 : take 2 ((+1) 1 : map (+1) ns1)
= 1 : (+1) 1 : take 1 (map (+1) ns1)
後は、この過程の繰り返しとなるので省略。
0340デフォルトの名無しさん
2011/05/02(月) 17:58:18.44メーリングリストだろ
0341314
2011/05/02(月) 21:09:52.35その続きをやってみます。
= 1 : (+1) 1 : take 1 (map (+1) ns1)
= 1 : (+1) 1 : take 1 (map (+1) (map (+1) ns))
= 1 : (+1) 1 : take 1 (map (+1) (map (+1) (1:ns1)))
= 1 : (+1) 1 : take 1 (map (+1) ((+1) 1 : map (+1) ns1))
ここで、左側の (+1) 1 は (:) ((+1)1) (take 1 ...) という関数適用の第1引数です。
右側の (+1) 1 は (:) ((+1)1) (map ...) という関数適用の第1引数です。
前者の (:) 関数の第1引数と、後者の (:) 関数の第1引数は、
グラフ簡約で同じものを指しているということですよね。
その理屈が分からないんです。
両者の (+1) という名前がグラフ簡約で
ひとつの同じもの(引数に1を足す関数)を指しているのは分かります。
また両者の(引数である)1 という名前がグラフ簡約で
ひとつの同じもの(1という値)を指しているのも分かります。
しかし、両者の (:) がその第1引数として同じものを指しているのが分からない。
map の定義 map f (x:xs) = f x : map f xs において、
f x という関数適用は引数が x:xs にパターンマッチした後で
毎回新しく生まれませんか?
0342デフォルトの名無しさん
2011/05/03(火) 06:54:15.30> その続きをやってみます。
>
> = 1 : (+1) 1 : take 1 (map (+1) ns1)
> = 1 : (+1) 1 : take 1 (map (+1) (map (+1) ns))
ここですでに違う。
前回の最後の状態はこのようになっている。
ns -> 1 : (+1) 1 : map (+1) ns1
^-------------+
実体をわかりやすくするために、上のmap (+1) ns1をns2と表す。
つまり ns1 = (+1) 1 : ns2とする。
take 1 (map (+1) ns1)の簡約は次のように進む.
take 1 (map (+1) ns1)
= take 1 (((+1)^2 1) : map (+1) ns2)
= (+1)^2 1 : take 0 (map (+1) ns2)
0343デフォルトの名無しさん
2011/05/03(火) 12:23:12.260344デフォルトの名無しさん
2011/05/03(火) 12:52:04.140345デフォルトの名無しさん
2011/05/03(火) 13:07:50.94Perlは知らんが
0346デフォルトの名無しさん
2011/05/03(火) 13:11:53.06Anything is better than nothing.
0347デフォルトの名無しさん
2011/05/03(火) 13:18:55.85他のスレには蔓延ってるのですか?
0348314
2011/05/03(火) 14:35:22.70ns は最初 1 : map (+1) ns というリストを指していたのに、
>>339 の最後の段階では 1 : (+1) 1 : map (+1) ns1 というリストを指すように変わったのですね。
しかし、すいません、いつ何故変わったのか理解できていません。
>>339 の簡約の様子を少し丁寧に書き下すと、次のようになります。
[1] take 3 (succ 1)
[2] take 3 (1 : ns1)
[3] 1 : take 2 ns1
[4] 1 : take 2 (map (+1) ns)
ここまでで、まだ ns -> 1 : ns1、つまり ns -> 1 : map (+1) ns ですよね。
[5] 1 : take 2 (map (+1) (1 : ns1))
[6] 1 : take 2 ((+1) 1 : map (+1) ns1)
この、[5]から[6]への map 関数の簡約によって、
ns -> 1 : map (+1) ns から ns -> 1 : (+1) 1 : map (+1) ns1 に変わったのですか?
0349デフォルトの名無しさん
2011/05/03(火) 14:48:19.220350デフォルトの名無しさん
2011/05/04(水) 09:31:55.94そうそう。
そうなる理由は簡約機械(STG)の仕様の問題だから、
その説明を読めばわかると思う。
逆にソースレベルの等式だけから理解するのは無理。
0351デフォルトの名無しさん
2011/05/04(水) 11:11:37.560352314
2011/05/04(水) 11:44:17.29おかげさまで、だいぶ核心に近づいた気がします。
2点確認したいことがあります。
ひとつ、最初の質問の式の後者の式が O(n^2) ではなく O(n) になるのは、
Haskell の仕様ではなく、そのコンパイラのひとつである GHC の仕様のためなのですね。
(今時どの実装でもそうなってるという話は置いておいて)
もうひとつ、>>348 の map 関数の適用で ns が指すものが変わるのでしたら、
[2]から[3]への take 関数の適用では ns の指すものは変わらないのでしょうか。
最後に、GHC の STG の仕様を調べてみたいのですが、どれなのでしょうか。
"Implementing lazy functional languages on stock hardware"
という論文ではないですよね。
0353デフォルトの名無しさん
2011/05/04(水) 12:42:52.630354デフォルトの名無しさん
2011/05/04(水) 13:05:10.84ttp://www.furui.cs.titech.ac.jp/~shinot/husky/
ttp://ideone.com/8JlUl
メイン関数はこんな感じ
main = do
args <- getArgs
case args of
[config, wfstf, spdff, scpf] -> do {
config <- readConfig config;
wfst <- wfstFromFile wfstf config; seq wfst (print (finalSt wfst));
spdfs <- spdfsFromFile spdff; seq spdfs (print (inspectSpdfs spdfs));
scp <- readScpFile scpf;
mapM_ (decodeWfstMain config wfst spdfs) scp
}
_ -> putStrLn "error: husky config wfstf spdff scpf"
0355デフォルトの名無しさん
2011/05/04(水) 13:29:21.390356デフォルトの名無しさん
2011/05/04(水) 13:46:26.39でそれ何に使えるの?
0357314
2011/05/04(水) 15:05:53.26即刻消えなさい
0358デフォルトの名無しさん
2011/05/04(水) 16:19:01.070359デフォルトの名無しさん
2011/05/04(水) 16:33:33.98regex-posixをregex-tdfaにしたら爆速でワロタ
0360デフォルトの名無しさん
2011/05/04(水) 16:34:27.85main = do
case getArgs of
[config, wfstf, spdff, scpf] -> do
config <- readConfig config
wfst <- wfstFromFile wfstf config
seq wfst $ print $ finalSt wfst
spdfs <- spdfsFromFile spdff
seq spdfs $ print $ inspectSpdfs spdfs
scp <- readScpFile scpf
mapM_ (decodeWfstMain config wfst spdfs) scp
}
_ -> putStrLn "error: husky config wfstf spdff scpf"
0361デフォルトの名無しさん
2011/05/04(水) 16:43:48.23普通の人 f $ g $ h arg
性格が捻じ曲がった人 f . g . h $ arg
0362デフォルトの名無しさん
2011/05/04(水) 17:14:10.03:(;゙゚'ω゚'):
0363デフォルトの名無しさん
2011/05/04(水) 17:26:17.44なんでw
f.g.hを一つの関数に見立ててargを渡してるわけでしょ。
性格曲がってないし、普通だし。
0364デフォルトの名無しさん
2011/05/04(水) 17:27:17.320365デフォルトの名無しさん
2011/05/04(水) 17:28:25.75あと、f$g$h argだと再利用性が悪いじゃん。
0366デフォルトの名無しさん
2011/05/04(水) 17:33:23.01f . g . h <$> arg
ってほぼそのままいける
f <$> g <$> h <$> arg
はちょっとしつこい
0367デフォルトの名無しさん
2011/05/04(水) 17:50:49.490368デフォルトの名無しさん
2011/05/04(水) 18:31:09.87プログラム全体を定数にするとなんか嬉しかったりすんのかな?
0369デフォルトの名無しさん
2011/05/04(水) 23:14:21.82どちらの質問もyes
最後については、その論文でもいいと思う。
最新の実装とは少し違うかも知れないけど、基本的な考え方は同じはず。
説明もわかりやすい。
0371デフォルトの名無しさん
2011/05/05(木) 00:57:49.19ByteStringだとKMPだった
0372デフォルトの名無しさん
2011/05/05(木) 03:46:33.93Haskellの仕様には載ってないとはいえ、
「サンクの内容は一回しか評価されない」
というルールを満たす処理系ならどれでも同じ計算量になるよ
紙の上でグラフ簡約を追いかけるだけで十分理解できる内容で、
STG論文はこの話に関係ない詳細が多すぎて明らかな遠回りだと思う
0373デフォルトの名無しさん
2011/05/05(木) 03:51:07.290374デフォルトの名無しさん
2011/05/05(木) 03:53:51.090375デフォルトの名無しさん
2011/05/05(木) 04:07:54.56構文糖を取る以外にも、ものすごく変な最適化してる
0377デフォルトの名無しさん
2011/05/05(木) 14:49:38.050378デフォルトの名無しさん
2011/05/05(木) 15:01:02.12そのまま、全てのコマンドがhaskellで書かれたThis鳥作って出してくれ
0379デフォルトの名無しさん
2011/05/05(木) 19:07:39.49バイナリのサイズが12MBとかになるとがっかりする
0380デフォルトの名無しさん
2011/05/05(木) 20:10:04.480381デフォルトの名無しさん
2011/05/06(金) 00:29:45.44それともバイナリのサイズにこだわることがウンコなのか
0382デフォルトの名無しさん
2011/05/06(金) 00:32:40.480383デフォルトの名無しさん
2011/05/06(金) 00:46:03.33単純に gtk hxt regex-tdfa haskeline parsec を import するだけで 36M (strip後20M) に膨れ上る
0384デフォルトの名無しさん
2011/05/06(金) 01:03:03.160385デフォルトの名無しさん
2011/05/06(金) 01:07:44.26はい
0386デフォルトの名無しさん
2011/05/06(金) 04:28:24.870387デフォルトの名無しさん
2011/05/06(金) 05:39:16.690388デフォルトの名無しさん
2011/05/06(金) 05:40:48.10軽量な書き捨てプログラムはrunghc使えばいいし
0389デフォルトの名無しさん
2011/05/06(金) 10:24:17.78コンパイル時点で何を使うかはっきりしてるんだから静的リンクじゃん?
0390デフォルトの名無しさん
2011/05/06(金) 10:29:53.980391デフォルトの名無しさん
2011/05/06(金) 12:15:03.410392デフォルトの名無しさん
2011/05/06(金) 19:27:33.82Javaどころの贅肉じゃなくなるな
0393デフォルトの名無しさん
2011/05/06(金) 19:32:41.25ネイティブなバイトコードを仮想機械で動かせばそれなりに早くなると思う
0394デフォルトの名無しさん
2011/05/06(金) 19:53:13.150395デフォルトの名無しさん
2011/05/06(金) 20:02:21.76実行速度とサイズは反比例するんですが。。。
まあ、理屈で言えばhaskellがc言語並に速くなるには、もっとサイズがデカくなる必要がある訳で
参照透明性が有るって事は、究極の最適化は、同じ関数に同じ引数が与えられたら、2度目以降は計算すっ飛ばして値が帰ってくるようにする事
実行された全ての関数の、全ての引数に対応した値が保持されるのが、究極の最適化
いくらメモリが有っても足りないから、現在の実装はそう言う実装じゃ無いだろうけどね
64bitOS向けに最適化進んだら、そう言う日も来るかもしれない
0396デフォルトの名無しさん
2011/05/06(金) 20:35:47.440397デフォルトの名無しさん
2011/05/06(金) 21:16:23.36それ、普通にメモライズとかメモ化って呼ばれてるテクニック
0398デフォルトの名無しさん
2011/05/06(金) 21:25:57.15言いたかったのは、テクニックじゃなくて、参照透明性が確保される事による、適用範囲の(理論上の)範囲の広さ
0399デフォルトの名無しさん
2011/05/06(金) 21:33:58.4064bitOS向けに最適化進んでも、そう言う日は絶対に来ない
IOストリーム(IO無限リスト)は
Haskell で一般的に(例えば FRP などで)使われるテクニックだけど、
それがあなたのいう究極の最適化方法では最適化できない
メモリが足りないというレベルではなく、根本的に不可能
0400デフォルトの名無しさん
2011/05/06(金) 21:34:00.70羨ましい。近所の図書館にはRubyの良書しかないな。
あと言語とは関係ないけど「WinMX完全ガイド」みたいな題名の本が図書館の棚に並んでるのを見ると、毎度何とも言えない気分になる。
0401デフォルトの名無しさん
2011/05/06(金) 21:37:20.68うちの近所の図書館にはrubyやpythonの本もRWHもある
0402デフォルトの名無しさん
2011/05/07(土) 10:52:36.34誰か教えて下さい
0403314
2011/05/07(土) 13:43:52.80ありがとうございました。
0404デフォルトの名無しさん
2011/05/07(土) 16:49:37.99諦メロン
cairoフロントエンドはgtkとかのバイナリ取ってきてできたけどどうも動作が怪しい
vtyはフルスペックのncurses(pdcursesじゃ無理ってこと)がwindowsでは使えないから無理
公式はvteフロントエンド推奨だけどvteのビルドにフルスペックのncursesがいるので(ry
win32パッケージを使ってgdiフロントエンドみたいなものを作るしか無理!
でもそんなのできたらその日からyiのコミッタになれると思うよ!
0405デフォルトの名無しさん
2011/05/07(土) 18:11:44.14美学ってのがないn
いや、うらやましいです。
他の分野より新陳代謝が早いからコンピュータ本を抱えるのは大変だろうなー。
0406デフォルトの名無しさん
2011/05/07(土) 18:19:58.97PDFは本当に楽だねw
0407デフォルトの名無しさん
2011/05/07(土) 18:52:01.81ところが全然「新陳代謝」しないんだよ
同じ棚に Python 3 の本とか、OpenOffice 1.0 の本もある
いい加減書庫に葬れよって思う
0408デフォルトの名無しさん
2011/05/07(土) 19:10:54.100409デフォルトの名無しさん
2011/05/07(土) 19:19:42.990410デフォルトの名無しさん
2011/05/07(土) 21:04:45.92どこかに解説ってないの?
0411デフォルトの名無しさん
2011/05/07(土) 22:02:20.80http://www.haskell.org/haskellwiki/Grapefruit#Documentation
あとHaddockリファレンス
0412デフォルトの名無しさん
2011/05/07(土) 22:26:38.35オブラブメンバーの中に潜んでいたLispやHaskellをこよなく愛するファンクショナリスト3名がオブジェクト倶楽部へ反旗をひるがえし、
「オブジェクト倶楽部秋イベント」ならぬ「ファンクション倶楽部秋イベント」を開催。
己が信じる関数道を熱くそしてフリーダムに語り尽くします。
0413デフォルトの名無しさん
2011/05/07(土) 22:40:47.340414デフォルトの名無しさん
2011/05/07(土) 22:50:43.36せっかく紹介してくれたのにゴメン
根本が理解できない俺の能力では論文もリファレンスも無理だった
まだ研究レベルのGUIライブラリだと思って諦めるわ
0415デフォルトの名無しさん
2011/05/07(土) 23:02:43.77気にすんな
どうせ2,3年もたてば、いつものように開発放棄されるさ
0416デフォルトの名無しさん
2011/05/07(土) 23:08:07.280417デフォルトの名無しさん
2011/05/07(土) 23:11:09.420418デフォルトの名無しさん
2011/05/07(土) 23:33:42.74その上に構築するGUIライブラリの話なんだが・・・
0419デフォルトの名無しさん
2011/05/07(土) 23:57:49.68おまえはいつもそうだ
結論を曖昧にすることで、正しいことを言っているような印象を抱かせる
「その上に構築するGUIライブラリの話」だから何なんだい?
0420デフォルトの名無しさん
2011/05/08(日) 00:24:08.41> おまえはいつもそうだ
意味が分からん
実際に正しいことを言っているような印象をお前が抱いたのなら、それでいいと思うぞ
間違っているという印象を抱いたのなら、その部分を指摘して質問してくれ
で、実際はどっちの印象を抱いたのだ?
Grapefruitに代表されるGUIライブラリは、
関数型らしくできるだけ宣言的にGUIを構築できるようにするために、
Gtk2HsやwxWidgetsに被せるラッパーだ
Grapefruitの目的が分かっていれば
「関数型らしくできるだけ宣言的にGUIを構築できるように」
これを前提とした話をしている事は自然と認識できると思うが
最後に頼れるのはgtkなどと次元の異なる発言があったので指摘した
ライブラリを使う「目的」が全く異なる
0421デフォルトの名無しさん
2011/05/08(日) 12:01:51.45ここぐらい多少のアカデミックさがあってもいいんじゃない?
0422デフォルトの名無しさん
2011/05/08(日) 12:04:10.430423デフォルトの名無しさん
2011/05/08(日) 13:41:14.64scrotwmとか、設定ファイルにミスがあると挙動が分からなくなる。
コンパイルできたらほぼ確実にまともなプログラムとして動くってのは確かに便利だと実感した。
普段は型エラーがうざったく感じてたが、ナメてたわ。
0424デフォルトの名無しさん
2011/05/08(日) 13:50:48.09Haskellって別に人数重要ってわけじゃないよね
労働みたいに重いものを運ぶから〜〜人必要って
秀才君は全部一人で作っちゃうよね まして君たちカスじゃ
相当できるやつ以外君たちクズはHaskellやらなくていいんじゃない?
知的好奇心を満たしたいなら一人でやってればいいと思うけどマジゴミみたいだね
まぁゴミみたいだね なんていうかゴミみたいですね カスだね
http://d.hatena.ne.jp/Minamo/20090329/1238345734
こいつ目的ゲーム業界なのにHaskellやっちゃって頭にウジわいてるんじゃないかな野菜のクズっておもいました
0425デフォルトの名無しさん
2011/05/08(日) 13:51:26.760426デフォルトの名無しさん
2011/05/08(日) 13:57:38.45もうちょっと自分の特徴をまとめようよ
一言で表せると最高だ
0427デフォルトの名無しさん
2011/05/08(日) 13:59:17.250428デフォルトの名無しさん
2011/05/08(日) 13:59:40.350429デフォルトの名無しさん
2011/05/08(日) 14:02:43.163行でまとめず、1行でまとめような よしひろちゃん
0430デフォルトの名無しさん
2011/05/08(日) 14:26:08.580431デフォルトの名無しさん
2011/05/08(日) 14:26:53.280432デフォルトの名無しさん
2011/05/08(日) 14:40:57.130433デフォルトの名無しさん
2011/05/08(日) 18:31:33.46ドラゴンとか使わないんすね オライリー! シュシュ
かっこいいっすよ! ドラゴン シュシュ!
シュシュシュ ヘラクレスオオカブトとか意味わからないかっこつけてるんでしょうが シュシュシュ
変ですってあれ シュシュシュ なんていうすかね シュシュ
ひねったあげくあんな昆虫なんすか? シュシュシュ 意味わからないって シュシュシュ
寒いっすよ オライリーさん シュシュシュ パネーッス!!
0434デフォルトの名無しさん
2011/05/08(日) 18:33:06.430435デフォルトの名無しさん
2011/05/08(日) 19:06:29.530436デフォルトの名無しさん
2011/05/08(日) 19:23:41.490437デフォルトの名無しさん
2011/05/08(日) 19:36:13.100438デフォルトの名無しさん
2011/05/09(月) 00:20:00.070439デフォルトの名無しさん
2011/05/09(月) 00:43:36.850440デフォルトの名無しさん
2011/05/09(月) 01:20:17.44ふつうのHaskellは知りたいことが全部後回しでイライラした。
問題はGWが終わったことだ。
0441デフォルトの名無しさん
2011/05/09(月) 05:51:00.56死〜。
0442デフォルトの名無しさん
2011/05/09(月) 19:53:54.23彼は非常に、ネットの立ち回りがうまい。
攻め際と引き際がうまく出来ている。
一度食らったら、いったん引いて攻防を繰り広げており 勝てると思ったら全力で攻め続ける
素晴らしい戦闘スタイル 逃げ際には逃げうちで煽りを入れてから逃げる。
いったんネットの闇に身を潜め、チャンスを伺う。
彼は心理的要素も熟知しているため、炎上の仕組みまで理解している。
そう簡単に崩されることはない、その体制こそが、Ultimate Order アルティメットオーダー(究極の体制)
そして、いつ襲ってくるかわからない暗殺の脅威 危険極まりない人物こそがPerl忍者だ。
Perl忍者を追撃したところで、煙玉を巻かれて遁走のがオチだ。
Haskellスレではsuwabuki,イマイヨシヒロが犠牲になっている。
0443デフォルトの名無しさん
2011/05/09(月) 22:02:59.080444デフォルトの名無しさん
2011/05/09(月) 23:58:29.310445デフォルトの名無しさん
2011/05/10(火) 00:11:25.23Perl忍者さんを脅威に感じているのでしょう、なので敵対してます
彼らは余裕がありません、忍者さんに追いつかれたらまずいので教えようともしません
何も教えたりしていません彼らは、自分が追い抜かれたら大変なので
”常に下を作る”ことをしようとします、ですが忍者さんは彼らより優れています
私はそう思います
Haskellスレの方はアルカディアサーガスレの人たちより親切ですね
ここはPerl忍者さんにとって、第二の理想郷でしょう
皆さん、暖かくPerl忍者さんを迎え入れてください
最近忍者さんが2chに来ないのは、LL系プログラマからいじめにあったことです
彼はそのショックで引きこもったままです 2chに来ようとしません
”IRCのBAN、無視、LL系プログラマの嫉妬”により立ち直れないほどの心の傷をおったそうです
ですので、Perl忍者さんが来たら暖かく迎えましょう
0446デフォルトの名無しさん
2011/05/10(火) 00:22:41.89いじめにより、脳みそが大トロ化してしまったそうです
それにより、思考力が低下し自作自演・妄言が激しくなり
引き篭もり、24時間体制で2chをやっていると聞いております
場合によってはPerl忍者さんは精神病院に隔離される場合があるので
大事に扱って下さい、Perl忍者さんと会議通話をしていたのですが
同じことを何回も繰り返しておりました、”シュシュシュ!! シュシュシュ!!”
と意味不明な言葉を発していました、とても不気味でしたがLL系プログラマから嫉妬をうけたあげく、いじめられたのが原因だと思って
そっとしといてあげました。
先ほど述べたIRCのBANというのはsora_hさんに嫉妬をしてチャンネルを荒らしてしまったのでしょう
そのせいでBANを食らって精神的なストレスにより、余計頭が狂ってしまったそうです
なんかいも、私にIRCでBAN解く方法を教えてくれ と狂ったように100回くらいメッセージを送ってきました
これはダメだと思い、病院に隔離してもらうようにサイバー警察に相談しました
0447デフォルトの名無しさん
2011/05/10(火) 00:37:38.89現在は 20110509glutTest.hs みたいに日付をつけて一つのフォルダに放り込んでます。
0448デフォルトの名無しさん
2011/05/10(火) 05:31:39.280449デフォルトの名無しさん
2011/05/10(火) 07:08:27.250450デフォルトの名無しさん
2011/05/10(火) 10:20:35.75タグで管理できるようなツールを拾ってくるか作るとか。
0451デフォルトの名無しさん
2011/05/10(火) 12:33:54.65ちょっと回り道してでも整理術を学んだ方が結果的には早いのでは?
0452デフォルトの名無しさん
2011/05/10(火) 12:51:20.05全文検索ソフトを入れておけばおk
0453デフォルトの名無しさん
2011/05/10(火) 13:01:39.940454デフォルトの名無しさん
2011/05/10(火) 14:16:16.11まじいみねえから
きもちわりいんだよ デザインテロとかやってろよはげ
0455デフォルトの名無しさん
2011/05/10(火) 20:49:21.16ghciで入力した文をコンパイルできるhsファイル1つに全部保存できたらいいんだけど、名前が競合するから、日付ごとに作ったファイルに入れてる
モジュールとか作るときは日付がないファイル名にするから管理が面倒くさくなる
0456デフォルトの名無しさん
2011/05/11(水) 22:31:58.020457デフォルトの名無しさん
2011/05/11(水) 22:42:59.850458デフォルトの名無しさん
2011/05/11(水) 22:47:56.390459デフォルトの名無しさん
2011/05/11(水) 22:50:12.050460デフォルトの名無しさん
2011/05/11(水) 22:55:10.87そういう言語なんだなあと
0461デフォルトの名無しさん
2011/05/11(水) 23:02:05.290462デフォルトの名無しさん
2011/05/12(木) 00:35:02.47rlwrapが便利だと思われる。$ rlwrap ghci で普通にghciが使えて、$HOME/.ghci_historyというファイルに履歴が残るよ。
0463デフォルトの名無しさん
2011/05/12(木) 00:37:11.16Haskellの人ってみんなdarcsかmercurial使ってると思ってたけど違うのかな。
0464デフォルトの名無しさん
2011/05/12(木) 07:34:49.64例えばどのライブラリ?
論文とその実装がセットで公開されているのは意外に珍しいから
煽り抜きでマジで興味ある
ライブラリ名とその論文を合わせていくつか教えてくれ
0465デフォルトの名無しさん
2011/05/12(木) 07:54:44.710466デフォルトの名無しさん
2011/05/12(木) 08:36:42.44論文も結構新しい部類だし、なんといっても分量が少ない
しかし論文とセットのFRPといえばやっぱ本家であるreactive
そしてしばらくメンテされてないという条件も満たしているwwww
FRPはCCAとstream fusionを使って強力な最適化ができるということが二年ほど前に示されたけど
このCCAなんと条件分岐ができないという欠点があるんでこれを克服したなんかが出ない限り前に進まないだろうなと予想している
FRPはC#のRxとかいろんな分野で広まろうとしているネタではあるのでこのまま死に絶えることはないと祈りたい
0467デフォルトの名無しさん
2011/05/12(木) 12:41:17.98きっと克服してくれる
0468デフォルトの名無しさん
2011/05/12(木) 14:43:15.350469デフォルトの名無しさん
2011/05/12(木) 14:51:44.540470デフォルトの名無しさん
2011/05/12(木) 15:05:56.410471Perl忍者lvl4 ◆M5ZWRnXOj6
2011/05/12(木) 16:45:50.570472Perl忍者lvl4 ◆M5ZWRnXOj6
2011/05/12(木) 16:50:45.46「Perlで常駐プログラムでメモリ管理」みたいにわめいてるんだけど
本とバカだと思う本当に
0473デフォルトの名無しさん
2011/05/12(木) 20:18:00.80例えばフィボナッチ数列のリスト [1, 1, 2, 3, 5, 8・・・] などです。
このような数列の第n項までのリストを返す関数 f :: Int -> [Int] があるとします。
この関数がプログラムの複数の場所で必要とされており、
ある場所では第a項まで、別の場所では第b項まで計算されるという使われ方をします。
この場合、素朴なプログラムでは毎回先頭の項から必要な項まで
順に漸化式を解いていかなくてはなりません。
しかし a < b の場合、ある場所で第a項まで計算したのなら、
別の場所では第a+1項から第b項まで計算すればよく、
先頭項から第a項まで同じ計算をもう一度するのは非効率です。
この問題を解決する方法として2つ思い浮かびました。
ひとつは関数 f の戻り値としてリストの他に、
そのリストに連結する形で以降の項から計算し始める関数 f' も一緒に戻し、
上記の例で言えば第b項まで計算するのに f ではなく f' を使う方法。
ただし、この関数を使う側の方で f' を(State などで)持ち回す必要がある。
もうひとつは、関数 f の中で、計算し終わった分のリストを IORef に入れておく方法。
ただし、関数 f 自体も使う側も(関数 f のためだけに)IO モナドとなる。
他に方法はあるでしょうか。
(例に挙げたフィボナッチ数列は一般項が計算できますが、
今回の問題では一般項は計算できない前提でお願いします)
0474デフォルトの名無しさん
2011/05/12(木) 20:40:42.470475Perl忍者lvl4 ◆M5ZWRnXOj6
2011/05/12(木) 21:19:34.51まつもとひろゆきが、これからの言語はErlang,Haskellとかいってたからかな?
それに便乗してHaskellかじりだしたばかがふえてるのが目に立つんだけどむかつくぜ
0476473
2011/05/12(木) 21:33:16.55結局のところ関数 f の代わりに無限リストを使い、
それを使う場所で持ち回すということですね。
>>474 の前者の解決方法「持ち回し」と本質的には同じですよね。
(ストリームは継続で表現できますし)
0478デフォルトの名無しさん
2011/05/12(木) 22:34:45.770479473
2011/05/12(木) 22:54:08.87申し訳ない、私の方が問題の本質を誤って捉えていました。
もう一度質問し直します。
ある情報を要素として持つリストがあります。
各要素の情報は、リストの先へ行くほどより正確なものになっていきます。
たとえば、数学的な関数 f(x) が極大となる x の位置という情報に対して、
[(a0, b0), (a1, b1), (a2, b2)・・・] というリストを考えます。
ai < x < bi であり、x=ai と x=bi の間に極大があることを表しています。
そして、 ai < ai+1、bi > bi+1 です。
適切な言い方か分かりませんが、情報の正確さにおいて単調増加するリストです。
各要素を「順番に計算して」このようなリストを作る関数 f があるのですが、
この関数 f(つまりリスト)はひとつのプログラムの中の複数の場所で使われます。
ある場所Aではある程度の正確さの情報があれば十分ですが、
別の場所Bではもっと正確な情報が必要、つまりリストのより先まで計算する必要があります。
必要なのはリストそのものでは無く、リストの要素です。
つまり場所Aである正確さの要素を得る計算を f の中でしてしまえば、
リストのそれ以前の要素はもう必要なく、GC の対象になって欲しいです。
もし場所Aより場所Bの方を先に計算するような流れになったら、
そこで得た正確さの情報は場所Aでも問題なく使えるので、
それ以前の要素は GC の対象になって欲しいです。
こういう仕組みを作るのに参考になりそうな論文などは無いでしょうか。
質問が曖昧すぎでしょうか?
0480デフォルトの名無しさん
2011/05/13(金) 04:55:41.58その要求(不要な先頭要素のGC)を満たすには何らかの方法で状態を扱うしかなさそう
StateでもIORefでもいいけど、無限リストの組み合せで実現するのが比較的シンプルだと思う
つまり(a0,b0):(a1,b1):...という無限リストをStateなどで引き回して、
値が必要になったらdropWhileで精度の足りない部分を捨てて使い、
それ以降の部分を新たな状態とする
> >>474 の前者の解決方法「持ち回し」と本質的には同じですよね。
無限リストをグローバルに定義するだけなら引き回しは必要ないよ
この場合、「必要ない要素のGC」は実現できないけど
0481デフォルトの名無しさん
2011/05/13(金) 05:12:47.12無駄な計算を省きつついいかんじに過去の値は捨てていきたいって話…?
0482デフォルトの名無しさん
2011/05/13(金) 07:00:52.78グローバルに無限リストを持っても消費メモリは1/10になる
その代わり必要な精度を超えた反復が最大9回分発生するけど
0483デフォルトの名無しさん
2011/05/13(金) 09:05:55.87精度を表す指標と値のタプルををCurrentで返すようにして必要あればProceedで必要なとこまで進める。
0484473
2011/05/13(金) 20:57:19.82別の場所でその途中の精度まで計算した所の続きから計算し始めることができないんですね。
それは継続用の関数を戻り値として戻してても同じ。
その「持ち回し」というのが、つまりは状態を扱うという事なんですね。
グローバルで状態を管理しようが、一部ローカルで管理しようが、
状態を扱う仕組みとしては同じ事。
あれこれ考えるのは諦めて、素直に State か何かで状態を扱う方向で検討することにします。
ありがとうございました。
>>481
きっとそういう事です。
0485デフォルトの名無しさん
2011/05/17(火) 00:59:05.74Arrowについてあらかじめ知らなきゃ駄目なのか俺の読解力がないのか。
一番シンプルなXMLライブラリって何でしょうか?
0486デフォルトの名無しさん
2011/05/17(火) 01:16:41.98↓はカウントアップする関数なんですけど、
countUp :: State Int Int
countUp = do
n <- get
put (n+1)
return n
get = State $ \s -> (s, s)
n <- get で get は State Int Int なのに、 n に整数が入る理屈が分かりません
0487デフォルトの名無しさん
2011/05/17(火) 01:40:05.22モナドクラスのインスタンスなのは (State Int) 型です。
M をモナドクラスのインスタンス、f の型を M A としたとき、
do { x <- f; ... }
で x の型は A なので、もし M A が State Int Int 型ならば x は Int 型になります。
0488デフォルトの名無しさん
2011/05/17(火) 01:49:16.12説明しようとして get を展開して
n <- ( State $ \s -> (s, s) )
と書いたらこっちも分からなくなった。
0489デフォルトの名無しさん
2011/05/17(火) 02:03:47.07それは、中にある組(s,s)のうち片方だけがnに束縛され、もう片方は捨てられるんだったと思う
getでは同じsなので違いはわからんけど
putの場合は以前のStateの(s,a)の中身は両方捨てて、putへの入力値と()のセットで新しく上書きするので
それで動作を調べたらいい
あと、自分が以前に質問したときは、新しいバージョンではStateコンストラクタは見えなくなり、
今はstate関数になってるって話だったよ
State s a型の場合、組の部分の値を型で表すと\s -> (s,a)ではなく\s -> (a,s)と逆順になってるのは理由があるのだろうか
覚えにくいからいつも忘れてしまう
0490デフォルトの名無しさん
2011/05/17(火) 02:23:19.99get :: MyState Int Int
get = MyState $ \s -> (s, s, s+s, s+s+s, s*s, s*s*s)
test = do
n <- get
return n
この場合は n にどれが束縛されるんだろ…
>>= やputの実装も関係してくるのだろうか
0491デフォルトの名無しさん
2011/05/17(火) 02:50:04.00理屈を分かりたいなら、do記法の糖衣構文を解除(?)して、>>=と>>に書き換えたほうが良い。
>>490
非常にナンセンスな疑問に思えるが、ご想像通り、>>=の実装に依存する。
0492デフォルトの名無しさん
2011/05/17(火) 02:52:56.87そうだと思う。
自分にはStateモナドより、引数に状態を持ちまわる関数のほうがよっぽど使いやすい
Stateを使うと自分で手錠をはめているような感覚になるんだけど、
慣れた人はちゃんと使いこなしてるんだろうか
そこは結構な疑問
モナド変換子を覚えると違うの?
0493デフォルトの名無しさん
2011/05/17(火) 03:17:24.81結局引数もちまわりとやってることは変わらんが、
モナドに抽象化されているので、モナドの種類を変えたりTransformerをかぶせたり
といった操作をしやすい。
複数の関数の引数に同じものを食わすのを隠蔽するのがReaderモナドだし、
複数の関数の返り値のひとつを集めるのがWriterモナド。
関数を (入力の数) -> (出力の数) と表すと
Stateモナドは 2 -> 2 を
Readerモナドは 2 -> 1 を
Writerモナドは 1 -> 2 を
それぞれ (a -> m b)という型の 1 -> 1 なモナドの世界の関数として扱える方法という感じ。
0494デフォルトの名無しさん
2011/05/17(火) 03:27:38.18まず入出力+状態用の入出力をもつ関数
f :: (a,s) -> (b,s)
があって、それをカリー化して
f_curry :: a -> s -> (b,s)
newtypeで State s b = s -> (b,s)と置き換えて
f_monad :: a -> State s b (つまり Monad m => a -> m b の形)
のように、f を意味はそのままでモナドで使える f_monad に変形する。
それで(a,s)という順なのだと思う。
f' :: (a,s) -> (s,b)
から始めれば State s a = s -> (s,a) と定義することになるだろうけど、
こんな f' の型は不自然でしょってこと。
0495485
2011/05/17(火) 17:40:30.39これを見ているのですが、最初のサンプルのXMLの記法が偏りすぎてて参考になりません。
(attribute1個のみと仮定してMap使うわ、attribute無しの単なるelementがないわ)
例えば、
<hoge>
<piyo>
<entry id="1"><title>title1</title><body>body1</body></entry>
<entry id="2"><title>title2</title><body>body2</body></entry>
</piyo>
</hoge>
こんなXMLをpicklerを使って処理したい場合、Haskellでどういうデータ構造を定義して、どういうpicklerをつくればいいんでしょうか?
0496485
2011/05/17(火) 20:41:24.95後続の方のために説明したいんですが力量不足でうまく説明できないです、ごめんなさい。
0497デフォルトの名無しさん
2011/05/17(火) 23:50:58.50モナドを剥して変数を取り出すだけじゃなかったのね。
0498デフォルトの名無しさん
2011/05/18(水) 21:21:35.100499デフォルトの名無しさん
2011/05/19(木) 12:17:46.81[x | x <- [1, 2, 3]]
と記述したところ|が駄目らしくannotationsエラーが出てしまいます。
開発の環境が悪いのかなとも思いcodepadでも走らせてみましたが駄目でした。
何故でしょうか
0500デフォルトの名無しさん
2011/05/19(木) 12:23:47.73それと全く同じコードをghciに入れたら普通に動いたよ。
他の部分に問題があるんじゃないか
0501デフォルトの名無しさん
2011/05/19(木) 13:18:45.61それって、ファイルに直接記述してるんじゃないのかな。
n = [x | x <- [1, 2, 3]]
とかやって、bind するとかしないと、haskell のソースコード 的には、おかしい。
あと、codepad では、main が必要みたい。
0502デフォルトの名無しさん
2011/05/20(金) 17:52:01.10メモリ使用量がすごいせいかldが落ちる……
MONOLITHIC=1とか無茶だろこれ。
オブジェクトファイルだけで500MB超してるんだぞこれ。
0503502
2011/05/20(金) 17:53:26.21スレ違いすまん。
0504デフォルトの名無しさん
2011/05/20(金) 18:07:50.870505502
2011/05/20(金) 18:12:59.57MONOLITHIC=0でwxHaskellさんが認識してくれるのかどうか。
つーか、wxHaskell+Windowsでやろうとしてる人他にいないの?
wxWidgetsスレは過疎ってるし。
0506473
2011/05/20(金) 18:58:04.36GHC 7.0.3 で何回か挑戦したが、もう諦めた
前のいくつかのバージョンではちゃんとインストールできたんだがな
Gtk2Hs の方は比較的すんなりインストールできる
(GTK のコンパイルも要らんし、Cygwin とか MinGW も要らん)
これで特に問題ないから、wxWidgets の事は忘れて今ではずっと GTK だ
0507502
2011/05/20(金) 19:25:01.99ただ、さすがに全部使い切ってはいないみたいだが……よくわからん。out of memory allocating.
>>506
ありがとう、gtk2hsにします。
0508デフォルトの名無しさん
2011/05/20(金) 19:30:09.110509デフォルトの名無しさん
2011/05/20(金) 20:35:07.780510デフォルトの名無しさん
2011/05/20(金) 20:40:03.51比較的すんなりインストールできると言っても、
以前インストールできてた頃の wxHaskell に比べてだ
Gtk2Hs でもちょっとした作業は要る
訊かれてはいないが、私がインストールできた手順を紹介しておく
1. http://www.gtk.org/download-windows.html へ行き
All-in-one bundles のバージョン 2.16 をダウンロードして、
空白無しのアルファベットのみの適当なパスに展開する
(2.22 は zlib.dll の deflateSetHeader 関数がエクスポートされていないからダメ)
2. 環境変数 %PATH% に All-in-one bundles の \bin ディレクトリへのパスと
GHC インストールフォルダ内の \mingw\bin ディレクトリへのパスを追加する
3. コマンドプロンプトで pkg-config --cflags gtk+-2.0 を実行して、
GTK が正しくインストールされていることを確認する
4. コマンドプロンプトで cabal install gtk2hs-buildtools を実行する
5. >>94 に従って、修正すべきパッケージをダウンロードし、
gtk2hs および必要なパッケージを個別にインストールする
その時インストール順に注意(依存関係のため。cabal info か HackageDB で分かる)
0511507
2011/05/20(金) 22:02:14.70ありがとうございます。どうやら成功したみたいです。
最初haskellwiki通りにやってうまくいかなくて、Web探し回っていろんな記述組み合わせて試しにやった方法がそれとほぼ同じでした。
書き込みに気がつかなくて依存関係をしらみつぶしにエラー出るたびに直してたので助かりました。
(あとhaskellwikiに書いてあったBladeバンドル版のGTK使って途中までインストールやったのでゴミが残ったかもしれませんが、気にしないことにします)
後から読む人のために補足しておくと、
・tarボールはcabal unpackで簡単にもってこれる
・Warningで言われるDCABAL_VERSION_MINORはつけなくて平気だった
・cabal unpackで持ってきた「gtk」のgtk/demo/helloでデモできる。runghcで動く。
>>508
どのパッチでしょうか?
>>509
そんな制限があったんですか、知りませんでした。
ただ、物理メモリが1GBからVRAM引いた分しかないので効果があるかどうか。
また時間があるとき試してみます。ありがとうございます。
0512デフォルトの名無しさん
2011/05/20(金) 22:18:35.69> tarボールはcabal unpackで簡単にもってこれる
これは私も知らなかった
簡単でいいな
0513デフォルトの名無しさん
2011/05/20(金) 22:58:44.270514デフォルトの名無しさん
2011/05/20(金) 23:01:18.920515デフォルトの名無しさん
2011/05/20(金) 23:16:55.90こういうの
http://lists.gnu.org/archive/html/bug-binutils/2011-04/msg00138.html
0516511
2011/05/21(土) 15:44:28.36>>515
ありがとうございます。
binutils-2.21-3-mingw32にhttp://sourceware.org/bugzilla/attachment.cgi?id=5675を
手で当ててビルドしたldを使ってやりなおしてみました。
元のバイナリがこれより古かったかもしれないので単純比較できないですが、
パッチ前は40分〜せいぜい2,3時間でout of memoryで落ちたのが、今度は
12時間以上かかった後にcollect2: ld returned 5 exit statusで落ちました。
Athlon 64 X2 3800+,900MB RAM,WinXPの環境。
>>509の/3GBスイッチを付け忘れてしまいましたが、もうやり直す気力が萎えましたw
本格的にgtk2hs勉強しようかな。
>>513
MinGWビルドのMONOLITHICのバイナリが見つからないので……
0517516
2011/05/21(土) 15:46:18.51正:out of memory allocating
0518511
2011/05/21(土) 15:49:41.53肝心なこと書き忘れてました、ビルドに失敗してるのはwxWidgets-2.8.12です。
0519デフォルトの名無しさん
2011/05/21(土) 19:03:31.57じゃなくて,Rubyっぽく
[1,2,3] 何か (2*)
と書く方法を教えてください。
0520デフォルトの名無しさん
2011/05/21(土) 19:12:14.730521デフォルトの名無しさん
2011/05/21(土) 19:12:23.27let fun = flip map
[1..3] `func` (2*)
0522デフォルトの名無しさん
2011/05/21(土) 19:15:15.50ghcのドキュメントみても載ってなかった
0523デフォルトの名無しさん
2011/05/21(土) 19:20:52.140524デフォルトの名無しさん
2011/05/21(土) 19:26:04.350525デフォルトの名無しさん
2011/05/21(土) 19:35:17.810526デフォルトの名無しさん
2011/05/21(土) 19:42:09.26バインドしなくても部分適用は出来るよ
確認したかったら、ghciで型を調べると良い
(値が無いので、値の表示はエラーになる)
0527デフォルトの名無しさん
2011/05/21(土) 19:42:55.73infixr 0 -:, :-
data Pair a b = a :- b
(-:) :: b -> Pair (a -> b -> c) a -> c
x -:f:- y = f y x
main = print $ [1,2,3] -:map:- (+1)
0528デフォルトの名無しさん
2011/05/21(土) 19:50:46.61発想がステキ
0529デフォルトの名無しさん
2011/05/21(土) 20:09:37.730530デフォルトの名無しさん
2011/05/21(土) 23:28:30.15この場合、infix 0 っていうのは、何でですかね?
もっと、強い結合のほうが、使いやすくないですか?
0531デフォルトの名無しさん
2011/05/22(日) 01:42:24.080532デフォルトの名無しさん
2011/05/22(日) 04:52:49.51俺も貼ってからそう思った
>>531
今のGHCだとreadFileは現在のロケールに従う(ただしWindowsだとマルチバイトは未対応のはず)
UTF-8を指定したければopenFile, hSetEncoding utf8, hGetContents
0533デフォルトの名無しさん
2011/05/22(日) 07:34:41.09Map aでaがIntだった時自動的にIntMap使ってくれるみたいな
0534デフォルトの名無しさん
2011/05/22(日) 08:22:59.17なんで出来ないと思ったんだ?
0535デフォルトの名無しさん
2011/05/22(日) 09:14:20.360536デフォルトの名無しさん
2011/05/22(日) 09:24:20.740537デフォルトの名無しさん
2011/05/22(日) 10:18:53.61その呼び出し元にまでSPECIALIZEが必要
0538デフォルトの名無しさん
2011/05/22(日) 10:27:37.850539デフォルトの名無しさん
2011/05/22(日) 11:11:05.06>>535 を見ると、特殊化したい関数にRULESを付けるだけで、
呼び出し元については特に何も書かれていないように見えるんだが
0540デフォルトの名無しさん
2011/05/22(日) 11:16:39.68特殊化された方を呼ぶかどうかはコンパイル時に決まる
foo :: (Ord a) => a -> IO ()
intFoo :: Int -> IO ()
{-# RULES foo = intFoo #-}
bar :: Int -> IO ()
bar x = foo x -- xの型がIntだと分かっているのでintFooが呼ばれる
baz :: (Ord a) => a -> IO ()
baz x = foo x -- xの型がコンパイル時には不明なため、例え実行時にIntであってもfooが呼ばれる
0541デフォルトの名無しさん
2011/05/22(日) 11:33:35.64foo を直接呼出す baz の段階では x の型は確定しないけど、
ほとんどのケースで型推論によって Int かどうかはわかるんじゃないか?
実行時まで確定しないケースってどんなとき?
0542デフォルトの名無しさん
2011/05/22(日) 11:49:03.72「実行時」には型はかならず決定しているね。
でも、コンパイル時、つまりオブジェクトファイ生成時に不明であればfooが呼ばれてしまうというのはそのとおりだと思う。
Mapを多相なままさらにラップしなけりゃ発生しない問題であり、仮にラップしてもインライン展開されれば問題ないと思うが、そういうことを意識しないといけないのはスマートじゃないね。
0544デフォルトの名無しさん
2011/05/22(日) 19:06:24.61何がしたいのか知らんが、型宣言しとけば良いだけじゃないか?
0545デフォルトの名無しさん
2011/05/22(日) 19:59:01.18意味が分からん
0546デフォルトの名無しさん
2011/05/22(日) 22:16:04.02GHCならtype families拡張とか
0547デフォルトの名無しさん
2011/05/23(月) 07:33:16.000548デフォルトの名無しさん
2011/05/24(火) 00:24:34.30data Pt = Pt {x,y::Int}
v = [1,2]
p = Pt v!!0 v!!1
と同じことをやるイディオムってあるんですか?
配列のサイズが大きくなると大変だし、!!は使いたくない・・
0549デフォルトの名無しさん
2011/05/24(火) 00:41:22.520550デフォルトの名無しさん
2011/05/24(火) 01:59:41.34まだGTK+2用だけどそのうち3にも対応するのかな。
0551デフォルトの名無しさん
2011/05/24(火) 03:31:12.28イディオムというほど手軽じゃないけど、Template Haskellを使えば、たぶんやりたいことができる。
参照: http://www.kotha.net/ghcguide_ja/latest/template-haskell.html
Main.hs:
{-# LANGUAGE TemplateHaskell #-}
module Main where
import Vector
vector 2 "Pt"
p :: Pt Int
p = fromList [1,2]
vector 10 "V10"
v :: V10 Char
v = fromList "abcdefghij"
main = do
print p
print v
(つづく)
0552551
2011/05/24(火) 03:33:09.97module Vector where
import GHC.Show
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
class Vector v where
fromList :: [n] -> v n
vector :: Int -> String -> Q [Dec]
vector i name = do
a <- newName "a"
l <- newName "l"
return [dataDec a, instanceDec l]
where
cn = mkName "Vector"
tn = mkName name
dn = tn
fn = mkName "fromList"
dataDec a =
DataD [] tn [PlainTV a]
[NormalC dn $ replicate i (NotStrict, VarT a)]
[mkName "Show"]
instanceDec l =
InstanceD [] (AppT (ConT cn) (ConT tn))
[FunD fn [Clause pats body []]]
where
pats = [VarP l]
body = NormalB $ appE $ toInteger i
appE 0 = ConE dn
appE n =
AppE (appE $ n - 1)
(InfixE (Just $ VarE l) (VarE $ mkName "!!") (Just $ LitE $ IntegerL $ n - 1))
0553デフォルトの名無しさん
2011/05/24(火) 06:36:17.68こういうのが並ぶとうねりコードになるんだよな
かといって圧縮すると一行が200文字コードになるし
この辺は仕方ないの?
0554デフォルトの名無しさん
2011/05/24(火) 06:52:49.580555デフォルトの名無しさん
2011/05/24(火) 07:12:58.100556デフォルトの名無しさん
2011/05/24(火) 07:55:58.94リストだからこれより簡単かと思ったのですが・・・
http://okmij.org/ftp/Haskell/polyvariadic.html#polyvar-comp
0557デフォルトの名無しさん
2011/05/24(火) 07:59:23.40http://okmij.org/ftp/Haskell/polyvariadic.html#polyvar-fn
http://stackoverflow.com/questions/3467279/how-to-create-a-polyvariadic-haskell-function
0558551
2011/05/24(火) 12:21:14.00そういう方向でもちょっと検討したけど、採用しなかった。
理由は:
* 個人的にTemplate Haskellを試してみたかった
* printfとかそのsumOfは型定義は再帰的だけど、うまく型推論されて、実行時に型が決定されているようになっている(たぶん)。
でも、リストを引数にすると、実行時までに型を決定することができなさそう(たぶん)。
* そのやり方でデータコンストラクタを作ると、実質リストを保持しているのと変わらないことになりそう。
最後の理由が一番大きい。
>>548の問題をそのやり方で解決したいならば、
newtype Pt = Pt [Int]
みたいに、リストをそのまま使えば十分でしょう、と。
なお、>>551-552はもっと読みやすくなる可能性はあるし、Language.Haskell.TH.Quoteの関数quoteDecを使えば大改善するかもしれん。
0559デフォルトの名無しさん
2011/05/24(火) 21:15:12.73DLLにして、それをさらにHaskellからリンクして使うことになる?
0560デフォルトの名無しさん
2011/05/24(火) 21:34:23.30別にDLLにする必要はないが
0561559
2011/05/24(火) 21:41:06.14やっぱそうするしかないのか。
そうか……ありがとう。
C++へのバインドってどうやるんだろうと思ってqtHaskellのソース見てて驚いたんだ。
0562デフォルトの名無しさん
2011/05/24(火) 21:44:13.03もしくは C++ のクラスのオブジェクトを生成し、メンバ関数へのポインタを得て、
その関数へ第1引数としてクラスのオブジェクト、第2引数以降に実際の引数を渡せば、
とりあえずアクセスはできる
俺が試みたのは正確に言えば COM だが、これでアクセスできることは実験済み
(オブジェクトのメモリマップが仕様で確定しているから出来たのかも知れんが)
だが、これはこれでめんどい
そういうライブラリを一度作ってしまえばアクセスはそこそこ楽に出来るけど、
今度はIO地獄に陥る
0563デフォルトの名無しさん
2011/05/24(火) 23:39:01.93funcA a >>= funcB >>= funcC
というような式を評価したとき、最初に呼ばれるbindにわたってくる引数の値は、
引数1 (funcA a)を評価した結果のm a
引数2 (funcB >>= funcC)という式(a -> m c)
と考えていいのでしょうか?それとも、
引数2 (funcB)という式(a -> m b)
と考えるべきなのでしょうか?もしくは
どっちと考えても一緒。なぜなら結合法則が一緒であることを保障してるから。
なのでしょうか?
何を見ても、このへんあんまりきっぱり書いてない気がするもので・・・・
0564デフォルトの名無しさん
2011/05/24(火) 23:39:02.49(ds, fs) = partition doesDirectoryExist ps
もちろん、これはエラー(doesDirectoryExist の戻り値は IO Bool だから)
こういう場合、どうやるのがスマートなんだろ
0565デフォルトの名無しさん
2011/05/25(水) 00:06:56.04Haskell には、右結合性、左結合性、非結合性を指定できるという仕組みがあって、
それぞれ、infixr infixl infix という文字で指定できます。
Prelude でも確認できます。
Prelude> :info (>>=)
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
...
-- Defined in GHC.Base
infixl 1 >>=
Prelude> :info (=<<)
(=<<) :: Monad m => (a -> m b) -> m a -> m b
-- Defined in Control.Monad
infixr 1 =<<
詳しい内容は、検索でもしてください。
0566デフォルトの名無しさん
2011/05/25(水) 00:10:04.87> 引数2 (funcB >>= funcC)という式(a -> m c)
これはありえなくね?
0568デフォルトの名無しさん
2011/05/25(水) 21:24:33.80前者は誤り、後者は何を言いたいのかよくわからない
funcA a >>= funcB >>= funcCは
((funcA a) >>= funcB) >>= funcCと解釈するので
ひとつ目の>>=の第一引数は(funcA a),第二引数はfuncB
二つ目の>>=の第一引数は((funcA a) >>= funcB)の結果、第二引数はfuncC
結合法則が成り立つので前者のように考えても良いよね、という質問だとしたら
モナド則を全ての実装が満たしている保障はないので、そういう風に交換するのも無理
よく使うモナドはモナド側を満たしているだろうけどね
0569デフォルトの名無しさん
2011/05/25(水) 21:38:57.70FRPはwxFruitもGrapefruitも開発が続いているようには見えないですが、他のFRPライブラリはどうなんでしょう?
また、FRP以外のパラダイムも研究されているんでしょうか?
あと、FRP関連の論文を少し読んでみましたが既存のパラダイム(例えばgtk2hsのようにモナド内でdoを使ってimperative的にする手法)
の欠点が指摘されているものが見つからなかったのですが、例えばgtk2hs的な手法の問題点はなんでしょうか?
って?ばっかりになってしまいましたが教えてください。
0570uy
2011/05/25(水) 22:09:21.68こんなゴミみたいな言語でもdllは読めるんだろ?
だったら自分でCでGUIライブラリ書けよ・・・ゴミなんだからさ・・・・・・・
0571デフォルトの名無しさん
2011/05/25(水) 23:34:05.48まずFRPライブラリと、FRPを用いたGUIライブラリの混同に注意
FRPライブラリと言えば reactive や yampa のようなもの
FRPを用いたGUIライブラリと言えば wxFruit や Grapefruit のようなもの
GUIを記述する時にdoを使ってimperativeにする手法の問題点は、
たしか Fudgets ライブラリの論文で少し指摘されていたような気がする
どの論文だったかは忘れてしまった
(Conal Elliott が最初に FRP を提唱する以前のdeclarativeなGUIライブラリ)
ただ、imperativeだとHaskellらしくないよね、
Haskellらしくないとソースの見通しが悪いよね、という趣旨だったと思う
それ以外で明確に問題点(?)を指摘してる論文にはまだ出会っていない
偉い人はみんな、当然のようにdeclarativeなプログラムを目指している
だからこの問題はGUIに限らず、一般的にHaskellで
imperativeに記述する事の問題として考えてみることを勧める
個人的には、Haskellでimperativeに記述するとひどく読み難い
一つの関数の定義が縦に長くなるし、タブのネストが深くなりがち
確か、最適化も働きにくくなると、どこかのブログで読んだ気がする
0572デフォルトの名無しさん
2011/05/25(水) 23:39:09.72問題を勘違いしているのだと思うが、
GUIの基盤となるライブラリなら gtk2hs や wxHaskell など既にある
0573デフォルトの名無しさん
2011/05/25(水) 23:42:14.99をやめてモナド(do構文)に移行したのであった
0574デフォルトの名無しさん
2011/05/25(水) 23:48:10.36I/Oの表現方法としてストリームや継続を止めて
モナド(do構文)に移行した理由は何だろ?
冗談は抜きで真面目に
0575563
2011/05/25(水) 23:55:43.08明快なお答えありがとうございます。
Haskellがbindをどう展開しているかについて、なぜ引っかかっているかというと、
F#のワークフローに関する記述には、「bindの第二引数は、継続、つまり残りの処理全部」
と明確に書いてあったからなのです。つまり、F#ではbindは右結合で処理されるように
実装されているということです。
funcA a >>= funcB >>= funcC
↓
(funcA a) >>= (\x -> funcB x >>= funcC)
これはこれで矛盾がないとも考えられます。ただし、結合法則が成り立つことが保障されて
いるという前提ですが。で、
>モナド則を全ての実装が満たしている保障はないので
ということがちょっとひっかかったのですが、そもそもモナドを名乗るためには、
bindの結合法則が成り立つことが大前提だと思っていたのですが。
↓ にも書いてあるので・・・・
http://www.sampou.org/haskell/a-a-monads/html/laws.html#laws
ここにある「正しいモナド」でないモナドもアリなのでしょうか?
「ナシ」なら、右結合でも左結合でも、どっちでも好きなように解釈していい、
ということになると思っているのですが・・・
0576デフォルトの名無しさん
2011/05/26(木) 00:09:32.49これの7章に書いてある。
http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/history.pdf
IO計算の概念が他の手法よりも優れた枠組みだったからということのようだ。
0577デフォルトの名無しさん
2011/05/26(木) 00:10:22.970578デフォルトの名無しさん
2011/05/26(木) 04:50:31.19・継続渡しは決して宣言的に書ける訳じゃない(ストリームは知らん)
・そもそもこれに関して言語とライブラリは全然違う
言語は宣言的な記述と命令的な記述を両方サポートしないと使い物にならない
ライブラリはその問題領域において優れた記述方式だけをサポートすればいい
0579デフォルトの名無しさん
2011/05/26(木) 07:00:08.55>Haskellがbindをどう展開しているかについて、なぜ引っかかっているかというと、
>F#のワークフローに関する記述には、「bindの第二引数は、継続、つまり残りの処理全部」
>と明確に書いてあったからなのです。つまり、F#ではbindは右結合で処理されるように
>実装されているということです。
おそらく、「プログラミングF#」の「10.2 計算式ビルダー」の記述だと思うが、
その記述は defined {} がどう展開されるかの説明であって、
Haskell において >>= が右結合か左結合かという話とは全く関係がない。
Haskell において、F# の defined {} の展開に対応するものは、do 式になる。
以下を見てもらえばわかるが、F# と同様の展開が行われる。
do { x1 <- e1; x2 <- e2; e3 }
↓
e1 >>= (¥x1 -> e2 >>= (¥x2 -> e3))
0580デフォルトの名無しさん
2011/05/26(木) 07:59:20.61Haskellは命令的なコードも問題なく書けるようになってる
一般論として命令的に書くのが悪いなんてことはない
>一つの関数の定義が縦に長くなるし、タブのネストが深くなりがち
こんなのはお前のコーディング能力の問題
GUIで宣言的プログラミングの探求が盛んなのは、
そうした方が綺麗でモジュラー性が高いコードになるという感触があるからだろう
不用意に一般化してはいけない
0581デフォルトの名無しさん
2011/05/26(木) 12:50:26.45> こんなのはお前のコーディング能力の問題
「個人的には」から「深くなりがち」まで一文は
私の個人の能力に起因する私の個人的な感触を言ったまでなのに
そんな言い方はひどくないか
そうした方が綺麗でモジュラー性が高いコードになるという感触があるのは
GUIに特有の、GUIならではの性質なのか?
私は決してGUIだからでは無いと思っている
imperativeよりdeclarativeを目指しているのは分野ばかりではない
パーサー関連は昔からdeclarativeを目指してるし、
GUIに無関係にFRPはよりdeclarativeに向っている
HackageDBでいろんなライブラリを見てみれば分かるが、
できるだけdeclarativeにプログラムできるような仕組みを提供するものが多い
確かに何もかもdeclarativeに書くのが良い訳ではない
しかし、declarativeを目指してる分野は
「不用意に一般化してはいけない」と言うほど特殊でもない
0582デフォルトの名無しさん
2011/05/26(木) 12:58:18.75FRPは状態とその関係性をよりdeclarativeに書くための仕組みだし、別にGUIに特有ではないと思うよ。
GUIが特殊というやつは正直いけぬまだと思われ。
GUIは各インスタンスが状態を持ちその状態がイベントにより遷移し連動するという側面が強く出ているだけでほかのプログラムも同様。
すべからく一般化すべき対象と思われ。
0583デフォルトの名無しさん
2011/05/26(木) 13:58:34.130584デフォルトの名無しさん
2011/05/26(木) 16:44:17.65一瞬ん??ってなるようになった。
0585デフォルトの名無しさん
2011/05/26(木) 17:54:10.74ああ……標準化されてるけどムダに副作用バリバリな関数使うかMS拡張だけど副作用のない関数使うか迷う
まあ大抵後者選ぶんだけど。標準化されててもクソなものはクソだわ
0586デフォルトの名無しさん
2011/05/26(木) 17:58:43.56久しぶりにCのプログラムすると、
関数の呼び出しでコンパイルエラー喰らって、
なんでエラーが出るのかしばらく悩む
0587デフォルトの名無しさん
2011/05/26(木) 18:54:48.05いくらなんでも、それは無い
0588デフォルトの名無しさん
2011/05/26(木) 19:14:43.77それに比べたらHaskellもCも優しい
0589デフォルトの名無しさん
2011/05/26(木) 21:50:22.59a1 >>= a2 >>= a3とかくと
(a1 >>= a2) >>= a3と左にまとめるのか。
なんでどっちかに統一しなかったんだろう?
結合的でない>>=を書いたら、思わぬミスをしそう。
0590デフォルトの名無しさん
2011/05/26(木) 22:04:28.28よくわかってないから違ってるかも知れないんだけど、
そもそもモナド則を満たしてない似非モナド?が悪いんじゃないの?
0591デフォルトの名無しさん
2011/05/26(木) 22:29:21.33Haskellやった後にLISPを見ると手続き的な部分にイライラする
0592563
2011/05/26(木) 23:57:36.88ありがとうございます。自分が何をごっちゃにしていたかやっとわかってきました。
bindを直接書いて
funcA a >>= funcB >>= funcC
とすると、これは演算子を素朴につないでいるだけで、これはそのまま左結合で
処理されるが、
do記法にすると、右結合に展開されるのですね。
よくよく見ると、RWHの355Pに、do記法をどう展開するか書いてありましたね。
同じRWHの244Pに、
〜do記法を使うか>>=を使うかはほとんど趣味の問題だが〜(中略)〜
この二つのスタイルにはある重要な違いがあります。〜(引用終わり)
とある、この重要な違いというのが、右結合されるか左結合されるか、という
違いだったのですね。
do記法だと、たとえばMaybeモナドで最初の式がNothingを返すと、二つ目
のbindは呼ばれないのに対し、>>=でつないだ場合は両方が呼ばれ、二つ目の
bindはNothingを入力しNothingを出力することとなります。
この違いが、結合側を満たしているといえるのか、それともいえないのかは
微妙なところですが、traceなどの副作用を入れて観測しない限り結果は
同じになりますから、結合側は満たしていると考えるべきなのでしょう。
お付き合いくださってありがとうございました。勉強になりました。
0593デフォルトの名無しさん
2011/05/27(金) 00:15:42.51それはscalaやerlangのようなメッセージパッシングのサポート
純粋であるというのはつらいことだね
0594デフォルトの名無しさん
2011/05/27(金) 00:18:46.45それってこういうやつ?
http://hackage.haskell.org/trac/ghc/wiki/ErlangInHaskell
0595デフォルトの名無しさん
2011/05/27(金) 05:20:35.33Control.Concurrent.Chan使おうぜ
0597デフォルトの名無しさん
2011/05/28(土) 09:15:44.83>そんな言い方はひどくないか
「個人的にはAだ」と言われたので、
「なるほど。でも普通はAじゃない」と返しただけ
現状手続き型言語が圧倒的に主流で、既存ライブラリの設計もそっちに激しく偏ってるから、
それを基準にすればHaskellライブラリの大半が宣言型を目指していることになる
しかしだからといって命令的プログラミングを軽視したり「Haskellらしくない」なんて罵倒するのは正当化されない
優れた宣言的手法が存在しない/知られていない分野なんていっぱいあって、
そういう場合は堂々と命令的に書くべきだし、それができるのがHaskellじゃないか
というかHaskellの命令的側面は軽視されすぎ
軽量スレッドのインタフェースは使い易いし、実装も優秀
低レベルのメモリ操作ができる一方でiterateeみたいな高レベルの抽象化も扱い易い
こんな言語はなかなかないと思う
0598デフォルトの名無しさん
2011/05/28(土) 10:56:47.490599デフォルトの名無しさん
2011/05/28(土) 10:58:37.850600デフォルトの名無しさん
2011/05/28(土) 11:06:31.440601デフォルトの名無しさん
2011/05/28(土) 11:42:19.750602デフォルトの名無しさん
2011/05/28(土) 13:35:59.57GUIでは宣言的の方が綺麗でモジュラー性が高いコードになるという感触があると言う
一方で宣言的手法が存在しない分野もあると言う
両者の本質的な違いって何だろ
例えばこの分野には宣言的手法がありそうだと目星を付ける指針みたいなのってある?
0603デフォルトの名無しさん
2011/05/28(土) 14:23:10.070604デフォルトの名無しさん
2011/05/28(土) 14:32:06.85となるとGUIとかはOKだけど、数値計算は…宣言的に書けるか…。
どこが割れ目かってことかね
0605デフォルトの名無しさん
2011/05/28(土) 19:55:37.59書いていることの大筋には共感するが、>>580は喧嘩腰すぎ(同一人物だよね)
>>604
> どこが割れ目かってことかね
えっちぃのはいけないと思います!
0606デフォルトの名無しさん
2011/05/28(土) 21:15:54.800607デフォルトの名無しさん
2011/05/28(土) 22:34:09.89import Data.Map (empty, insert, member)
f :: Int -> Int -> Bool
f x y = menber y $ insert x empty
g : Int -> Bool
g y = f 3
このように関数 f と g を定義した場合、
g 3 や g 5 などを評価する時に
毎回 insert 3 empty が評価されたりはしないですよね
0609デフォルトの名無しさん
2011/05/28(土) 22:38:18.29されないので、安心してくれ
0611デフォルトの名無しさん
2011/05/28(土) 22:50:26.49処理系やコンパイルオプション依存で、再計算されても文句は言えない
実際GHC6.12.3で試したら毎回insertするコードが生成されたよ
0612607
2011/05/28(土) 23:19:34.87なんですと!?
f x y =
let s = insert x empty
in member y s
とか
f x = \y ->
let s = insert x empty
in member y s
とかでも毎回insertするコードが生成されるんですか
0613デフォルトの名無しさん
2011/05/29(日) 02:13:41.21GHC 7.0.2 で Debug.Trace 駆使して確認した限りでは、どちらも駄目
やるんならここまでやらんと
f x = let s = insert x 1 empty in ¥y -> member y s
0614607
2011/05/29(日) 03:28:57.06最適化オプションで一度だけinsertするようなコードが生成されると期待しましたが…
0615デフォルトの名無しさん
2011/05/29(日) 06:23:36.87それは(\x -> let y = e in f)を(let y = e in \x -> f)に変換する最適化で、
full-laziness変換と呼ばれてるが、副作用があるから常には適用されない
特に(\x y -> let y = e in f)を二つの1変数関数(\x -> let y = e in \y -> f)にすることはないはず
0616デフォルトの名無しさん
2011/05/29(日) 06:25:54.87詳細は「Let-floating: moving bindings to give faster programs」
ソースが見づらくなる問題については、where節を使うと良いと思う
f x = \y -> member y s
where s = insert x 1 empty
0617デフォルトの名無しさん
2011/05/29(日) 12:53:37.510618デフォルトの名無しさん
2011/05/29(日) 13:02:50.220619デフォルトの名無しさん
2011/05/29(日) 16:37:37.990620デフォルトの名無しさん
2011/05/29(日) 17:56:30.08研究はされてる
"Compiling Lazy Functional Programs Based on the Spineless Tagless G-Machine for the Java Virtual Machine"
"The Architecture of the Utrecht Haskell Compiler"
など
0621デフォルトの名無しさん
2011/05/29(日) 18:19:38.460622デフォルトの名無しさん
2011/05/30(月) 00:21:19.09Lispの方が実装し易いと言いたいのかね?
0623デフォルトの名無しさん
2011/05/30(月) 22:51:48.59数式っぽく書けるのが気持ちいい♬
0624デフォルトの名無しさん
2011/05/31(火) 01:17:58.36welcome !
0625デフォルトの名無しさん
2011/06/01(水) 14:27:55.860626デフォルトの名無しさん
2011/06/01(水) 15:35:30.840627デフォルトの名無しさん
2011/06/01(水) 17:03:45.27これで作ったんだろうね。
0628デフォルトの名無しさん
2011/06/01(水) 19:23:32.03アンインストールする方法は無いでしょうか
ドキュメントをインストールすると、今までのドキュメントに
インストールしたパッケージのドキュメントが融合されますが、
それを全て融合前の状態に戻したいです
あと、パッケージは既にインストールされているところへ、
ドキュメントだけをインストールしたい場合、
cabal ではどのようにオプションなどを設定するのでしょうか
0629Perl忍者
2011/06/04(土) 23:09:39.330630Perl忍者
2011/06/04(土) 23:22:40.480631Perl忍者
2011/06/04(土) 23:24:51.480632デフォルトの名無しさん
2011/06/05(日) 02:06:08.66instance Testable ()
instance Testable Result
instance Testable Property
instance Testable Bool
なのに、Integer -> Bool の関数が quickCheckの引数にできる理由が分かりません
0633デフォルトの名無しさん
2011/06/05(日) 02:43:15.190634デフォルトの名無しさん
2011/06/05(日) 13:06:08.790635デフォルトの名無しさん
2011/06/05(日) 13:15:31.44それは朗報!
GJ
0636デフォルトの名無しさん
2011/06/05(日) 21:11:47.34キター!
でも、非正格評価から正格評価に代えたらそれまで問題のなかったところで例外が発生するようになる、ということについてすごく注意を促しているけども、それってそんなに気にするようなこと?
いくらかでも役に立つ関数で、そういうことが起こることが想像しにくいんだが。
0637デフォルトの名無しさん
2011/06/06(月) 21:01:56.310638デフォルトの名無しさん
2011/06/10(金) 14:39:26.130639デフォルトの名無しさん
2011/06/10(金) 15:20:31.62単純にhaskellの記事が少ないからだが
0640デフォルトの名無しさん
2011/06/10(金) 21:33:04.35先に引数評価するほうが速くなるのは多くのケースで真でしょ?
実用と一口にいっても速度を求められない場面があるのはわかってるが
速いに越したことはないし、末尾再起の展開だってされるし
0641デフォルトの名無しさん
2011/06/11(土) 16:10:39.24xmonadのソースはリストを配列みたいにして使ってるし全然洗練されていない印象。
一見して何かを移植した感じだね。
0642tokuhirom
2011/06/11(土) 17:33:52.52僕よりプログラミングできないやつが何言ってんだか
0643デフォルトの名無しさん
2011/06/11(土) 17:57:59.13ワークスペースと窓のスタックを選択するのにZipper使ってる所ぐらい?
0644デフォルトの名無しさん
2011/06/11(土) 18:15:54.240645デフォルトの名無しさん
2011/06/11(土) 18:22:21.09リストを配列みたいに使ってるところってどこだろう
0646デフォルトの名無しさん
2011/06/11(土) 18:23:50.08String が [Char] ってのはよくできてる
0647デフォルトの名無しさん
2011/06/11(土) 18:33:37.63デフォルトでBytestringにしてもいいぐらい
0648デフォルトの名無しさん
2011/06/11(土) 18:36:25.76Haskellの型安全性を遺憾なく発揮している
とliftM2を理解できない私は思うのでした。まる
0649デフォルトの名無しさん
2011/06/11(土) 19:07:31.83liftM2 (++) ["a","b","c"] ["d","e","f"]
0650デフォルトの名無しさん
2011/06/11(土) 19:08:18.440651デフォルトの名無しさん
2011/06/11(土) 20:14:32.92コードありがとう。これでliftM2はなんとかなりそう
xmonadの設定でこんな感じに使われてました。難しい
viewShift = doF . liftM2 (.) W.greedyView W.shift
0652デフォルトの名無しさん
2011/06/11(土) 22:02:47.00あと他にもcurryとapp使った性質あったら教えてちょうだい
とりあえずfirst (curry f) >>> app == f以外で
0653652
2011/06/11(土) 22:14:02.35class Arrow :->: => Exponent (:->:) where
type :^: : * -> * -> *
curry : (c,a) :->: b -> b :^: a
app : (b :^: a, a) :->: b
こんな感じ?
で>>652の3行目の性質だけ定められてる
それとarrow則、Category則?を使ってcurry app == idが証明できるっぽいんだけど
なんか適当に変形していった限り際限なくcurry appの入れ子が増えるだけなんだよね
0654652
2011/06/11(土) 22:21:19.53app (f,x) = f x
curry f x y = f(x,y)
(curry app) id x =
app (id,x) =
id x
ってな感じで自明?なんだけどこれを使わずにarrow則とかだけでやると・・・って話ね
0655デフォルトの名無しさん
2011/06/12(日) 03:48:15.16参考:「関数プログラミングの楽しみ」第10章 日本語訳版p.223
0656デフォルトの名無しさん
2011/06/13(月) 01:00:20.65これを仮定して証明を頑張ってたんですが、結局できませんでした。
そもそもcurry app f == fとしても***も&&&もないんだからどうしようもない。
こんだけ頑張ってもできないんだから多分無理なんだろう、でも一度haskell-ircあたりで質問してみるか意やその前にircとMLの過去ログ検索するべきか。
curryはArrowAppの定義に含まれてなくてベタでラムダ式書いた形の文献が多かったです。
curry appがidになるのはArrow (->)における実装依存なのかなぁ
そういやPrelude.curryもArrow (->)専用なんだよね
0657デフォルトの名無しさん
2011/06/13(月) 03:19:16.26curryA f b = mkPair b >>> f
mkPair b = arr (\c -> (b,c))
となってます。
0658デフォルトの名無しさん
2011/06/13(月) 03:53:55.64arr ((>>>h) ☓ id) >>> app == app >>> h
arr (mkPair ☓ id) >>> app = arr id
mkPair f >>> app = f
0659デフォルトの名無しさん
2011/06/13(月) 22:25:24.89途中で止まってしまいます
cabal install -v3 glfw
でインストールを開始したところ、
Graphics\UI\GLFW.hs のコンパイル中に
GLFW_stub.c の gcc によるコンパイルで止まってます
OpenGL-2.4.0.1 はインストールされており、
system32 ディレクトリには GLFW.dll もあります
(管理者権限でコマンドプロンプトを立ち上げてます)
他に足らないものは何かあるでしょうか
0661659
2011/06/13(月) 22:39:56.58追加情報
止まったところで [Ctrl + C] キーで強制的に終了させたら、
cabal: permission denied
と表示されましたが、何か関係あるでしょうか
0662デフォルトの名無しさん
2011/06/15(水) 23:17:43.86僕もwindowsで触ってないしわからないのよ。
ここの多くの人って、脳みそがモナド、血液が関数でできていることを忘れずに。
7.0.4がでたので早速インストールしたhaskell platformも2月版で利用してみる。
0663デフォルトの名無しさん
2011/06/16(木) 12:20:29.540664デフォルトの名無しさん
2011/06/16(木) 13:19:49.44windowsでhaskell使おうとするといろんなところで苦労するよ。
俺もwindowsでhaskell使ってたら問題がでて、
原因が分からず、解決するのに3日以上かかることが度々あった。
だから、もう今ではLinux上でしか使わないようになった。
0665デフォルトの名無しさん
2011/06/18(土) 08:57:11.91cabalは結構不安定というか動作が謎いので、自分はあんまり使ってない。専らソース落して手動Setup.hs。linux上だとまた違うのかもしれないけど。
stub_cで止まるならばSetup.hsの前にconfigureを走らせる必要があるかもしれない。
あとはgccのincludeのpathとかかなあ。
0666デフォルトの名無しさん
2011/06/18(土) 10:45:48.180667デフォルトの名無しさん
2011/06/18(土) 11:15:55.230668デフォルトの名無しさん
2011/06/18(土) 12:53:46.44何が原因かよくわからんから、そういう時は.cabal/package以下にもぐるとそのソースのアーカイブを見つけられるから
それを解答して手動でSetup.hsっていうフォールバックを行うってとこか
そういう定型操作をある程度自動化するスクリプトとか書くといいかもな
でも基本的にcabal使う
Yiの必要パッケージを揃える為に手動で落としてとかやってられんもん
まぁライブラリによっては自分でPACKAGENAME.cabalとかコードの一部を修正しないと入らないなのもあるんだけどね・・・
0669659
2011/06/18(土) 13:55:24.72あれからアドバイスを受けていろいろ試しましたが、
昨日まで全く進展無く、同じところで止まっていました
で、今日 PC を立ち上げた直後に "cabal install glfw" したら、
なぜかインストールできてしまいました
理由は全く不明、俺には理解不能で、説明もうまくできません
昨日と今日で俺の周りの世界がガラッと変わってしまったかのようです
なんか怖い
でもまぁインストールできたのだから、とりあえず先に進みますが、
今後この世界が俺の記憶と違うようだと感じたら、
今日の未明に世界がおかしくなったのだと思うことにします
0670デフォルトの名無しさん
2011/06/18(土) 16:16:49.550671デフォルトの名無しさん
2011/06/18(土) 16:27:31.990672デフォルトの名無しさん
2011/06/18(土) 16:54:59.29そういいながらジョーンズ(仮名)は淫らにほほえんだ
長い夜はまだ幕を開けたばかりだ
0673Perl忍者
2011/06/18(土) 19:11:13.93http://d.hatena.ne.jp/sugyan/20110616/1308203734
ここに乗ってるのフォローしてくださいお願いします
お願いですHaskellのみなさんおねがいで
お願いですフォローしてください
フォロー
0674デフォルトの名無しさん
2011/06/18(土) 21:18:27.830675Perl忍者
2011/06/18(土) 21:35:14.16今すぐフォローすべきPerl界のスーパーエンジニア
http://d.hatena.ne.jp/sugyan/20110616/1308203734
0676デフォルトの名無しさん
2011/06/19(日) 11:56:55.91崇拝しろってこと?
0677デフォルトの名無しさん
2011/06/19(日) 12:54:26.160678デフォルトの名無しさん
2011/06/20(月) 08:50:10.69Data.Wordの配列とするのは普通のやり方でしょうか?
Byteみたいな基本型はないしCharはutf8が表現できるサイズみたいですし
0679デフォルトの名無しさん
2011/06/20(月) 14:11:12.830680デフォルトの名無しさん
2011/06/20(月) 19:17:24.92それにしても、配列は選択肢が多すぎて辛い
Array/IArray/MArray/IOArray/STArray/DiffArrayと、これらのUnboxed版
GHC拡張の並列版に、参考にしようと中身を少しだけ眺めれば
ByteStringにはまた別のMarshall版の配列が使われている
どうしてこうなった・・何を信じたらよいの
0681659
2011/06/20(月) 19:50:06.12それぞれの違いを学んで適切に使い分ければいいだけだよ
http://en.wikibooks.org/wiki/Haskell/Hierarchical_libraries/Arrays
おれは興味が沸かず学んでないんで分からんが
> 何を信じたらよいの
証明済みの定理
0682デフォルトの名無しさん
2011/06/20(月) 20:30:42.47でも基本vectorでいいと思うけどな、どうしても性能が気になるのならMarshallでガンガンいく感じ
それ以外の中途なものは最初は無視でいいと思う
0683デフォルトの名無しさん
2011/06/20(月) 20:36:07.85用途に応じて交換できるようになってれば理想だが…
Haskell の改善点のひとつだよね。
0684デフォルトの名無しさん
2011/06/20(月) 21:33:28.700685デフォルトの名無しさん
2011/06/22(水) 23:42:15.05http://d.hatena.ne.jp/morchin/20110614#p1
0686デフォルトの名無しさん
2011/06/23(木) 01:39:06.20> 「なぜ関数型言語は普及しないか - id:morchin」
> http://d.hatena.ne.jp/morchin/20110614#p1
このブログの書き手には関数型言語は永遠に無理だろうな
自分にとって新しい言語パラダイムを学んで使えるようになるための発想が根本的に間違ってる
0687デフォルトの名無しさん
2011/06/23(木) 01:47:49.49Law(4)の証明の仕方がよくわからん
[ft|q]のqのところの取り扱いがよくわからん
0688デフォルトの名無しさん
2011/06/23(木) 02:33:01.710689デフォルトの名無しさん
2011/06/23(木) 05:29:45.03q := x<-u
t := t(x)
[f t|q] == { unfold q, t} == [f (t(x)) | x<-u] == { law 2 } == map (\x -> f(t(x))) u == { map . map fusion } == map f (map (\x -> t(x)) u
== { <- law 2 } == map f [t(x)| x<-u] == { fold q,t] == map f [t|q]
こう?
文章の説明以外にbnf形式での構文定義も載せといて欲しいよなぁ・・・
0690デフォルトの名無しさん
2011/06/23(木) 07:53:05.73> 「なぜ関数型言語は普及しないか - id:morchin」
> http://d.hatena.ne.jp/morchin/20110614#p1
これはwww 黒歴史すぐるwww
0691デフォルトの名無しさん
2011/06/23(木) 10:56:15.98う〜ん、もうちょっと勉強してから関数型言語のブログを書いて欲しいかな。
0692659
2011/06/23(木) 12:47:47.73Data.Functor や Control.Applicative で定義されているように
Data.Monoid.mappend のシノニムとしての演算子はどこかに定義されていないでしょうか
標準ライブラリの中にという意味です
0693デフォルトの名無しさん
2011/06/23(木) 15:58:28.37これ見る限り無いんじゃ?
0695デフォルトの名無しさん
2011/06/24(金) 08:54:33.610696デフォルトの名無しさん
2011/06/24(金) 09:02:09.790697デフォルトの名無しさん
2011/06/24(金) 09:16:12.260698デフォルトの名無しさん
2011/06/24(金) 13:49:20.180699デフォルトの名無しさん
2011/06/24(金) 14:55:51.26抽象的な数学世界からアイデアを得て考え出された関数型言語では
そもそも思考の対象が違う。
0700デフォルトの名無しさん
2011/06/24(金) 14:57:11.89関数型はバグを減らしたり、高度な抽象化を目指して作られた
0701デフォルトの名無しさん
2011/06/24(金) 16:15:00.62メモリ24GB積んでたとしても取り敢えずあればあるだけ使おうとするの?
デブにおやつなの?
0702デフォルトの名無しさん
2011/06/24(金) 18:40:53.46ヒープ領域(/=搭載メモリ総量)が尽きるたびに発生する
たくさんメモリを使うプログラムだと、ヒープ領域がだんだん大きくなる
0703デフォルトの名無しさん
2011/06/24(金) 18:45:03.64あり^^
0704デフォルトの名無しさん
2011/06/24(金) 21:09:25.71理想はな...
現実は云々
0705デフォルトの名無しさん
2011/06/24(金) 21:58:19.74笑 合計8G
0706デフォルトの名無しさん
2011/06/24(金) 22:15:25.220707デフォルトの名無しさん
2011/06/24(金) 22:29:28.47理論上フローするはずがないと思って実装したのなら、
どこがでスペースリークしている
まずは場所を特定せよ
http://itpro.nikkeibp.co.jp/article/COLUMN/20110308/358081/?ST=ittrend
0708デフォルトの名無しさん
2011/06/24(金) 22:38:10.70C言語だと↑こんな感じ
0709デフォルトの名無しさん
2011/06/24(金) 23:20:02.040710デフォルトの名無しさん
2011/06/24(金) 23:20:47.010711デフォルトの名無しさん
2011/06/24(金) 23:28:18.36って指令はできないの?
0712デフォルトの名無しさん
2011/06/24(金) 23:46:09.85不要な参照が残るようなコードを書かれたらヒープを拡張するか投げ出すしかなくなる
0713デフォルトの名無しさん
2011/06/24(金) 23:57:29.49aとeが脳内で入れ替わった
0714デフォルトの名無しさん
2011/06/25(土) 00:09:55.230715デフォルトの名無しさん
2011/06/25(土) 14:29:07.980716デフォルトの名無しさん
2011/06/25(土) 14:51:03.33FFI使ってるのならあるけど
vectorとrepaには期待している
0717デフォルトの名無しさん
2011/06/25(土) 21:54:37.99だから、関数型言語を挫折したまま語るなよ
両方一応でも覚えたって実感したら、むしろ関数型言語の方が簡単に覚えられるって気付くから
プログラミングhaskellの半分以上は対話プログラムとか、切符番号遊びとか、具体的なプログラム作りだぞ
基本文法覚えるだけなら、あの薄さのさらに半分で済む
手続き型言語の入門書の厚さの割に基本文法覚えるだけの内容のなんと多い事か。。。
0718デフォルトの名無しさん
2011/06/25(土) 22:26:19.890719デフォルトの名無しさん
2011/06/25(土) 23:43:42.56手続き型と関数型のどっちが良いのだろうかと考えることはある
0720デフォルトの名無しさん
2011/06/25(土) 23:46:10.85ノイマン型コンピュータ使ってんだろうが。
0721デフォルトの名無しさん
2011/06/26(日) 00:08:16.02文法覚えるだけなら関数型の方がすぐ覚えられそう。
だけど、文法覚えてから何か作るなら手続き型の方がすんなり作れると思う。
0722デフォルトの名無しさん
2011/06/26(日) 00:14:37.320723デフォルトの名無しさん
2011/06/26(日) 00:30:07.39自分は関数型言語だと思う
特にswap関数は手続き型ではtemp変数が必要なのか、初心者は理解が難しい
(スコープによっては(=大抵は)アドレスも意識する必要出てくるし)
この辺は、関数型言語の方がそのまま位置を交換出来る
(変数の値ではなく、数列などの順番である事に注意)
0724デフォルトの名無しさん
2011/06/26(日) 00:33:24.29それは単にライブラリの充実度の差で、手続き型か、関数型かの差では無いと思う
0725デフォルトの名無しさん
2011/06/26(日) 00:36:18.74数列の非常に離れた要素同士の置換も、関数型言語の方が分かりやすいのか?
0726デフォルトの名無しさん
2011/06/26(日) 00:39:34.79分かりやすいよ
0727デフォルトの名無しさん
2011/06/26(日) 00:46:37.63参考書読んでたら試験内容が洗脳臭くてワラタ
0728デフォルトの名無しさん
2011/06/26(日) 01:05:20.67もしよければ例示してみてくれないだうか
どうも「特にswap関数は手続き型ではtemp変数が必要なのか、初心者は理解が難しい」
というのがイメージしにくい
必要に決まっているという思いが私の中にあるから、
これよりもっと分かりやすい関数型による離れた要素どうしの置換があるというのは
にわかには信じられない
0729デフォルトの名無しさん
2011/06/26(日) 01:18:52.05リストの最初と最後を交換する関数
FirstLast (n:ns) = (last ns) ++ (tail ns) ++ [n]
3つ組の数列(タプルにするけど、固定長なら基本的にリストでも同じ)の先頭と最後を交換する関数
triple (x,y,z) = (z,y,x)
何番目と何番目を交換するとかは、どういうパターン(ここでは性質の事とする)で交換するのかを考えて記述していく
0730デフォルトの名無しさん
2011/06/26(日) 01:28:39.09FirstLast (n:ns) = (last ns) ++ (tail ns) ++ [n]
これ本当に手続き型に比べて初心者がより理解しやすいものなってるのかな
例えばC言語なら次のように書ける
tmp = xs[0]
xs[0] = xs[最後]
xs[最後] = tmp
理解しやすさの度合いは、どちらも大して違いはないように思える
それどころか、これなら何番目と何番目を交換するという場合も
同じ考え方でいける
0731デフォルトの名無しさん
2011/06/26(日) 01:41:56.52初心者はまず
xs[0]=xs[最後]ってやっちゃう(経験談)
理解力あれば、すぐにtempを使う理由分かるけど、分からん人はトコトン分からん
あと、Cだと確か
xs[最後] = xs[(sizeof(xs)/sizeof(xsの型))]
だったと思う
(文字列ならstrlenで済むけど)
0732デフォルトの名無しさん
2011/06/26(日) 01:52:38.770733デフォルトの名無しさん
2011/06/26(日) 01:59:54.55> 初心者はまず xs[0]=xs[最後]ってやっちゃう
やっちゃうことの問題点が分からない
初心者はやっちゃっていいでしょ
それでは望む結果が得られない「理由」を教え解決へ導くのは教える側の役割だよ
それとも、教える側も、「理由」を理解させることが容易ではないという事?
ちなみに、last ns はリストではないから、そのままでは ++ で繋げられないのだが、
それを理解させるよりも難しいという事?
0734デフォルトの名無しさん
2011/06/26(日) 02:42:37.38リストと配列という特性が全然違うデータ構造でのswapを比較して言語の優劣を議論してる時点で全員論外というか何も理解してないのが丸分かり。
リストは伸縮は自在だが要素のアクセスに関してリスト長Lに比例するO(L)時間が必要、配列は伸縮は困難だが要素アクセスはO(1)時間。
こんなに違うものについての「要素の交換」を同じ土俵の上だと思って比較して関数型と手続き型の優劣を議論するのは何もわかってない証拠。
手続き型の配列に相当するものは関数型言語では定義域が有限区間の写像であってリストじゃない。
逆に関数型でのリストに相当する手続き型でのデータ構造は構造体とポインタで作る普通の一方向リストだ。
手続き型プログラミング言語で一方向リストの先頭要素と最終要素をやるには、Haskellでのlastやinitや++に相当する関数を
先ず自分で再帰的に定義すれば交換そのものは729のHaskellでのとほぼ同じ書き方になる。
(C言語だとinfix operatorは自分で定義できないからHaskellでの++はCでは普通の関数呼び出しになり見た目は綺麗じゃないが本質的な問題じゃない)
0735デフォルトの名無しさん
2011/06/26(日) 03:05:33.44なんでだろ
0736デフォルトの名無しさん
2011/06/26(日) 05:22:04.71プログラミングの本質から外れた罠が多すぎる
あの言語じゃアルゴリズム覚える前に意味不明な(多くは意識せず使われているポインタ絡みの)エラーに悩まされることになる
まだJavaのがマシかと
0737デフォルトの名無しさん
2011/06/26(日) 05:46:04.4410〜15年前とは状況が違う
0738デフォルトの名無しさん
2011/06/26(日) 05:59:54.28アルゴリズム+データ構造を本質とするなら、
S式から木構造を理解しやすいschemeを推すけど
やりたいことを実現するために便利な言語がpythonだったとしても、
Javaが基本だとか考えられない
hello worldだけでも、
public static void main(String[] args){System.out.println(); return;}
int main(int argc, char* argv){ printf("hello world\n"); return 0;}
0739デフォルトの名無しさん
2011/06/26(日) 06:34:01.06swap xs i j =
if i < j then take i xs ++ [xs !! j] ++ (take (j-i) (drop (i+1) xs)) ++ [xs !! i] ++ drop j xs
else if i == j then xs
else swap xs j i
効率を無視すればこれが素直か。
0740デフォルトの名無しさん
2011/06/26(日) 07:34:02.45swap xs i j = map f (zip [0..] xs)
where
f (idx,e) | idx == i = xs !! j
| idx == j = xs !! i
| otherwise = e
0741デフォルトの名無しさん
2011/06/26(日) 09:38:45.60まずはAwkがいいよ
0742デフォルトの名無しさん
2011/06/26(日) 11:09:32.22配列が伸縮困難というのは嘘
はじめから要素数を必要以上に確保しておいて、ただ単に最大要素の添え字Nを変えればいいだけの話
0743デフォルトの名無しさん
2011/06/26(日) 11:37:08.30コンピュータを勉強するなら基礎教養としてある程度はCを齧っとけっていうのは正しい。
Cを使っててこりゃ面倒だ、と感じたものが他の高級言語でどう解決されるのかを知るのは良いことだ。
ただ、Cだとアルゴリズムに特化できない諸々の事情があるし、
lispみたいに簡単にそういう面倒事をラッピングできる機能もない。
再帰アルゴリズムとかCでやるにはちょいと苦痛。
置換モデルがつかえる言語じゃないと、少なくとも俺は再帰が理解できなかった。
個人的にはHaskellも、ちょっと面倒。純粋関数言語はどうも潔癖すぎる気がしてしょうがない。
今まで実行時エラーにでくわしたことがないのはちょっとした脅威だけど。
0744デフォルトの名無しさん
2011/06/26(日) 11:52:51.58全くその通りで、言ってること自体には何の反論もないが
なんか論点が違うような気がする
>>723 も >>725(私)も、>>719 の通り
「プログラミングに一度も触れたことのないような何も知らない人に勉強させる」
ことを前提で考えている
で、>>723 が提示したのは「数列などの順番は関数型の方が教えやすい」というものだ
「何も知らない人に」数列などの順番の入れ替える概念や実際のプログラムを教えるのに、
どちらが教えやすい&理解させやすいんだろうねという議論
だから、リストを使おうが配列を使おうが他のものを使おうが、
そんなことはどうでもいいし、伸縮とかアクセス時間(効率)とかはもっとどうでもいい
私たちが議論していた論点は、これからプログラムを組んでいく上で頻繁に出くわすであろう
要素の入れ替えという概念と実際のプログラムの、教えやすさと理解しやすさだよ
それが理解できなければ効率もなにもない
0745デフォルトの名無しさん
2011/06/26(日) 11:57:55.72x := f(x) みたいな簡単なイデオムすらを頭をひねりまくってHaskellに適応させることをアルゴリズムに没頭すると言ってるのなら、
根本的に何か違うと思う
ハードウェアという困難を無視してアルゴリズムに特化してるのではなく、
ハードウェアという困難を無視できる替わりに(アルゴリズムそのものとは別の)新しいHaskellという困難に特化しているんだと思う
そのHaskellという困難はハードウェアという困難よりも学習は困難だと思う
0746デフォルトの名無しさん
2011/06/26(日) 12:01:01.590747デフォルトの名無しさん
2011/06/26(日) 12:06:42.88そりゃお前が x に f(x) の値を「代入する」という意味や操作を
C言語などの手続き型言語でどうやるか既に理解しているからだろ
お前はきっと手続き型をかなり身につけていて、
その経験を元に関数型を見ているから学習は困難だろうと感じるんだよ
全く何もプログラムについて知らない奴に教えるんだから、
そもそも「代入」という概念を教えず代わりに「等値」という概念を教えることで
Haskell プログラムを理解させるのはそれほど難しくないと思うぞ
それほど難しくないと思うぞ
0748デフォルトの名無しさん
2011/06/26(日) 12:07:53.23ごめん、2度言ってしまった
0749デフォルトの名無しさん
2011/06/26(日) 12:34:56.18関数型と手続き型は別の概念じゃないでしょう…
代入は関数型の中心的概念で、むしろ、代入しかないのが関数型
Haskellには「再」代入がないだけ
0750デフォルトの名無しさん
2011/06/26(日) 12:41:45.22申し訳ない
>>745
> x := f(x) みたいな簡単なイデオムすら
と言うのが、いわゆる再代入の意味で言っていると完全に思い込んでました
今後は微妙な意味の言葉には気をつけて発言します
0751デフォルトの名無しさん
2011/06/26(日) 12:46:25.12中心的概念っていうなら「束縛」のほうだろう
>>750
俺もその「イデオム」は再代入前提の例だと思うんだが
0752デフォルトの名無しさん
2011/06/26(日) 12:50:12.22再代入の避け方を教える方が難しい
0753デフォルトの名無しさん
2011/06/26(日) 13:48:05.22STモナド(STRef型)って概念として再代入に含まれるんだろうか。
0754デフォルトの名無しさん
2011/06/26(日) 13:57:15.620755デフォルトの名無しさん
2011/06/26(日) 14:28:09.26まあ、ぶっちゃけhaskellでもCでも、リストと配列両方使えるけど、初心者はその言語で基本的なデータ構造使うので、初心者でなければ配列とリストで適した方を使えば良い
ただ、初心者が扱うならせいぜい5個とか10個程度の要素数だろうから、その並べ替え程度なら、要素に名前付けて、入れ替えるだけって言うのも出来る
(>>729の3つ組の例)
あと、初心者はよく
a=a+1
ってどう言う事?とか聞いて来る
代入、(数学ではなく、言語の)変数の概念を理解する必要がある
0756デフォルトの名無しさん
2011/06/26(日) 14:28:13.391.情報量多い
2.関数型は初心者にとって行間が多い
メモ帳の使い方ぐらいのレベルから解説してる本やサイトなんてないじゃん
0757デフォルトの名無しさん
2011/06/26(日) 14:35:59.730758デフォルトの名無しさん
2011/06/26(日) 14:37:19.98独学なら、情報量の多い手続き型だな
でも、情報量が同じor指導者が居るなら関数型だと思う
0759デフォルトの名無しさん
2011/06/26(日) 14:40:31.47Pascalから入ったから、C言語をはじめて見たとき、これ関数型じゃん、と思ったが
0760デフォルトの名無しさん
2011/06/26(日) 14:47:30.32pascalはローカル関数が使えるんだからCより関数型に近いと思うけど
0761デフォルトの名無しさん
2011/06/26(日) 14:52:16.650762デフォルトの名無しさん
2011/06/26(日) 14:53:36.10関数の意味がまるっきり違う
関数型では、ある意味変数や演算子も関数
(と言うか、逆だな。関数の方が変数と考える)
0763デフォルトの名無しさん
2011/06/26(日) 15:02:23.160764デフォルトの名無しさん
2011/06/26(日) 15:06:28.23コールバックとか
ポインタ参照とかは定数も関数も変数自身もまるで区別してないし
0765デフォルトの名無しさん
2011/06/26(日) 15:17:51.690766デフォルトの名無しさん
2011/06/26(日) 15:35:39.60それは関数型と言うより、コンピュータの本質かと
データと命令区別してないのはコンピュータの性質
関数ポインタまで使えれば、それに迫れるべ
チューリング等価なのだから、本質的には同じなのは当然
表面的にはどっちよりか?と言う話でしか無いよ
んで、関数型言語と言われる言語と同じ事が簡単に出来るのか?
map関数はCじゃどう作る?
0767デフォルトの名無しさん
2011/06/26(日) 15:58:15.68絵に描いた餅だなあ。
0768デフォルトの名無しさん
2011/06/26(日) 16:03:22.86高階関数自体は書けるけど、レキシカルスコープの局所関数が書けない
0769デフォルトの名無しさん
2011/06/26(日) 16:21:41.82B⊆A
C⊆A
B∧C = 0
なんてどんどん登録していけば集合の分割をしてくれるライブラリありませんか?
0770デフォルトの名無しさん
2011/06/26(日) 16:25:47.22純粋な興味でC de map関数は見てみたい
良かったら書いて見てくれへんか
0771デフォルトの名無しさん
2011/06/26(日) 18:30:43.74直感的にコンピュータの動作と一致してるのは手続型だろう。
0772デフォルトの名無しさん
2011/06/26(日) 18:56:21.480773デフォルトの名無しさん
2011/06/26(日) 19:10:53.140774デフォルトの名無しさん
2011/06/26(日) 19:15:08.770775デフォルトの名無しさん
2011/06/26(日) 19:22:37.620776デフォルトの名無しさん
2011/06/26(日) 19:23:43.580777デフォルトの名無しさん
2011/06/26(日) 20:16:57.97プロセスすなわち操作
それは手続き型特有の概念であって、関数型に操作というもは無い
よって、そもそも関数型プロセッサという言葉が矛盾をはらんでいる
0778デフォルトの名無しさん
2011/06/26(日) 20:19:48.13作っても、lispプロセッサーみたく消滅するから無意味
それよりCのmap関数はまだですかね。。。
簡単だと言うので、見られると思ってたんですが
0779デフォルトの名無しさん
2011/06/26(日) 20:29:14.200780デフォルトの名無しさん
2011/06/26(日) 20:33:36.14何に対してのレスなの?
0781デフォルトの名無しさん
2011/06/26(日) 20:43:15.06void map(const int *input, int *output, int size, int (*f)(int))
{
int i;
for(i = 0; i < size; i++) output[i] = f(input[i]);
}
0782デフォルトの名無しさん
2011/06/26(日) 21:00:34.940783デフォルトの名無しさん
2011/06/26(日) 21:07:04.01ありがとう
Cを見たとき関数型言語だと思ったって人の話とは全然違う印象だし、簡単と言っても、初心者にはとても簡単には真似出来なさそうだけど。。。
個人的に、ポインタは入門書にも必ず出てくるけど、初心者向けの概念か疑問なんだよね
特に関数ポインタは入門書に載ってない事多いし
そういう意味で(実用性はともかく)、学習用には関数型言語は向いてると思うんだが。。。
0784デフォルトの名無しさん
2011/06/26(日) 21:09:17.52ゲームや組み込みでヒットすると思う
0785デフォルトの名無しさん
2011/06/26(日) 21:11:34.55関数ポインタと、関数という値(たとえば Integer -> Integer という型の値)があることとは、
意味が全然違うから。
0786デフォルトの名無しさん
2011/06/26(日) 21:15:12.51必要な機能は自分で書くのがC言語。
0787デフォルトの名無しさん
2011/06/26(日) 21:18:21.910788デフォルトの名無しさん
2011/06/26(日) 21:23:16.930789デフォルトの名無しさん
2011/06/26(日) 21:24:14.27それは関数型言語も同じ
最小限の知識でかなりの関数を自作出来る
(ポインタとか覚えなくても、結構高度な事が出来る)
学習用として、個人的にこの点を評価してる
0790デフォルトの名無しさん
2011/06/26(日) 21:26:26.66同じか同じじゃないかは判断基準による。
Cはノイマン型コンピュータの抽象化言語だから存在意義がある。
この視点は一定以上の需要がある。
学習用という視点なら一考の余地はある。
0791デフォルトの名無しさん
2011/06/26(日) 21:35:25.51そうなんだけど、最初に得る知識量と作れる関数のバランスは、Cだけじゃなく、rubyやpythonよりも良いと思ってる
総合的には手続き型の方が簡単に出来る事多いけど、初心者の知識で出来る事が少な過ぎると感じてる
0792デフォルトの名無しさん
2011/06/26(日) 21:37:03.90ブラウザ+Javascriptくらいが妥当。
0793デフォルトの名無しさん
2011/06/26(日) 21:41:31.610794デフォルトの名無しさん
2011/06/26(日) 21:52:22.35初心者にこそメリットある
特に最近の手続き型言語は暗記もののイメージが強い
(Cはそうでも無いけど、今度はコンピュータの知識が必要になる)
関数型言語は、最小限の知識で自作出来るのが、初心者の力の底上げになる
0795デフォルトの名無しさん
2011/06/26(日) 21:55:30.93ttp://shyouhei.tumblr.com/post/5603961294/c
宗教論争はこのくらいでやめて、粛々とHaskellの話をしましょうよ
0796デフォルトの名無しさん
2011/06/26(日) 21:55:39.26未踏でも応募するつもりか
0797デフォルトの名無しさん
2011/06/26(日) 22:00:00.89ねーよ
0798デフォルトの名無しさん
2011/06/26(日) 22:55:52.120799デフォルトの名無しさん
2011/06/26(日) 23:02:33.28いや、文法覚えるのは暗記だから、それ程重要じゃ無い
プログラミングのコツみたいなのを覚える方が重要
それに関数型言語は向いてると思うんだよ
0800デフォルトの名無しさん
2011/06/26(日) 23:19:30.380801デフォルトの名無しさん
2011/06/26(日) 23:26:32.18No2はC言語
物凄く大きく差を開いてNo3にJava
CやJavaですらコードを見るとソースの中にアセンブラが埋め込んである体たらく
0802デフォルトの名無しさん
2011/06/26(日) 23:33:45.71Cってマシンに依存しないアセンブラで
インラインアセンブラの部分は
Cが生成できないニーモニックを書くところじゃん
0803デフォルトの名無しさん
2011/06/26(日) 23:34:41.22文系,理系∈T,T上の二項関係R'
代数{S,R}から代数{T,R'}へのhomomorphismまたはそのinverseについて
0804デフォルトの名無しさん
2011/06/26(日) 23:41:50.54それだけじゃなくて、レガシーソフト(アセンブラ)との互換性のためにアセンブラを埋め込む
他にも、コンパイラが効率のよいコードを生成できないときにもアセンブラを埋め込む
実用ソフトの世界では、まだ40年前のコードが現役で動いてる
そのうち誰もメンテナンスできなくなって社会インフラが止まる
社会のことを考えたら、Haskellなんかやらせずに、アセンブラプログラマを量産しなくちゃいけないのに…
0805デフォルトの名無しさん
2011/06/26(日) 23:52:10.320806デフォルトの名無しさん
2011/06/26(日) 23:55:43.950807デフォルトの名無しさん
2011/06/27(月) 00:15:37.62Haskell の何を見て Haskell が「手続き型」だと言っているのだ?
そもそも、>>798 の言う「手続き」とは何だ?
0808デフォルトの名無しさん
2011/06/27(月) 00:21:54.530809デフォルトの名無しさん
2011/06/27(月) 00:23:23.70現実的には狂信者の比率で判定する。
0810デフォルトの名無しさん
2011/06/27(月) 00:28:03.16個人的には、右辺と左辺がほとんどの場合等価になる様に設計された言語。と定義してる
(ので、脳内では等価型言語と読み替えようか迷ってる)
0811デフォルトの名無しさん
2011/06/27(月) 00:33:50.560812デフォルトの名無しさん
2011/06/27(月) 00:53:10.60違うだろ
0813デフォルトの名無しさん
2011/06/27(月) 00:55:04.820814デフォルトの名無しさん
2011/06/27(月) 00:56:57.01そもそも、論理型言語で=をほとんど見ない件
0815デフォルトの名無しさん
2011/06/27(月) 01:07:43.78X=f(Y)
と宣言すると、XからYを生成できるし、YからもXを生成する
(Prologだと XとYのペアが出力になる)
0816デフォルトの名無しさん
2011/06/27(月) 01:17:59.84手続き=入力(引数)から出力までの一方向の処理手順
y = x + 1
のとき、Haskell は xに1を加えてyに代入するという「手続き」を表現する
(ちなみに、y == x + 1 のときは y と x+1 が等しければ True を出力せよという「手続き」を表現している)
Y :- X + 1
prologでは、yがx+1と等しいという「関係」を表現する
関係なので方向はない
プログラマは関係だけを表現して、YやXを出力する手続きは処理系の仕事でプログラマは単純には関与できない
0817デフォルトの名無しさん
2011/06/27(月) 01:34:15.90pascal勉強した事無いの?
手続きは、必ずしも値を返す必要無いんだよ?
(Cでいう返り値がvoidの関数)
0818デフォルトの名無しさん
2011/06/27(月) 02:06:28.810819デフォルトの名無しさん
2011/06/27(月) 02:08:30.380820デフォルトの名無しさん
2011/06/27(月) 02:09:32.36値を返す必要はないけど、出力はある
チューリングマシーンでいうところの終了状態判定出力
PrologにもPaskalの手続きにも出力はある
0821デフォルトの名無しさん
2011/06/27(月) 02:14:42.28となると停止しない式というのもあるから出力が無い式というのも当然あるな
でもそれはvoidとはちと違う(始対象と型付ラムダ計算の簡約系における圏みたいなの使って無理やり対応させることはできるけど)
0822デフォルトの名無しさん
2011/06/27(月) 02:19:38.37関数型 ⇔ 実引数なしの関数は1階未満の関数のみ代入対象になってる型
関数型の対立概念は手続き型ではない
0823デフォルトの名無しさん
2011/06/27(月) 02:59:03.96鉄道会社で生きてるプログラムのワニ脳みたいな部分はほとんどがアセンブラ言語
当時の天才連中が高級言語を使わずにニーモニック表だけでバカデカいシステムをバグなく組み立てちゃった
高級言語で組み直す気すら起きないほど品質が良かったためそのまま生存競争に勝ってきた
2000年問題のときに外科手術が必要になって切り開いたけど、そのときはアセンブリ職人がいたからなんとかなった
今はそのアセンブリ職人も退職した
もう怖くて誰も手を出せない
自分でプログラムの才能があると思う人はHaskell捨ててアセンブラやりましょう
0824デフォルトの名無しさん
2011/06/27(月) 03:22:05.500825デフォルトの名無しさん
2011/06/27(月) 05:10:16.12禿げる
禿げないようにする為高級言語が生まれたのだ
0826デフォルトの名無しさん
2011/06/27(月) 09:06:34.470827デフォルトの名無しさん
2011/06/27(月) 09:10:27.12小学生の時にハンドアセンブルしてZ80のプログラム書いてた。
0828デフォルトの名無しさん
2011/06/27(月) 11:59:07.040829デフォルトの名無しさん
2011/06/27(月) 12:55:26.00なるほど、面白いな、そういう考え方もあるのか
俺は違って、プログラマに手続きの手順(プロセス)が見えていなければ
手続き型とは言わないと思う
逆に言えば、計算の手順を記述するのが手続き型だと思う
だから、y = x + 1 のようなプリミティブな式では、
たとえそれが C 言語で書かれていようと、「それだけ」では手続き型とは判断できん
もう少し大きなプログラムでなければ分からない
Haskell の本質はプログラムは計算の手順を記述(指示)するものだとは言えない
手順は処理系が生むものだからだ
C 言語は明らかに計算の手順を記述するため、迷わず手続き型と言える
(式を順に評価し、その式が評価された時の環境の状態を記述しているとも言える)
ただ、言語によって区分は曖昧なところも幾分あるから、最近は
プログラムの意味を表示的意味論で表すのが自然と感じるのが関数型で、
操作的意味論で表のが自然と感じるのが手続き型ではないかと考えている
ちなみに、Haskellで y=x+1 と記述した場合、これは同値を表す
同じスコープでyと書かれているところをx+1と書き換えても、
x+1と書かれているところをyと書き換えても、
また同じスコープのどこで定義しても、意味は同じだ
0830デフォルトの名無しさん
2011/06/27(月) 13:04:19.12俺が学生の時、所属大学の物理学科が使ってるある古い装置のプログラムを
アセンブラで組んだ事があったな。
お前詳しいだろ、ちょっとこい、と言われて助手の給料で働かされた。
0831デフォルトの名無しさん
2011/06/27(月) 13:47:42.14>>823みたいな状況にはならない
大学で使われてるのは比較的簡素なものだろう
0832デフォルトの名無しさん
2011/06/27(月) 14:19:36.52おい、俺をバカにすんのか?
スーパーハカーだぞ
0833デフォルトの名無しさん
2011/06/27(月) 14:33:11.23つまらない
0834デフォルトの名無しさん
2011/06/27(月) 14:42:13.26加速器とかのプログラムは難しそう。よくわかんない。
0835デフォルトの名無しさん
2011/06/27(月) 17:20:59.18関数という概念はあるが、その関数も多くの場合は手順として書かれる
関数型は「式」を書くのが主で、関数は「式」として書かれ
より純粋なものになると、手続きすら式となる
てな感じだと思う
>>819
無理矢理っつーか、処理系が作り出すフローを
流れを変えて制御してやるのがPrologのプログラミングだろ
0836デフォルトの名無しさん
2011/06/27(月) 20:32:37.50ようなもののことを指していて、別に言語がどうこうとかあんまり関係なかったはず。
アセンブラやFortranに比べた場合、FPやLispは関数だらけだったから、
これは関数型プログラミングだ、というのは、意味があったんだろうけど今はあんまり関係ないだろ。
さらに言えば、副作用がどうこうとか完璧後付けだし、関数定義でプログラムが構成されていれば
関数型言語でいいんじゃね。
0837デフォルトの名無しさん
2011/06/27(月) 20:52:00.87関数定義の集まりがプログラムになる、なんてのが、90年頃から広まった
C言語は関数型言語とかいう意味不明なデマから逆に推測された変な定義だから。
値を取って値を返す、数学的な「関数」(すなわち副作用がない)だけで
プログラムを作ろう、というのが、FPとかが提唱したことで、そちらこそが
本家本元の「関数型」。で、歴史的に見るとLispがそういうのの初めだったと。
0838デフォルトの名無しさん
2011/06/27(月) 20:56:05.740839デフォルトの名無しさん
2011/06/27(月) 21:15:58.61FPはプログラム代数というのを理論として持っているけど、λ計算とは違う。
Lispもλ計算を実現するために設計されたみたいな話が蔓延しているけど、
それもたしか後付けだったはず。
0840デフォルトの名無しさん
2011/06/27(月) 21:28:13.72http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-453.pdf
0841デフォルトの名無しさん
2011/06/27(月) 21:42:21.38プログラミングのスタイルじゃないか、という気が最近はしている。
MLやLISPを使っていると特に。
0842デフォルトの名無しさん
2011/06/27(月) 21:49:07.12Lispは最初から関数型じゃないスタイルも持ってる。
0843デフォルトの名無しさん
2011/06/27(月) 21:57:50.800844デフォルトの名無しさん
2011/06/27(月) 22:00:01.000845デフォルトの名無しさん
2011/06/27(月) 22:01:52.07つBoost.Spirit
0846デフォルトの名無しさん
2011/06/27(月) 22:01:56.66C言語もラムダ計算で表現できる
シャバにあるC言語のプログラムを数学的にきちんとした仕様で表現しようとする研究でラムダ計算が大活躍してた
0847デフォルトの名無しさん
2011/06/27(月) 22:41:54.74広い意味で関数型言語とみなしている。Cは別の場所で関数定義しなきゃいけないから関数型じゃない。
C++のラムダは変態だけど関数型とみなしてる。
あとはコーディングスタイルが、どれだけその場関数定義を多用するかで関数型の度合いを見ている。
だからCLよりもSchemeの方が関数型だと感じる。
0848デフォルトの名無しさん
2011/06/27(月) 23:16:04.83Prologを作った人(Kowalski)が言うには
アルゴリズム = 論理 + 制御
アルゴリズムを書くと言うことは制御(手順や手続き)を書くことになるそうだ
つまり論理型から見ると関数型はより手続きということらしい
現実のPrologは関数型よりよっぽど手続き的だけどな
0849デフォルトの名無しさん
2011/06/28(火) 00:02:53.24異論は認める
0850デフォルトの名無しさん
2011/06/28(火) 04:13:21.810851デフォルトの名無しさん
2011/06/28(火) 05:25:26.85その行で: lexical error at character 'i'
でストップするんだけど
0852デフォルトの名無しさん
2011/06/28(火) 18:19:53.57ブログだと継続的に高品質な文章を書かないとほとんど見てもらえないから。
2chなら気が向いた時だけ書きこめば多くの人に見てもらえるから。
0853デフォルトの名無しさん
2011/06/28(火) 18:30:09.610854デフォルトの名無しさん
2011/06/28(火) 21:31:39.930855uy ◆KOAgYBL/Xg
2011/06/29(水) 12:43:27.29見て貰う為とか、どこのすいーつ(笑)だよ
技術日誌とか、自分にとって一番見やすすく記憶しやすいようにメモしていきゃいいんだよ
ノートを教師に見せる為にかいてるような、そういうタイプだと中級者より上には絶対いけやしない
0856デフォルトの名無しさん
2011/06/29(水) 12:45:26.020857デフォルトの名無しさん
2011/06/29(水) 13:11:40.11違うね。
ブログで重要なのは:
1.売名
2.自分の思想を普及させてしまえば自分が第一人者になれる→儲かる
3.アフィリ
4.仲間を見つけるため
0858デフォルトの名無しさん
2011/06/29(水) 14:17:24.78テキストファイルに書いた関数もロードできたのでびっくりした。
拡張子変えなくていいので楽。
0859デフォルトの名無しさん
2011/06/29(水) 20:51:37.65その文脈に持ち上げるといいますが
定数をとって別の文脈で使用する関数に変換することもそういいますか?
Real World Haskell 231P constPのことです
0860デフォルトの名無しさん
2011/06/30(木) 10:46:14.46そういっても何も差し支えないと思うんだけど。 定数ってのは引数なしで値を返す関数のことなんだし。
0861デフォルトの名無しさん
2011/06/30(木) 14:22:45.04どの引数を受け取っても同じ値を返す関数が定数(0階関数)
0863デフォルトの名無しさん
2011/06/30(木) 20:36:08.74https://github.com/LearnBoost/Socket.IO-node/issues/279
0864デフォルトの名無しさん
2011/06/30(木) 21:48:37.23定数に引数が渡せません><
Prelude> 1 2
<interactive>:1:1:
No instance for (Num (a0 -> t0))
arising from the literal `1'
Possible fix: add an instance decla
In the expression: 1
In the expression: 1 2
In an equation for `it': it = 1 2
0865デフォルトの名無しさん
2011/06/30(木) 21:57:31.02>>864は1項演算扱いしている。
0866デフォルトの名無しさん
2011/06/30(木) 21:58:57.26どの引数を受け取っても同じ値を返す関数が定数(0階関数)
0867デフォルトの名無しさん
2011/06/30(木) 22:00:58.25こうですか
\x -> 1
0868デフォルトの名無しさん
2011/06/30(木) 22:02:56.00関数の引数の数を項数(アリティ)と言い、項数0の関数を定数とする、
というような感じで
>>861 の意味での定数は、俺はプログラミングの文脈では聞いたことないな
たしかに f x y = 3 は定数として働くよなという気はするが・・・
これはどういう文脈での定義なの?
数学とか?
0869デフォルトの名無しさん
2011/06/30(木) 22:32:29.07f(x)の微分をf'(x)と書く
f が多項式のとき、f''''''''(x)のように「''''」をくっつけていくと、これはいつか定数になる
f''''''''(x)はxに何を入れても同じ値を返す関数であり、同時に定数
「○階関数」という呼び名は論理学で出てくる
2階関数 f(f(x), y)
1階関数 f(x, y)
0階関数 c
0870デフォルトの名無しさん
2011/06/30(木) 22:38:56.730871デフォルトの名無しさん
2011/06/30(木) 23:03:40.49>>859 の質問を受けた >>860 の返答とどう繋がるのか分からん
この場合は >>860 の認識で間違ってないんじゃないの?
0872デフォルトの名無しさん
2011/06/30(木) 23:14:03.360873デフォルトの名無しさん
2011/06/30(木) 23:26:22.57質問にも答えていないし。
0874デフォルトの名無しさん
2011/06/30(木) 23:47:20.61引数なしだが定数ではない関数がある(例 乱数関数、メモリ関数、main)
引数がある関数なのに定数である関数がある(例 f x = 0、メモリ関数、=、main)
0875デフォルトの名無しさん
2011/07/01(金) 00:50:37.680876デフォルトの名無しさん
2011/07/01(金) 07:51:45.73>>861 の定義も文脈によっては存在するとしてだ
引数無しの関数を定数と定義するのも文脈によってはあることは知ってるよな
つまり、どちらも正しくて文脈によって変わる
>>859 の質問と >>860 の返答で使われている「定数」という言葉は
どちら文脈で解釈するのがより適切なんだ?
俺は計算機科学の文脈で普通に使われる定義で考えるべきだと思うが
ちなみに、Control.Applicative.pure 関数は a -> f a という型で
"Lift a value." という説明があるから、このような場合も
持ち上げと言って差し支えない
0877デフォルトの名無しさん
2011/07/01(金) 09:06:27.80IORef,keyboardMouseCallback,addTimerCallbackなどみてると
手続き型と変わらないように見えました。
みなさんはどのあたりにHaskellで書くメリットを感じているのでしょうか。
0878デフォルトの名無しさん
2011/07/01(金) 09:46:52.65俺は型にうるさいところと代数データ型
0879デフォルトの名無しさん
2011/07/01(金) 09:55:51.41グラフィックとかGUIが絡むと手続き臭が漂って臭くなるのは
仕方がないことかも。ホント臭いよな。
0880デフォルトの名無しさん
2011/07/01(金) 12:47:36.83その辺り FRP を使うとコードがスッキリする(可能性が高い)
もう少し言うと、かなりの量の臭い部分をライブラリ内に閉じ込められる
自分でライブラリを作るのなら、臭い部分を綺麗に分けられるとも言える
(その可能性が高い)
今ちょうどテトリスの製作を目指して FRP ライブラリを作っているところ
そのうち公開する
0881デフォルトの名無しさん
2011/07/01(金) 13:03:53.60もうVBで作ったゲームみたいなコードになってる
この辺はexistential typeとか使えば普通のOOPL程度にはすっきりしそう
あとは直で埋め込んであるデータを(de)?serializeを用いたDIっぽいやり方でコードの外に追い出してやるとか?
0882デフォルトの名無しさん
2011/07/01(金) 15:04:25.060883デフォルトの名無しさん
2011/07/01(金) 15:13:30.88reactive, yampa, elerea, grapefruit, banana, buster...
0884デフォルトの名無しさん
2011/07/01(金) 15:20:19.780885デフォルトの名無しさん
2011/07/01(金) 21:09:53.53自分で作るのが面白いんだよ
Conal さんも自分 FRP を作ってみようよって言ってる
http://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming
0886デフォルトの名無しさん
2011/07/02(土) 01:53:49.24C言語でやるとしたら、変数のアドレスを代入することで実現するモノなんでしょうか?
0887デフォルトの名無しさん
2011/07/02(土) 04:14:57.30入力側に変数しか定義できなくて良いなら変数ポインタで実現できますが、
式を定義できるようにするには式へのポインタの代わりになる物が必要です。
C言語にはオブジェクトもクロージャもないので関数ポインタが定番でしょう。
0888デフォルトの名無しさん
2011/07/02(土) 16:10:38.52FRP はファンクショナルなリアクティブ プログラミングだ
C言語でやるならファンクショナルである必要はないし、
無理にファンクショナルにすると返って変なことになる
普通にリアクティブなシステムをプログラムすればいい
で、リアクティブなシステムというのは、
外部の入力や変化(マウスボタンとか、メニューの選択とか、別の計算結果とか)
に反応して結果を返すというシステムだ
意味論は書籍「コンピュータ サイエンス入門 論理とプログラム意味論」が詳しい
たとえば、Windows の GUI がリアクティブなシステムの代表例だ
それを実現するために Windows では外部の入力や変化を
メッセージという形でブロードキャストする
それをウィンドウプロシージャで受け取るというのが、
リアクティブなシステムをプログラムするひとつの例だよ
C言語で実現させる具体例は >>887 が一例挙げている
そんなリアクティブなシステムを
関数型らしく宣言的にプログラムする仕組みが FRP だ
0889デフォルトの名無しさん
2011/07/02(土) 16:23:59.080890デフォルトの名無しさん
2011/07/02(土) 16:24:35.260891デフォルトの名無しさん
2011/07/02(土) 16:30:23.15その FRP を使って何か具体的なものを作ったという話が、
残念ながらサンプル以外になかなか見ないからな
だからテトリスを作ろうと思う
0892デフォルトの名無しさん
2011/07/02(土) 16:32:21.020893デフォルトの名無しさん
2011/07/02(土) 16:37:17.130894デフォルトの名無しさん
2011/07/02(土) 16:48:07.54FRPを使ってゲームとしてちゃんと遊べるテトリスを完成さることができれば
そのFRPライブラリは実用に一歩近づくと俺は思ってる
なんでテトリスかというと、ゲームシーンの遷移や、ロジック、
グラフィック処理などゲームに必要な基礎要素がコンパクトにまとまってて、
FRP の恩恵がどれくらいのものか検証しやすいから
それでいて、古典ゲームなのに今プレイしても楽しいし
0895デフォルトの名無しさん
2011/07/02(土) 17:00:05.780896デフォルトの名無しさん
2011/07/02(土) 17:00:18.44「状態機械に、入力デバイスをリアルタイムで反映させた差分式で更新して
外部デバイスに出力する、を繰り返す。」というモデルだと思うんだけど
これを関数型にできる、もしくはしてメリットがあるものなのかな。
0897デフォルトの名無しさん
2011/07/02(土) 17:16:33.77「関数型にできる事」にメリットがあるかは作って検証してみないことには分からんな
まぁ今のところ俺の予想だと、んなの C# で作った方が楽に決まってる
つまり関数型にできる事にたいしてメリットは無いと思う
俺は単純に Haskell で今までよりもゲームが作りやすくなるって事に、
むちゃくちゃ大きなメリットがあると思う
(実際に作りやすくなったかも検証次第だが、作りやすくなると信じて取り組んでる)
たとえミニゲームでも思ってたよりサクサク作れたら
Haskell って楽しいなって思ってくれる人がきっと増える
0898デフォルトの名無しさん
2011/07/02(土) 17:18:25.03ぜひ結果が出せたら教えてくれ。
0899デフォルトの名無しさん
2011/07/02(土) 17:24:05.050900デフォルトの名無しさん
2011/07/02(土) 17:42:19.09嫌だよ
論文なんてひとつも書いたことないから、
書き方勉強するだけで余計に時間取られる
ただでさえ仕事で疲れるのに
ホームページ作って、夏休みの自由研究の感じでアップする
という公開方法なら気楽でいい(夏中に終わるわけ無いが)
ただ、そんなことは皮算用なんで、今はとにかく研究・実験に集中する
0901デフォルトの名無しさん
2011/07/02(土) 18:01:17.35今ならテトリスより倉庫番とかQIXの方が有り難がられる
0902デフォルトの名無しさん
2011/07/02(土) 18:10:01.81倉庫番はイベントドリブンでもかけるからちょっと意味合い違っちゃう。
0903デフォルトの名無しさん
2011/07/02(土) 18:14:21.75ソースコードがここの書き込み1回で済ませられる程コンパクトな
ジャバスクリプト版も出回ってるくらいだし
ファッションセンス
0904デフォルトの名無しさん
2011/07/02(土) 18:47:11.75小学生が夏休みの自由研究でHaskellを使ったFRPでゲームみたいに空目し
凄い小学生もいるもんだと勝手に感動してしまった
0905デフォルトの名無しさん
2011/07/02(土) 19:40:20.34いいじゃん、俺はテトリスが好きなんだよ
クイックスなんて地味だし、動いてる敵のAIがめんどい
領地計算が何となく見難しそうだし
倉庫番の解説なんかとっくの昔にセガの人に先越されてて、今さら感ありあり
キャラ一人だけでリアルタイム性も無いし、動いてる間はキー入力受け付けないから、
Behavior の有難味がいまひとつだし
0906デフォルトの名無しさん
2011/07/02(土) 19:48:32.430907デフォルトの名無しさん
2011/07/02(土) 22:29:02.66シューティングまでいくと流石に飛躍しすぎて挫折しそうだし
0908デフォルトの名無しさん
2011/07/03(日) 03:53:18.930909デフォルトの名無しさん
2011/07/03(日) 04:59:49.72Prelude> kurouja
"kurouja"
Prelude>
0910デフォルトの名無しさん
2011/07/03(日) 11:06:31.56むしろクロージャは関数型言語が元祖だが。。。
クロージャは高階関数という名前でクロージャと意識しなくても簡単には使える
0911デフォルトの名無しさん
2011/07/03(日) 11:19:53.800912デフォルトの名無しさん
2011/07/03(日) 11:23:22.04型に制限がある、という答えになるのかなぁ
0913デフォルトの名無しさん
2011/07/03(日) 11:50:17.40っていう概念を使って閉方っていうのを定義するというのを聞いた事がある
関数型言語で使われるクローじゃもそれ由来なのかな?
ちなみにポイントフリーのポイントってのは位相由来というのも話だけは聞いたことあるけどどういうもんかはよくわからん
位相は挫折したからな
0914デフォルトの名無しさん
2011/07/03(日) 12:16:18.540915デフォルトの名無しさん
2011/07/03(日) 12:21:36.14名前の参照が関数を定義するスコープに閉じてる、ということ。
数学とはあまり関係ない。
0916デフォルトの名無しさん
2011/07/03(日) 12:27:53.740917デフォルトの名無しさん
2011/07/03(日) 12:36:59.74自分定義の用語使って分かり易い説明ですか?www
0918デフォルトの名無しさん
2011/07/03(日) 12:47:36.080919デフォルトの名無しさん
2011/07/03(日) 13:05:39.58悪いが、言わんとしていることは >>916 の方が分かりやすかった
0920デフォルトの名無しさん
2011/07/03(日) 13:24:55.55Prelude> foo 10
20
Prelude>
0921デフォルトの名無しさん
2011/07/03(日) 13:33:11.20foo x =
let y = 10
in (\z -> x + y + z)
ubuntu> ghci a.hs
GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling Main ( a.hs, interpreted )
Ok, modules loaded: Main.
*Main> (foo 20) 30
60
*Main>
これで回答になっとるやろ。でfuncitonal2ch@twitterってなして
lisp系を無視してる?呆れる
0922デフォルトの名無しさん
2011/07/03(日) 14:11:48.07Prelude> let a = (+ 3)
Prelude> a 4
7
Prelude> (+3) 4
7
Prelude>
0923デフォルトの名無しさん
2011/07/03(日) 20:20:29.25大域環境ではない局所的な環境のことだよ。Lispだと関数定義の中だけで
既に定義されている変数の上書きできるだろ、その変数の情報を収めている
環境のことだよ。
なんでも過去のLispは環境の実装がいまみたいにきっちりしてなかったみたいで、
関数呼び出しをする場所によって、自由変数の指す値が変わってしまったそうだ。
そんな摩訶不思議なことを避けるために、関数定義の中で閉じた変数束縛の手法
のことをクロージャーと呼ぶようになったらしい。
http://www.amazon.co.jp/dp/400007685X
0924デフォルトの名無しさん
2011/07/03(日) 21:10:19.97初回の記事は対談形式で、圏とは何ぞや?なぜ圏なのか?(なぜ圏を使うのか?)とかが、書いてた
少しは圏について得るものがあるかちょっと楽しみ
0925デフォルトの名無しさん
2011/07/03(日) 21:54:38.15どのようにプログラミングに適用すれば良いのか?という実践的ノウハウが
みあたらないし、仮にそれがあったとしても、高い導入コストに見合う
リターンがあるのか不明。
多分直接的になにか役に立つという方向はあんまり期待できないと思う。
そういう系じゃなくて、なんでそんなわけわからないものに関心が向いてしまうのか
とか、琴線に触れてくるものは一体なんなのか?という原因を見付け出したほうが
一般的に使える結果が得られると思う。圏論の言葉を使う必然性も全くないし。
そもそも、全くよくわからないし利害性もないのに関心が向くなんてどう考えてもおかしいだろ。
0926デフォルトの名無しさん
2011/07/03(日) 21:55:54.30Haskellの当たり前なユーザなのか
こりゃ他言語と毛色が違うな
0927デフォルトの名無しさん
2011/07/03(日) 22:12:08.12今回の記事によると「(思ったよりも)ローコスト、(経験的に)ハイリターン」だそうな
連載の記事を書く人は、それぞれの分野で道具として圏論を使ってる人がリレーしながら書く予定だとかで、今回の記事(対談)でも、「唯一の正しい抽象化のレベル」とは限らないと書いてる
記事から感じるのは現実問題として、コスパが良かったから選んでるって言う印象
0928デフォルトの名無しさん
2011/07/03(日) 23:40:59.880929デフォルトの名無しさん
2011/07/04(月) 00:11:53.440930デフォルトの名無しさん
2011/07/04(月) 00:33:43.030931デフォルトの名無しさん
2011/07/04(月) 07:17:37.720932デフォルトの名無しさん
2011/07/04(月) 21:46:24.36評価者が全員数学系なので、数学系の中ではコスパがいいという話ではあるけど、
そこから一般論としてコスパがいいという結論は導けない。
実現可能で有効性も十分立証できる論拠を持ってこないことには、
圏論をやらなくてはならない理由にはならない。
0933デフォルトの名無しさん
2011/07/04(月) 22:26:49.54俺が思うに >>327 は一般論として言っているつもりは無いと思う。
「数学系の中では充分に使いものになる」ってのならそれはそれでひとつの知見として有用じゃないかな。
だいたい Haskell は抽象化のために圏論の概念を使ってるんだろ。
だったらその概念を (程度はともかくとして) 理解する必要があるのはあたりまえじゃね?
Java を使うのにオブジェクト指向を理解する必要があるのと同じ。
0934デフォルトの名無しさん
2011/07/05(火) 03:21:50.97まぁ、現在の計算機科学者自体が学問的に見た場合、数学の出来ない落ち零れなので
数学を否定したがる人がたくさんいるのは、分からないでもない。
そういえば、言語制作者で自分は数学が苦手という恥ずかしいことを言ってる人がいたっけ。
0935デフォルトの名無しさん
2011/07/05(火) 03:48:33.09もしそれで実績があるなら大したものだ……
数学系がなんとかかんとかよりも、よっぽど有能だろう
0936デフォルトの名無しさん
2011/07/05(火) 04:07:41.62というか、ほとんどの言語制作者は整合性を無視しているか、整合性について分かってない。
0937デフォルトの名無しさん
2011/07/05(火) 04:17:39.29具体的なコード提示してうだうだ議論してる所を眺めたい
0938デフォルトの名無しさん
2011/07/05(火) 04:19:00.220939デフォルトの名無しさん
2011/07/05(火) 04:39:15.50不整合があるぐらいのほうが実用上良い可能性がある
そもそも整合性というのがよく分からないんだが、どうやって評価するんだ?
0940デフォルトの名無しさん
2011/07/05(火) 04:42:56.810941デフォルトの名無しさん
2011/07/05(火) 07:08:01.98実用って言葉を使いたがる人ってようけいるけど、
実用的って言葉ほどマジックワードはないよね。haskellくらいなら
ひと通りのものは揃ってるくらいだし。
0942デフォルトの名無しさん
2011/07/05(火) 07:20:27.26> haskellくらいならひと通りのものは揃ってるくらいだし。
ひと通りのものは揃ってるのに、それを利用して
「**を作りました」といってアップする人がほとんどいない
つまり、実用性を外部に身を以て示す人がいない
何故だろ
0943デフォルトの名無しさん
2011/07/05(火) 08:21:47.460944デフォルトの名無しさん
2011/07/05(火) 08:26:30.76いない? 調べもせずにいけしゃあしゃあといいよる
0945デフォルトの名無しさん
2011/07/05(火) 08:43:00.05xmonad、モナディウス、Houseとか正直トイレベルの域出ないでしょ。
0946デフォルトの名無しさん
2011/07/05(火) 08:43:58.680947デフォルトの名無しさん
2011/07/05(火) 09:10:48.23トイレレベルかと思ったらおもちゃかww
0948デフォルトの名無しさん
2011/07/05(火) 09:11:30.580949デフォルトの名無しさん
2011/07/05(火) 09:14:02.06たいてい何があってもそういい続けるビーコンだよな、大抵。
0950デフォルトの名無しさん
2011/07/05(火) 09:15:44.020951デフォルトの名無しさん
2011/07/05(火) 10:07:30.80Jane StreetはHaskellの従兄弟のOCaml使ってるし、意外な所で使われてるかもよ。
まあ、オープンソースで広く使われてる、っていうと確かにあまり聞かないけど。
Darcsくらい? いつもはLisp方面にいるんだけど、Common Lispのプロジェクトとかで、
Darcs使ってる所とかが何故か多い。
0952デフォルトの名無しさん
2011/07/05(火) 10:55:56.570953デフォルトの名無しさん
2011/07/05(火) 11:29:32.27を組めるものの特権だよ。そうじゃなければただのバカとしか言いようがない。
そもそも実用といってる人間にとって実用とは何か?
もう一歩掘り進んだ意味を答えたほうがいいよ。
0954デフォルトの名無しさん
2011/07/05(火) 11:35:51.86突っ込み待ちか?
0955デフォルトの名無しさん
2011/07/05(火) 11:50:24.59ああ?TOTOとINAXディスってるのか?
俺シャワートイレ板の有名コテだからあまり舐めたこと言わないほうがいいよ
0956デフォルトの名無しさん
2011/07/05(火) 12:25:14.14意味不明なんですが。もしなめたことと捉えていて、そのまま、こんご
も舐められたとしたら、あなたはシャワートイレ板でHaskellスレで
舐められたと暴れまくるんですか?トイレ通な人がなん人もこちらに
来るように仕向けて成功するんでしょうか?なにをもってトイレのコ
テハンだということを権威付けしているのかよくわかりません。そろ
そろスレとは無関係なので、これ以上はコメントを差し控えますが。
0957デフォルトの名無しさん
2011/07/05(火) 12:41:57.67調べ方が悪かったのかもしれない
実用性を外部に身を以て示す人を挙げて頂けないか
> 「**を作りました」といってアップする人がほとんどいない
こちらの「ほとんどいない」の方は同意して頂けた認識してよろしいか?
0958デフォルトの名無しさん
2011/07/05(火) 12:49:50.310959デフォルトの名無しさん
2011/07/05(火) 16:07:13.55ttp://d.hatena.ne.jp/camlspotter/20080912/1221193444
ttp://d.hatena.ne.jp/camlspotter/20100330/1269927047
ttp://d.hatena.ne.jp/camlspotter/20101212/1292165692
ttp://cufp.org/jobs/language/31
最初のはリーマン・ショックとドンピシャだから、多分リーマン・ブラザーズのこと。
0960デフォルトの名無しさん
2011/07/05(火) 18:01:12.30そりゃ聞くまでもなくダメだろ
「実用性を外部に身を以て示す人」なんだから
0961デフォルトの名無しさん
2011/07/05(火) 18:31:05.420962デフォルトの名無しさん
2011/07/05(火) 18:58:36.81たぶん、俺が知らないところでもっと多くの人たちが活動してるんだろ
でも彼らは「**を作りました」って実用性をアピールしたりはしない
しないというのは言い過ぎかも知れんが、そう感じる
個々で、あるいは小グループで黙々と活動してる感じだ
まぁ、実は窓の杜のアプリの多くがHaskell製だったりするかもしれんが
0963デフォルトの名無しさん
2011/07/05(火) 19:41:12.91単に目立つエヴァンジェリストの不在を指摘したいの? それなら知らないし、いないと思う。
LLとは出自が違うんだし、毛色も違う言語だし、現れにくいんじゃないかな。
それに、Paul Grahamみたいなの、実際いたら鬱陶しいよ? 無駄に叩かれるし。
Larry WallとかGuido van Rossumみたいな感じならまだ救いがあるけど。
0964デフォルトの名無しさん
2011/07/05(火) 20:18:50.280965デフォルトの名無しさん
2011/07/05(火) 20:54:00.49前段についてはそのとおりだ。だけど、言葉が足りていないので、
>>927はHaskellをやる人すべてが圏論を知らないといけないという意味に取れる。
後段についても一理あるものの、別に実際プログラミングするにあたって、
”いちいち厳密で整合性をもたせた数学的な〜”というようなお題目がつきそうな
ものを土台としてプログラムする、なんてストレス溜まって普通に無理だろ。
なんか圏論わかってます系な人に、『こんなプログラムするなんてこいつは
全然圏論わかってない!』とか暗に馬鹿にされるんだろうな〜とか思いながら
プログラムをしたいというなら別だけど。
適当に圏論は箔付けの為だと割りきってひな壇にいてもらうことにして、プログラミング
としては、圏論は尊重はするポーズはするものの完全無視の独立した技法を開発したほうが
絶対良いと思うんだ。
0966デフォルトの名無しさん
2011/07/05(火) 20:58:11.35べつに目立つエヴァンジェリストのレベルまでいかなくていいよ
「こんなん作ったけどどうよ」 って言って「完成させたアプリ」をアップする
こんな程度でいいんだよ
そういうのがちょこちょこっと出てくると、
あぁHaskellって「使えるね」と感じる人が増えてくると思うんだ
でも現実は・・・ そんな人見ないよね
Haskell人口って決して少なくないと思うんだが
なんでだろ? 何が原因なんだろ? という話
>>941 はひと通りのものは揃ってると言うが、もしかしたら何かが足りないとか?
0967933
2011/07/05(火) 21:30:55.37いやあ、 Java とかだってデザインパターンわかってます系な人に
『こんなプログラムするなんてこいつは全然デザインパターンをわかってない!』
とか暗に馬鹿にされるんだろうな〜とか思いながらプログラムしたりするよ。
つっても、そのわかってます系の人のわかってるレベルっていうのは
実際には理論を全部網羅してるレベルじゃないだろ。
Haskell 使いは全ての人が圏論を知ってないといけないだろうと思うけど、その程度に知っていれば充分。
私が「程度はともかく」と但書を付けたのはそういうこと。
0968デフォルトの名無しさん
2011/07/05(火) 22:19:47.62使ってるうちに興味が沸いて深く理解したければどうぞってやつだ。
プログラミング言語に限らないけど
何かと最初から敷居を上げたがる傾向にあるよね。これはあなただけの
問題ではないから皮肉ってるわけではないよ。
はっきり言ってモナドも理解しなくてもこの時にこう使うということ
だけ知っておくだけでとりあえずは作れるよ。だが、そのことは無視して
最初から、敷居を上げたがるから難解に見えるというのはある。
丁度、ポインタを知らなくても動くプログラムはCでも作れるというのと
同じだし、デザパタも同じだよね。オブジェクト指向は知ってると
スパゲティ製造言語から逃れられるんだろうか?
0969デフォルトの名無しさん
2011/07/05(火) 22:26:53.36記事が上がってるね。ぱっと見てヘヴィメタっぽいおっさんと思ってしまった。
0970デフォルトの名無しさん
2011/07/05(火) 22:38:52.77マクレーンくらいは読んでるのか。
0971デフォルトの名無しさん
2011/07/06(水) 01:25:49.27> 圏論圏論という人は、どこまで理解してるのだろう。
> マクレーンくらいは読んでるのか。
あれを読んで理解できれば数学の院生で通用するよ
さらに使いこなせれば数学者の卵ぐらいにはなれる
0972デフォルトの名無しさん
2011/07/06(水) 05:49:09.56ttps://github.com/search?type=Repositories&language=Haskell&q=language%3AHaskell&repo=&langOverride=&x=0&y=0&start_value=1
4,000件以上もあれば、言語人口と比較して十分過ぎると思うけど、足りんの?
TwitterやBittorrentのクライアントとか、アプリケーションサーバとかいっぱいあるよ。
むしろ、自分が普段使ってる言語の少なさに泣けた。Haskell侮れんな。
0973デフォルトの名無しさん
2011/07/06(水) 07:30:17.38数は申し分ないけど、なんかな、なんか違うんだよなぁ
でも、こんなん作ったけどどうよって言って
完成させたアプリをアップする人を見ないというのは、
俺の完全な間違いだと分かった
すまなかった
でもなぁ、日本人がアプリって聞いて想像(期待)するものとは何か違う気がする
アプリの定義なんて無いから、これらもHaskellのアプリだよと言われれば、
そうだよねとしか言えんけど・・・
0974デフォルトの名無しさん
2011/07/06(水) 07:39:37.22>>958が言うように、今ならキラーアプリ作って名を上げるチャンスということでひとつ。
0975デフォルトの名無しさん
2011/07/06(水) 08:40:34.500976デフォルトの名無しさん
2011/07/06(水) 08:56:41.730977デフォルトの名無しさん
2011/07/06(水) 18:31:53.47中学ぐらいまでの数学記号は流石に分かるが
高校以降のはさっぱり覚えられなかったぜ
上下左右真ん中のどれがどの引数だったか未だに迷う
0978デフォルトの名無しさん
2011/07/06(水) 20:09:13.350979デフォルトの名無しさん
2011/07/06(水) 20:15:50.02どうやら当時は関数って考え方がまったく理解できなかったらしい
0980デフォルトの名無しさん
2011/07/06(水) 22:08:47.160981デフォルトの名無しさん
2011/07/06(水) 22:40:32.53ってか、教科書は予習・復習で理解してしまうものだろ
0982デフォルトの名無しさん
2011/07/06(水) 22:44:49.65>>980
いやほらプログラミングならわかりやすい名前のついた関数をまずやって
それから無名関数とか抽象度の高い概念に移るでしょ?
ところが数学はいきなりf(x)だから当時の漏れは困っちゃったという話
0983デフォルトの名無しさん
2011/07/06(水) 23:04:05.12高卒なんで、そんなもんです
0984デフォルトの名無しさん
2011/07/06(水) 23:09:02.990985デフォルトの名無しさん
2011/07/06(水) 23:11:09.83f(x)の次にg(x)が出てきたろ。
普通の脳ミソがあれば悪くてもその辺で理解できる。
0986デフォルトの名無しさん
2011/07/06(水) 23:14:43.78言葉が足りなかった
高卒をよく卒業できたなと言ったつもりだった
0987デフォルトの名無しさん
2011/07/06(水) 23:15:15.16高卒をよく
高校をよく
0988デフォルトの名無しさん
2011/07/07(木) 00:03:38.67自分も高卒だが、そこまで理解出来ないなんて事は無かったぞ
0989デフォルトの名無しさん
2011/07/07(木) 00:08:08.34そうか…まあ、数1数Aだけやってそれ以上は授業あんまりなかったからな
0990デフォルトの名無しさん
2011/07/07(木) 00:27:56.600991デフォルトの名無しさん
2011/07/07(木) 00:31:42.75。。。。という事は、自分と同じく工業高校卒か
頭良いやつと悪い奴の差が激しいからな。。。
0992デフォルトの名無しさん
2011/07/07(木) 00:43:00.570993デフォルトの名無しさん
2011/07/07(木) 00:49:49.46数VCくらいは当然じゃないの、関連は強くないけどこれくらい教養じゃないの
0994デフォルトの名無しさん
2011/07/07(木) 00:50:21.690995デフォルトの名無しさん
2011/07/07(木) 01:03:01.90普通高校だと、そう
工業高校はAとTに特化してる
0996デフォルトの名無しさん
2011/07/07(木) 02:28:46.32(g o f)(x) = g(f(x))
関数の流れと文字の流れが逆転していて、かなり分かりづらかった記憶がある
大学以降だと、f: x → y みたいな記法が導入されて
こっちは自然に読めたんだが
0997デフォルトの名無しさん
2011/07/07(木) 06:58:36.81むしろ高卒っつーたら普通工業とか商業とかで普通高校ではないだろ大概
ちなみに商業もAと1特化で2とBは触りしかやらない
>>993
Haskellのお陰で興味を持てたのよ、高校以降の数学に
0998デフォルトの名無しさん
2011/07/07(木) 07:23:11.93圏論関係の文献でたまーに結構使われてる
0999デフォルトの名無しさん
2011/07/07(木) 08:05:47.92その書き方は高校数学とは関係ない。
むしろ代数学的な書き方。
1000デフォルトの名無しさん
2011/07/07(木) 08:35:43.2510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。