関数型プログラミング言語 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
370デフォルトの名無しさん
2017/05/03(水) 23:04:12.27ID:1Ttf2z2u Cabal ケバール
371デフォルトの名無しさん
2017/05/03(水) 23:21:41.48ID:mJ/QVcTI ghcよりcabalより先にstackを入れる。
372デフォルトの名無しさん
2017/05/04(木) 00:29:46.99ID:M/Hnicnq YouTubeをhaskellで検索かけりゃいくらでも聞けるだろ
373デフォルトの名無しさん
2017/05/04(木) 03:31:51.49ID:gAUNCpWB haskellでキーボードから入力した値をそのまま出力する場合、必ず
n <- getLine
putStrLn n
のように一旦変数に束縛する必要がありますか?
一行では書けないのでしょうか
n <- getLine
putStrLn n
のように一旦変数に束縛する必要がありますか?
一行では書けないのでしょうか
374デフォルトの名無しさん
2017/05/04(木) 03:52:33.18ID:0GlJDnqX main = getLine >>= putStrLn
375デフォルトの名無しさん
2017/05/04(木) 03:55:26.58ID:gAUNCpWB >>374
ありがとうございます
ありがとうございます
376デフォルトの名無しさん
2017/05/04(木) 04:12:42.09ID:0GlJDnqX ちなみに
main = do
____n <- getLine
____puStrLn n
と
main = getLine >>= \n -> putStrLn n
と
main = getLine >>= putStrLn
は、等価。
do形式はモナド形式を手続き型っぽく見せる糖衣構文に過ぎない。
最後のはモナド形式とカリー化を利用した部分的用で見た目の変数を無くしただけ。
モナド形式だとプログラム全体が一つの式だと言うのが良く分かる。
main = do
____n <- getLine
____puStrLn n
と
main = getLine >>= \n -> putStrLn n
と
main = getLine >>= putStrLn
は、等価。
do形式はモナド形式を手続き型っぽく見せる糖衣構文に過ぎない。
最後のはモナド形式とカリー化を利用した部分的用で見た目の変数を無くしただけ。
モナド形式だとプログラム全体が一つの式だと言うのが良く分かる。
377デフォルトの名無しさん
2017/05/04(木) 05:28:10.40ID:DGL+h71J ___n は誤解を招く
_korehaTsukaimasen
_korehaTsukaimasen
378デフォルトの名無しさん
2017/05/04(木) 06:57:02.33ID:M/Hnicnq getLine >>= putStrLn じゃなくて interact はダメなん?
379デフォルトの名無しさん
2017/05/04(木) 12:19:44.49ID:xtfIuMNG そもそも、getLineは1行しか読まないしな
380デフォルトの名無しさん
2017/05/04(木) 14:29:46.30ID:gUFA1lSr381デフォルトの名無しさん
2017/05/04(木) 16:34:00.03ID:UGR/WMPx 束縛ってコード(人間の視認性)レベルの話で、コンパイラが吐くバイナリではキャンセルされてるんじゃないの?
バインドで(ポイントフリーみたいに)やったのと変わらないようになってんじゃないの
バインドで(ポイントフリーみたいに)やったのと変わらないようになってんじゃないの
382デフォルトの名無しさん
2017/05/05(金) 21:55:20.21ID:9ig94Wv/ Haskell 教養としての関数型プログラミング 単行本 ? 2017/4/15
重城良国 (著)
https://www.amazon.co.jp/dp/4798048062/
824ページって超大作だな
Haskell本の決定版か?
重城良国 (著)
https://www.amazon.co.jp/dp/4798048062/
824ページって超大作だな
Haskell本の決定版か?
383デフォルトの名無しさん
2017/05/05(金) 21:56:45.82ID:9ig94Wv/ Haskellによる関数プログラミングの思考法 単行本 ? 2017/2/28
Richard Bird (著), 山下伸夫 (翻訳)
https://www.amazon.co.jp/dp/4048930532/
こっちはどうなのだろう?
感想求む
Richard Bird (著), 山下伸夫 (翻訳)
https://www.amazon.co.jp/dp/4048930532/
こっちはどうなのだろう?
感想求む
384デフォルトの名無しさん
2017/05/05(金) 23:25:45.93ID:e6epJNrq385デフォルトの名無しさん
2017/05/05(金) 23:34:27.84ID:RNJ7gaAH すごい本やない。
すごい「H」本や。
すごい「H」本や。
386デフォルトの名無しさん
2017/05/05(金) 23:53:12.22ID:fZIf3DTG 初めてのCっぽくて好き
387デフォルトの名無しさん
2017/05/06(土) 00:17:40.31ID:gZLP5YIG getLineでコンソールから手動入力する時、バックスペースとかで修正出来ないのってhaskeline使う以外に何か方法無いのかな?
388デフォルトの名無しさん
2017/05/06(土) 00:28:11.74ID:MHgXx5Es rlwrapとか?
389デフォルトの名無しさん
2017/05/06(土) 02:13:17.67ID:gZLP5YIG うーん、そういうのじゃないな
390デフォルトの名無しさん
2017/05/06(土) 18:51:05.79ID:smzwp1ku Comonadでオブジェクト指向を実現できるって聞いたけどほんと?
391デフォルトの名無しさん
2017/05/06(土) 23:14:55.28ID:6S4yhtdG スレ違いかもしれませんが、2つのリストに一致する項目だけ抜き出したリストを作るみたいな問題があったとき、
集合論だと集合Aと集合Bの積集合A∩Bを求めるような解き方をすると思うのですが、Haskellのようにラムダ計算が
基になっている関数型言語だとそもそもの考え方や物の見方が違ったりするのでしょうか?
Haskellを学び始めたはいいんですが、結局他言語のパラダイムを無理やりHaskellに適用させているだけのような気がして不安です
集合論だと集合Aと集合Bの積集合A∩Bを求めるような解き方をすると思うのですが、Haskellのようにラムダ計算が
基になっている関数型言語だとそもそもの考え方や物の見方が違ったりするのでしょうか?
Haskellを学び始めたはいいんですが、結局他言語のパラダイムを無理やりHaskellに適用させているだけのような気がして不安です
392デフォルトの名無しさん
2017/05/07(日) 01:09:26.23ID:875uFfQS >>391
質問に答えるだけの知識を持ち合わせていないので一応コードだけ
intersect :: Eq a => [a] -> [a] -> [a]
intersect xs = filter (`elem` xs)
リスト内包表現でも書けるけど関数型っぽいのはこういう書き方なのかも
質問に答えるだけの知識を持ち合わせていないので一応コードだけ
intersect :: Eq a => [a] -> [a] -> [a]
intersect xs = filter (`elem` xs)
リスト内包表現でも書けるけど関数型っぽいのはこういう書き方なのかも
393デフォルトの名無しさん
2017/05/07(日) 01:46:15.37ID:s5HwRSgU394デフォルトの名無しさん
2017/05/07(日) 02:07:21.95ID:J1yK9zIW395デフォルトの名無しさん
2017/05/07(日) 13:16:11.57ID:J1yK9zIW396デフォルトの名無しさん
2017/05/07(日) 16:32:45.84ID:YN83nmbH リスト内包表記は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と同じような最適化が行われるし
必要なければリストの結合も行われない
[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と同じような最適化が行われるし
必要なければリストの結合も行われない
397デフォルトの名無しさん
2017/05/07(日) 16:37:16.65ID:f0nSghKy リスト内包のほうがパフォーマンスでるらしいけどHaskellのパフォーマンスチューンングは難しいから当分気にしないほうがいい
待ってる間に線形型で楽々チューニングできるようになるかもしれないし
待ってる間に線形型で楽々チューニングできるようになるかもしれないし
398デフォルトの名無しさん
2017/05/07(日) 16:58:43.74ID:3IJNEy2Z399デフォルトの名無しさん
2017/05/07(日) 17:18:00.54ID:m17h7+4k 内包表記と再帰を組み合わせることも可能。
夢が広がりング。
夢が広がりング。
400デフォルトの名無しさん
2017/05/07(日) 22:35:33.72ID:t8zqh9+K Web系でもいいのですが、フリーウェア(できればオープンソース)のアプリケーションで、
Haskellで作られたものって何かありますか?
Haskellプログラマだけでなく、一般の人も使っているもので。
もしくは、みなさんならHaskellでどんなアプリケーションを作ってみたいですか?
Haskellで作られたものって何かありますか?
Haskellプログラマだけでなく、一般の人も使っているもので。
もしくは、みなさんならHaskellでどんなアプリケーションを作ってみたいですか?
401デフォルトの名無しさん
2017/05/07(日) 22:48:03.22ID:ESaiO+gS Pandocあたりは比較的広く使われている印象
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の言ってる「使い捨てコード」は単に無名関数くらいの意味合いじゃない?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【無言】中国怒らせた高市首相→1週間だんまり、国民に実害も説明なし 中国問題を避けてスルー… ★5 [BFU★]
- 「日本はパンダがいなくなる状況に直面するだろう」 中国メディア、専門家の見方伝える [♪♪♪★]
- 止まらぬ「日本売り」 高市財政への懸念で進む金利上昇と円安 ★2 [蚤の市★]
- 【北海道】帯広vs釧路 不良グループが30人規模の大乱闘 廃墟での肝試しで鉢合わせトラブルに…自称解体工の男ら逮捕 [ぐれ★]
- 【福岡】ミカンの木に逆さ吊りになっていた高齢の男性が死亡 [雑用縞工作★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★12 [樽悶★]
- ネトウヨ「日本人の命を守るために中国とケンカしろ!え、薬が作れない?じゃあ死ね!」 こいつらの言う安全保障とはいったい何なのか? [314039747]
- 東大名誉教授「中国は誤った宣伝を繰り広げ、対立を煽り、経済の失敗による国内の不満を日本に向けている」 [903292576]
- 【悲報】Suica、セキュリティを突破されたのが販売されはじめる [347751896]
- 【悲報】米問屋「助けて!米がとんでもない量余ってるのに全然売れないの!でも絶対値下げしたくない…どうしたらいいの…」 [802034645]
- コンビニ店長、ついにキレる「なんであなた達にトイレを貸さないといけないんですか?私達はトイレレンタル業ではありません」 [329329848]
- 【高市悲報】大暴落 [115996789]
