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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
306
(1): 301 2011/10/28(金)09:25 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): 2011/10/28(金)12:53 AAS
>>306
> 例えば存在比を(Int,Double)のリストで表すよりもData.Mapで表す方がベターだと思った場合

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

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

ちなみに、>>304 の後半で紹介した Expression Problem は、
少なくとも >>301 から読み取れる問題とは別ものと思われる
(応用できるかどうかは分からないけど)
308: 2011/10/28(金)12:54 AAS
>>307
すまん

誤) CICP 的に言えば

正) SICP 的に言えば
309
(1): 2011/10/28(金)18:25 AAS
ようやく少しモナドの感覚がつかめた。あれって世界を分けてて、その世界の中
で作業をしていくための工夫という感じだな。ってね。安全な作業をするには必
要なんだってのもようやくわかった。

同時に感覚的なイメージでモナドを上手に例えて伝えるようなものがあまりない
のかもとも思ったかな。水中で普通のデジカメで撮影をするには防水ケースの中
に入れて使うけど、あの防水ケースっぽい働きなんだなってね。そんなアナロジー
を想像してしまったかな。
310
(1): 2011/10/28(金)19:10 AAS
>>309
> 同時に感覚的なイメージでモナドを上手に例えて伝えるようなものがあまりない
> のかもとも思ったかな。

確かにね

hage :: [Int]
hage = do
x <- [1..5]
when (x == 3) (fail "discard")
return x

こういうのだと、どの世界とどの世界に分けてるのか曖昧だし
明確に分けられたとしても、その世界に何かを閉じ込めているのとも違う気がする
311
(1): 2011/10/28(金)20:14 AAS
リストモナド自体が分岐した世界を表現してるからな
312: 2011/10/28(金)20:59 AAS
>>311
いや、たがら、そのリストモナドが分けた2つの世界は何と何か
という辺りが自分では上手く説明できないなぁと
313
(1): 2011/10/28(金)21:06 AAS
do内の世界はdoの流儀に従ってる。だけど、do外の世界はdo内のことには
結果を渡される以外無関係ってと事だろう?
314: 2011/10/28(金)21:31 AAS
do ってただの糖衣構文じゃん、世界の構成要素ではないでしょ

>>310 のは実質これ

hage :: [Int]
hage = [1..5] >>= \x -> when (x == 3) (fail "discard") >> return x

>>313 の言う流儀というのは、結局
Monad クラスのインスタンスの定義方法、だよね
(>>= 関数をどう定義するか、return 関数をどう定義するか、など)

でもそれは、たとえばアローでも同じ事が言えて、
proc do内の世界はproc doの流儀に従ってる・・・
つまり Arrow クラスのインスタンスの定義方法がその流儀となる

じゃあ、アローもモナドと同じように、世界を2つに分けているのかな
分けているのなら、モナドが分ける世界とアローが分ける世界は何が違う?

そこまで考えて初めて、モナドが何をどう分けているのか、
ということの理解に繋がると思う
315: 2011/10/28(金)21:46 AAS
むしろ分けてるんじゃなくて繋げてる
316: 2011/10/28(金)21:47 AAS
床下配線
317: 2011/10/29(土)00:06 AAS
いろんな意見ありがとうございます。アローのことはそもそも知らないくらい
なので、また探ってみたい。やっと面白いと思うことが増えてきた感じです。
arrowのことは他の理解を終えてから取っかかるよ。

実はRWHをようやく半分まで消化したところ
318
(3): 2011/10/29(土)10:48 AAS
core言語のパーサーを作ろうとしているのですが、
他にこれは読んでおけ、このページは見ておけというものはありますか?
319: 318 2011/10/29(土)10:50 AAS
>>318
書き忘れていました

今は Haskell Platform 内のドキュメントを読んでいます
320
(1): 2011/10/29(土)11:06 AAS
>>318
Haskell Report
321: 2011/10/29(土)12:31 AAS
>>320
ありがとうございます

そうですね、元の Haskell の仕様を読んでおくのは当然ですね
熟読します
322
(1): 2011/10/29(土)14:25 AAS
extcoreパッケージのソースコード
323: 2011/10/29(土)14:44 AAS
>>322
ありがとうございます

Webサイトや README をざっと見た感じ、自分でパーサーを作らなくても
extcore 自体を使って目的が達成できそうな気配なので、ちょっと試してみます
324: 2011/10/29(土)19:04 AAS
>>318
core言語って何?
325: 2011/10/29(土)19:05 AAS
ごめん、ぐぐったら出てきたわ>core language
326: 2011/10/29(土)21:13 AAS
確か標準では形式的な定義は与えてなかったんじゃなかったっけ
327: 2011/10/29(土)21:18 AAS
そうだが

どうした、いきなり
328: 2011/10/30(日)22:46 AAS
windowsでHaskellを使う場合、文字コード変換はuconvしか選択肢無い?
329
(1): 2011/10/30(日)23:07 AAS
WIn32APIの該当関数を FFI で呼ぶという方法もある

IOモナドになるけど、余計なライブラリも使わず意外に簡単だったりする
330: 2011/10/30(日)23:23 AAS
>>329
そうか。ありがとう。
331: 2011/10/31(月)07:50 AAS
Haskell でたまに次のようなコンパイル エラー メッセージが出るのだけど、

・・・ `a' is a rigid type variable bound by ・・・

この rigid type というのは何の分野の用語なの?
どういう状況のエラーなのか、もっと深く理解したい
332
(1): 2011/10/31(月)10:01 AAS
Num a => aはrigidじゃない。
数値型はたくさんあるから。
333
(1): 2011/10/31(月)14:19 AAS
liftMとliftAの使い分けってどうしてらっしゃる?
334: 2011/10/31(月)18:00 AAS
もう11月になるんすけど
リリース予定どうなってんすか?
335
(1): 2011/10/31(月)18:33 AAS
11月の感謝祭にリリースするってさっき白石さんがつぶやいてた

>>333
基本liftAというか<$>を使うけどControl.MonadをimportしているようなモジュールならliftMでいいんじゃないかなぁってぐらい
1-
あと 643 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.026s