[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
283: デフォルトの名無しさん [sage] 2011/10/27(木) 10:21:40.18 AAS
デジタル回路にも同期と非同期があったな
284
(1): デフォルトの名無しさん [sage] 2011/10/27(木) 12:12:07.98 AAS
発想を広くとか勘違いしてるやついるな
発想はよさだろ

発想が狭くても良ければいい

お前みたいなやつはクソ

海外旅行経験300回未満のゴミが

"欧米では〜〜、海外では〜〜、視野を広める、心を広く、発想を広く、世界は広い、井の中の蛙、まだまだ甘かった
日本人は〜、コミュニケーションは大事、むこうでは〜〜、ボブがよ!ヘイ!ジョンとかブログに書く馴れ馴れしく”
とかほざいてるのとおなじ気持ち悪いんだよゴミ

なあゴミ
285: デフォルトの名無しさん [sage] 2011/10/27(木) 12:15:28.51 AAS
質問です。

海外旅行をすればHaskellがバリバリ書けるようになりますか?
286
(1): デフォルトの名無しさん [sage] 2011/10/27(木) 12:31:24.60 AAS
>>284
良い発想かどうかは、誰がどうやって判断するんだろ。。。
287: デフォルトの名無しさん [sage] 2011/10/27(木) 12:32:19.36 AAS
本当久々だ
288: デフォルトの名無しさん [sage] 2011/10/27(木) 12:39:59.83 AAS
>>286
そんなのは世界中のHaskellに関わり、
かつのその発想に関わる人間みんなが判断していくんだろ

そして、大多数の人に良い発想だと認められれば、
その発想が世の中に認められているということだ

ごく普通の当たり前のことだと思うが、そんなに疑問に思うことか
289: デフォルトの名無しさん [sage] 2011/10/27(木) 12:49:24.80 AAS
コテが付いて無くてもフィルタリング出来るパーサーで、スレがすっきりした。
パーサー実装はHaskellの練習としては手頃なのでお奨め。
290
(1): デフォルトの名無しさん [sage] 2011/10/27(木) 12:56:12.28 AAS
>>279
279(3): デフォルトの名無しさん [sage] 2011/10/26(水) 23:30:49.18 AAS
遅延評価前提のデータ構造って、よ〜するに制御構造だよね?
これはいつ評価される(べき)か、とか考えつつデータ構造を作りながら、
ふとそう思った。

これを否定されてそんなに腹が立ったのかいw
291: デフォルトの名無しさん [sage] 2011/10/27(木) 12:57:24.90 AAS
パーサとはいったい
292: デフォルトの名無しさん [sage] 2011/10/27(木) 13:00:13.59 AAS
>>290
それより「発想」ってのが何かのトラウマのスイッチを押してしまったらしいよ
293
(2): デフォルトの名無しさん [sage] 2011/10/27(木) 13:01:52.27 AAS
関数型言語がいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
294
(1): デフォルトの名無しさん [sage] 2011/10/27(木) 13:04:54.29 AAS
電球の外に群がる事があっても、電球の中にまでは入ってこられまい。
295
(1): デフォルトの名無しさん [sage] 2011/10/27(木) 13:17:59.98 AAS
大発見の相手してやんないと拗ねる奴ってどこの板にもいるけど
全部一緒なんじゃなかろうな
296: デフォルトの名無しさん [sage] 2011/10/27(木) 13:36:35.90 AAS
>>293
X: 関数型言語がいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
O: ハスケルがいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
297: デフォルトの名無しさん [sage] 2011/10/27(木) 19:14:05.00 AAS
>>293-294
文学はいいので工学の話してください
298
(1): デフォルトの名無しさん [sage] 2011/10/27(木) 23:19:35.93 AAS
フーリエ変換への変なアプローチなら、できるかどうかは別としてありそうではあるけど。
299: デフォルトの名無しさん [sage] 2011/10/27(木) 23:47:18.79 AAS
>>298
「できない」アプローチが「ある」っていう概念が理解できないから説明してくれろ
300: デフォルトの名無しさん [sage] 2011/10/28(金) 00:14:33.39 AAS
>>295
>全部一緒なんじゃなかろうな
284〜296まで一人で自演乙
でも、こんな過疎スレで一時間ちょいで十レス以上とか、
もうちょっとリアリティってヤツを考えたほうがいいね。
301
(6): デフォルトの名無しさん [sage] 2011/10/28(金) 02:56:26.22 AAS
Haskellでプロトタイピングをするとき、ここから作ってく、こうやって作っておけば後からの変更に強い、
みたいな作法って持ってます?

ある組成式を受けとったら、その分子の平均質量とかマススペクトルとかを返してくれるような
プログラムを書いてみようかと思ったんだけど、まず基本となる原子のデータ型から作っていって、
data Atom = Atom { abbr::Char, abundance::Distributions }
type Distributions = [(Int,Double)]
とか定義しておいて、average :: Atom -> Doubleやspectrum :: Atom -> (Int -> Double)
みたいな関数を作り、組成式はtype Molecule = [(Atom,Int)]としてみようか、と考えています。

で、Atomを拡張してname::Stringみたいな値も格納しておこうか、と思いついたとき、
Atom型の値の中身をパターンマッチで分解している部分は全て書き直さなければならなくなります。
変更に弱いから、手探りでコーディングをしているときはパターンマッチによる分解は使うべきじゃない、ということで良いのでしょうか。
302
(2): デフォルトの名無しさん [sage] 2011/10/28(金) 03:18:36.06 AAS
>>301
とりあえず、その個別の問題に対しては、

data T1 = T1 { c :: Char }
data T2 = T2 { d :: Char, s :: String}

f T1{c = 'a' } = "c is 'a'"
f T1{c = c } = "c is not 'a': " ++ show c

g T2{d = 'a' } = "d is 'a'"
g T2{d = d } = "d is not 'a': " ++ show d

以上のパターンを用いることによって対処できる

さらに、

h t2@T2{d = 'b' } = t2{d = 'c', s ="foo" }

のようにasパターンと組み合わせることものできるから、かなりの柔軟性が確保できるはず。
303: 302 [sage] 2011/10/28(金) 03:20:39.58 AAS
ごめん。捕捉。

T1とT2は、別の型というよりも、変更前の型と変更後の型をシミュレートしていると考えて。
だから、このコードではcとdは別の識別子だけど、変更前と変更後で同じ識別子にすることができる。
304
(2): デフォルトの名無しさん [sage] 2011/10/28(金) 07:47:46.60 AAS
>>301
> Atom型の値の中身をパターンマッチで分解している部分

ここが元凶じゃないかな

Atom型の値の中身をパターンマッチで分解するのなら、
何の為に abbr 関数や abundance 関数を定義したの?

パターンマッチで分解するんじゃなく、
これらの関数を使って中身を取得すべきじゃないの?
パターンマッチだと型の構成を固めちゃうよ

ちなみに、見た目よく似た問題に Expression Problem というのがある
data X = A | B という型をパターンマッチで A B 仕分けしている関数が多くあり、
そこに新たに C という値構築子を追加したいが、修正すべき関数が多くて大変
なんとか楽にしたい、ついでにできれば再コンパイルしたくない

そういう場合なら、たとえばこことか日本語で分かりやすい
外部リンク:d.hatena.ne.jp
305
(1): デフォルトの名無しさん [sage] 2011/10/28(金) 08:16:42.39 AAS
>>301
普通はデータ構築子をmodule外に非公開にすることで
内部構造を隠匿する

よくあるOOP言語ではclassが抽象データ型の単位だけど
Haskellだとmoduleになる
306
(1): 301 [sage] 2011/10/28(金) 09:25:56.34 AAS
>>302すいません、パターンマッチでの分解に、record syntaxを含めていませんでした。
haskellの入門書などではdata X = MkX Int Double Charなどとしておいて、
f (X i d c) = ...と記述することが「できる」とあったのですが、これって便利なのか?と疑問に思ったのです。

>>304確かにアクセッサ関数を定義しているので、型に何かを追加する可能性がある場合は
柔軟性を保てるのですが、例えば存在比を(Int,Double)のリストで表すよりもData.Mapで表す方がベターだと思った場合、
やっぱり変更先が多くなりそうになって嫌だなあと思った次第でして。
>>304のリンク先の方法がスマートに見えるので試してみたいと思います。
最終的には原子に限らず、平均値と分布を出せるようになりたいので、averageやspectrumをAtomだけに制限するのは良い手じゃなさそうです。
307
(1): デフォルトの名無しさん [sage] 2011/10/28(金) 12:53:34.49 AAS
>>306
> 例えば存在比を(Int,Double)のリストで表すよりもData.Mapで表す方がベターだと思った場合

そういう場合は、Data.Map 型を使ったコンテナに対するアクセス関数を公開して、
そのコンテナ内部で Data.Map 型を使っていることは隠蔽しておく
>>305 も同じ様なことをアドバイスしている

こうやって、データとそのユーザとの間にインターフェースを設けるのは、
Haskell に限らず、まず間違いなく全ての言語で共通する考え方
CICP 的に言えば「抽象の壁」だ

ちなみに、>>304 の後半で紹介した Expression Problem は、
少なくとも >>301 から読み取れる問題とは別ものと思われる
(応用できるかどうかは分からないけど)
1-
あと 671 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.034s