トップページtech
1001コメント334KB

関数型プログラミング言語Haskell Part18

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/03/16(金) 21:54:23.92
haskell.org
ttp://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/
0412デフォルトの名無しさん2012/05/25(金) 14:57:09.79
Data.Vector.Primitiveはとても特殊な場合を除いて推奨されないとありますが
とても特殊な場合とはどんな場合なんでしょうか?
0413デフォルトの名無しさん2012/05/25(金) 18:04:21.99
配列ライブラリを書くときとか?
0414デフォルトの名無しさん2012/05/25(金) 18:10:07.54
将来、Vector の実装がPrimitiveのレベルで変更されるということだったら困る
0415デフォルトの名無しさん2012/05/25(金) 18:26:23.52
>>406
その筋の人だ!
0416デフォルトの名無しさん2012/05/25(金) 18:53:57.14
考えてみれば98糞食らえからwindows糞食らえで
 裏街道ばかり来てるな。
0417デフォルトの名無しさん2012/05/25(金) 19:32:56.19
>>405
>>411
元々のお二人の訳も素晴らしいのですが、さらにかなりレビューされていて
とてもわかりやすくて良いと思います。
ただ、原文のブロークンな調子を踏襲して訳されているので、
そういうのが嫌いな方には不向きかも知れません。
内容的には、すごいH本の方が、関数型言語の初心者には
分かりやすいと思います。
0418デフォルトの名無しさん2012/05/25(金) 19:41:28.34
cabalを利用していて、依存性が原因でパッケージのインストールに失敗する場合、通常どのように対処すればいいのでしょうか?
大まかで良いので教えていただけるとありがたいです
0419デフォルトの名無しさん2012/05/25(金) 19:50:41.63
普通の人は諦めて、バージョンアップするまで待つ。

普通でない人は、*.cabal ファイルをテキストエディタで修正する。

私は普通でない人なんで、どんどん書き換える。
もちろん異常が無いかどうかはできるだけ検証するが。
0420デフォルトの名無しさん2012/05/25(金) 22:05:05.22
すごいHaskell買おうかな……
フリー版+3000円の価値があるかが問題…
0421デフォルトの名無しさん2012/05/25(金) 22:22:11.53
>>420
もし主目的が、Haskell の関する他人の文章を楽しむことではなく、
あくまで Haskell を学ぶことであるまなら、
フリー版でよく分らない部分をここで訊いて、
それでも納得できなければ買う、というのはどうだろうか
0422デフォルトの名無しさん2012/05/25(金) 23:00:34.35
>>417
オーム社でやってるレビュー方式には参加したことがあるからだいたい雰囲気分かるわ。藁
訳は期待してるわ。by 411
0423デフォルトの名無しさん2012/05/25(金) 23:02:51.97
>>420
英語の洋書に一度は手を出したい→原著サイトでしばらく格闘してみる。
オンラインで読むのは嫌目がしょぼしょぼするし、頭に入るきがしない。英語は好き→原著でどうぞ
英語は苦手。→強烈なH本をどうぞ。
0424デフォルトの名無しさん2012/05/26(土) 18:43:17.15
紙のよりpdf版が少しやすい
http://estore.ohmsha.co.jp/titles/978427406885P
0425デフォルトの名無しさん2012/05/26(土) 22:19:42.13
しかもカラーらしいな、pdf版
0426デフォルトの名無しさん2012/05/26(土) 23:21:27.87
加筆とかはないのか、結局。
0427デフォルトの名無しさん2012/05/26(土) 23:46:47.63
「すごいHaskellたのしく学ぼう!」は気配りと楽しさがすごい
ttp://d.hatena.ne.jp/keigoi/20120526/sugoih
0428デフォルトの名無しさん2012/05/27(日) 15:53:38.46
Linuxで*.cabalってどこにあるんでしょう。
探せど探せど見つからなくて困ってます。
0429デフォルトの名無しさん2012/05/27(日) 16:04:40.54
>>428
意味が分らん。
cabal ファイルは Linux も Windows も関係ないだろ。

自分でパッケージを作りたいのなら cabal ファイルも自分で書くし、
Hackage から落としてきたパッケージなら展開したディレクトリ内に入ってる。
0430デフォルトの名無しさん2012/05/27(日) 18:58:41.69
>>428
ディストリのパッケージになってる奴の*.cabalファイルならソースパッケージを展開すると入ってると思います。
04314182012/05/27(日) 20:08:53.91
>>419
ありがとうございます
しかしなかなか上手いこと通すのは難しいですね・・・
0432デフォルトの名無しさん2012/05/28(月) 02:19:34.53
.ghciを設定したら警告が出たんだが
*** WARNING: /home/hi/Haskell is writable by someone else, IGNORING!
*** WARNING: /home/hi/Haskell/.ghci is writable by someone else, IGNORING!

.ghci
:set prompt "ghci> "
設定も反映されないし、よくわからん。
0433デフォルトの名無しさん2012/05/28(月) 02:57:35.46
英語読めないのか?
0434デフォルトの名無しさん2012/05/28(月) 07:48:02.06
すごいHaskellのやつか。
ワーニングの英語には、これと似た内容が書いてある。
http://www.google.co.jp/search?hl=ja&q=.ssh+%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3
それでも分からなかったら、ワーニングの一部コピペしてググってみよう。
0435デフォルトの名無しさん2012/05/28(月) 11:53:23.62
ワーニングワーニングワーニングワーニング
0436デフォルトの名無しさん2012/05/28(月) 20:58:20.92
>>435
ボスキャラでも登場するのか
0437デフォルトの名無しさん2012/05/28(月) 21:11:31.73
ウォーニングって言いたいんだろ
0438デフォルトの名無しさん2012/05/28(月) 21:18:48.90
ワーニングのバッグスバニー
0439デフォルトの名無しさん2012/05/28(月) 21:20:36.83
>>435,436
へいおまち
http://www.youtube.com/watch?v=lySjinT6f0A#t=1m55s
0440デフォルトの名無しさん2012/05/28(月) 21:22:04.36
某書籍に「だったら、おまえはStar Warsをスターワーズと読むのか」とあって、
そりゃもっともだと思うと同時に、そういう話じゃねぇだろと思ったな。
0441デフォルトの名無しさん2012/05/28(月) 21:33:48.96
『宇宙戦艦ヤマト』が、「ワープ」を「ウォープ」に修正する最後の機会だったんじゃないか、
とか今では言われているが
0442デフォルトの名無しさん2012/05/28(月) 21:42:05.41
「ワープ」は1億人が意味を共有できる立派な日本語
修正の必要はない
0443ぬるぽ2012/05/28(月) 22:03:46.93
バレーボールもボレーボールらしいな
nativeの発音聞いたことないけど
0444デフォルトの名無しさん2012/05/28(月) 22:16:32.09
「グッドマーニング云々」とか言ってたヘミ猫を思い出す。
0445デフォルトの名無しさん2012/05/28(月) 22:28:44.29
ラウターの調子が悪い
0446デフォルトの名無しさん2012/05/28(月) 22:44:59.51
むかし、猫でもわかるプログラミングで、
エディットコントロールをエジットコントロールと言っていて、
もの凄く違和感を覚えた記憶がある。

でもよく考えてみれば、エジソンと同じなんだよな。
0447デフォルトの名無しさん2012/05/28(月) 22:46:22.72
>>443
アメリカ人は普通にバーリボーだったけどなぁ。
0448デフォルトの名無しさん2012/05/28(月) 23:34:37.10
♪こわれかけのレディオ
0449デフォルトの名無しさん2012/05/28(月) 23:38:13.93
gtk2hs や wx などの GUI ライブラリのラッパーを作りたい。
下記のことがラッパーでは実現不可能なら一から作ることになる。

例えば、ボタンを押すとラベルの文字が変わる処理を記述したい場合、
素の gtk2hs や wx なら、ボタンのイベントハンドラに登録した関数内で、
ラベルのプロパティに対して set 関数を使って値を書き換える感じだと思う。

これはあまりに手続き的でムカムカしてくる。

こうではなく、ボタンのイベントに反応するプロパティ型を作り、
それをラベルのプロパティに最初に設定した後は変更(再設定)しない。
イベントが起きなくても、起きても、自動的に文字が設定される。

プログラマはイベント時に何が起きるかを時系列にそって設定するのではなく、
プロパティが何に対してどう反応し、どう変化するかを定義する。

これができれば、いくぶん宣言的で心地よい。

私みたいな者が考える事なんて既にいろんな人が考えていると思うんだが、
このような仕組みを作る上で、参考になりそうな資料はないだろうか。
0450デフォルトの名無しさん2012/05/28(月) 23:48:03.50
wxPython と decorator
0451デフォルトの名無しさん2012/05/29(火) 08:41:21.13
まさにそれがFRP
04524322012/05/29(火) 09:40:44.70
chmod 700 .ghci
chmod 700 Haskell/
で解決した。
Haskell/もパーミッションいじらないといけなかった。
なんで設定ファイルがない時は普通に動くのに、
設定ファイルを置くと警告が出るのか意味がわからない。
0453デフォルトの名無しさん2012/05/29(火) 09:44:25.92
俺は「***** is writable by someone else, IGNORING!」という警告を読むことが
できない文盲です、って大声で自分で言いふらして嬉しいのか?
0454デフォルトの名無しさん2012/05/29(火) 10:09:31.31
>>453
初心者でごめんね。
0455デフォルトの名無しさん2012/05/29(火) 10:15:28.14
いや初心者とかじゃなくて、英語読めればその警告が何故出たのかわかるだろってことだろ
0456デフォルトの名無しさん2012/05/29(火) 10:48:28.72
日本語でお説教する事に何のメリットがあるか、わかるだろ
0457デフォルトの名無しさん2012/05/29(火) 11:32:31.62
なでしこで記述する事に何のメリットがあるか、わかるだろ
0458デフォルトの名無しさん2012/05/29(火) 12:02:42.50
英語の初心者ということだろう。
0459デフォルトの名無しさん2012/05/29(火) 12:48:14.86
というか Unix は一つのマシンを複数のユーザーが使うことが前提だから、
初期化スクリプトみたいなファイルを誰でも編集可能だと、たとえば自分の
ファイルを全部消す、みたいな悪意ある記述を追加されるかもしれない、

という前提を知らないと、英語が読めてもわからないかもしれない。

ていうか >>434 を華麗にスルーしちゃダメだろ。
0460デフォルトの名無しさん2012/05/29(火) 12:52:44.84
>>450
まだ調べ始めたばかりだけど、求めているモノとは何となく違う感じがする。
decorator の機能を使ってイベント処理している例をいくつか見てみたけど、
結局イベントハンドラの中で描画関数を呼んだり、計算したりしている。

つまり、>>449 の「素の gtk2hs や wx なら」の部分と
本質的に何も変わらないのではないだろうか。

もちろん、自分でももう少し詳しく調べてはみるが。

>>451
言葉が足りず申し訳ない。
これが FRP の一つの形態になっている事は分ってた。
(リアクティブシステムの構築を関数型っぽく記述する事)

Haskell で使えるFRPライブラリにも色々あって、
たとえば Yampa の仕組みや実装をいくら調べたところで
>>499 のような事の実現に直接役立つわけではない(実際色々調べた)。

>>499 に繋がるような何かキーワードはないだろうか。
0461デフォルトの名無しさん2012/05/29(火) 15:16:16.96
バグ?
Prelude> succ 1.000022342
2.0000223420000003
0462デフォルトの名無しさん2012/05/29(火) 15:27:06.59
xamlのデータ・バインディングとか?
0463デフォルトの名無しさん2012/05/29(火) 15:36:37.09
XAMLファミリは、Bindingに加えてViewModelのプロパティ間で
リアクティブプログラミングする仕組みを導入すると
正に>>449のような書き方になるね。

しかし、あれをHaskellでどうやったら再現できるのかはさっぱりわからん。

やってる事は、依存関係のあるキャッシュの管理と似てるので
キャッシュを持つサーバの仕組みなんかが参考になりそうだが・・・
0464デフォルトの名無しさん2012/05/29(火) 16:02:10.76
>>460
色々調べてたのなら既知かもしれんが
プロパティを設定するというのはwxパッケージの提供するインタフェースに似てるな
このプロパティは実質IO aとa -> IO ()のペアにすぎんのだけど、それなりに>>449で述べてるようなのに近いように思う
これとFRPの組み合わせはreactive-banana-wxパッケージでプロパティやイベントをEventやBehaviorとして
リアクティブシステム内で扱えるような補助関数を提供してる
参考になる記事としてはreactive-bananaの作者のblogとか
0465449, 4602012/05/29(火) 19:46:57.92
みんな、ありがとう。
知ってるものも、知らなかったものも、色々キーワードが出てきた。
それぞれの関連も含めて調べてみる。

本棚の肥やしになってる "Pro WPF in C# 2008" もやっと役立つ日が来たかも。

アドバイスを受けて、Heinrich Apfelmus のブログをちょっと見てみたけど、かなり面白い。
まとまった時間が取れる休日にでも本格的に読んでみるよ。
(Conal Elliott のブログより読みやすい英語だ)

wx のプロパティは gtk2hs のそれや OpenGL の StateVar と似たようなモノで、
やはり「値」を設定したり取得したりするものという以上のモノではないのでは。
その値はあくまでそのプロパティの意味する値そのもので、
例えば text プロパティなら String 型しか受け付けない。
そこに「ユーザーが何かした時にはある文字になる」という IO String の値を
設定することはできない。

一応繰り返しておくと、次のような考え方が wx や gtk2hs などのものと思う。

ボタンが押されたイベントでは何を処理するのか?
 ・初めにラベルの文字を変え
 ・次にテキストボックスの背景色を変え
 ・最後にボタンを不活性にする

このような手続き的なものを、次のように宣言的にしたい。

ラベルの text プロパティとは何か?
 ・ボタンプッシュイベントで文字を変えるものだ
テキストボックスの bgclolor プロパティとは何か?
 ・ボタンプッシュイベントで色を変えるものだ
ボタンの enable プロパティとは何か?
 ・ボタンプッシュイベントで False になるものだ
0466デフォルトの名無しさん2012/05/29(火) 22:36:50.20
>>465
w :: Frame
b :: Button
t :: TextBox
l :: Label
pushEvent :: Button -> Event ()
text :: Prop w String
bgcolor :: Prop w Color
enable :: Prop w Bool

w <- frame [text := const "hoge", show := const () <$> createEvent w]
t <- textbox [bgcolor := changeColor <$> pushEvent b]
l <- label w [text := changeString <$> pushEvent b]
b <- button w [enable := const False <$> pushEvent b]

こういうのが思い浮かんだ

wxのプロパティやイベントの型をEventなりBahaviorの形式にしただけだが
>>465の最後の記述のような捉え方は自然に出来る書き方にはなってると思う
今のreactive-bananaでDoRecが使えるなら
頑張ってwx-coreパッケージ直接叩いてこういうインターフェースの高水準ライブラリ書くのは可能な筈
0467デフォルトの名無しさん2012/05/29(火) 22:42:05.22
部品単位でイベントハンドラを書きたいってこと?
0468デフォルトの名無しさん2012/05/29(火) 23:08:01.19
*Main> [1,3..6]
[1,3,5]
*Main> ['1','3'..'6']
"135"
*Main> [1.0,3.0..6.0]
[1.0,3.0,5.0,7.0]

なんでFloatのリストでやったときだけこうなるの?
0469449, 4602012/05/29(火) 23:21:17.86
>>466
text :: Prop w String

これらは Prop ではなく Attr なのでは?

それはともかく、具体的なアイデアありがとう。
イメージとしてはかなり近いと思う。
参考にして考えてみる。
0470449, 4602012/05/29(火) 23:22:12.75
>>467
それも一部に含まれているが、ちょっと違う。
手続き型と宣言型の違いが明確に現れるようにイベントハンドラを例にしたが、
あるプロパティの値が依存する先(ソース)はイベントハンドラだけではなく、
別のウィジェットのプロパティという可能性もある。

例えば、何か絵をプレビューするウィジェットの enable プロパティが、
複数のチェックボックスのプロパティに依存していたり。

この場合、手続き型なら、両方のチェックボックスの check プロパティを調べ、
両方 True ならプレビューウィジェットの enable プロパティを True にする、
という処理を両方のチェックボックスのイベントハンドラに記述する。
(当然実際は、同じひとつのイベントハンドラを両方に設定するなど省力化するが)

これを、例えば次のように記述できたら宣言的で分りやすいと思う。
(擬似的に wx っぽく書くと)

p <- image w [ enable := checked c1 <&> checked c2 ]

本質的には、イベントの発生やプロパティの変化を「伝搬」させたい。
それができれば部品単位でイベントハンドラを書くこともできる、という事。
0471デフォルトの名無しさん2012/05/29(火) 23:42:10.94
手続き型ならobserverパターンでやるんじゃないかな。

きっと難しくなる要因は純粋言語だというところにありそう。
0472449, 4602012/05/29(火) 23:52:06.14
>>471
すまん例が悪かったか。

べつに手続きっぽく書くのが難しい訳ではない。
observerパターンの様に書くこともできる。

私が単に関数型言語で手続きっぽく書くのをキモイと感じるから、
なんとか宣言的に書けないかと、そっちの方で苦心してるだけだ。

私がもし純粋でない OCaml にはまっていても、
きっと同じように宣言的に書けないか考えていたと思う。
0473デフォルトの名無しさん2012/05/30(水) 00:10:30.62
>>446
editはエディットです
0474デフォルトの名無しさん2012/05/30(水) 04:38:33.68
Stateモナドで24時間経っても答え出ない処理をMutable Vectorに替えたら20分で答え出したワロタwww
0475デフォルトの名無しさん2012/05/30(水) 05:55:52.99
(24 * 60) / 20 = 72
72倍の高速化ならよく聞く話。
0476デフォルトの名無しさん2012/05/30(水) 05:57:49.10
さっそくGTAでDPの練習 #Haskell - Qiita
http://qiita.com/items/a372458d171e373285b1
これとか当社比400倍とか
0477デフォルトの名無しさん2012/05/30(水) 07:00:18.28
(/ 20 (* 24 60))
0478デフォルトの名無しさん2012/05/30(水) 13:39:02.03
(/ (* 24 60) 20)でしょ
0479デフォルトの名無しさん2012/05/30(水) 14:15:16.61
くそう、みんな雲の上に居るようだ
DPが動的計画法のことだと知るまで5分も費やしてしまった
GTAに至ってはグランドセフトオート (ry
0480デフォルトの名無しさん2012/05/30(水) 14:28:51.43
すごいHaskell
たのしく学ぼう! ||
     人 _  |-|
     旦/○\日
     目 ァイリ |-|
  / ̄ ̄ ̄ ̄ ̄\  
  □-□ U      |
  | .|ι        |
旦ノノ||  ̄ ̄ ||



AAなんてあったのね
0481デフォルトの名無しさん2012/05/30(水) 15:27:23.39
>>480
さっき本屋で見てきたんだけど、B5大型本を想像していたので文庫本+αのサイズが意外だった。電車の中でも読めるね。
中身も読みやすく編集されているようで、これからHaskellやって見ようという人にはお勧めだと思う。

ステマでした
0482デフォルトの名無しさん2012/05/30(水) 16:13:11.04
これなら手続き脳の私でもらくらく最後まで読んでしまえそう!
でも...お高いんでしょう?
0483デフォルトの名無しさん2012/05/30(水) 16:19:47.25
Amazonで出店者が定価3、4割り増しにしてるけど、情弱は買うんだろうかあれ。
0484デフォルトの名無しさん2012/05/30(水) 17:21:21.37
少し高くしている奴は海外へ送ってもらえるってことでしょ?

あと今すごいH本第一章読み終わったけど
結構誤植があった。
0485デフォルトの名無しさん2012/05/30(水) 17:51:41.91
やっぱりか
0486デフォルトの名無しさん2012/05/30(水) 18:14:21.05
重力は存在しない といってる学者がいるみたいだな

やめとけよ
そこの場所のリファクタリング始めたら「引力」だって存在しねーし
熱エネルギーも存在しねーから

その部分は俺が研究してきた事と酷似する
俺はアルゴリズムの中から、変数を抹消し、
ソースコードは再帰で圧縮
そして残ったものは、何もなかった

1が残ると思ってたが、予想を超えて、「それ」は0になった

重力がいらないとかいっちゃうと、0に近づくんだよ
わかるか

いらなくないんだよ

元々、何もないところに「重力」ってものを「わざわざ」冗長させて定義したんだよ

何もわかってねーな科学者
リファクタリングし続けた後に、宇宙に存在する最後の1とは、時空のねじれによって出来る固体のみで
その時空のねじれを解けば1であった存在は0になり、文字通りなにもなくなる 世界の終わり
0487デフォルトの名無しさん2012/05/30(水) 18:16:30.43
コテが抜けてるよ
0488デフォルトの名無しさん2012/05/30(水) 18:35:37.43
躁病患った友人が似たような事言ってた
0489デフォルトの名無しさん2012/05/30(水) 19:26:23.54
ニュートラリーノがダークマターの正体なのか?
0490デフォルトの名無しさん2012/05/30(水) 20:12:32.98
beautiful codeであったな。
コードがなくなる話。
0491449, 4602012/05/30(水) 20:38:17.19
>>468
Float と Double の Enum インスタンスにおいて
enumFromThenTo 関数は次のように定義されている。

enumFromThenTo = numericEnumFromThenTo

numericEnumFromThenTo n n' m = takeWhile p (numericEnumFromThen n n')
  where
    p | n' >= n = (<= m + (n'-n)/2)   -- <-- 注目
      | otherwise = (>= m + (n'-n)/2)

numericEnumFromThen n m = iterate (+(m-n)) n

例えば [1.0,3.0..6.0] とやったら、6.0 以下の間は差分ずつ増やすのではなく、
「6.0 + 差分の半分」以下の間は差分ずつ増やす計算になってる。

つまり、7.0 以下の間は差分ずつ増やすので、最後は 6.0 ではなく 7.0 で終わる。

こういう仕様になっている理由は、本当のところは正直よく分らない。
一応理由として思いつくのは、浮動小数点による誤差の蓄積の問題を回避するため
ではないかという事。
0492デフォルトの名無しさん2012/05/30(水) 20:57:45.88
>>490
最後は唯の数式になるって話でしたよね
バグ0で何よりも高速に動作し使用メモリも0
0493デフォルトの名無しさん2012/05/30(水) 21:28:17.18
欧州ではコンピューターにプログラミングさせるのが今研究されてるとか
そんな話題があったな。
0494デフォルトの名無しさん2012/05/31(木) 01:03:20.68
(==) 1 1
1 == 1
上と下が同じなのは面白いなぁ。
04953372012/05/31(木) 02:37:13.13
(1 ==) 1
(== 1) 1

全部同じ (^^)
0496デフォルトの名無しさん2012/05/31(木) 07:43:22.77
すごいH、全部読んだ。
誤植が多少あったけど、日本語訳に違和感はなかった。

PerlとJavaScriptで自サイトを作ってる趣味プログラマーだけど、プログラミングの幅を広げようと
思い、プログラミングHaskell -> Real World Haskellの半分までを読んでから、すごいHを読んだ。

後半は全くの初心者には、やっぱりちょっと難しいかなと思った。
これから、Real World Haskellの残り半分を読みます。
0497デフォルトの名無しさん2012/05/31(木) 08:34:14.43
違和感ないけど、
直訳のままじゃねーの?って所が所々あったよ。
0498デフォルトの名無しさん2012/05/31(木) 09:23:22.24
蛇足な上に正しいとは言い難い訳注が多くて萎えた
0499デフォルトの名無しさん2012/05/31(木) 11:03:03.47
誤訳誤植は具体的に書いてくれるとたすかるにゃん
0500デフォルトの名無しさん2012/05/31(木) 11:11:02.75
...とか言って具体的に自分も書かないとアレなので一つ見つけたやつ:


p.385 誤:VirePatterns  正:ViewPatterns
0501デフォルトの名無しさん2012/05/31(木) 12:12:22.41
p19の下側
両方を含むリストは作れません。

ここはタプルだろ?
0502デフォルトの名無しさん2012/05/31(木) 12:13:09.98
p20
最下段
ジッパーみたいに一つのリストにします。

ここはタプルだろ?
0503デフォルトの名無しさん2012/05/31(木) 12:15:22.87
p22
bが斜辺より長いような不要なトリプルを調べないような

ここはaだろ?
0504デフォルトの名無しさん2012/05/31(木) 12:21:40.86
ここに書いてもフィードバックされる保証はないけどな
0505デフォルトの名無しさん2012/05/31(木) 12:26:11.65
>>501
"…ペアとトリプル両方を含むリストは作れません。このため、
ベクトルを表すにはタプルを使ったほうがはるかに有利です。"

何もおかしいことは言ってないと思うよ。

p.19上の方では図形を表すのに頂点のリストとして図形を表す試みとして
[[Int]] なんかを考えようとしてる。つまりベクトルをリストとして与えようとしてる。
この方式について検討するとベクトルの表現に使われてるリストは長さ
固定ではないので2次元と3次元のベクトル(頂点データ)が混在したリストが
出来てしまうという難点があることが指摘されている。

一方、頂点の表現としてリストの代わりにタプルを使うならば標準のリストは
homogeneousでなければならないという縛りのおかげで2次元と3次元の
頂点データが混在したリストは作れない事になり、コンパイラがはねてくれる。
[(Int,Int)] か [(Int,Int,Int)]のどっちかになるはずだからな。

そんなわけで
"…ペアとトリプル両方を含むリストは作れません。このため、
ベクトルを表すにはタプルを使ったほうがはるかに有利です。"
という事になる。
0506デフォルトの名無しさん2012/05/31(木) 12:30:42.06
>>502
タプルのリストにしてくれるという意味で「一つのリストにしてくれます」と言ってると思うんだけど。

んーあれだな、本気でわからないのか些細な説明省略を鬼首で騒いでるのかわからん。
前者なら真面目に相手するけど後者ならあんま相手にしたくないなぁ。

後者ならSICPの日本語訳がクソすぎる和田は日本語がわかってない
とか該当スレで騒いでるほうが賛同者多くて楽しいと思うよ。
0507デフォルトの名無しさん2012/05/31(木) 12:36:10.34
> 後者ならSICPの日本語訳がクソすぎる和田は日本語がわかってない
> とか該当スレで騒いでるほうが賛同者多くて楽しいと思うよ。
YA・ME・TE
SICPスレが機能停止しっぱなしでげんなりしてるんだから
0508デフォルトの名無しさん2012/05/31(木) 12:46:06.63
諸君、ホットなライブラリは何かね?
0509デフォルトの名無しさん2012/05/31(木) 12:55:15.84
> 正しいとは言い難い訳注
むしろこっちの詳細はよ
05105022012/05/31(木) 12:59:07.14
>>506
p21の
zipの使用例で作成されているのはタプルだから
一つのタプルにしますという意味のほうが
日本語として自然なのではないですか?

:t zip
zip :: [a] -> [b] -> [(a, b)]
と:tで見ると2つのリストを受け取って、返り値がタプルになってます。

表現方法で、
(a, b)はタプルで
[(a, b)]もタプルですよね。

0511デフォルトの名無しさん2012/05/31(木) 13:01:16.68
>>510
いやいや、(a, b)はタプルで[(a, b)]は 「タプルのリスト」だよ
■ このスレッドは過去ログ倉庫に格納されています