関数型プログラミング言語Haskell Part24
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/10/25(金) 21:54:29.92前スレ: 関数型プログラミング言語Haskell Part23
http://toro.2ch.net/test/read.cgi/tech/1376111807/
haskell.org
http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://www.shido.info/hs/
過去ログ (10〜)
Part21 ttp://toro.2ch.net/test/read.cgi/tech/1358702176/
Part20 ttp://toro.2ch.net/test/read.cgi/tech/1350428908/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
0159デフォルトの名無しさん
2013/11/03(日) 06:24:19.90ghc-7.4.2
hint-0.3.3.7
cabal-install 1.16.0.2
Cabal library 1.16.0.3
Mac OS X 10.9
です
0160デフォルトの名無しさん
2013/11/03(日) 08:35:05.82試してみたけどparseModeの型が変わっててコンパイルできない
>Warning: Language.Haskell.Interpreter: could not find link destinations for:
>Hint.Base.FromSession Hint.Base.ModifySessionRef Hint.Base.RunGhc
>と言われました
これはhaddockの警告だから無視して良い
0161デフォルトの名無しさん
2013/11/03(日) 09:37:56.05ParseModeのところを直して、
H.set [H.languageExtensions H.:= [H.ImplicitParams]]
の行をコメントアウトしたら動いた
0162デフォルトの名無しさん
2013/11/03(日) 12:02:31.92import qualified Data.Text as T
content :: Cursor -> [T.Text]
と書いてあるのに、:t contentで型を調べると
content :: Cursor -> [Data.Text.Internal.Text]
になります
0163デフォルトの名無しさん
2013/11/03(日) 12:27:14.55どうぞ
0164デフォルトの名無しさん
2013/11/03(日) 12:28:11.58ghcは内部的にはあらゆる型をそれが定義されたモジュールと合わせて区別する
xml-conduitをコンパイルした時点で、xml-conduit内の関数それぞれの型が
hiファイルに記録される。たとえば
content :: Text.XML.Cursor.Cursor -> [Data.Text.Internal.Text]
みたいに型情報が入ってる。(hiファイルはghc --show-ifaceで読める)
ghciは、これを読んで、なるべく分かり易いように表示する
Text.XML.Cursor.Cursorは、スコープにある型なので、単に「Cursor」と表示する
Data.Text.Internal.Textは、スコープにないので、そのまま「Data.Text.Internal.Text」になる
0165デフォルトの名無しさん
2013/11/03(日) 12:34:55.62わかりやすい
0166デフォルトの名無しさん
2013/11/03(日) 12:43:45.19>>162
>>164
>>165
0167デフォルトの名無しさん
2013/11/03(日) 12:51:12.740168デフォルトの名無しさん
2013/11/03(日) 12:53:08.69情報だけが大事
手紙じゃないんだから
0169デフォルトの名無しさん
2013/11/03(日) 12:55:57.700170デフォルトの名無しさん
2013/11/03(日) 13:05:53.98本人乙
常套句でつね
0171162
2013/11/03(日) 13:18:18.23全部調べましたがどこにも":t"の仕様に関する情報はありませんでした
>>164
> たとえば
> content :: Text.XML.Cursor.Cursor -> [Data.Text.Internal.Text]
> みたいに型情報が入ってる。
ソースコードには
import qualified Data.Text as T
content :: Cursor -> [T.Text]
と書いてあるのに、なぜ
[Data.Text.Internal.Text]
として型情報が記録されるのかがわかりません。
0172デフォルトの名無しさん
2013/11/03(日) 13:24:27.16:tでちゃんと型だけの表示になると思うんだけどぉ、俺の環境だけかなぁ?
みんなも試してみてよぉ
0173デフォルトの名無しさん
2013/11/03(日) 13:35:53.92T.Textは、Data.TextからエクスポートされているTextという名前を参照する構文
で、Data.TextがエクスポートするTextは何かと言うと、
Data.Text.Internalで定義されたTextという型(これはData.Textのhiファイルに書いてある)
Data.Textのソースを見れば、Data.Text.InternalからインポートしたTextを
そのままエクスポートしてるのが分かる
0174デフォルトの名無しさん
2013/11/03(日) 13:45:36.05俺は >>162 とは別人だが、ちょっと質問。
content :: Cursor -> [T.Text] の
Text.XML.Cursor.Curdor 型の方はなぜ
Text.XML.Cursor.Generic.Cursor と表示されない?
0175174
2013/11/03(日) 13:48:20.91あ、ごめん、分かった
Text.XML.Cursor.Curdor 型の方は
type Cursor = CG.Cursor Node と型シノニムが定義されて、
それがエクスポートされているからか
0177デフォルトの名無しさん
2013/11/03(日) 16:06:44.34手続きっぽく書くことになるのかな
0178デフォルトの名無しさん
2013/11/03(日) 16:23:23.81混合比はプログラムの種類によって違うけど、手続き一辺倒になることは滅多にない
0179デフォルトの名無しさん
2013/11/03(日) 16:28:29.290180デフォルトの名無しさん
2013/11/03(日) 16:36:58.18levenshtein2 sa sb = last $ foldl transform [0..length sa] sb
where
transform xs@(x:xs') c = scanl compute (x+1) (zip3 sa xs xs')
where
compute z (c', x, y) = minimum [y+1, z+1, x + fromEnum (c' /= c)]
0181デフォルトの名無しさん
2013/11/03(日) 16:58:16.40関数ポインタを持ってるC言語こそが本当の関数型ということになる
0182デフォルトの名無しさん
2013/11/03(日) 18:02:54.79C言語が持てる関数ポインタの数はソースにより上限が決まる
本当の関数型なら有限のソースから無限に異なる関数を生成できる
突き詰めると、関数に必ず名前をつける言語は本当の関数型ではないってこと
0183デフォルトの名無しさん
2013/11/03(日) 18:23:32.74C言語は、引数としての関数の記述には制限はない
0184デフォルトの名無しさん
2013/11/03(日) 19:27:28.45Haskellの話とは何の関係もない
(C言語が関数型だろうと、Haskellには何の影響も及ぼさない)
新しくスレを作ってそちらで大いに議論してもらいたい
0185デフォルトの名無しさん
2013/11/03(日) 19:35:49.74こういうのって何段まで書けたっけ
0186デフォルトの名無しさん
2013/11/03(日) 19:38:13.35Haskell言語の特徴として関数型言語であることを挙げるのはやめるべき
より純粋な関数型言語のCがあるんだから
0187デフォルトの名無しさん
2013/11/03(日) 19:41:09.920188デフォルトの名無しさん
2013/11/03(日) 20:05:30.63http://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E
から抜粋
>手続き型プログラミングなどにおける「関数」ではないことをまず注意する。
0189デフォルトの名無しさん
2013/11/03(日) 20:10:06.02> (C言語が関数型だろうと、Haskellには何の影響も及ぼさない)
ダウト
関数型言語のシェアという点では関数型言語Haskellに大いに関係ある話題である
0190デフォルトの名無しさん
2013/11/03(日) 20:10:29.190191デフォルトの名無しさん
2013/11/03(日) 20:22:57.55曖昧なパラダイムや変動するシェアによって定義が変わることはない
そういう影響は受けない
0192デフォルトの名無しさん
2013/11/03(日) 20:47:59.08べつにHaskellに限った仕組みじゃなし
0193デフォルトの名無しさん
2013/11/03(日) 21:29:41.73人間が手続きを差別したり見下したりする必要はなくなり
コンパイラが機械的にチェックすればいいだけになるはずだった
0194デフォルトの名無しさん
2013/11/03(日) 22:46:38.090195デフォルトの名無しさん
2013/11/03(日) 22:52:31.32データ操作をデータ構造が分離した近代言語
0196デフォルトの名無しさん
2013/11/03(日) 23:08:35.29Haskellのシェアも、このスレではどうでもいい
なんでそんな話をする?
この言語を使って実際にプログラムする事に関係ある話をしろよ
0197デフォルトの名無しさん
2013/11/03(日) 23:12:57.59Haskellを使って実際にプログラミングするためには、機械語のレガシーソフトすら存在する現場において、Haskellの有用性と位置付けと言語的特徴を他の言語と比較して説明しなければならない
実際の労力に換算したら、その説得こそがHaskellプログラミングと言える
0198デフォルトの名無しさん
2013/11/03(日) 23:26:30.51そういう事なら、他の言語と比較する事を手段として、
「Haskellの有用性と位置付けと言語的特徴」の話をちゃんとしてほしい
関数型とか手続き型とか、より純粋な関数型言語とか、
そんな名称の定義は一定していないし、綺麗に分けられるものではないのだから、
たとえば「Haskellは**をするのに〜〜と書ける」というような
実際のプログラミングで優位性や特徴を語るべきだと思う
それと、シェアの話しならマ板でやってほしい
単なる一住人のわがままなので、これ以上は何も言わないでおく
0199デフォルトの名無しさん
2013/11/03(日) 23:33:22.04実際の現場では、名称の定義も綺麗な分類も必要ない
特にクライアントに納入するコードの説得に必要なのは、シェアの話以外にない
0200デフォルトの名無しさん
2013/11/03(日) 23:42:01.94そういうのはいつだって自慢話に帰着して終了なんだけど。
0201デフォルトの名無しさん
2013/11/04(月) 00:43:46.57馬鹿に見つかってしまって必死にその世界を守ってるという言語
0202デフォルトの名無しさん
2013/11/04(月) 00:49:29.580203デフォルトの名無しさん
2013/11/04(月) 01:56:19.33もし仮にコンピュータ言語のことで自慢できる立場の人がこのスレを見てるなら、スレ関係なくどんどん書きこんでほしいと思うのは俺だけか
0204デフォルトの名無しさん
2013/11/04(月) 06:55:18.40型クラス、軽量スレッド、do記法、純粋性、ユーザ定義演算子、STM…
挙げればきりがない
0205デフォルトの名無しさん
2013/11/04(月) 07:12:28.92UHC,Fay,GHCJSとかあるのに
0206デフォルトの名無しさん
2013/11/04(月) 07:28:16.610207デフォルトの名無しさん
2013/11/04(月) 07:32:24.20どことなく関数型ぽくね?
0208デフォルトの名無しさん
2013/11/04(月) 08:11:05.740209デフォルトの名無しさん
2013/11/04(月) 08:18:41.170210デフォルトの名無しさん
2013/11/04(月) 08:25:33.47自分が気に入らない話題の時は黙ってスルーするだけでなく
「俺の好きな話題以外は一切出すな!」って
大丈夫か?
社会生活的に。
0211デフォルトの名無しさん
2013/11/04(月) 08:37:32.130212デフォルトの名無しさん
2013/11/04(月) 11:54:30.30>javascriptの悪口なんて誰も言ってないのに
えっ
>JavaScript sucks. The depths to which JavaScript sucks is well-documented and well-understood.……
http://www.haskell.org/haskellwiki/The_JavaScript_Problem
0213デフォルトの名無しさん
2013/11/04(月) 12:07:51.380214デフォルトの名無しさん
2013/11/04(月) 12:16:34.21Haskellは必要なときには過不足なく仕事してるんだよ
お前は必要な時もサボってるだろ
0215デフォルトの名無しさん
2013/11/04(月) 12:22:38.140216デフォルトの名無しさん
2013/11/04(月) 12:32:59.81そう言うあなたがスーパーハッカー的プログラムを一切公開しない理由を説明してほしいです
0217デフォルトの名無しさん
2013/11/04(月) 14:16:01.11高価な文房具を買いそろえ、勉強はあまりしない
高価なギターやエフェクター類をそろえるが練習しない
0218デフォルトの名無しさん
2013/11/04(月) 14:22:23.790219デフォルトの名無しさん
2013/11/04(月) 14:56:47.740220デフォルトの名無しさん
2013/11/04(月) 15:29:14.44fib n = fib(n-2) + fib(n-1)
fib 1 = 1
fib 2 = 1
とかできなくて残念な言語
0221デフォルトの名無しさん
2013/11/04(月) 15:47:35.09試してみたら普通に動いたよ
0222デフォルトの名無しさん
2013/11/04(月) 15:55:52.45この定義の順番では「Pattern match(es) are overlapped」でまともに動きません。
fib 1 と fib 2 の定義を fib n の定義より先に書けば動きます。
>>220 は「遅延評価」をなにか別のものと勘違いしているか、
勝手に拡大解釈して期待してたのに思い通りにならなくて落胆しているか、どちらかです。
0223デフォルトの名無しさん
2013/11/04(月) 16:03:31.69ご覧の通り
ghci>:{
Prelude| let {
Prelude| fib 1 = 1;
Prelude| fib 2 = 1;
Prelude| fib n = fib (n-2) + fib (n-1)
Prelude| }
Prelude| :}
ghci>fib 1
1
ghci>fib 2
1
ghci>fib 3
2
ghci>fib 4
3
ghci>fib 5
5
ghci>fib 6
8
ghci>fib 10
55
ghci>fib 100
^Z
[1]+ 停止
0224デフォルトの名無しさん
2013/11/04(月) 16:36:21.660225デフォルトの名無しさん
2013/11/04(月) 16:40:46.50パターンマッチの規則も知らん奴に涙目とか言われても反応に困る
0226デフォルトの名無しさん
2013/11/04(月) 16:55:30.00research.microsoft.com/en-us/um/people/simonpj/papers/modules/
へーHaskellのモジュールシステムってそんなに弱いんだー
知らなかったー
0227デフォルトの名無しさん
2013/11/04(月) 19:03:28.460228デフォルトの名無しさん
2013/11/04(月) 19:42:59.03かと言って強いモジュールシステムが欲しいという声もそんなに聞かないけど
0229デフォルトの名無しさん
2013/11/04(月) 19:50:47.10確かにmoduleシグネチャは強力だけど
ocamlはocamlでコンパイル順序の問題があるからな・・・
0230デフォルトの名無しさん
2013/11/04(月) 19:57:14.35やめろ!
0231デフォルトの名無しさん
2013/11/04(月) 20:00:20.72逆に色々不完全な奴ほど精力的だよな。
脳が不完全で矛盾だらけなやつほど行動力がある。
0232デフォルトの名無しさん
2013/11/04(月) 20:02:02.66ガベコレにいいと思うんだ
0233デフォルトの名無しさん
2013/11/04(月) 20:24:42.410234デフォルトの名無しさん
2013/11/04(月) 20:37:01.15戦いが終わった後のために買い物したらどうなるか気付かない奴は不完全
0235デフォルトの名無しさん
2013/11/04(月) 20:54:19.29つまり極論すれば知識や経験などは余計な物というわけですね。
0236デフォルトの名無しさん
2013/11/04(月) 21:28:54.990237デフォルトの名無しさん
2013/11/04(月) 22:02:37.50let result = f x -- fは何か物凄く重い処理
とやって、すぐにプロンプトが帰ってきたので、haskellスゲーと思って、resultの中身みたら長々と重い処理が始まった
これが遅延評価
0238デフォルトの名無しさん
2013/11/04(月) 22:03:02.680239デフォルトの名無しさん
2013/11/04(月) 22:59:28.85a[1][1][1] = a;
循環するデータ構造を作りたいとき
遅延評価がないとnullと代入が出てくる
0240デフォルトの名無しさん
2013/11/04(月) 23:31:37.280241デフォルトの名無しさん
2013/11/05(火) 08:24:52.57これマルチコアプログラミング時の落とし穴なんですよね
リワハざっと読みましたけど
0242デフォルトの名無しさん
2013/11/05(火) 11:22:49.670243デフォルトの名無しさん
2013/11/05(火) 12:13:31.950244デフォルトの名無しさん
2013/11/05(火) 15:24:04.130245デフォルトの名無しさん
2013/11/05(火) 17:52:50.610246デフォルトの名無しさん
2013/11/05(火) 23:09:14.280247デフォルトの名無しさん
2013/11/06(水) 01:58:38.620248デフォルトの名無しさん
2013/11/06(水) 04:59:36.76オナニー言語らしいじゃないか。
0249デフォルトの名無しさん
2013/11/06(水) 07:55:25.420250デフォルトの名無しさん
2013/11/08(金) 21:15:33.740251デフォルトの名無しさん
2013/11/08(金) 23:16:48.080252デフォルトの名無しさん
2013/11/08(金) 23:59:41.000253デフォルトの名無しさん
2013/11/09(土) 00:44:19.30http://hackage.haskell.org/package/base/docs/Data-Foldable.html
0254デフォルトの名無しさん
2013/11/10(日) 23:44:51.91グラフのどの部分がプログラムソースのどの辺りの計算をしている時のものか
予想がつく場合もあれば、なかなか分からない場合もあります。
プログラムソースの中に、なにか目印を付けて、イベントログにその情報を出力し、
ThreadScopeで見た時にその目印がグラフ上に表示されるような事はできるでしょうか。
0255デフォルトの名無しさん
2013/11/11(月) 20:20:01.92Debug.Trace.traceEvent
0256デフォルトの名無しさん
2013/11/11(月) 20:54:46.28ありがとうございます。
これで作業がはかどります。
0257デフォルトの名無しさん
2013/11/11(月) 23:33:16.27この関数で画像ファイルを出力するとき、すでに同じパスのファイルが存在すると、
上書きされずに関数から返ってきます。
エラーも何も起こりません。
新しい画像データで上書きしたように見せかけるには、
もしすでに同じパスのファイルが存在するなら、この関数を使う前に
そのファイルを削除しておくという方法があります。
しかしこの場合、もし writeImage 関数の内部で何かエラーが起きて関数が中断されても、
先に消したファイルは取り戻せません。
writeImage 関数で上書きするもっと良い方法はないでしょうか。
このパッケージの使用はあきらめて、別の画像書き込み用パッケージを探すべきでしょうか。
0258デフォルトの名無しさん
2013/11/11(月) 23:37:29.60ファイルを別名に変えればいいじゃん。
■ このスレッドは過去ログ倉庫に格納されています