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