- 1 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 23:43:54.28 ID:Vh4eztBk.net]
- 関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト) www.haskell.org/ 前スレ 関数型プログラミング言語Haskell Part28 echo.2ch.net/test/read.cgi/tech/1428597032/
- 411 名前:デフォルトの名無しさん mailto:age [2017/05/08(月) 22:42:37.72 ID:0FON9WNL.net]
- >>400です。
ありがとうございます。 Haskellで作られたアプリケーションの方は2、3個紹介されるかなと思ってましたので、 まぁ予想通りです。 ですが、作りたいアプリケーションのレスが1日経っても皆無なのは驚きました。 (>>403 がいまいち分からない。これは私へのレスですか?) 私は年賀状の宛名をデザインするWebアプリを作りたいと思い、 「Beginning Haskell」を読んでWebアプリの勉強中です。 皆さん、作りたいものは何もないんですか? ゲームとかオーサリング系とか、マストドンをhackするツール(crackではなく)とか...
- 412 名前:デフォルトの名無しさん [2017/05/08(月) 22:56:09.94 ID:9wTmIyqX.net]
- GitHubとかでHaskellで検索かけりゃ何か出てくるんじゃねーの?
- 413 名前:デフォルトの名無しさん [2017/05/08(月) 23:03:23.31 ID:a/GZsbco.net]
- 論理に基づく人工知能を作るならHaskellがぴったりじゃないかと思うんだけど、プログラミングの技能も論理学の知識もないから作れない
細々と勉強はしてるけど
- 414 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 23:31:16.69 ID:Vtk8jBj4.net]
- 自動イタ電器とか作れや
- 415 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 23:32:41.17 ID:9whwcEDU.net]
- 達人プログラマーになりたい欲求はあるけど何かを作りたいっていう欲求は薄いわ
- 416 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 23:43:37.38 ID:iNFmh6sq.net]
- やはりゲームだな。あとはGUIアプリ。なにかのエディタのようなものがいいな。
Haskellで複雑な状態を扱うのは困難、と言ってる人らに反論したい。 実際のところはどうなのか想像する前に、まずはそういう状況に直面する必要がある。
- 417 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 23:49:55.75 ID:iNFmh6sq.net]
- EmacsのプラグインもHaskellで書きたい。正格データと遅延データを色分けして表示できたら嬉しそうだ。
GHC API を使えばできるかもしれない。 なんにしてもHaskellでやりたい。俺はもうLispは嫌だ…
- 418 名前:デフォルトの名無しさん mailto:age [2017/05/08(月) 23:59:34.03 ID:0FON9WNL.net]
- >>409
どういうことですか? 私が知っている達人プログラマ、要するにハッカーですが、 彼らはみな何かを作ってました(ます)。 なので、作ることに関心が無い達人プログラマというのが想像しにくいのですが。 あ、競技プログラミングのトッププレーヤーとかですか?
- 419 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 00:07:55.03 ID:CfiI0NLl.net]
- >>411
Haskellでエディタ書いてくれ common lispで書いたエディタもあることだし
- 420 名前:デフォルトの名無しさん [2017/05/09(火) 00:12:52.22 ID:PrpfKmLN.net]
- 作る以外に改造とかに気合入れる人とかもいるんじゃね?
- 421 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 00:50:22.97 ID:j9MX7/aM.net]
- >>413
今は外部言語でかけるしくみがあるから、エディタそのものを置き換えなくてもいいんだ。 それが現実的だと思う。Emacsのような巨大なものは厳しい。見上げるだけで首が疲れるよ。先人は偉大だね。
- 422 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 10:12:37.98 ID:jmx2rYXI.net]
- >>400
写真が趣味だから、Jpegのカラー画像をモノクロやセピアに変換するツール作りたくてHackage漁ったら使い易そうなのがCライブラリ使ってるんで、そう言うの入れやすいLinux導入。 暇があったらチマチマ作りたいけど、暇がない。。。
- 423 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 11:12:04.61 ID:TCAyfaNB.net]
- itchynyタソがcamを作った時、一部の画像ファイルが(ライブラリのせいで)読めないのに腹を立てて
だったらhaskellで書いてやると一念発起したのがcamh。いまでも活躍してます。 lesspipeに組み込むとか。ちなこれはimlib2を使ってるので大抵の画像は読める。
- 424 名前:デフォルトの名無しさん [2017/05/09(火) 22:12:03.59 ID:PrpfKmLN.net]
- haskellを業務でつかうような仕事に転職すればOK
- 425 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 22:21:49.15 ID:kDNeTnk7.net]
- 仕事では使わんが、概念というかエッセンスはめっちゃ役に立ってるな
興味本位で触っといて良かったとマジ思う
- 426 名前:デフォルトの名無しさん mailto:age [2017/05/09(火) 22:47:25.87 ID:1T1N541v.net]
- >>419
その手の話ここで時々聞くけど、Haskellの何が何にどう役だったのか、 具体的な話を聞いたことが一度もない。 $$$な状況でHaskell未経験のヤツは***だったけど、経験者の俺は###できた、とか。 そういう事を具体的に語ったブログとか無いんかな? 英語でも構わないんだけど。
- 427 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 23:13:21.51 ID:0m9lmeXL.net]
- 比較するなら同一のものに対して、Haskell でのアプローチと
その他のアプローチをする必要があるので、 そんな贅沢な時間の使い方するやつはユーザ数が多くないと現れないんじゃないかな?
- 428 名前:デフォルトの名無しさん [2017/05/09(火) 23:21:27.66 ID:PrpfKmLN.net]
- tanakhにhaskellやっててよかった話を要求するか
- 429 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 23:24:21.68 ID:xmCSMJsq.net]
- C++やC99以降みたいな「どこでも変数宣言」を嫌うようになった
宣言した位置と使う位置が離れるのは書き方が悪いからだ、というかなんか
- 430 名前:デフォルトの名無しさん mailto:sage [2017/05/10(水) 00:12:52.35 ID:HNykyFkL.net]
- 高階関数を多用する様になったとか、関数の純粋さを気にして関数分割する様になったとか
設計やコードが以前より分かりやすくなってテストもしやすくなったと思う カリー化や部分適用がもっと簡単に出来たらってモヤモヤする事も多いけど
- 431 名前:デフォルトの名無しさん mailto:sage [2017/05/10(水) 02:17:13.25 ID:k+Fw34TB.net]
- 別に関数型プログラミングって今まで出来なかったことが出来るようになる手法じゃないしな
コードを直感的に書けるようにすることでプログラムの全体的な質を高める手助けをしてくれるような感じ メリットを語れと言われたら一晩中でも絡めちゃ語れる
- 432 名前:デフォルトの名無しさん mailto:sage [2017/05/10(水) 07:52:30.59 ID:JBi0Fo4L.net]
- 関数型とは月極、定礎に匹敵する巨大グループだがそれが存在する証拠はない
統計学的には母集団が実在する証拠を出す義務はない
- 433 名前:デフォルトの名無しさん mailto:sage [2017/05/10(水) 18:59:47.60 ID:oW0tCmUv.net]
- 私は、Windowsで大きなランタイムとか必要なく
実行形式のバイナリを作れるのが助かってる。 小さいバッチプログラムとか。
- 434 名前:デフォルトの名無しさん mailto:sage [2017/05/11(木) 05:52:26.63 ID:0s1wVfC9.net]
- ghcmod-vimってstack環境で動かないのな
- 435 名前:デフォルトの名無しさん [2017/05/12(金) 14:16:42.66 ID:jiodGJOF.net]
- haskelは使わないけど関数型の勉強はすごいためになる
ライブラリが提供する地雷メソッド見抜けるようになった
- 436 名前:デフォルトの名無しさん mailto:sage [2017/05/12(金) 20:57:00.05 ID:nS2W/WX/.net]
- 意識的にオブジェクトをモノイドにしたりするようになった
- 437 名前:デフォルトの名無しさん mailto:sage [2017/05/12(金) 21:47:41.07 ID:YH3Rdz9Y.net]
- 皆の言う関数型の経験が生きた事をアドバイスしてるオブジェクト指向の本が出ないのは何故か
- 438 名前:デフォルトの名無しさん [2017/05/12(金) 22:37:15.98 ID:ZlSd19FP.net]
- 本を書くのが楽な作業だとでも思ってるの?
- 439 名前:デフォルトの名無しさん mailto:sage [2017/05/12(金) 22:41:48.24 ID:QfK6Pl49.net]
- その内容で一冊書きたいならそれをテーマにした小説にしてページを埋めないとだな
いいものはみんな本になるはずという前提がそもそも間違ってる
- 440 名前:デフォルトの名無しさん mailto:sage [2017/05/12(金) 22:48:49.78 ID:YH3Rdz9Y.net]
- >>432
楽かどうかの話じゃなくて、皆の言ってる事はここ数年の関数型の特長じゃないじゃん ずいぶん昔から変わらない関数型の特長でしょ 関数型のいいところを手続き型(オブジェクト指向)にも取り入れようとし出したのもかなり昔の話だし なのに、ここ数日このスレで挙げられた事が本になっていないのが不思議なんだよ 和書はともかく洋書でも無いじゃん
- 441 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 00:09:37.73 ID:7Z9U0QOC.net]
- ハスケル環境整えやすいのって
- 442 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 00:10:00.54 ID:7Z9U0QOC.net]
- Windows debian?
- 443 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 00:14:42.17 ID:hYOIVOdy.net]
- >>431
うーん。。。 関数型言語じゃなくても気を付ければ出来るし、それがデザパタとかMVC/MVVMになってるからじゃないかな。 だから関数型言語はエッセンスを触接理解するのに使って、実用は普通の言語。 特にHaskellはIOと純粋関数が分かれてるからコマンドアプリでさえファイル=M、コマンドアプリ=VM、コンソール(ターミナル)や出力するGUI部品=Vって非常に明確。 使ってて、ああ、MVVMってこう言うことかって思った。 何つーか、MVCよりもMVVMはもっとCを広く解釈してるからVMなんだなぁとか。
- 444 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 00:22:55.11 ID:7Z9U0QOC.net]
- C++でわからんでJAVAで半分誤解して
ruby使ったときにオブジェクト指向理解したのとよく似てるな
- 445 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 00:27:18.79 ID:hYOIVOdy.net]
- 経験上思ったのはオブジェクト指向は先手先手で先を読んだ設計が重要。
(だからオブジェクト指向設計とかがプログラミング以外にも必要) 関数型言語はわりと行き当たりばったりでもどうにかなるし、それはオブジェクト指向じゃない普通の言語(CとかPascal)でも活かせる。 だから、メソッドチェーン使った宣言的なオブジェクト指向よりも泥臭い手続き的なプログラミングに新たな視点(設計の幅)を与えてくれる感じ。 (要するにメソッドの中身を書くときに役立つ)
- 446 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 00:33:36.39 ID:qMDptb/r.net]
- OOPはプロパティの値を書き換えてなんぼ、インスタンスの振る舞いをメソッド内で完結させて
なんぼだからまぁそりゃメソッド内くらいにしか関数型のパラダイムは取り入れられないよね
- 447 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 00:50:28.11 ID:7Z9U0QOC.net]
- >>439
プログラム組む前に紙と鉛筆でじっくり図書いたことないかえ? ライブラリ使うだけの時も恐怖でそうしてた。
- 448 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 01:35:42.34 ID:tHJGZUH8.net]
- >>431
二つ以上の言語を使いこなす事をアドバイスしてる本ならあるよな 例えばシェルスクリプトとC言語の二つ ここらへんではオブジェクト指向は必要ないし
- 449 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 11:47:21.81 ID:LpfjHhl9.net]
- >>436
stack使うならどっちでも楽じゃない?
- 450 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 15:11:20.18 ID:7Z9U0QOC.net]
- >>442
ほとんど知識のないまっさらの状態 ならそうだけど、 Cは覚えること山ほどあるぞ
- 451 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 17:01:20.26 ID:GwlKz+MG.net]
- シェルはCのmain関数を呼び出すだけだからよかった
なぜmainではない任意の関数を呼び出す必要がないのか なぜHaskellはCの任意の関数を呼び出すのか 答えを暗記する前によく考えてみれば、覚えることが減るんじゃないか
- 452 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 17:27:12.08 ID:1EsAZpPG.net]
- Cよりjavaの方が覚えること多いよ
- 453 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 22:08:08.69 ID:GC0/nJum.net]
- >>440
うーん。。。 上手く説明しきれてないな。。。 メソッドの中身書いてる時、手続き的なコード書く事多いけど、 設計変更の際に手続き的なコードだと破綻して新たにクラスを作ってオブジェクト指向的なコードに変える事があるんだけど、Haskell視点が入る事で一見破綻したコードでも、何とか破綻させずに改修できる目処が立つ事が増えた。 何つーか、手続き的なコードからオブジェクト指向的なコードへの切り替えを遅らせる。 手続き的なコードを延命する事が出来るようになったって感じかな。
- 454 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 22:42:27.32 ID:Xpw0Rhcm.net]
- >>446
Cはコンパイラというかリンカのオプションが多い JITコンパイラは覚えることが少ない
- 455 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 22:59:11.16 ID:qMDptb/r.net]
- Javaはデザパタも覚えなきゃ話にならんから…
- 456 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 23:34:24.50 ID:ZYwAYCy+.net]
- Haskellは初めからデザパタを、それと気づかないまま強制されているような窮屈さを感じる
- 457 名前:デフォルトの名無しさん mailto:sage [2017/05/13(土) 23:36:04.40 ID:GC0/nJum.net]
- それが仕事に活きるとも言える。
- 458 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 06:27:15.50 ID:dFKyOZwr.net]
- 代数的データは単なるVisitorパターンではなく遅延評価にも関係がある
だが同時に、型クラスで抽象化しろ、具体的な代数的データを教えるなというのがやばい
- 459 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 14:24:30.77 ID:pHcsRThm.net]
- ポイントフリースタイルにこだわった方がHaskellっぽいですか?
flip関数まで使い出すと非常に混乱するのですが…
- 460 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 15:12:47.10 ID:9JtdGcan.net]
- >>453
その考え方は本末転倒だと俺は思うよ。 プログラムコードで大事なのは関数型っぽいとか手続き型っぽいとかじゃなく、 プログラマ(自分)が読みやすい、意味が理解しやすいかどうかだよ。 Haskell を使うんだから関数型に合ったアルゴリズムはこだわるべきだけど、 その実装方法、つまり書き方は自分が読んで分かるように書こう。 そんな事はないだろうが、くれぐれもカッコイイとかで流されないように。 ただ、他人のコードは読めるようになった方が良いから、 そういう意味では多少トリッキーなポイントフリーにも慣れておいた方が良いかもね。
- 461 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 15:23:34.69 ID:pHcsRThm.net]
- >>454
ありがとうございます アルゴリズムを気にしながらもまずは自分と他人が読みやすいように書いていきます
- 462 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 16:43:02.99 ID:uk0JawvS.net]
- プロっぽいコード書いて収入上げる
- 463 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 16:43:13.34 ID:p/Ra2wac.net]
- ポイントフリーはこれが本質的な処理だ!おれは本質的なことだけ書くぜ!というカッコ良さがあるからな
珠玉のアルゴリズムとか読むと、つい憧れてしまう しかしflipを使いまくって解読不能にするのは本末転倒
- 464 名前:デフォルトの名無しさん [2017/05/14(日) 18:19:44.55 ID:lQnp4gVk.net]
- flipの呼び出しコストって無視できるの?
- 465 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 18:24:38.81 ID:I4CZOOoh.net]
- uncurryなんかもカッコいいなぁ (かなり使った
ただポイントフリーは、一度くっつけたのをまたバラす時に頭が痛くなる 一種の(視覚的な)最適化なので、頻繁に組み替えてる最中にはやりたくない
- 466 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 19:03:34.66 ID:X8FkgiaC.net]
- >>458
最適化でインライン展開されるんじゃない?
- 467 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 00:57:14.99 ID:ICbTDVni.net]
- ポイフリしたら型シグネチャ添えてる。本末転倒かね?
- 468 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 06:58:21.61 ID:3pbiASso.net]
- >>461
それを本末転倒かもと考える事が本末転倒だよ。 大事にするところがおかしい。 コードスタイルを決めるのは何にもまして読みやすいか、考えやすいかどうかだよ。 (もちろん誰が読む、考える人かによる) 型シグネチャを添えるかどうかは本質的にはポイントフリーしたかどうかに関係ない。 ・そもそも添えないと(意図したように)コンパイルできないから添える。 ・添えた方がコードを読みやすい or 考えやすいから添える。 ・添えない方がコードが読みやすい or 考えやすいから添えない。 これ以外の理由ってある? (書籍に載せるのに紙面を節約するため、という理由は排除) ちなみに俺個人は、添えた方が読みやすいし考えやすい。 どんな関数でも本体を定義する「前」に型シグネチャを書く(と言うか思い浮かべる)。 OOPにおけるインターフェース志向設計みたいなもの。
- 469 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 08:50:26.75 ID:fFRu606n.net]
- いやおかしくないでしょ。
ポイントワイズなコード にするか、型シグネチャ付けるかは悩んでもいいでしょ。 コードは短い方が読みやすい。冗長でない方が読みやすい。 しかし一時変数や型注釈は別のレベルでの理解しやすさを与えてくれる。 それらを使うか、使うならどっちか、両方か、はケースバイケースだし職人芸的な深みがあると思うよ。 場合によっては関数名の類似だけで事足りることとかあるでしょう。 個人的なバランス感覚としては、なるべくポイフリするがflipは使わない、トップレベルの型シグネチャはほぼ付ける、ただし書き捨てコードは別。 (ルークよ、セクションを使え…)
- 470 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 09:43:58.61 ID:WwceF0p9.net]
- 使い捨てやモナドの途中でletした関数も漏れなく型シグネチャ付けるの?
- 471 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 10:00:25.10 ID:3pbiASso.net]
- >>464
俺(>>462)に言ってるのかな。 俺は内部関数にはシグネチャーは基本的に書かない。 (内部関数自体、ほとんど使わないけど) ごめん、どんな関数でもと言ったのは、トッブレベル関数のことだ。 あと、今のコーディングスタイルにしてからは、 Haskellでいわゆる使い捨てコードというものを書かないようになった。
- 472 名前:463 mailto:sage [2017/05/15(月) 11:04:15.21 ID:fFRu606n.net]
- >>464
俺は書くときもある。でもそういう時は大抵、設計を練り直すハメになる。 なるべく上の層を充実させたいよね。 >>465 使い捨てコード書かないのは、どうなんだ。 ちょっとした実験というかお遊び的プログラミング、粘土コネコネはしないのかい。 いやでも、作っても結局設計しっかりしてないと長持ちしないなら、初めから気合い入れて製作すべきなのか。 その方がトータルのコストは節約できるということか。ううむ。
- 473 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 11:55:36.63 ID:3pbiASso.net]
- >>466
実験は基本的にちょっとしたものでも捨てない。 結果的に後で捨てることになるかもしれんが、 捨てるつもりで実験はしない。 実験の目的や結果などをメモって残しておく。 実験の時も本番の時も思考の順は同じだから、まず型から考える。 だからシグネチャは書く。 お遊びは、ごめん、その状況がよく分からん。 コードを書くことを遊びにできる心は、揶揄でも何でもなく素直に感心する。 羨ましい。 粘土は要するに実験と同じだよね。 だからシグネチャは書くよ。
- 474 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 12:23:22.28 ID:19VlPgPR.net]
- 入門者のおれには勉強になる。
Stateとか使って型推論させると、MonadState使ったかなり複雑なシグネチャが出てくるんだけど、 あれはなるべく汎用的なシグネチャにしておくのがいいのかな?それとも具体的なシグネチャにするほうがいい?
- 475 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 12:29:59.58 ID:Nyf5aX+C.net]
- >>465の言ってる「使い捨てコード」は単に無名関数くらいの意味合いじゃない?
- 476 名前:デフォルトの名無しさん mailto:sage [2017/05/15(月) 13:07:35.87 ID:3pbiASso.net]
- >>468
そりゃ、汎用的な関数を定義したかったら汎用的なシグネチャを書くし、 具体的な関数を定義したかったら具体的なシグネチャを書くよ。 モナドトランスのスタックがいつく積まれていようが関係ない。 あと、スタックがいくつも積まれた姿を常に目にしていると思考しにくい時もある。 そんな時は type で別名を付けて分かりやすくする。 すべては自分が考えやすく、書きやすく、読みやすくするため。 >>469 無名関数にシグネチャって map ((\x -> if even x then 1 else (-1)) :: Integer -> Int) [1..9] みたいにか? それは無いでしょ。 >>464 がそんなことを聞いてるとは思えん。 まぁ、書かなきゃコンパイルできない場合もあるかもしれんが、 今のところ、そんな状況になったことは一度もない。 >>464 のレスを見て俺が想像した使い捨てコードはまさに >>466 の言うような「捨てる前提の実験コード」だよ。 それはやらなくなったから >>465 で捨てコードは書かなくなったと言ったんだ。
- 477 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 23:36:00.24 ID:qM3Y9DLE.net]
- 圏論を学んでみたい Haskeller、学ぼうとしたけど入門辺りで挫折してしまった Haskeller へ。
「圏論勉強会」なる一連の動画が youtube にアップされている。 (第13回まであって、それぞれ約2時間ある) 何年か前からアップされているので、知ってる人も多いと思う。 時々、Haskell で表現するとこんな感じ、といって実演して見せてくれるから面白いし、理解しやすい。 第1回はイントロダクション的な回で、圏論の雰囲気を掴むのが目的だから浅くサクサク進んでしまう。 だから難しく感じるのは当たり前なので、ここで諦めてしまわないように。 第2回からは圏論を学ぶ前の準備的な話からゆっくり丁寧に進むので安心して。 とりあえず全部一気に流して見て、2周目からじっくり学びながら見よう、 という学習スタイルはおすすめしない。 それだと1周目はテレビを何となくダラダラ見るのと同じで、何も理解できず、2周目に繋がらない。 (書籍なら自分のペースで読めるので、このスタイルでもいいと思うけどね) それでは時間の無駄で、それなら初めから2周目のつもり挑んだ方がいい。 細かく一時停止して、今の話本当に理解できたかな、どこが理解できなかったんだろ、 といちいち理解度を確認しながら見ること。 また、動画内で例がいっぱい出てくるけど、自分でもオリジナルの例を作ってみるといい。 理解できたあかつきには、圏論はもちろん、Haskell がもっと面白くなる事を保証する。
- 478 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 23:59:22.93 ID:Jwz5jkYk.net]
- 圏論が分からん? 頭悪過ぎだろ。
まあコーダーなんてそんなもんかw
- 479 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 00:22:14.16 ID:aIm9uZNt.net]
- 圏論どうこう以前に文系出身だから数3Cすらわからんわ
すまんな
- 480 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 02:00:03.36 ID:v4KZ2kPE.net]
- 数学教室 πの焼き方 日常生活の数学的思考って本が圏論入門以前としては良いかも。
触り程度だけど、圏論出てる。
- 481 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 03:53:13.08 ID:t193iX6C.net]
- さわりの誤用警察だ! 大人しくしろ!
- 482 名前:デフォルトの名無しさん [2017/05/17(水) 09:13:07.50 ID:DVfwNdKJ.net]
- Haskell固有のコーディングスタイルって何種類くらいあるの?それらのスタイルに名前あったりするの?
- 483 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 09:48:25.92 ID:mHKUfv3k.net]
- shadowingも再代入できないから'を連打するパターン
- 484 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 09:51:42.83 ID:uSaEsMW/.net]
- >>476
Haskell固有のコーディングスタイルって何? たとえはどんなの?
- 485 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 10:55:39.88 ID:knf86SYT.net]
- 圏論のアイデアを盗むのは難しくない
盗用しても、そんなの圏論じゃないから盗作じゃないもんみたいな反応なので盗み放題
- 486 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 21:31:17.54 ID:yFIpJ9bF.net]
- >>471
いい大人が2時間x13回なんて時間取れるかよ!ぼーっと見てるだけなんてダル過ぎ …でもありがとう
- 487 名前:デフォルトの名無しさん mailto:sage [2017/05/17(水) 22:56:48.03 ID:Noyf0zx+.net]
- >>476
まだ関数脳が出来てない時は、副作用のない関数でも手続き的な書き方するけど、関数脳が出来上がったら自然と宣言的に書いていくから、コーディングスタイルと言えるようなのは段階を踏んで成長していくもの。 そう言うのじゃなくてインデント以外にも書き方あるのかと言われれば、ある。 ブレース構文と呼ばれるCっぽい書き方。 main = do { cs <- getContents; putStr cs} こっちはインデントに左右されない自由に書ける。 レイアウトまたはオフサイドルールと呼ばれる書き方はPythonと同じ、インデントを考慮しないとコンパイル出来ない。 こっちが主流。 ちなみに、ポイントフリースタイルはコーディングスタイルではなく、カリー化の部分適用で見た目の引数を減らす関数の書き方。
- 488 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 00:25:41.41 ID:XBCR7g9y.net]
- x:xs みたいな変数名の使い方ってHaskell的だよね
関数名に意味を込めておいて変数名は短く簡潔な方がいいみたいなスタイル
- 489 名前:デフォルトの名無しさん [2017/05/18(木) 00:27:12.80 ID:xYh7ZO1T.net]
- >>476
GitHub - jaspervdj/stylish-haskell: Haskell code prettifier https://github.com/jaspervdj/stylish-haskell GitHub - commercialhaskell/hindent: Haskell pretty printer https://github.com/commercialhaskell/hindent GitHub - evolutics/haskell-formatter: Haskell source code formatter https://github.com/evolutics/haskell-formatter
- 490 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 00:38:06.79 ID:EVp+48v/.net]
- Haskellの関数のアリティは常に1なので「カリー化」も「部分適用」も存在しない
- 491 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 02:12:52.06 ID:yXJEanSW.net]
- Text.Printfのprintfはスゴイことをやってることはわかる
いまだに似たようなものを書くことができない
- 492 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 03:37:21.45 ID:/F28r+D1.net]
- >>482
引数の時点で使いたい構造に分けておくのは気に入ってる。 使わない部分は'_'で明示出来るし。 f xs -- リスト全体 f (x:xs) --リスト先頭と残り f xxs@(x:xs) -- リスト全体とリスト先頭と残り同時利用 f (x:y:zs) -- リスト先頭から2個と残り
- 493 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 03:42:59.76 ID:znop8OGf.net]
- 遅延評価分かってるつもりだったけど分かってないな
オライリーの並列本で、次のような式があって、force使ってたら並列処理に回される前に評価されて意味無いんじゃって思ってしまった rpar (force (map solve as)) これって、rpar引数の式が式のまま引数として渡されて、rparが並列処理内で引数を評価しようとしたタイミングでmapとforceが評価されるって理解でいいのかな? 値の遅延評価は何となく頭に入ってたけど関数の評価については意識できてなかった
- 494 名前:デフォルトの名無しさん [2017/05/18(木) 07:48:58.07 ID:u6B8rj4W.net]
- rparが来た時点で次のrpar,rseqと並列に実行し始めるという風になってるから遅延評価とは違う?ような気がする
引数を正格にするのは単に並列化済みのそれぞれの処理を速くしたいという意図では
- 495 名前:デフォルトの名無しさん [2017/05/18(木) 07:52:51.48 ID:fP2O3mzY.net]
- force自体の評価は遅延されるからね
式はまだ評価されてない値と考えればいい
- 496 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 07:58:02.16 ID:ZMFFk1e9.net]
- パターンマッチの分岐を確定するのに必要な分だけ評価する
Identityモナドみたいなやつでも⊥ではないことを確定する必要があれば評価する
- 497 名前:デフォルトの名無しさん [2017/05/18(木) 08:06:27.16 ID:u6B8rj4W.net]
- ではなく、評価の深さに関係してるみたいですね。rparがWHNFまでしか評価しないので。rseqでも同じかな?
- 498 名前:デフォルトの名無しさん [2017/05/18(木) 08:12:32.69 ID:u6B8rj4W.net]
- >>491は>>488に対してです。
>>489 それでは、rseqが呼ばれるまでrparの引数が評価されないように感じるんですが、いつ評価が始まるんでしょうか?
- 499 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 08:41:17.48 ID:IzAvSK7+.net]
- やるなら並列にやる(いつやるとはいってない)
↑ これが初心者キラー
- 500 名前:デフォルトの名無しさん [2017/05/18(木) 09:02:29.66 ID:fP2O3mzY.net]
- >>492
forceという関数そのものは特別扱いされないって意味 ちなみにrpar自体が引数をWHNFまで評価すると理解してるけど試せる環境がないから断言は出来ないな forceが必要なのもWHNFの時点でrparのスパークが終わっちゃうからだと思ってるけど・・・
- 501 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 12:53:58.06 ID:hXrMTvib.net]
- >>482
関数自体の汎用性とか短さも関係してると思う 変数名が具体的でなくとも何してるかパッと見てわかる関数は嬉しい
- 502 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 14:10:00.91 ID:TSzqrQQ0.net]
- >>487
forceはリストの背骨までしか評価しない。 つまり xs=[1,2,3,4,5] が xs=[_,_,_,_,_] と評価される。 でも、そのforceもリストが評価されるまで動かない。。。 マジで並列化と遅延評価は相性悪い。
- 503 名前:デフォルトの名無しさん [2017/05/18(木) 15:07:11.90 ID:S+9vOUwt.net]
- いやControl.DeepSeqのforceは再帰的に評価する
というのもリストのNFDataインスタンスはNFData a => NFData [a]だからね head $ head $ force [[1,undefined]] はエラー
- 504 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 17:35:00.25 ID:znop8OGf.net]
- force自体は何も特別では無くて遅延評価される
但し、force関数の評価時に本来はWHNFまでしか評価しない状況でもNFまで完全評価するって感じか
- 505 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 05:58:24.02 ID:7XmC+xMs.net]
- faithandbrave.hateblo.jp/entry/20111201/1322718742
GADTs拡張で、空でないリストを前提にコーディングできるみたいですけど、 これって、静的に空でない事が判明してないと呼び出せないんですか? 空か入ってるか判らないリストについては使えないってこと? 凄い使いにくそう
- 506 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 06:15:33.02 ID:eorHP7jS.net]
- NonEmptyは何かしらのモデリングを行うときにパラメータが非空リストであるといった内部で生じる条件を明に扱えるようにするためのものかと思ってる
インポートした関数をつなぎ合わせるだけの部分で便利なものではない
- 507 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:25:30.00 ID:SgRoQNx5.net]
- printf関数は副作用のある出力関数じゃなくて、フォーマット済みの文字列返すだけの副作用のない関数にして欲しかった。。。
- 508 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:29:29.96 ID:1KTJ7Tkv.net]
- sprintfよろ
- 509 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:59:49.62 ID:SgRoQNx5.net]
- 本当、それ欲しい->sprintf
- 510 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 19:27:54.16 ID:3Ne2dZP6.net]
- import Text.Printf
genMsg :: String -> String genMsg name = printf "Hello, %s-san!" name main :: IO () main = do name <- getLine putStrLn $ genMsg name
- 511 名前:デフォルトの名無しさん mailto:sage [2017/05/2
]
- [ここ壊れてます]
|

|