関数型プログラミング言語Haskell Part18
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/03/16(金) 21:54:23.92ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
0159デフォルトの名無しさん
2012/04/18(水) 22:42:45.46スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
スパコンのOSはハードウェアである。
したがって、スパコン以外のUNIX系OSもハードウェアである。
0160デフォルトの名無しさん
2012/04/18(水) 22:47:24.63京はノードに少し改良したLinuxを入れてて、京そのもののOSは移植じゃなくて改良
0161デフォルトの名無しさん
2012/04/18(水) 22:55:14.12> スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
↓この間に飛躍がある。
>スパコンのOSはハードウェアである。←根拠を省いた断定。
0162デフォルトの名無しさん
2012/04/18(水) 23:08:22.98別の言い方をしましょう
「例えば、HaskellでプログラミングしてるときのOSって何?」
「Haskellでプログラミングしてるとハイパーキューブとかのハードウェア構造が消えるけど、ハードウェアは何に吸収されたの?」
0163デフォルトの名無しさん
2012/04/18(水) 23:14:00.030164デフォルトの名無しさん
2012/04/18(水) 23:15:54.30それこそ初心者スレへどうぞだよ(OS,UNIX板あたりも含めて)。
もう少しコンピュータのいろはを勉強するか、あるいは無知の知に気がついた方がよい。
ヒント
・言語処理系から見たOSはライブラリの下でsystem callとして呼び出され機能している。
・OSは(というか通信ミドル)はトポロジーを特に隠さない。
むしろトポロジーを意識して並列分散したほうが性能がでる。
Haskellがトポロジーを露わに扱う術を持っていないだけである。
0165デフォルトの名無しさん
2012/04/19(木) 00:45:36.210166デフォルトの名無しさん
2012/04/19(木) 00:50:20.71「スパコンのOSはハードウェアである。」
とかトンデモな断言をするより遙かにましだろ。
「UNIX系OSもハードウェアである。」
に至っては、初心者スレではなく、もはや病院行けとしか言いようがない。
恥ずかしすぎるので人前では決して言わないように。
0167デフォルトの名無しさん
2012/04/19(木) 01:33:45.40ghc 7.2.1 以降は
import System
とすると、
could nod find module 'System'
It is a member o the hidden package 'haskell98-2.0.0.0'
use -v to see a list of the files searched for.
とでてコンパイルできません
ghc 7.0.4 ではコンパイルできます。
7.2.1 以降でコンパイルできるようにするにはどうしたらいいでしょうか?
環境はWindows7 です。
http://ideone.com/ToAyj
0169デフォルトの名無しさん
2012/04/19(木) 02:46:32.16にすればおk
0170デフォルトの名無しさん
2012/04/19(木) 20:50:07.23System call がハードウェアとの接触点ということでしょう
ということは、rawSystem から向こうは全部ハードウェアです
仮に、Haskellプログラムがプログラム上の言明でトポロジーにアクセスできてどのノードのどのLSIのどのメモリのどのビットを1にするか指定していたら、そのプログラムはOSです
0171デフォルトの名無しさん
2012/04/19(木) 21:04:49.64・コンピュータ科学では、「どのコンピュータの」OSもハードウェアと「原理的に」同一
・一般のコンピュータ科学を知らない人たちは、スパコン業界のハードウェアとOSを同一視している
分からなければ、次の話を考えればいい
今パソコンの中に10cmくらいの512MBのメモリが入っている
この世から、プログラムを高水準のモノから次々の削除していく
一度削除したら、そのプログラムと同じことができるモノは永遠にこの世に出てこない
これを続けていくと、OSが削除されたときに512MBのメモリはハードウェアではなくなり、ただの石になる
もっと言うと、川べりに落ちてるただの石も、その石を動かすシステムがあって、Haskellプログラムからそのシステムにアクセスできて計算に利用できれば、そのシステムはOSであり、そのOSと石はハードウェアになる
0172デフォルトの名無しさん
2012/04/19(木) 21:22:33.360173デフォルトの名無しさん
2012/04/19(木) 21:59:04.77持ちネタはそんなにないから、しばらくすれば満足して黙る
0174デフォルトの名無しさん
2012/04/19(木) 22:06:58.32例外はOSの論文読んでるときだけ
0175デフォルトの名無しさん
2012/04/20(金) 00:43:47.39この世にこれほど頭の悪い人を見たことがない。
0176デフォルトの名無しさん
2012/04/20(金) 02:42:48.57すれ違い迷惑です。退場してください
0177デフォルトの名無しさん
2012/04/20(金) 13:03:38.270178デフォルトの名無しさん
2012/04/20(金) 16:23:19.18http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell
どうよ?
0179デフォルトの名無しさん
2012/04/21(土) 22:14:24.350180デフォルトの名無しさん
2012/04/22(日) 07:57:37.73ttp://www.haskell.org/ghc/docs/latest/html/users_guide/lang-parallel.html
0181デフォルトの名無しさん
2012/04/22(日) 08:05:10.570182デフォルトの名無しさん
2012/04/22(日) 11:52:22.810183デフォルトの名無しさん
2012/04/22(日) 11:55:45.930184デフォルトの名無しさん
2012/04/24(火) 23:23:42.89(論文のインベーダーを改造したり、ブロック崩しを作ったりしました)
一方、同じく FRP ライブラリの Reactive の方では、
どのようにゲームを作るのか
具体的には、個々のキャラを毎フレーム独立に動かしながら、
かつ互いに(衝突などで)関連を持つようにするには、
どのようなフレームワークを考えれば良いのか
生成や消滅はどのように考えるのか
参考になりそうな文献や記事は無いでしょうか
自分では、イベントとシンクの考え方がユニークで面白いので、
これをゲームオブジェクト間の関連に使えないかと考えているのですが、
他の人はどのように考えているのか、参考にしたいです
0185デフォルトの名無しさん
2012/04/25(水) 01:23:27.55Yampaは、Reactiveなんかの古典FRPを写像変換子のアローとして再構築したライブラリだから、基本的なところの考え方に違いはないはず。
というか、生成、消滅、衝突とかをどう考えたらいいかわからないってのは、FRPの基本的な考えを理解してないからじゃないか?
時間に応じて離散的に変化する値を[(Time, a)]という無限リストだと捉えるのがイベント
時間に応じて連続的に変化する値をTime -> aという型の連続関数だと捉えるのがビヘイビア
こいつらに対して、
定刻tを過ぎたらイベントを発する atTime :: Time -> Event a
ビヘイビアを積分する integral :: Behavior a -> Behavior a
イベントが発生したタイミングで、ビヘイビアの値を補足した新しいイベント作る snapshot :: Behavior a -> Event b -> Event (a, b)
みたいなコンビネータを使ってごにょごにょするのがFRP。
例えば、キャラの移動速度の変化をビヘイビアとして定義して、integralで積分すれば、それが各時刻におけるキャラの位置のビヘイビアになる。
衝突、生成、消滅、キャラのステータス状態の変化、キー入力なんかは、イベントとして考えられるし、
毎フレームの更新自体もイベントとして考えられて、各キャラの更新は
map (flip snapshot updateEvent) charactor
みたいに書けば、それが各フレームのキャラの状態変化を表すイベントになる。
こんな感じで、イベントとビヘイビアを組み合わせて、より複雑なイベントやビヘイビアを作ってく。
とりあえず、Haskell wikiからたどれるリンクを片っ端から読みあさるのが良いと思う。
http://www.haskell.org/haskellwiki/Functional_Reactive_Programming
http://www.haskell.org/haskellwiki/Reactive
本だとSOEが有名。
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
0186デフォルトの名無しさん
2012/04/25(水) 02:00:46.52全てTime -> aという連続関数として考えるのが基本的なアイディア。
イベントやビヘイビアの合成は、
SF a b = (Time -> a) -> (Time -> b)
という写像変換として定義して、その枠組みにアローを使ったと。
古典FRPの概要と欠点とか、AFRPが何を改善したのかとかは
http://www.haskell.org/haskellwiki/Yampa
から辿れる、ITU-FRP2010 のスライドで説明されてるから見とくと良いと思う。
0187デフォルトの名無しさん
2012/04/25(水) 04:37:14.33実際に使われてるコード読みまくるか
0188デフォルトの名無しさん
2012/04/25(水) 19:19:28.33Yampa でゲームを作る場合、
pSwitch 系の関数を中心にイベント周りを組み立てるのが一般的ですよね
(論文 The Yampa Arcade や、これを引用してる他の論文などでも基本的にそうなってます)
まず、現在発生しているゲームオブジェクトを全てまとめたコレクションを作っておく
その上で、たとえば pSwitch 関数や dpSwitch 関数を使うのでしたら、
各ゲームオブジェクトや外部入力を起源とするイベント(衝突やビーム発射)を
発生させる関数を第1引数に渡す
コレクションの初期値を第2引数に渡す
第1引数の関数で発生したイベントを、コレクション内のゲームオブジェクトを
生成したり消滅させるイベントに変換する関数を第3引数に渡す
第3引数の関数で発生したイベントを解釈して
実際にコレクションを修正する関数を第4引数に渡す
細かいことはとりあえず抜きにして、大まかにはこんな感じだと思います
こうやって作った pSwith 関数や dpSwitch 関数の戻り値であるシグナル関数に、
ゲームを回すのに必要なシグナルを毎フレーム送るようにする
非常に分りやすく、イベントの伝達がスッキリして、
Yampa はかなり良い基盤を提供してくれると思っているのですが、
こういった基盤は Reactive の方ではどのようになっているのか聞きたいです
Reactive では Yampa みたいなイベント周りの仕組みを一ヶ所に集中させるのとは
また違った方法をとっているのでしょうか
0189184
2012/04/25(水) 19:22:23.08すいません、>>185 が Reactive についてはノータッチなのは分ってますが、
とりあえずどこかへアンカーを付けないと、後から話の流れが追いにくいと思いまして
0190デフォルトの名無しさん
2012/04/27(金) 11:55:44.480191デフォルトの名無しさん
2012/04/27(金) 12:00:24.86Non-stop Haskell(笑)
0192デフォルトの名無しさん
2012/04/27(金) 12:01:31.380193デフォルトの名無しさん
2012/04/27(金) 12:15:26.39λカ娘(二期)を読んだらメモ化には Control.Monad.Memo (cabal install monad-memo)を使うといいよ的な
事が書いてあったのでHackageあたりの文書をチラ見してるけどフィボナッチ数列のメモ化だけの例じゃ
理解できない。。。
Hackageの文書みると「モナディックフォームに変換」とかさらりと書いてるので、もしかしてこれを使える
ようになるためにはモナドがちゃんとわかってないといけないんでしょうかね。
Control.Monad.Memoが使える程度のモナド理解のためのオススメ文書などあったらどなたか教えて
頂けないでしょうか。
0194デフォルトの名無しさん
2012/04/27(金) 17:31:00.49どっちのバインディングライブラリが幸せになれるかな
ドザです
0195デフォルトの名無しさん
2012/04/27(金) 18:02:32.57fib n = fib (n-1) + fib (n-2)
のところを
fib n = let
n1 = fib (n -1)
n2 = fib (n - 2)
in (n1 + n2)
と書いて、モナド形式に変換した〜と言ってる2番目の例と比較してみればわかるんじゃないかな。
do が let、<-が=、returnが(大体)inに対応していると思って。
(これは他のどのモナドでも同じ。do文はモナドによって特殊な振る舞いを組み込む事の出来るlet式。
MonadFixのインスタンスにしてDoRec言語拡張でrecキーワードを有効にしないと再帰束縛はできんけど。)
関数を呼び出す際に、1引数関数(k -> Memo k v)と、値kを取る、memoって関数を介して呼び出すと、kに対する計算結果をメモ化してくれる。
これは、適用演算子($) :: (k -> v) -> k -> vにメモ化機能付けたもの、と考えてもおkだと思う。
異なる関数で相互再帰したりする場合はそれぞれ違うメモモナドを使わないとダメっぽいので、モナド変換子を理解してないとちょっとむずいかも。
0196デフォルトの名無しさん
2012/04/27(金) 19:22:43.33いまどれぐらいストップザワールドするんだろう?
0197デフォルトの名無しさん
2012/04/27(金) 21:15:42.26これ、Amazonに登録されてました
0198デフォルトの名無しさん
2012/04/27(金) 21:28:53.03欲を言えば連休中に読みたかった
0199デフォルトの名無しさん
2012/04/27(金) 22:33:02.95そういう時はURLもお願いします。
ところで同時チェック商品が「情報処理2012年05月号別刷」です。
Haskellユーザは情報科学に興味がある人が多いのですね。
すごいHaskellたのしく学ぼう! (2012/5/23発売)
http://www.amazon.co.jp/dp/4274068854
情報処理2012年05月号別刷
「《特集》CGMの現在と未来: 初音ミク,ニコニコ動画,ピアプロの切り拓いた世界」
http://www.amazon.co.jp/dp/4915256839
え?初音ミクとニコニコ動画特集?
プレミアム会員の私が言うのも何ですが、
Haskellとはユーザ層が被らないとばかり思ってました。
0200デフォルトの名無しさん
2012/04/27(金) 23:02:51.550201デフォルトの名無しさん
2012/04/27(金) 23:13:54.700202デフォルトの名無しさん
2012/04/27(金) 23:19:57.80ステルスに失礼だろ
0203199
2012/04/27(金) 23:44:34.50>>199をステマと思った人は自分の判断力がその程度だと自覚してください。
0204デフォルトの名無しさん
2012/04/28(土) 00:26:50.05ていうかこのスレにいるような層で原著知らないやついるんだなあ
自分のアンテナが低レベルだと自覚してください
0205デフォルトの名無しさん
2012/04/28(土) 01:15:00.48日本語版を探している人が原著を知らないと判断した>>204は判断力が低レベル。
ということで、以後何もなかったかのようにどうぞ。
0206デフォルトの名無しさん
2012/04/28(土) 01:15:22.02>>203
>>203
0207デフォルトの名無しさん
2012/04/28(土) 01:54:56.47いやだからさ、「Learn You Haskell 翻訳」 とかでググったら
日本語版のタイトル出てくるよってことなんだが…
そこまで言わんと分からんかね
0208デフォルトの名無しさん
2012/04/28(土) 02:09:15.280209デフォルトの名無しさん
2012/04/28(土) 02:15:34.87ApplicativeとかMonoidの話もあるのか、買いだな
0210デフォルトの名無しさん
2012/04/28(土) 06:33:10.050211デフォルトの名無しさん
2012/04/28(土) 07:34:34.990212デフォルトの名無しさん
2012/04/28(土) 20:07:01.35これって、なんて発音するの?
カフェテラスで議論する時に困る
0213デフォルトの名無しさん
2012/04/28(土) 20:12:31.040214デフォルトの名無しさん
2012/04/28(土) 20:29:16.32HTML がハトマルだから、GADT も何かあるのかと思ってた
ありがと
0215デフォルトの名無しさん
2012/04/28(土) 21:12:57.68いやいや
0216デフォルトの名無しさん
2012/04/28(土) 21:41:36.820217デフォルトの名無しさん
2012/04/28(土) 23:08:53.770218デフォルトの名無しさん
2012/04/28(土) 23:36:16.790219デフォルトの名無しさん
2012/04/28(土) 23:44:01.61パウドゥって脳内で響くのが治まらない
プワディって呼ぼうかな
0220デフォルトの名無しさん
2012/04/29(日) 00:27:16.780221デフォルトの名無しさん
2012/04/29(日) 02:34:16.91ありがとうございます。モナドをもう少し真面目に勉強してみます。
0222デフォルトの名無しさん
2012/04/29(日) 10:54:07.47> GenericなADTだからじーえーでぃーてぃーが自然な発音だろうけど、俺は最初ガッドって読んじゃってこの発音が離れない。
私もこれ
0223デフォルトの名無しさん
2012/04/29(日) 12:25:33.10この書籍、後半部分に誤植が多発してるね
0224デフォルトの名無しさん
2012/04/29(日) 12:40:02.360225デフォルトの名無しさん
2012/04/29(日) 12:53:35.88モナド変換子はマジむずい。
あれは理屈を理解するよりも、コンパイルして怒られてを繰り返して体で覚えた方がはやいかもしれない。
まずはliftIOだけ使って、コードのどの部分がどんな型になってんのか把握できるようになるまでガンバレ。
0226デフォルトの名無しさん
2012/04/29(日) 14:07:50.000227デフォルトの名無しさん
2012/04/29(日) 14:22:11.84ところで、Arrow の利用って FRP かパーサーくらいしかないの?
0228デフォルトの名無しさん
2012/04/29(日) 14:46:37.22しかしComonadはArrowよかさらに文献が少ないと言うw
0229デフォルトの名無しさん
2012/04/29(日) 15:41:09.55Arrowの導入は「関数プログラミングの楽しみ」に1章分だけど出てる
印象としては抽象度が高すぎてかえって使いづらい
始めからArrowとして設計されてたら、もっと使い勝手がよかったと思う
0230デフォルトの名無しさん
2012/04/29(日) 16:03:42.43うん、持ってる
> 抽象度が高すぎて
まさにこれ、やさしいとは言いがたい
ネット上の解説も、回路図で first とか right とか説明して、
最後にこれが大ボスと言わんばかりに loop をちょろっと解説して終わりなのが多い
しかも、どれも抽象的
なんかこう、実例みたいなのが無いんだよなぁ
ひとつ論文で、パーサーの例を挙げて、
こうすればスペースリークを防げるよねって解説があったけど、
あれがまだましな方だったな(論文の方が分りやすいってどうよと思うが)
0231デフォルトの名無しさん
2012/04/29(日) 16:57:45.72__
((((((((((束縛) ) ) )参照) ) ) ) ) )
スコープ的にどうなってんの?
右結合だったら自然に見える事は理解できるんだが
_______________________
( ( (束縛( ( ( ( ( (参照(´・ω・`))))))))))
0232デフォルトの名無しさん
2012/04/29(日) 17:10:59.47モナド則でこうなってるから
(m >>= f) >>= g == m >>= (\x -> f x >>= g)
0233デフォルトの名無しさん
2012/04/29(日) 17:21:25.38(>>=)は左結合だけどdoは右結合だから問題ない
明示的に(>>=)とラムダを使う場合でも、
a >>= \x ->
b >>= \y ->
c
なら、
a >>= (\x ->
b >>= (\y ->
c))
のことだから、やはり問題ない(ラムダ式は可能な限り右まで続く)
>>232
モナド則は関係ない
0234デフォルトの名無しさん
2012/04/29(日) 18:17:44.38……infixl 1と宣言しておきながら、事実上は右結合なんですか?
右結合って短絡可能なんですよね?
Maybeモナドでは
左にNothingなら問答無用でNothing
ってなってるけど
処理が右結合で、途中Nothingに出逢ったら
Real World Haskellではそのまま最後までNothing伝播処理が続くって書いてあった
でも僕の考える限りでは、右結合では右側が判明するまでの必要最低限の努力をするのが遅延評価だから
途中でNothingに出逢った瞬間からスタック巻き戻しのようになると思うのですが……
/\
/\
/\
N /\
/\
:
/\
/\
/\
/\
N
/\
N
Nothing
0235デフォルトの名無しさん
2012/04/29(日) 19:24:55.15構文の話と意味の話をごっちゃにしてないか
左結合(infixl)というのは、あくまで
a >>= b >>= c
というふうに使ったときに
(a >>= b) >>= c
と解釈される、というだけの意味。それ以外の使い方をした場合には関係ない
後半はその通りで、(Nothing>>=f)はfを呼ばないから、たとえばdoの中でNothing
が出て来たらそれ以降は評価すらしない
そのNothingが別のdo(呼び出し元の関数とか)に渡ったときには
Nothingの伝播処理が挟まる
0236デフォルトの名無しさん
2012/04/29(日) 21:27:11.79質問@
Maybe 上で (>>=) あるいは (>>) を使ってたくさんの計算を連鎖するとき、
その計算のどれかが Nothing を返したら、残りの計算は一切評価されません。
しかしこの連鎖は完全には短絡されていないことに注目しましょう。
連鎖中のそれぞれの (>>=) や (>>) は左の Nothing にマッチすると右に Nothing を生成し、
最後までそうしていきます。この点は忘れやすいものです。
連鎖中の計算が失敗したとき、それに続くNothing 値の生成、連鎖、消費は実行時に安価ではありますが、タダというわけではありません。
348 P にこう書いてありますが、私にはこの文脈が左結合を示唆しているかのように見受けられます。つまりは、
/\
/\
/\
N
/\
/\
N
/\
N
Nothing
こう主張しているように思えるのです。短絡は起きていないように思えます。
ここで私のいう短絡とは、関数処理のスキップのみならず木構造の一発切除をも意味します
Nothingに出逢った瞬間全てを忘れて即Nothingです
これは無理なのでしょうか?
0237デフォルトの名無しさん
2012/04/29(日) 21:31:47.75質問A
余談ですが考えてもみれば、左結合は(関数処理は省けても)そのまま最後まで構造が進むしか無いようで、
一方で右結合は構造も短絡できるかのように見えますが、
構造の最後の方でNothingが発生するか、結局最後まで発生しなかった場合を想像すると、
スタック巻き戻しを考慮に入れると、行って戻ることになり、
最後まで構造をなぞるどころかその2倍弱の手間になるかも知れませんね。
より最初の方でNothingが出る期待が高い時は右結合
そうでない時は安定的な左結合が適切なんでしょうか?
Data.List.and と or は右結合で定義されていますが
これは何を意識してのことでしょうか?
and/orの最後の方でFalse/Trueがでるか、あるいは最後まで出ない時、
(これは直感ですが)リストの半分を越えてから結論出せる状況になったら、
正格左結合よりも酷いパフォーマンスになるのではないでしょうか?
スタックを巻き戻すだけというのが、パターンマッチングで値を返す処理に比べて、
凄く速いのならそんな事は無いといえるのでしょうが。
0238デフォルトの名無しさん
2012/04/29(日) 22:32:05.06その辺はRWHよかIntroduction to Functional Programming using Haskellの方が詳しいyp
andやorが右結合なのは無限リスト食わせるとわかる
foldlで定義したら食わせるリストの頭に零因子であるものがあってもスタック食いつぶす
Maybeに関しての短絡はNothing >> forever (Just 1)とかするとわかる
これが木構造とやらを切除しないとなるとサイズが無限である木がメモリ上に存在してスタックオーバーフロー起こす事になる
0239デフォルトの名無しさん
2012/04/29(日) 23:59:04.070240デフォルトの名無しさん
2012/04/30(月) 03:31:17.360241デフォルトの名無しさん
2012/04/30(月) 09:20:17.79「信用」の意味がよく分らないです
Haskell は初心者から、本来あるべきどのような信用がないのでしょうか
0242デフォルトの名無しさん
2012/04/30(月) 09:55:23.07くっそこんなので笑わされるとは
0243デフォルトの名無しさん
2012/04/30(月) 10:03:34.530244デフォルトの名無しさん
2012/04/30(月) 11:13:59.36例えばリテラルからの暗黙の型変換は一部ありますよね
Num.fromInteger 関数とか IsString.fromString 関数を定義しておけば、
リテラル整数や文字列を適切な型にコンパイラが自動的に変換してくれる
(後者は GHC の拡張機能ですが)
これの延長で、例えば OpenGL を使っていて、
GLdouble 型を引数に取る関数を Double 型に適用しようとした時、
何か特別な定義をしておけば、realToFrac 関数を使わずとも、
コンパイラが自動的に変換してくれるとか
このような例だけでなく、一般的に fromIntegral 関数とか realToFrac 関数って、
けっこう目障りなんですよね
これらって、型推論出来るようにコードを書かなければならないという、
どちらかと言うと言語仕様よりの概念じゃないですか
そのわりに、realToFrac 関数だけでは、ぱっと見、何から何への変換か分らない
一方で、これらの関数が使われているコードは、
何を計算するのかという、もっと抽象度の高い概念をコード化しているわけで
抽象度の高いコードの中に、抽象度の低い「おまじない」の様なコードが
けっこう大きな石ころのように混ざっている状況が、なんとも違和感を覚える
どうにかならないものでしょうか
0245デフォルトの名無しさん
2012/04/30(月) 11:26:54.17うーん、言語の設計者より自分の方が頭いいかもしんない、と思われちゃってるところ。
0246デフォルトの名無しさん
2012/04/30(月) 11:45:17.37抽象度とか言いつつ全体が見えていない
0247デフォルトの名無しさん
2012/04/30(月) 11:57:23.83有難うございました(´;ω;)
0248デフォルトの名無しさん
2012/04/30(月) 14:53:15.43上を押しても同じ履歴だった場合、動いてないように見えてストレスとなります
0249デフォルトの名無しさん
2012/04/30(月) 15:06:17.22残念ながら現状ではどうにもならない
なにかストレスを発散する方法を考えてくれ
0250デフォルトの名無しさん
2012/04/30(月) 15:30:36.770251デフォルトの名無しさん
2012/04/30(月) 18:34:46.960252デフォルトの名無しさん
2012/04/30(月) 18:36:44.310253デフォルトの名無しさん
2012/04/30(月) 18:38:36.110254デフォルトの名無しさん
2012/04/30(月) 23:24:32.160255デフォルトの名無しさん
2012/04/30(月) 23:33:00.05・どうやってボタン表示するんですか
・ループが出来ません
・変数変えれないんですけど
そんな質問しねーよ、って人ならもう初心者じゃない
具体的に「Haskellでやりたいこと」を見つけて取り組んでくれ
分かんないことがあったらピンポイントで質問してこい
あたしらが優しく相手してやる
0256デフォルトの名無しさん
2012/05/01(火) 00:09:38.80今生きているHaskellのGLRパーサはありませんか?
0257デフォルトの名無しさん
2012/05/01(火) 03:16:34.46お、お前……女だったのか……。
0258デフォルトの名無しさん
2012/05/01(火) 03:22:27.79具体的には今あるコード資産に対してコード変換して,機能拡張したい,
そのための便利な仕組みない
■ このスレッドは過去ログ倉庫に格納されています