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/
388 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 21:56:45.82 ID:9ig94Wv/.net] Haskellによる関数プログラミングの思考法 単行本 ? 2017/2/28 Richard Bird (著), 山下伸夫 (翻訳) https://www.amazon.co.jp/dp/4048930532/ こっちはどうなのだろう? 感想求む
389 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 23:25:45.93 ID:e6epJNrq.net] >>383 >>201 数独ができるようになるけど、ワイはすごい本の方が好きや
390 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 23:34:27.84 ID:RNJ7gaAH.net] すごい本やない。 すごい「H」本や。
391 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 23:53:12.22 ID:fZIf3DTG.net] 初めてのCっぽくて好き
392 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 00:17:40.31 ID:gZLP5YIG.net] getLineでコンソールから手動入力する時、バックスペースとかで修正出来ないのってhaskeline使う以外に何か方法無いのかな?
393 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 00:28:11.74 ID:MHgXx5Es.net] rlwrapとか?
394 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 02:13:17.67 ID:gZLP5YIG.net] うーん、そういうのじゃないな
395 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 18:51:05.79 ID:smzwp1ku.net] Comonadでオブジェクト指向を実現できるって聞いたけどほんと?
396 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 23:14:55.28 ID:6S4yhtdG.net] スレ違いかもしれませんが、2つのリストに一致する項目だけ抜き出したリストを作るみたいな問題があったとき、 集合論だと集合Aと集合Bの積集合A∩Bを求めるような解き方をすると思うのですが、Haskellのようにラムダ計算が 基になっている関数型言語だとそもそもの考え方や物の見方が違ったりするのでしょうか? Haskellを学び始めたはいいんですが、結局他言語のパラダイムを無理やりHaskellに適用させているだけのような気がして不安です
397 名前:デフォルトの名無しさん [2017/05/07(日) 01:09:26.23 ID:875uFfQS.net] >>391 質問に答えるだけの知識を持ち合わせていないので一応コードだけ intersect :: Eq a => [a] -> [a] -> [a] intersect xs = filter (`elem` xs) リスト内包表現でも書けるけど関数型っぽいのはこういう書き方なのかも
398 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 01:46:15.37 ID:s5HwRSgU.net] >>391 チューリング完全という意味で、他言語とHaskellは等価というのが数学的な見方だな もし言語が複数存在する原因を知りたいなら、数学的な見方はほとんど役に立たないな
399 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 02:07:21.95 ID:J1yK9zIW.net] >>392 >>393 ありがとうございます チューリング完全でさえあればそれ以上は計算モデルより言語仕様に合わせた方が良さそうですね いろいろ試してみて、一番スマートに書けるように精進します 今のところHaskellが一番面白いです
400 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 13:16:11.57 ID:J1yK9zIW.net] >>392 ちなみに、mapやfilterとリスト内包表記は内部的にはここが違うとか、パフォーマンスが 違うとか、あるいはこういうときはこっちの方がいいとかはあるのでしょうか?
401 名前:デフォルトの名無しさん [2017/05/07(日) 16:32:45.84 ID:YN83nmbH.net] リスト内包表記はconcatMapを使うからネストできる [f x y | x <- xs, y <- ys, p x y] == concatMap (\x -> concatMap (\y -> if p x y then [f x y] else []) ys) xs パフォーマンスは実際にghcがどういうコードを吐くかだけど そのままconcatMapでもmapやfilterと同じような最適化が行われるし 必要なければリストの結合も行われない
402 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 16:37:16.65 ID:f0nSghKy.net] リスト内包のほうがパフォーマンスでるらしいけどHaskellのパフォーマンスチューンングは難しいから当分気にしないほうがいい 待ってる間に線形型で楽々チューニングできるようになるかもしれないし
403 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 16:58:43.74 ID:3IJNEy2Z.net] >>396 >>397 ありがとうございます ネストの有無などで自分なりに考えながら使ってみます
404 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 17
] [ここ壊れてます]
405 名前::18:00.54 ID:m17h7+4k.net mailto: 内包表記と再帰を組み合わせることも可能。 夢が広がりング。 [] [ここ壊れてます]
406 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 22:35:33.72 ID:t8zqh9+K.net] Web系でもいいのですが、フリーウェア(できればオープンソース)のアプリケーションで、 Haskellで作られたものって何かありますか? Haskellプログラマだけでなく、一般の人も使っているもので。 もしくは、みなさんならHaskellでどんなアプリケーションを作ってみたいですか?
407 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 22:48:03.22 ID:ESaiO+gS.net] Pandocあたりは比較的広く使われている印象
408 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 23:26:23.39 ID:xgXJ2OQ8.net] あとはShellCheckだな。bash初心者はとにかくこれ使えって話題のシェルスクリプト更正ツールだ。
409 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 00:31:05.17 ID:XyXCIute.net] オーケーグーグル Haskellで日本語文字列(Shift-JISやEUC-JP)のファイルを正しく処理する方法
410 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 17:26:21.06 ID:kaDHepSW.net] みんな夢がないね。 ぼくなんてHaskellプログラム一つでお城のような家が建てれたよ。
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的だよね 関数名に意味を込めておいて変数名は短く簡潔な方がいいみたいなスタイル