[過去ログ] 関数型プログラミング言語Haskell Part4 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
463(1): 432=451=452 2006/04/16(日)23:07 AAS
>>457
結論は分かったけど、例が全然理解できない。
特に、関数型言語でできてC++で出来ないことと、
型推論がコードの修正にどう影響するかがわからない。
良かったら解説してもらえないだろうか。あるいは参考文献でも。
464(2): 2006/04/16(日)23:34 AAS
使ってみりゃわかるよ。
465: 2006/04/16(日)23:46 AAS
5000行位は書いたんだが…
466: 2006/04/17(月)00:05 AAS
50000行ぐらい書いてみろ。
467(2): 2006/04/17(月)00:12 AAS
違いという話では、C++には
パターンマッチは流石にねーだろ。
468: 2006/04/17(月)00:13 AAS
>>464 ちょっと興味はあるんだけど、使ってみていじくるまで今元気じゃない・・・orz
469: 2006/04/17(月)00:14 AAS
>>467
そういう話をすると、どうせBoostでどうのとか信者が言い出すんだろ。
470: 2006/04/17(月)00:27 AAS
>>467
boost::variantにapply_visitorってのがある。
すごく面倒だが。
471: 2006/04/17(月)00:44 AAS
HaskellはHaskellコンパイラーを書くための言語(ニヤリ
472: 2006/04/17(月)01:47 AAS
ム板でこれだけコードの出ないスレも珍しい。
473: 2006/04/17(月)02:08 AAS
コード要りません。理論だけで十分です。
474(1): 449 2006/04/17(月)02:24 AAS
>>463
ライブラリで関数型言語をエミュレートできることと、関数型言語であるということには遥かにへだたりがあります。
Boostで関数型の振舞いができても、C++のコアに関する細かい知識が無いと結局使いこなすことはできないでしょう。
Boost氏の意見は自分でクラスやテンプレートを定義しないという前提でしか成り立たないのではないでしょうか。
>>464を言わないために言葉で説明してみたけど、これ以上言葉だけの説明は無理に思えます。私も464に同意です。
449はMLの人間でC++ vs 関数型言語にレス付けただけなのでこれで消滅します。すんません。
参考書が示せないので、何かプログラムのテーマを考えておいてください。Haskell初心者で参加します。
475: 2006/04/17(月)02:36 AAS
名無しに戻りました。
>>474
木を使うアルゴリズムが分りやすいんでないだろうか。
そんでBoost氏がC++で書いてくれるのか?
プログラムの過程を示すってコードに文字数が要りそうだけど・・・
476: 2006/04/17(月)05:51 AAS
>>399
このスレよりもここの作者にメール投げた方が早いよ
外部リンク[html]:homepage3.nifty.com
477(4): 2006/04/17(月)22:14 AAS
木を使うアルゴリズムなんてほとんど知らないんだが…
いちおうこんなのを考えてみた。
data Bound a = Inclusive a | Exclusive a | Unbounded -- 範囲の境界
type Range a = (Bound a, Bound a) -- (下限、上限)
data RangeMap k a =... -- kの範囲にaの値を対応させる写像。木で表現される。平衡木だとなおよい。
empty :: (Ord k) => RangeMap k a -- 空の写像
insert :: (Ord k) => Range k -> RangeMap k a -> RangeMap k a --既存の写像を部分的に上書き
省5
478(2): 2006/04/17(月)22:17 AAS
ネタ: DOM風の木を走査する
・ノードはテキストもしくはエレメント
・エレメントはタグ文字列と子ノードからなる
とりあえず型を定義
data Node = Text String | Element(String,[Node])
deriving (Eq,Show)
・再帰型の中にリスト(子ノード)があると適度に複雑な気がした。
省12
479(2): 2006/04/17(月)22:39 AAS
>>447
もう皆どうでもよくなったんじゃないかと思ってたら被ってしまった。
447を見てもすぐには理解できません。Haskell文法のAAの出現を予感。
BoundのInclusive/Exclusiveはどういう意味ですか?
Boost初めて覗いたけど面白そう。
Boostでも再帰型が定義できるんですか?かなり見てみたいです。
でも478でインデントされなかったのは何故だろう?
480: 2006/04/17(月)22:43 AAS
>>479
>>477
481(1): 2006/04/17(月)22:48 AAS
>>479
>BoundのInclusive/Exclusiveはどういう意味ですか?
半開区間(0, 4]を(Exclusive 0, Inclusive 4)と書けるといいな、と。
>でも478でインデントされなかったのは何故だろう?
HTMLの仕様と思われる。 を半角スペースの代わりに使うといいかと。
482: 2006/04/17(月)22:52 AAS
もしかして半角はインデントされないってこと?
全角インデント
半角インデント
kita使ってるけど プレビューでもインデントされない。
kitaと板とどっちがおかしいんだろ
483: 2006/04/17(月)22:53 AAS
>>481
ありがとう
484(1): 2006/04/17(月)22:56 AAS
firefoxで試してみる。
  半角インデント
485: 2006/04/17(月)22:58 AAS
残念でした。
486: 2006/04/17(月)22:59 AAS
>>484
プレビューと間違えた。しっかり 入ってます
487: 2006/04/17(月)22:59 AAS
パチンコ&スロット解析用ソケット
メイン基盤上のチップLE2080,2280,4280のプログラムが
市販品のロムライターで読み込みできます。
確率や連チャンの仕組みが一目瞭然!
攻略法はあなた自身で見つける時代です。
外部リンク:www.3-you.com
488: 2006/04/17(月)23:08 AAS
>でも478でインデントされなかったのは何故だろう?
タコな2chスクリプトがインデントを展開してくれないから
 と書くか全角スペースでインデント汁
489: 2006/04/18(火)00:29 AAS
>>477
ツォルンの補題まで行ってきました。
なんでそうなったかは自分でもよくわかりません。
明日のナゾナゾにしてもう寝ます。
490: 2006/04/18(火)08:50 AAS
Haskell書いてると疲れるのは何故?
491: 2006/04/18(火)09:26 AAS
慣れてないから
492(3): 2006/04/18(火)11:46 AAS
Schemeみたいな言語になれちゃって,Haskellではいつも型宣言を書かずにプログラムを書いてしまう。そしてインタプリタに読み込ませて型が何かをチェック。
俺ってHaskell向いてないかな?
493: 2006/04/18(火)13:49 AAS
>>492
自分で書いているように、慣れの問題
494: 2006/04/18(火)15:40 AAS
よく自分の書いた型宣言よりもさらに抽象度の高い型宣言を型推論さんが教えてくれるのですが,Haskellerの皆さんはこのようなときはどうしているのでしょうか?それともこのようなギャップはあまり生じない?
495(1): 2006/04/18(火)17:07 AAS
>>477
a<b<c<d のとき(a,c)<(b,d)ということでしょうか?
でも(a,d)と(b,c)の比較がやっぱり分りません。(a,d)>(b,c)なんだろうか・・・
RangeMapはこういう解釈でいいんでしょうか?
・RangeMap型のオブジェクトは次の写像と同値である。
r(1),r(2)...r(n)のn個の整列された範囲が与えられているとき、
範囲rを自然数iに対応させる写像であって、rをr(i)とr(i+1)との間に挿入すると
省2
496: 2006/04/18(火)20:13 AAS
>>495
説明不足だった。申し訳ない。
意図としては、RangeMapはk型の値からa型の値への写像。
例えば、
a0, a1 :: RangeMap Integer String
a0 = insert (Unbounded, Unbounded) "foo" empty
a1 = insert (Inclusive 0, Inclusive 10) "bar" a0
省3
497(3): 2006/04/18(火)21:05 AAS
>>478
やってみた。
一応、「書きながらの抽象化」の意味は分かったような気もするけど、
C++で書いた場合との本質的な違いのようなものは分からなかった。
コードの修正に型推論を活用するというのもよくわからなかった。
(これは修正自体をあまりしていないせいかも。)
満足できる結果じゃないけど、いろいろ勉強になった。
省3
498: 2006/04/18(火)21:07 AAS
本物のプログラマは型推論に頼らない
499: 2006/04/18(火)21:09 AAS
本物のプログラマはそもそも型に頼らないだろ
500: 2006/04/18(火)21:10 AAS
確かに本物のプログラマはHaskellで書かれているからな
501: 2006/04/18(火)21:16 AAS
本物のプログラマはuniversal domainを使う
502: 2006/04/18(火)21:26 AAS
一方ロシアはJavaを使った。
503: 2006/04/18(火)21:40 AAS
>>492
型に慣れてないなんて時代遅れだね。
504: 2006/04/18(火)21:42 AAS
型がないと、ある種のパラドックスに陥る。
それは容易にバグに結びつく。
強い型付きの言語というのは、そういう意味で安全なんだよ。
505: [俺ってオモスレーwwwsage] 2006/04/18(火)21:43 AAS
型型うるせえな!!
506(1): 2006/04/18(火)22:12 AAS
>>497
reading A Gentle Introduction to Haskell Version 98 ... done
reading Twe Dozen Short Lessons in Haskell ... (Interrupt)
reading Yet Another Haskell Tutorial ... (Interrupt)
error: unresolved keywords: class instance deriving monad '...' '>>=' ...
やっと477が普通に見えてきたところです。
相互再帰は普通にできるんですね。
省5
507: 2006/04/18(火)22:17 AAS
型推論はなるべく使わないほうが良い。初心者なら特に。
508: 2006/04/18(火)22:23 AAS
>>497
そういえば以前MLでfoldを使わずに相互再帰で走査していくときに型推論が役に立ったことがあります。
509(1): 2006/04/18(火)22:53 AAS
>>497
478はXML文書をPythonのElementTreeのように手軽に扱えるライブラリはないかと思って、Haskellに限らずいろいろ探しているときに考えていたことの一部です。
ElementTreeで日本語を読み込むにはかなり細工が必要で、またテキストをエレメントと対等に扱わないので検索がやりにくかったです。
外部リンク:haskell.orgによるとGHC6.6からUnicodeがHaXmlでも普通に扱えるように読めるんですが、ご存知ありませんか?
510(1): 2006/04/18(火)23:23 AAS
>>509
現在のGHCは入出力の際にエンコーディングをiso-8859-1と仮定するので、
日本語を正しく扱うことは出来ません。
ただし、情報が失われる変換ではないので、文字列をブラックボックスとして操作する限りでは
問題は起こらないかも知れません。
実際、私はHaXmlを日本語を含む文書を操作するのに使っています。
上記の問題はGHC付属のIOライブラリの欠陥であって、プログラムからUnicodeの文字を扱うこと自体は正しく出来ます。
省6
511: 2006/04/18(火)23:24 AAS
>>492
関数を書いたあと推論を固定したいときはコピペして宣言、気にくわなければ型に手を加える、で十分だと思います。
512(2): 2006/04/18(火)23:27 AAS
関数型言語、特にHaskellのようなpureな言語では、型を見るだけでどういう関数なのかほぼ解る。
a -> a 型の関数はまず間違いなく id だし、a -> b -> b 型は、第二引数をそのまま返すものであろう。
a -> Int とかなら、何を適用してもIntの定数を返す関数と推測される。
(a -> b) -> [a] -> [b] なんていう型の関数があったら、返値の要素は、第一引数である関数で
もって第二引数の要素から作ったものである。
自分で書いた関数が (a -> b) -> a -> a とか推論されたら、第一引数の関数またはその返値を
どこかで捨ててしまっている。
省1
513: 2006/04/19(水)00:30 AAS
>>512
>自分で書いた関数が (a -> b) -> a -> a とか推論されたら、第一引数の関数またはその返値を
>どこかで捨ててしまっている。
> 型推論を活用しながらコーディングってつまりこういうことだと思っているが、違う?
だいたいそう。
1) 予想した型と推論された型が一致しなければ、実装か、そもそもアルゴリズが間違っていた
2) 予定の型を書いておいて型エラーが無くなるようにコーディグする
省8
514(1): 2006/04/19(水)01:04 AAS
>>506
外部リンク[cpp]:hs.or.tp
C++版。
C++には関数的なリストが用意されていないので、vectorと副作用でごまかした。
もちろん、自分で定義すればいいんだけど、面倒だったので。
515: 2006/04/19(水)01:07 AAS
>>510
参考になりました。ありがとう。
fptoolsでHaXmlをダウンロードしてあるのにghc6.4には何故かインストールされてませんでした。libraries/以下だけを再ビルドする方法も思い出せません。そもそもできたかどうか。トップからビルドし直すとまた信じられないような時間かかるし。
ghcはインストールがうっとうしいです。FFIもいっぱいあって、バージョン間の互換性も低いし。Makefileを書きかえてライブラリを追加したりとか。
インストールが成功したころには全然別の所に行ってしまってることが多いのでもうしばらくして試してみます。
reading 2ch/code321.txt(continued) Yet Another Haskell Tutorial(continued)...
516: 2006/04/19(水)01:16 AAS
>>514
わざわざありがとう。
これがHaskellと同じように読み書きできるんですね。恐れ入りました。
ちょっと頭のリソースが足りないので、今度Boostを試してみるときに参考にします。
517: 2006/04/19(水)13:49 AAS
ghcのコンパイルに 100時間以上かかってるんですがこんなもんですか?
前は半日くらいでできてたはずなのに。
518: 2006/04/19(水)17:33 AAS
いくらなんでも時間かかりすぎ
どんなコンピュータだよ
519(1): 2006/04/19(水)20:58 AAS
GHC 6.4.2来たよ
520: 2006/04/19(水)22:22 AAS
いつもソースからビルドしてるんだけど、バイナリよりどれだけ速いか比べたことある人いませんか?
521: 2006/04/19(水)22:33 AAS
どう考えてもビルド時間を回収できるほどには速くなりません。
522: 2006/04/19(水)22:48 AAS
じゃあバイナリにします。ありがとう。
523(1): 2006/04/20(木)07:17 AAS
>>512
っ [ P. Wadler, Theorems for Free! ]
524: 2006/04/20(木)07:49 AAS
>>523
もちろん読んでる。Reynoldsも。
525: 2006/04/20(木)21:16 AAS
もっと議論したまえ。
526:  ̄ ̄\| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 2006/04/20(木)23:12 AA×

527(1): 2006/04/21(金)19:26 AAS
過去ログ読まずに質問するですがHaskellで言語処理系実装するのってどんなメリットありますか?
Microsoft Researchの人が書いてた埋め込み言語のコンパイラHaskellで書くとこんなにスゲェぜ!
風なペーパーを見掛けて気になってたんですが、どこで見掛けたのかすらわからなくなって
もう気になって気になって・・・
+compiler +"in haskell" とかでググってもそれっぽいの出てこないし。あぁ気になる。
528(1): 2006/04/21(金)19:42 AAS
Haskellはあらゆる開発であらゆる言語を遥かに凌駕するのは周知の事実。
だから言語処理系の実装も例外ではないというだけの話。
特にI/Oが比較的単純でロジックの実装に集中できるから得意中の得意といっていい。
529(1): 2006/04/21(金)20:21 AAS
Haskellと比べれば他の言語は子供だまし。
あらゆる分野で断トツ。
530: 2006/04/21(金)20:35 AAS
学者もどきが礼賛してるただの
一風変わったオモチャだと思ってるけど違うの?
531: 2006/04/21(金)20:42 AAS
.NETに連携できればなぁ。グルーはC#でかくから。
532: 2006/04/21(金)21:47 AAS
Haskell にも格好良い渾名がいるんじゃないだろうか。
533: 2006/04/21(金)22:07 AAS
唯一Haskellに対抗できそうなのがC++
534: 2006/04/22(土)09:47 AAS
「ふつうのHaskellプログラミング」マダー(AAry
Racc本の青木峰郎さんに期待age
535: 2006/04/22(土)10:24 AAS
俺も入門Haskellが糞だったのでふつうのHaskellプログラミングに期待
536: 2006/04/22(土)11:14 AAS
勝手にナイトメアHaskellにも期待
537(5): 2006/04/22(土)16:41 AAS
haskellの悪夢か…
プログラム中で定数として色々な計算に使っていた値(重力定数とか)を、
「コマンドラインの引数で値を指定できるようにして」といわれた時とか。
main以下のほぼすべての関数に、その値を表す引数を追加する
(もしくはmonadを使ってその受け渡しをラップする)羽目に…
こういう時だけは破壊的なMLが羨ましくなる。
538(1): 2006/04/22(土)16:47 AAS
>>537
激しく同意。
パラメータつきモジュールみたいな言語要素が欲しい。
\(g :: Double) -> module Foo where ...
539: 2006/04/22(土)16:55 AAS
>>537→バグが増える
540: 2006/04/22(土)17:06 AAS
>>537
つ Implicit parameters
541: 2006/04/22(土)17:19 AAS
確かに他の言語ではあり得ないおぞましさがあるからな
542: 2006/04/22(土)17:54 AAS
実際 Haskell って「可変性」って観点からはどういう評価なん?
543(2): 2006/04/22(土)18:05 AAS
>>538
こういうのは?
data Foo = Foo {f1 :: ..., f2 :: ..., f3 :: ...}
ConstructFoo g = Foo f1 f2 f3
where
f1 = ...
f2 = ...
省1
上下前次1-新書関写板覧索設栞歴
あと 458 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s