トップページtech
981コメント365KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2014/07/27(日) 13:46:32.03ID:deqguEnh
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
http://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part25
http://peace.2ch.net/test/read.cgi/tech/1393313450/
0357デフォルトの名無しさん2014/11/06(木) 08:21:54.61ID:+3ioqTnw
大人しくconduitとか使っとけ
0358デフォルトの名無しさん2014/11/06(木) 11:06:19.54ID:6vgYQ4+I
conduitってなんて読むの?コンドゥイット?コンドゥーイット?
0359デフォルトの名無しさん2014/11/06(木) 11:27:34.28ID:el8FQLIt
>>355

な、なるほど! 腑に落ちました。ありがと
0360デフォルトの名無しさん2014/11/06(木) 11:46:39.88ID:el8FQLIt
>>356
メモ化のことを言ってるんですね。
計算を同じサンクに結びつければ、計算は無駄に行われない。と。

ところで昨日あれから考えてて、もっと良い例を思いついたんですけど、
lazy :: a -> a
lazy a = (\() -> a) $ ()
を使えば、正格データを遅延に変えられますよね?
happyBirthDay :: Text.Strict
happyBirthDay = "Happy Birth Day " ++ lazy "to me..."

>> print $ head 16 happyBirthDay
Happy Birth Day

理解がバージョンアップされました。
「Haskellではナントカ生成機はナントカを弱頭部標準形に包むだけで実現できる。生成機を作る目的でレガシー言語のようにIO計算を作る必要はない。呼び出しをサンクにまとめればOK.」
0361デフォルトの名無しさん2014/11/06(木) 12:19:08.73ID:ki6zkhTW
>>358 水路 ttp://ejje.weblio.jp/content/conduit
0362デフォルトの名無しさん2014/11/06(木) 20:34:57.00ID:MUH9Buff
>>361

 ンデュェットか
0363デフォルトの名無しさん2014/11/06(木) 21:08:19.53ID:j9zZcG2n
コンジットでいいだろうが
0364デフォルトの名無しさん2014/11/07(金) 02:21:57.92ID:9j/jQs98
[´・_ オタクアニメの乳首は不自然すぎるぽよ
0365デフォルトの名無しさん2014/11/07(金) 06:23:52.22ID:QrO3W2z+
>>364
なりすまし死ね
0366デフォルトの名無しさん2014/11/07(金) 07:24:16.12ID:9j/jQs98
[´・_ 女の子の成長記録ってめっちゃ興奮するぽよ
0367デフォルトの名無しさん2014/11/07(金) 09:30:21.34ID:LIDPNOLM
田中先生は割と作品名具体的に挙げるからエミュするならその辺の知識押さえとかないと難しいぞ
0368デフォルトの名無しさん2014/11/07(金) 09:41:06.60ID:XgnNytLv
これなりすましって言うのか?w
0369デフォルトの名無しさん2014/11/07(金) 10:37:06.38ID:w9r+UzpW
手持ちのコードのdoの return を
return $! に代えたら、20%も高速化したんですけどwwww

前にtanakhさんが foldlは壊れている、正しくはfoldl'、っていう趣旨の翻訳記事を書いてたじゃない。それと同じように、return = (return $!)
で置き換えるべきなの?
0370デフォルトの名無しさん2014/11/07(金) 10:55:58.91ID:CYOEAapJ
WHNFまで評価しちゃっても構わない値ならそうだろうよ
0371デフォルトの名無しさん2014/11/07(金) 15:22:50.72ID:1clwNr+d
評価順序が変わると計算の意味が変わるので自分が何をやっているのか理解しないと
0372デフォルトの名無しさん2014/11/07(金) 16:32:32.22ID:w9r+UzpW
>>370
>>371

あ、わかった

print =<< (head . reverse <$> (return $! reverse [1..] ))
0373デフォルトの名無しさん2014/11/07(金) 17:00:51.66ID:5EqfDet1
この顔文字の人何でこんなに粘着されてんの?
0374デフォルトの名無しさん2014/11/07(金) 17:06:11.41ID:6pO9x6h7
returnの方が良いケースが5%、(return$!)が良いケースが25%、どっちでもいいのが70%
くらいだと思う
0375デフォルトの名無しさん2014/11/07(金) 17:06:49.99ID:B3DaCLD4
実は本人の確率
0376デフォルトの名無しさん2014/11/07(金) 18:01:23.96ID:7mel9rlk
レガシー言語はポインタ。Haskell はサンク。

難しいけど、抑えとかないと致命的になりうるんですよね。
0377デフォルトの名無しさん2014/11/07(金) 19:55:25.73ID:ehRLeVcR
foo = seq foo ('a':foo)
main = putStrLn (const "fooはthunk" foo)
0378デフォルトの名無しさん2014/11/08(土) 00:22:16.94ID:fHlqfJbD
haskellって遅くない?コンパイル後のファイルもでかいしさ
0379デフォルトの名無しさん2014/11/08(土) 00:41:10.20ID:vifAICnG
チューニングした上で言ってるのか?
0380デフォルトの名無しさん2014/11/08(土) 01:34:30.44ID:J9TuEpTu
>>379
コンパイル後のバイナリサイズはチューニングしようがなんだろうがデカいままだろうが
0381デフォルトの名無しさん2014/11/08(土) 03:09:20.05ID:vifAICnG
jhc 使えよ。
0382デフォルトの名無しさん2014/11/08(土) 11:41:08.63ID:LW7xiPF6
>>381
教えてくれてありがとう。言われなきゃ絶対気づかなかった‥ これは良さそうだわ。
0383デフォルトの名無しさん2014/11/08(土) 12:36:51.72ID:n7vP28K6
HaskellでAndroidアプリできる話はどうなったんだ
0384デフォルトの名無しさん2014/11/08(土) 13:19:08.56ID:u0osiKmL
"出来る"ってとこから進んでない気がする
0385デフォルトの名無しさん2014/11/09(日) 00:17:02.01ID:EqHSZtCW
ところでFRPのGUIアプリって何故か無いよね。理屈では可能だと思うんだけど。なんでだ?

> Android
外国の誰かがSodium でゲーム作ってたような。
0386デフォルトの名無しさん2014/11/09(日) 10:12:37.51ID:mRPDV88W
Haskell って意外と読みやすいコード書くの難しくない?
リスト操作やタプルを減らしてdo記法とか抽象度あげても、今度は何やってんだか分かんなくなるっていうか
0387デフォルトの名無しさん2014/11/09(日) 11:35:26.86ID:QOYwRKxw
コードは読まない
型しか見ない
キーボードを見ないで画面だけ見るのと同じ
0388デフォルトの名無しさん2014/11/09(日) 12:02:01.62ID:EqHSZtCW
悔しいが同意せざるを得ない。
Haskell は書くのは天国だが読むのは地獄。バグが出たなら書き直す。
0389デフォルトの名無しさん2014/11/09(日) 12:17:37.24ID:QOYwRKxw
書くのが天国だと思うなら
読まなくても再発明できる情報を最大限に脳に焼き付けてから実際のコードを読めばいい
大体予想通りのことしか書いてないから一瞬で読める
0390デフォルトの名無しさん2014/11/09(日) 12:32:22.24ID:GNDt7Bdm
そういう境地に達することに馬鹿馬鹿しい努力の時間使うよりもっと有意義なことしたい。
0391デフォルトの名無しさん2014/11/09(日) 15:11:32.03ID:itJxEnAR
俺は、デバッグの時は、QuickCheck で怪しい関数を特定したら、
あとはチラシの裏にでも手で簡約してみる。

これを効率よくやるために、可能な限り徹底的に純粋関数で計算する。
例えば、do の中で IO 入力があれば、入力された値をそこでゴニョゴニョせず、直ちに純粋関数に渡す。
たとえ超単純な計算でも、純粋関数に渡すクセをつけておく。

do の中でゴニョゴニョした方がソースコードの見通しが良いのなら、
バグが無いと確信できたあとでリファクタリングすればいい。

あと、デバッグが無いと確信できるまでは、関数内関数も使わない。
局所的にしか使わないちょっとした関数も全部トップに書く。
0392デフォルトの名無しさん2014/11/09(日) 15:34:11.22ID:ynWG2Vzt
Haskellが読みやすくするのはコードではない
Haskellが読みやすくするのは計算の構造です
0393デフォルトの名無しさん2014/11/09(日) 15:38:36.40ID:Wi6Wj++H
読みやすくないコードで書かれた計算の構造が読みやすいのか
0394デフォルトの名無しさん2014/11/09(日) 15:39:29.40ID:81qYhIbT
巷で喧伝されている関数型言語導入で生産性上がるというのは
関数型言語こねくり回せるくらい頭いいやつだけで開発するからってオチなのかもしかして
0395デフォルトの名無しさん2014/11/09(日) 15:48:17.92ID:ynWG2Vzt
>>393
コードと計算の構造は抽象度が違うので、同時に読みやすくなるということの方が例外でしょう
0396デフォルトの名無しさん2014/11/09(日) 15:54:14.02ID:ynWG2Vzt
>>394
生産性が上がるのは、関数型だからではなく、クロージャを代入できて値が不変にできるからではなかろうか
0397デフォルトの名無しさん2014/11/09(日) 17:10:26.68ID:TGkUuDSg
>>391 すげー参考になるわ。関数内関数はなるべく使わない。メモメモ

>>394
主観だけど、今書いてる100行のコードは、Objective-Cで書いてたころなら1000行くらい掛かってたと思う。ただし、コーディングに掛かる時間は同じくらいなので生産性は変わらず。
0398デフォルトの名無しさん2014/11/09(日) 17:18:22.10ID:ynWG2Vzt
>>397
今書いてるコードの行数ではなく、3ヶ月後に自分が書いたコードが保守できるかどうかで判断すべきかと…
0399デフォルトの名無しさん2014/11/09(日) 18:52:57.83ID:ZFAvQIio
>>345
SPJ先生の"Wearing the hair shirt - A retrospective on Haskell" に遅延評価の功罪について言及があるね
http://research.microsoft.com/en-us/um/people/simonpj/papers/haskell-retrospective/HaskellRetrospective.ppt

また、letとwhereなど記述に幅を持たせたのは大成功だったとも。
0400デフォルトの名無しさん2014/11/09(日) 18:54:03.25ID:ZFAvQIio
みんなもチクチクする毛糸を着よう
0401デフォルトの名無しさん2014/11/09(日) 19:00:10.66ID:ZFAvQIio
>>380
strip -p --strip-unneeded --remove-section=.comment
すると半分くらいになるよ。
0402デフォルトの名無しさん2014/11/09(日) 21:27:10.96ID:QOYwRKxw
>>398
それは記憶力の問題というより逆境に弱すぎる気がする
少し調子が悪くなっただけで狼狽して何もできなくなるパターン
0403デフォルトの名無しさん2014/11/09(日) 21:39:01.73ID:VKU6H7RB
精神論はよせ。肝要なのは持続可能な開発だ。
0404デフォルトの名無しさん2014/11/09(日) 21:44:21.85ID:QOYwRKxw
少しくらい忘れても致命傷にはならないから落ち着けと言ってるんだよ
絶対に記憶しろっていう方が精神論だ
0405デフォルトの名無しさん2014/11/09(日) 22:00:55.96ID:VKU6H7RB
誰がそんな事言った
0406デフォルトの名無しさん2014/11/09(日) 22:08:25.42ID:itJxEnAR
致命傷にはならなくても、思い出すだけでかなり時間とられたりするからな。
主要な関数だけでもドキュメントは書いておいた方がいいぞ。

引数と戻り値の意味、それとは別に計算のごく簡単な流れ。
これを書いておくだけで、後ですげー助かる。
過去の自分に感謝したくなるから。
0407デフォルトの名無しさん2014/11/09(日) 22:20:45.90ID:mbLWZpZk
書いたときは覚えてられると思っちゃうんだよな
0408デフォルトの名無しさん2014/11/09(日) 22:49:35.66ID:EqHSZtCW
>>399
ありがたい。勉強になるわ

>>401
マジ助かる! でも俺の環境(OSX)のstripコマンドにそのオプションはない… 代替を探してみる。
0409デフォルトの名無しさん2014/11/09(日) 22:50:21.62ID:9LyR+5oz
>>402
何を言ってるんだお前は
0410デフォルトの名無しさん2014/11/09(日) 22:56:40.68ID:EqHSZtCW
> 少し調子が悪くなっただけで狼狽して何もできなくなるパターン

擁護してくれた人には悪いんだけど、これはあるかも。
三ヶ月前のコードは読めない。バグらしき挙動を発見しても、直そうとして大量のtrace文を突っ込むことになる...
でも、書き直すと必ず短くて、わかりやすくなるんだよ。

要は設計がショボかったんだと思う。
0411デフォルトの名無しさん2014/11/10(月) 22:29:34.56ID:7cnYJA4z
毎日1万行程度のコードを書いてて、それを3ヶ月後まで覚えていられるなら、プログラミングだけではなく、もっと別のことでも一流になれると思う
0412デフォルトの名無しさん2014/11/10(月) 22:37:14.36ID:VLesXqGp
毎日1万行てどこのバケモンだよ
0413デフォルトの名無しさん2014/11/10(月) 22:40:26.50ID:7cnYJA4z
え?
0414デフォルトの名無しさん2014/11/10(月) 22:41:29.93ID:A0UHj1LA
>>412
C言語で3000行/日 の人はいるね。
http://d.hatena.ne.jp/softether/20070324
0415デフォルトの名無しさん2014/11/10(月) 22:51:55.41ID:i/Dk2pnq
>論理的な思考をしないで欲しいという意図を説明するために書くのだから、論理的に間違っている点については目をつぶって欲しい。


詭弁じゃね?
0416デフォルトの名無しさん2014/11/10(月) 23:05:05.03ID:a0CrBmRg
>>415
スレチ。っていうか本人に言えよw

その記事は要は、意識的に考えずに指の動くままに、フロー状態で書きまくれ、ってことだろう。
トライ&エラーでコーディングしてコンパイルエラーが出たりバグが出たりしてつまづいてやる気萎えたら無理だと思うけど、
Haskell には、前者の為にhole、後者の為に型チェックとQuickCheckがあるからね。

関数型は脳汁でるしな。

そういう状態には到達しやすいかも。
0417デフォルトの名無しさん2014/11/10(月) 23:05:58.36ID:f9SpYH13
覚えている必要はないんだよ。

必要なときに思い出せるようなキッカケが用意されていればいいんだ。
0418デフォルトの名無しさん2014/11/10(月) 23:09:48.57ID:7cnYJA4z
3ヶ月前なんて、どの会社のオフィスでコーディングしてたかすら手帳なしでは思い出せないよ
0419デフォルトの名無しさん2014/11/10(月) 23:27:16.41ID:NkZmj/dK
ソースを読めないユーザーが、開発者が知らないバグを知っていることもある
1万行を思い出す前にまず1行も読まなくてもわかることを全部思い出すのだ
0420デフォルトの名無しさん2014/11/10(月) 23:33:47.24ID:a0CrBmRg
>>417
でもリファクタリングすると、前のモデル忘れちゃわない?
3回くらい書き直した後、日にちが経って思い出そうとすると、最初に出てくるのは一番古いヤツだったり。ああ、あの後書き直したんだっけ、ってなる。

ひょっとして上の登氏みたく、設計は一発でバチっと決められちゃうタイプ?

>>418
意外とHaskell の仕事ってあるんだね。金融系?

>>419
? コードを思い出すんじゃなくて、抽象モデルを思い出せ、ってこと?
0421デフォルトの名無しさん2014/11/10(月) 23:35:00.73ID:feZKSxME
金融系だけで使われているうちは、まだまだだなと思う。
博徒専用言語というイメージだから。
0422デフォルトの名無しさん2014/11/10(月) 23:37:48.20ID:7cnYJA4z
経験上、自分が3ヶ月以上前に書いたコードは、他人が書いたコードと変わらない
ゆえに、他人が書いたコードを保守のしやすさこそがその言語の生産性といえる
0423デフォルトの名無しさん2014/11/10(月) 23:39:06.85ID:7cnYJA4z
>>420
大学からの下請け
0424デフォルトの名無しさん2014/11/10(月) 23:50:29.86ID:a0CrBmRg
おもしれー

昨日みた記事では確か、Haskell の生産性はTypeScript、Scalaに次いで3位って話だったけど(ソース失念)、
> ゆえに、他人が書いたコードを保守のしやすさこそがその言語の生産性といえる
その観点でみると、Haskell はどれくらい良い?
0425デフォルトの名無しさん2014/11/10(月) 23:56:00.83ID:7cnYJA4z
Haskellの生産性は年単位でみると低かった
理由は、コロコロと根幹部分のモジュールが変わったから

月単位では高い
理由は、同じ機能を実現するためのバリエーションが少ないから
0426デフォルトの名無しさん2014/11/11(火) 00:05:51.80ID:jUxCk/rZ
>>420
> >>417
> でもリファクタリングすると、前のモデル忘れちゃわない?

だから、忘れちゃっていいんだよ。

普通は git や Subversion を使ってるから、必要な時は思い出せる。
ドキュメント付いてれば尚更楽に思い出せる。
そういう、思い出すためのキッカケ(仕組み)を予め用意しておくんだよ。

ただ、ドキュメントがヘタッピだとヤバいな。
0427デフォルトの名無しさん2014/11/11(火) 00:09:57.47ID:AaX4/UOm
言語に順位をつける馬鹿馬鹿しい作業のせいで
言語非依存の技術を身につける機会がどれほど失われていることか
0428デフォルトの名無しさん2014/11/11(火) 00:11:32.49ID:RW6n7dRV
どれだけ自分が信用できないかは、議論するまでもなく、今、3ヶ月前のコードを見ればはっきりする
0429デフォルトの名無しさん2014/11/11(火) 00:12:45.97ID:RW6n7dRV
>>427
言語非依存の技術がなければ、言語に順位は付けられませんよ
0430デフォルトの名無しさん2014/11/11(火) 00:18:12.17ID:Mc4XktUM
>>425
コンディットとかの事を言ってるのか。

バリエーション少ない?
http://www.willamette.edu/~fruehr/haskell/evolution.html
例えばグラフを表現するにしても、隣接行列、隣接リスト、さらにリストにするか、セットにするか、ノードはOrd aにするか、単にIntでいいのか、ケースバイケースで色々あると思うんだけど?
0431デフォルトの名無しさん2014/11/11(火) 00:18:57.33ID:Mc4XktUM
失礼。
カ ンジッット
だったね。
0432デフォルトの名無しさん2014/11/11(火) 00:26:12.69ID:Red25WNb
>>426
なるほど。思い出すキッカケとしての、ドキュメント。メモメモ
あんま意識してなかったけど、確かに助けにはなっているかも。個人的には、関数へのコメントより、ファイル冒頭に設計指針を書いておくほうが多いです。

> ただ、ドキュメントがヘタッピだとヤバいな。

自信はないけど、自分が読めるから、取り敢えず、いいか、な
0433デフォルトの名無しさん2014/11/11(火) 00:29:37.46ID:RW6n7dRV
>>430
断言するが、lispやCやJavaと比べたら、プログラマにある機能を要求したときに提出されるコードのバリエーションが、Haskellは極めて少ない
0434デフォルトの名無しさん2014/11/11(火) 04:25:03.93ID:m7WVeZhS
なわけないw
0435デフォルトの名無しさん2014/11/11(火) 07:51:04.83ID:XbL/s6PQ
アムダールの法則だかラムサールの条約だかに絶望した
コアが増えていけば速くなり続けて行くと思ってたのに……
メニーコアとは幻想だったのか…
0436デフォルトの名無しさん2014/11/11(火) 08:05:50.97ID:/UGcfCAO
ランダウアーの限界はもちろん現在の通常のコンピュータにとっては問題にならないほど小さな値である。
あっちにも書いたけどこっちにも転載
0437デフォルトの名無しさん2014/11/11(火) 08:14:04.59ID:IHNztH1r
>>433
実践的なHaskellコードを読んで絶望しろ
0438デフォルトの名無しさん2014/11/11(火) 13:58:02.38ID:j+uyDxfA
初歩的な質問失礼します。

:!でターミナルのコマンドが使えますが、これを関数に組み込むにはどのようにしたらよいのでしょうか?例えば、
foo = :! pwd
と定義したfooを実行したらカレントディレクトリを表示する、というようなことをしたいのですが(もちろん、これはコンパイルできませんが)、どのようにしたら良いでしょうか。

基本的なことで恐縮ですが、ググっても目的の答えに辿りつけなかったので質問しました。
0439デフォルトの名無しさん2014/11/11(火) 14:19:11.58ID:L4zKGcL9
System.Processを見てみるといい
https://www.haskell.org/ghc/docs/latest/html/libraries/process-1.2.0.0/System-Process.html

foo = callCommand "pwd"
0440デフォルトの名無しさん2014/11/11(火) 18:28:48.53ID:j+uyDxfA
>>439
希望することができました。
ありがとうございます。
0441デフォルトの名無しさん2014/11/13(木) 14:25:56.14ID:/hesX7bc
Behavior って何のためにあるの?

pullで何かしたいなら、合成したイベントハンドラにファンクター的に中身に変換掛ければいいじゃない。
0442デフォルトの名無しさん2014/11/13(木) 14:28:29.72ID:/hesX7bc
そうだよ。FRPはシンプルにイベントハンドラ合成プログラミングでいいんだよ。
"時間変化する値"っていう抽象は、一見わかりやすいけど、本質的じゃないよ。
0443デフォルトの名無しさん2014/11/13(木) 20:12:29.70ID:qEFCMURu
>>441
それで済む場合もあるけど、Behaviorがあった方が便利な場合もある
例えば、同じソースを監視するイベントハンドラが複数あったら
全部個別にfmap(実際はcontramap)しなきゃならなくて、
重い関数を適用したい場合はコストが問題になる
0444デフォルトの名無しさん2014/11/13(木) 20:54:00.50ID:Hgbf31UD
イベントハンドラだけなら IO () で十分だけど型情報がなさすぎて気持ち悪いから
型システムのために Behavior a を作ったんだろう
0445デフォルトの名無しさん2014/11/13(木) 20:54:43.82ID:fBmBaE/A
>>443
elereaのシグナルを学んだばかりで、Behavior の概念に馴染めてないから、いまひとつピンとこないんだけど、

複数のイベントハンドラ、がそれぞれEvent、でいいんだよね?
mouseDownとかmouseMoveとかwheelScrollとかかな?
で、マウス位置(xy座標)をストリーム(Eventシグナル)に載せているんだけど、例えばx座標だけを抜きたい時、\(x,y) -> x をそれぞれのEventに対してcontramapする。
こういう認識であってるかな?

もしそうなら、Behavior は重い関数を掛けるときのパフォーマンス劣化の問題を、どうやって解決するんだい?
解説頼む。
0446デフォルトの名無しさん2014/11/13(木) 21:51:34.46ID:4Xr/dCjq
>>441
Behavior を(も)使った方が解りやすいというタイプの人のためにある。

Behavior よく解らん、Event 解りやすいという人は、Behavior のことは気にしなくていい。

両方使ったり、片方だけで代用したり、いかようにも表現できる。
0447デフォルトの名無しさん2014/11/13(木) 22:11:56.86ID:/hesX7bc
>>446
なんだか、甘味料と砂糖みたいな関係ですね。
晩御飯のすき焼き、甘味料で作ってみようかなあ。

煽りはさておき、Behavior がどういう概念で、どういうシーンでしっくりくるのか、興味があります。
あなたなりの理解を教えていただけると幸いです。
0448デフォルトの名無しさん2014/11/13(木) 22:48:25.29ID:fBmBaE/A
FRP良質入門サイトのURL下さい
0449デフォルトの名無しさん2014/11/13(木) 23:19:59.71ID:8WQaaDuG
>>448

elereaはドキュメントに用例が多くて助かります。
https://hackage.haskell.org/package/elerea-2.7.0.2/docs/FRP-Elerea-Simple.html
特に、A longer example の節は必見

GUIアプリの例。解説のHTMLが同梱されています
https://hackage.haskell.org/package/elerea-examples
0450デフォルトの名無しさん2014/11/13(木) 23:41:31.63ID:iWKxp8OY
>>449
多謝
0451デフォルトの名無しさん2014/11/14(金) 14:21:56.46ID:WNZtrPXa
Behavior って物理シュミレーション的なシーンで便利なんだ。

加速度を積分して速度、積分して位置にしたり。
リストのスクロールを摩擦係数をいじって減速度合いを変えたり。
0452デフォルトの名無しさん2014/11/14(金) 14:36:53.44ID:+69VmKY1
EventではApplicativeが作れないからそれに代わるものが欲しいと
elereaのSignalはMonadだからやりたい放題できるからそれに慣れると分ける意味わからんよな
0453デフォルトの名無しさん2014/11/14(金) 22:26:54.48ID:WNZtrPXa
ジッジ「珠玉のアルゴリズム買ってきたで」
ワイ「わーい」
0454デフォルトの名無しさん2014/11/14(金) 23:05:43.56ID:DkHiTH1Y
Amazon予約したのにまだこない。北海道だからか?
0455デフォルトの名無しさん2014/11/14(金) 23:52:30.13ID:qCbHalO3
感想
久しぶりに読みにくい日本語に出会った
0456デフォルトの名無しさん2014/11/15(土) 03:09:27.49ID:TFMH5uTn
>>454
予約の話をしよう、あれは今から36万・・・いや、1万4000年前だったか、
まぁいい、私にとってはつい昨日の予約だが、君たちにとっては多分明日の予約だ
■ このスレッドは過去ログ倉庫に格納されています