[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 10/27 09:49 / Filesize : 201 KB / Number-of Response : 803
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:28:13 ]
haskell.org
www.haskell.org/

日本語サイト
www.sampou.org/cgi-bin/haskell.cgi
www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 pc.2ch.net/tech/kako/996/996131288.html
Part2 pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 pc11.2ch.net/test/read.cgi/tech/1174211797/

・2chの仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。

252 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:43:41 ]
ああいう大規模データパラレルとマルチコアはあんまり関係ないじゃん。
>>249の話は伝聞なんで雲を掴むような話だけど。


253 名前:249 mailto:sage [2007/11/27(火) 11:48:13 ]
ありがとうございます。透過参照性がスレッドセーフというのはよく分かります。

遅延評価っていうのは、別に関係ないんでしょうか。何かそっちの話を聞いた
ことがあるんです。自分の初心者脳では、正格では無限のリソースを前提に
した関数を書けないが、Haskellのような言語だと記述可能、とか思ったのですが、
ちょっと頭悪いですか?w

254 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 12:16:38 ]
遅延評価や投機実行をうまく使えば、
CPUコアの利用効率を上げられますが、
それには頭のいいスケジューラが必要なわけで。

例えば、
www.fixstars.com/Grid/pukiwiki/index.php?MapReduce
にプチ解説があるようなstragglersの問題。

ただ実行順序が規定されてないので、
工夫する余地がまだまだ残されているとは言えると思う。
Erlangのような言語が、あまりpure functionalじゃないとはいえ、
一通りの実績を上げていますし。

また、プログラマがスケジューラに自由を与えるような
プログラミングスタイルを強制されているという見方もあると思う。



255 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 10:41:19 ]
F#のスレは毎日更新されてますが、こちらは静かですね・・・

関数型で今イチバン売れ筋なのはF#なんですかね。

256 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:36:48 ]
Haskell始めてから3週間目の今の感想。
・概念的にはMonadよりArrowのほうが分かりやすいんじゃないか?とか。
・Monadって何?って聞かれるとなんと答えていいかわからないが、
  Arrowなら『矢印をカプセル化したようなもの』と言える。
  あとは適当に結合演算とか普通の関数をアロー化する演算とか実装していけばおk。
  脳内のイメージも矢印をつないでいくだけだし。
  Monadをイメージしようとしてもなんかいまいちピンとこない……。
  bindにやる夫関数とか適当に名前を付けて無理矢理イメージしたけど。
・Monadのbind演算子(>>=)はm a -> (a -> m b) -> m bで非対称的。
  Arrowの(>>>)はa b c -> a c d -> a b dで比較的対称性があって気持ちよい。
・Arrowは『計算を結合』しているのが自明的に表現されてる。
  Monadは別にそうは見えない。……値と計算を結合なのか?意味わかんね。
・そもそも非対称な二項中置演算子はイマイチ気に入らない。
  リスト結合演算子とか`elem`とかは仕方ないけど、せめてあまり高階にしてほしくない
・Monadの計算部(a -> m b)は結構重要なパーツの一つなのに、名前が付いてない。
  だから『モナドを返す関数』としかいえねえ。
  しかもbindした後にはその返り値とは(型は同じだけど)別の奴が帰ってくる。無駄に混乱。
  その点Arrowは計算部がずばり『Arrow』。カプセル化されていて美しい。
・Monadは(>>=)は左から右へ流すように使えるが
  普通の関数は右から左。もちろんliftMとかも右から左。
  (=<<)も右から左。しかし関数を拡張して適用するという見方で見るとこっちが自然という謎さ。
  結局どっちからどっちへ読むべきか迷う場所が多く、思考停止してしまう。
  ArrowだったらArrowとして結合されている部分は左から右。
  普通の関数は右から左で思考が自然に切り分けられる。

257 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:37:32 ]
・Monadでポイントフリースタイルをやろうとするとかなりキモくなるよね。
  Arrowはまあ基本的にポイントフリーな感じがするし、普通の関数と分けられていいんじゃない?
・Arrowの構造を作ったりする関数は基本的にArrowだけを返す。
  Monadの関数はなんかリストとかに入ってたりして気味が悪い。モナドのリストって、最中十個入りじゃないんだから。
・Arrowの構造を作る関数はキチンと構造を作ってるように見える。
  Monadの場合は解読に時間がかかる。なんのためにこんな書き方をしてるんだろうとか……。
・ArrowでStateを自作してみたら比較的分かりやすかった。
  Monadのは今見ても訳が分からん。というかMonadの対象が関数って何だよ。
・Monadに慣れ親しんでる人はMonadを扱うのに苦労しないだろうから、
  簡単なものなら短い表記が出来るMonadのほうがいいんだろう。
  しかし、初心者にいきなり教えるのならArrowのほうが直感的。
  ポイントフリースタイルを使いまくってムツカシイことさえしなければ。
・Arrow講座みたいな入門編とかでArrowを書くとき、
  関数がそのままアローになるからってやたら省略しないでいただきたい。
  アローな部分と普通の関数の部分が綺麗に分かれてるのがいいんだから……
  それにarrってやっておけばその部分は一般のArrowでも使えるし。
  SF f >>> SF g = SF (f >>> g)とか出来るからそういう書き方が出来ること自体はありがたいが。
・arr.uncurryとかarr.constってよく出てくるけどそういう関数はないのか……
・Arrow関係ないけどデータ構築子と型構築子が同じ名前って混乱するな。時々イラっとくる。
・aとかbとか何を表してんのか直感的じゃねえよ。型変数だったり、引数だったり……
  fって名前だから関数かと思いきやArrowだったり。
  ネーミング規約みたいなものはないのか……
  Arrowが引数で来たときの名前の付け方とかおもいつかねえけど。
・そろそろふつける買おうかな……。
・初心者のくせに身の程をわきまえない長文失礼しました……

258 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:42:34 ]
>>257
> ・Monadでポイントフリースタイルをやろうとするとかなりキモくなるよね。
もう少し他人のコードを読んでいくと感覚がつかめてくると思いますよ

259 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:11:18 ]
モナドのリストを返す関数なんてそんなに使うか?

しかし「モナドのリスト」って言い方は何か違和感あるな。
[IO]みたいなのを想像してしまう。

260 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:16:50 ]
俺のポリシーではIOはmain内でしか使わない



261 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:25:06 ]
>>258
把握。

>>259
ライブラリを見返してるけどそこまではなかったかも……。
初めて見たときに比べればそこまで疲れないし。
やっぱり慣れの問題なんだろうか。『モナドを返す関数』が普通の関数と同じ地位にいるのがイマイチだけど。
引数の数でバージョンがいくつもあったりするのもなんかいただけない。
でもやっぱり慣れれば気にならなくなるんだろうな……。
なんかJavaやったらCのポインタが理解できた時の気持ちを思い出した。(違うか)

262 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:30:02 ]
モナドなんてステートとIOとリストとMaybe以外はほとんどつかわねーぜ

263 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:30:44 ]
IORefもつかうか。

264 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:38:36 ]
a0 -> a1 -> ... -> m bの形の関数を呼ぶのにはmonadic functionという名前が使えるはず。
日本語だと「モナドな関数」か。

俺のコードの大部分はモナドな関数になってるな。
普通の関数より書きにくいから嫌なんだが、変更に強いコードにするために仕方なく。

265 名前:デフォルトの名無しさん [2007/12/08(土) 12:05:09 ]
やさしいHaskell入門での質問です。

www.sampou.org/haskell/tutorial-j/classes.html
> (ここで、同値性といっているのは、「値同値性」のことです。
> 対照的な概念としては、「ポインタ同値性」というのがあります。
> たとえば、Java 言語の == です。
> ポインタ同値性は参照透明性を持ちません。
> それゆえに純粋な関数型言語とは相性がよくありません。)

なぜポインタ同値性は参照透明性を持たないのですか?

266 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 12:26:42 ]
>>265
ポインタ同値をテストする関数eqがあったとすると、
let v = [1,2] in eq v v
はTrue。一方、vを展開して
eq [1,2] [1,2]
とするとFalseになるかもしれない。
参照透過って言うのはそもそも、こういう展開をしても
プログラムの意味が変わらないってことだから、
eqによって参照透過性が破られたと言える。

267 名前:265 mailto:sage [2007/12/08(土) 12:37:55 ]
>>266
おー!なるほど。わかりやすい説明ありがとう。
[1,2] が複数箇所に出現する場合、メモリ上に別々に配置されるかもしれないわけですね。
勉強になりました。

268 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 15:29:39 ]
『A a』っていう表記が使われる場所によって
Aは型構築子、全体は多相型、aはパラメータ
Aはデータ構築子、全体はデータ構造、aはその中身
aは型クラスAのインスタンス、何かの型の一部
って変わるのがちょっとわかりにくいね。もうちっとなんとかならんか。

269 名前:デフォルトの名無しさん [2007/12/09(日) 21:35:19 ]
Haskell勉強してなくてよくわからないんですが、
乱数生成器をsplitしていくつかにしてseed固定で乱数を作れといわれました。
どう作ればいいんでしょうか?
初歩的な質問だったらすみません。

270 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 00:51:19 ]
日本語でおk



271 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 15:07:15 ]
無限リストって便利だけど、末尾を正格に要求する関数について型安全じゃないよね。
でも無限リスト型を再定義するとリストに関して作ったすべての関数について委譲関数を作んなきゃいけなくて現実的じゃない。
結局これは妥協するしかないのか?それともなんらかのテクニックで回避できる?

272 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 10:46:48 ]
>>271
日本語でおk

273 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 10:52:25 ]
>>271
俺の知る限り、妥協するしかない

274 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:46:45 ]
>>271
評価がとまらないだけで型安全だよ。

275 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:17:06 ]
そう言えば、厳密に言うと無限ループでも型安全なんだな
でも全域関数でない関数が厄介なことは事実だから、何か呼び名が欲しい

276 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 17:14:07 ]
>>275
よくわかんないけど、チューリングの停止問題のこと言ってるの?

277 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 17:30:25 ]
>>276
いや、Haskellには失敗し得る関数があるじゃん
例えば、headはリストが空の時例外を飛ばすし、
lengthは無限リストに適用されたら終わらない
一方で、例えばdropみたいに、引数に未定義値が含まれない限り、
あらゆる引数に対してちゃんと値をもどす関数もある
だからこの二つを区別できるように、短い呼び名があれば便利だな、ということ
「型安全」という言葉を使いたくなるけど、これは>>274の言う通り誤用だし

278 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 17:40:12 ]
>>277
そういう一般的な関数のことを部分関数というんじゃないかね

279 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 18:03:01 ]
>>278
全域関数も部分関数の一種だから、とか考えてたけどカジュアルに使う分には問題ないか
グダグダですまん

280 名前:271 mailto:sage [2007/12/11(火) 19:46:50 ]
いや、同じ構造のデータ型でも、
型システムで『無限リストかそうでないか』をカッキリ分けられたら、
そっちのほうが型安全にならないかな?と思って271を書いたんだけど。

たとえば幽霊型とか使ってそういうのが解決できないかとか思ったんだけど、
それじゃ現行の関数を活かせないし、あんまり意味ないなあ、と。



281 名前:デフォルトの名無しさん [2007/12/12(水) 01:00:18 ]
>>280
言いたいのは、型システムを使って、
無限リストのフロー解析をして、
プログラムの停止性、正当性などを知ることができないかってこと?
それならリストの有限性の抽象解釈をやるってことになると思うけれど。

282 名前:271 mailto:sage [2007/12/12(水) 01:16:01 ]
>>281
違う。返り値が無限リストの関数で、その関数の型を明示しておけば、
無限リストに対して使ってはいけない関数の引数にした時に型エラーになるようにしたい。
まあ無理っぽいのでもう諦めてるけどな。

283 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:43:32 ]



※起こりえる全てのリストのうちどれが有限リストかを確かめることは
 無限に長いリストに対して演算を行うことと同じ


ってだれかが言ってた

284 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 07:57:59 ]
だから誰も自動チェックしてくれって言ってるわけじゃないじゃない……
静的に型推論してくれるんだから、
enumFromにInt a => a -> [a] Inf
って書けるとして
lengthに[a] Ltd -> Int
みたいに指定したらコンパイルエラーになって欲しいとかそういう問題だって。無理だけど。

285 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 08:17:31 ]
enumFromよりrepeatのほうが良かったな(repeat :: a -> [a] Inf)
あとコンパイルエラーになって欲しいのは『length.repeat x』みたいな文脈な。

286 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 09:39:03 ]
strictな言語なら、force/delayみたいに陽に指定するんだろうから、
>>281の言うような方法も効果を挙げるだろうが、
lazyな言語だと、リストを生成する全ての関数が、
無限リストを返す可能性があるので>>276でFAだが。

[1..]が無限リストであることも、解析が必要になるし。
うまくできるケースもあるが、希少すぎる。

287 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 11:18:26 ]
>>271が見事に無視されててワラタ

288 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 11:39:59 ]
言葉の使い方間違ってるよな。

289 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:16:57 ]
なんというか残念賞な言語だな。
関数言語としてのおいしいところは全てC#3.0に持っていかれてしまった。

290 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:26:09 ]
それはギャグのつもりでいっているのか



291 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:27:04 ]
>>289
関数言語?w
C#3.0?w

292 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 18:12:14 ]
>>289
F#じゃなくて、C#かよ・・・

293 名前:Wadler [2007/12/12(水) 22:26:38 ]
Haskell初心者です。
a->[a]という(型の)monad(仮にDとしましょう)をつりたくて困っています。
どなたか教えてください。
とくにDのmapFにあたる関数も教えていただけれありがたいです。

294 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:11:10 ]
>>293
はい?

295 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:12:01 ]
とりあえず、日本語でおkと言ってほしいのですか?

296 名前:デフォルトの名無しさん [2007/12/12(水) 23:13:50 ]
>>295
日本語でおk

297 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 00:02:02 ]
よくわからんが
data D a = mkD (a -> [a])
instance Monad D where ...
ってことか?
あとmapFってなんだ?fmap?

298 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:20:15 ]
>>293
よくわからんが、釣りってことか?

299 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:23:14 ]
>>297
mkDはなぜ先頭が大文字になってないんだ?
受理されないだろ。

300 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:25:29 ]
なんなんだ?
近頃Haskellerの質の低下が激しすぎるぞ



301 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 02:15:06 ]
昔からです


302 名前:デフォルトの名無しさん [2007/12/13(木) 02:20:10 ]
割と玉石混淆なイメージだね

303 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 02:23:35 ]
暇つぶしで弄ってる学生がここで暇を潰しているイメージ

304 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 08:17:19 ]
>>299
>>303
そのとうりですすいません……

305 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:07:28 ]
>>268-304
この辺からおかしくなってきてる

306 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:49:46 ]
なんにしてもHaskellerが増えるのは喜ばしいことだ

307 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:51:12 ]
rubyみたいになるぐらいなら少なくてもいい

308 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:58:02 ]
少数精鋭投入ならこれでいいだろうけど
大人数投入用にコードもデータもブラックボックスにできる仕組み(命令型のオブジェクト指向同等?)誰か作らないのかな

309 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:07:09 ]
大人数投入っていまどき流行らないよ
人海戦術でプログラミングする時代は終わった

310 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:23:49 ]
>>308
ブラックボックス化ってどんなの?
カプセル化なら標準のモジュールシステムがあるけど



311 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:28:42 ]
>>308
そんなにオブジェクト指向がやりたいなら
つ O'Haskell

312 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:30:17 ]
でも、そもそもオブジェクト指向は型理論に包含されるものだから・・・

313 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:31:50 ]
デバドラ屋と少数のhaskellerがいればたいていのプロジェクトは成功する
・・・夢を見た

314 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:14:01 ]
>>308
そもそもhaskellにはオブジェクト指向は不要なんですよ。
というのも、関数の再利用できる範囲がCやらjavaやらとは桁違いに大きいのが特徴だからです。


315 名前:デフォルトの名無しさん [2007/12/13(木) 21:20:25 ]
Haskellでモジュールつかってカプセル化してコード書いている人あまりいないような気がするんだけど気のせいかな。


316 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:22:03 ]
なにを根拠に?

317 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:35:09 ]
>>315
そもそもhaskellを使って実用アプリを公開してる人があんまりいないんだから
仕方ないだろ。

318 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 22:49:47 ]
Haskellって関数型言語の勉強用じゃないの?

319 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:10:30 ]
それだけのための言語だとどうして思うのですか?

320 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 00:39:15 ]
GHC 6.8.2が出てるね。
GHCiの機能追加がメインっぽい。



321 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 00:53:25 ]
HaskellはOOじゃなくて、
generic programing指向だからなあ。
Genericsの世界では最強認定を受けてる。

322 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 01:21:07 ]
OfficeがHaskellで書きなおされるまで俺はその有用性を認めない。

323 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 02:29:17 ]
スケーリングのための言語じゃないんだよな
工場制手工業ならOOであることやポピュラリティ(みんなが使ってること)は必須だ。

324 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 13:26:48 ]
別に必須じゃないし。
今流行ってること取り入れたってどうせちぐはぐになるだけ。

325 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 13:28:05 ]
っていうかさ、人海戦術の奴隷商売に慣れすぎていて、理性的な考え方を失ったお猿さんですか?

326 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:15:06 ]
ポピュラリティが必須というのは分かるけど、OOが必須というのはおかしくね?
OOは一手法に過ぎないんだから、もっと良いものが知られればそっちが使われるようになるだろ

327 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:21:57 ]
OOは現時点でのポピュラリティの1つって事ならわからなくもないけど、
わざわざ分けて必須って言うほどのものではないな。

328 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:54:59 ]
つーか、OOはstableなlibrary構築にはいいんだけど、
意外とreusabilityが悪いから、
generic programmingが注目されているのが現状です。
Haskellのtype classとかC++のconceptみたいなやつ。

C++はtemplate/traitsでやってましたが、ちょっと非力なので、
Haskellのtype classそっくりの"concept"が入る事になりました。


329 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:59:18 ]
実際これはOOと比べてどうなんだとか思ってたんだけど
実際使ってみたら意外とオブジェクト指向のメリット包含しててSUGEEとか思った

330 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:59:57 ]
>>328
日本語でおk



331 名前:328 mailto:sage [2007/12/14(金) 15:35:51 ]
日本語ですよ?

332 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 15:45:42 ]
決して英語が読めないわけではないが、
不自然だ
読みにくい
目が痛い

333 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 16:23:51 ]
理論はそのとおりなんだが、残念だがそんな理論を理解出来る人間は少数派なんだよ。
共産主義みたいなもん。高尚な理屈よりも明日パンが、今日のバグを潰せるかが問題なわけだ。

いいじゃない。Haskellは芸術的な小物を個人で作るのに向いてるってことで。



334 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:07:50 ]
>>333
多数のバカよりも少数の優秀な人間でプログラミングしたほうが安く早くできます。

335 名前:328 mailto:sage [2007/12/14(金) 17:08:28 ]
>>332
そういう意味か。すまん

>>328については、
journals.cambridge.org/action/displayAbstract?fromPage=online&aid=715036
で。探せばピィーディーエフも見つかるようです。

336 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:09:42 ]
>>333
どの辺の理論のことを言ってるの?

337 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:10:46 ]
>>335
不自然だ
読みにくい
目が痛い

お前は日本語文書の常識を勉強したほうがよさそうだな

338 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:16:49 ]
どっちにしろ、今みたいに人気がなくて、そのせいでライブラリも
周辺環境も整っていない状況だと、小物を個人で作るのすら満足にできん。

339 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:43:43 ]
wxhaskellが使いやすい
が、6.8系用が出てない・・6.6系は非公式

340 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:52:21 ]
いまだと.NETやJavaVMに乗せちゃえばライブラリ不足は一挙に解決だな。



341 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:56:18 ]
>>339
普通にdarcs版をビルドできないか?

342 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:56:46 ]
>>340
なんで?

343 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:53:13 ]
conceptの導入をもってHaskellはC++のサブセットになります
つまりこれで全ての言語がC++のサブセットになるというわけです

344 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 20:54:45 ]
本日をもってHaskellはウジ虫を卒業する
本日からHaskellはC++のサブセットである
兄弟の絆に結ばれる
Haskellのくたばるその日まで
どこにいようとC++は貴様らの兄弟だ
多くはベトナムへ向かう
ある者は二度と戻らない
だが肝に銘じておけ
C++は死ぬ
死ぬために我々は存在する
だがC++は永遠である
つまり―――Haskellも永遠である!

345 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 07:46:00 ]
初心者質問です。

test = flip fun1 . fun2

の場合、

1. test = flip (fun1 . fun2)

2. test = flip (fun1) . fun2

どっちの意味なんでしょうか。(.)が使用されている場合、flipが対象とする
関数がどこまでかかるか分かんなくなってしまいました。

346 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 08:05:18 ]
(.)よりも関数適用のほうが優先度が高いから答えは一応 2.なんだけど、
括弧の付け方としては (flip fun1) . fun2 のほうが正しい。

347 名前:345 mailto:sage [2007/12/15(土) 14:13:25 ]
>>346
ありがとうございます。合成関数全体にかかるのかと思ってました。
もう少しいいでしょうか。

ja.doukaku.org/comment/4621/

にある、

attachIndex = map (uncurry (flip zipWith [0..] . ((,) .) . flip (,))) . zip [0..]

がよく理解できないのですが、

(flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc"

の部分は

zipWith (((,) .) $ flip (,) 0) [0..] "abc"

と考えられると思うのですが、何ででしょうか。(flip zipWith [0..] . ((,) .) . flip (,)) の
第一引数"0"がまず部分適応されてflipされるところが理解できません。


348 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 14:41:26 ]
(flip zipWith [0..] . ((,) .) . flip (,)) 0
から始める。まずこの式は(A . B . C) 0という形だからA (B $ C 0)に直せて、
flip zipWith [0..] ( ((,) .) $ flip (,) 0 )
これはflip A B Cという形だからA C Bと書き換えられて、
zipWith ( ((,) .) $ flip (,) 0) [0..]

349 名前:345 mailto:sage [2007/12/15(土) 15:29:30 ]
>>348
ありがとうございます。しかし、まだちょっと理解できませんw

1.第一引数"0"の部分適応を行う
2.flip する

の順番の根拠がよく分かりません。

(flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc"

の第二引数が最後に適応されるのは何故でしょうか。

あと、これは変な質問なんですけど、

(flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc"

の形を慣れた方は直接記述できちゃうんでしょうか。それとも、

zipWith ( ((,) .) $ flip (,) 0) [0..] "abc"

の形から変形させていく形でプログラム書いていくんでしょうか。


350 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:37:45 ]
>>349
Haskellでは基本的にどんな順番で簡約しても結果は同じだから、分かりやすい順序でやっただけ。
もっと実装に即した順序でやることもできるけど、面倒なだけな気がする。

>の形を慣れた方は直接記述できちゃうんでしょうか。
俺はできない。読むのも二分くらい掛かった。



351 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:42:07 ]
あ、でもそのnobsunという人は日常的にそういうコードを書いてるみたいだから、
たぶんすらすら書けるんだろう。

352 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:46:11 ]
俺思うんだけどさ、デザインパターン中毒みたいにポイントフリー中毒ってあるんじゃないかなあ。
そーいうのって可読性犠牲にしてまでやるものなのか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef