関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part30
http://mevius.2ch.net/test/read.cgi/tech/1484491434/
探検
関数型プログラミング言語Haskell Part31©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/09/27(水) 02:33:08.70ID:2XAqPuH2
739デフォルトの名無しさん
2018/09/20(木) 21:06:35.17ID:mjuqlfQO thunk you
740デフォルトの名無しさん
2018/09/20(木) 21:15:43.07ID:Qp++lnrA >>738
あんがと
あんがと
741デフォルトの名無しさん
2018/09/20(木) 22:10:00.23ID:mC+zbID1 カリー=ハワード同型
https://ideone.com/RSvVYo
https://ideone.com/RSvVYo
742デフォルトの名無しさん
2018/09/20(木) 22:11:42.05ID:92zkwrbu743デフォルトの名無しさん
2018/09/20(木) 22:24:45.13ID:92zkwrbu すみません、733です
音訓(違うかな?)いずれかに寄せるべきと感じていたからです
他の方々もありがとうございました
音訓(違うかな?)いずれかに寄せるべきと感じていたからです
他の方々もありがとうございました
744デフォルトの名無しさん
2018/09/20(木) 22:59:01.96ID:O5Bw6BVk >>743
グラフ理論だと、文献にもよるけど、道、路、小道、歩道とか出てきて、統一不能感。
グラフ理論だと、文献にもよるけど、道、路、小道、歩道とか出てきて、統一不能感。
745デフォルトの名無しさん
2018/09/21(金) 11:17:49.00ID:pJEikkxu メモ化とスペースリークが本質的に同じもので、
言わば発酵と腐敗の関係の様なものだと知ったときは感動した。
言わば発酵と腐敗の関係の様なものだと知ったときは感動した。
746デフォルトの名無しさん
2018/09/21(金) 16:12:03.67ID:kcyxUCNO 例えw
747デフォルトの名無しさん
2018/09/22(土) 03:54:02.44ID:iTw0SS1T >>744
path でええやん
path でええやん
748デフォルトの名無しさん
2018/09/22(土) 05:09:30.37ID:1NyjNSxI749デフォルトの名無しさん
2018/09/23(日) 15:45:23.97ID:f8u3bg2b Coerce知らなかった。newtypeを自動で剥がしてくれる便利なやつ
import Data.Semigroup
import Control.Arrow
import Data.Coerce
aggregate :: [Int] -> (Maybe Int,Int)
aggregate' :: [Int] -> (Maybe Int,Int)
aggregate = (fmap getMax *** getSum) . foldMap (Just . Max &&& Sum)
aggregate' = coerce . foldMap (Just . Max &&& Sum)
https://speakerdeck.com/konn/ben-dang-hasugoi-newtype
import Data.Semigroup
import Control.Arrow
import Data.Coerce
aggregate :: [Int] -> (Maybe Int,Int)
aggregate' :: [Int] -> (Maybe Int,Int)
aggregate = (fmap getMax *** getSum) . foldMap (Just . Max &&& Sum)
aggregate' = coerce . foldMap (Just . Max &&& Sum)
https://speakerdeck.com/konn/ben-dang-hasugoi-newtype
750デフォルトの名無しさん
2018/09/30(日) 08:19:13.93ID:0APHfRwQ リストの要素がすべて異なる場合はTrue、
一つでも同じものがあれば False を返す関数を作りたい。
私が思いつく限りでは、次の方法が効率的には最適解だと思うのだが、どうだろうか。
リストが Eq と Ord のインスタンスであるという制限をかけた上で、
まずリストをソートし、それから隣の要素同士で同値関係を調べる。
ちなみに、これは○○問題などと名前がついているのだろうか。
一つでも同じものがあれば False を返す関数を作りたい。
私が思いつく限りでは、次の方法が効率的には最適解だと思うのだが、どうだろうか。
リストが Eq と Ord のインスタンスであるという制限をかけた上で、
まずリストをソートし、それから隣の要素同士で同値関係を調べる。
ちなみに、これは○○問題などと名前がついているのだろうか。
751デフォルトの名無しさん
2018/09/30(日) 14:27:30.56ID:3FJv0aaM 名前をつけるとしたらグラフ○○かな
グラフ簡約のように木をグラフに変える問題
グラフ簡約のように木をグラフに変える問題
752デフォルトの名無しさん
2018/09/30(日) 14:28:16.49ID:fYmelBV3 なんでソートするん?
753デフォルトの名無しさん
2018/09/30(日) 14:56:02.92ID:HUnS5YBa ソートは不要だし、どの言語でもdictionary/mappingにして要素数見るだけの作業のような
754デフォルトの名無しさん
2018/09/30(日) 15:13:03.29ID:0APHfRwQ >>752
ソートすれば、隣同士の要素の同値関係を調べるだけでよくなるから。
n個の要素を持つ未ソートリストの場合、
リストの第0要素を第1要素と、第2要素と・・・第n要素と比較する。
次にリストの第1要素を第2要素と・・・第n要素と比較する。
とやって、結局 O(n^2) の計算量が必要になる。
ソートするなら O(n log n) で済む。
と思ったけど、オレ勘違いしてるかな。
すまん、修理に出したPCがまだ帰ってこず、
試して速度比較できる環境にないんだ。
ソートすれば、隣同士の要素の同値関係を調べるだけでよくなるから。
n個の要素を持つ未ソートリストの場合、
リストの第0要素を第1要素と、第2要素と・・・第n要素と比較する。
次にリストの第1要素を第2要素と・・・第n要素と比較する。
とやって、結局 O(n^2) の計算量が必要になる。
ソートするなら O(n log n) で済む。
と思ったけど、オレ勘違いしてるかな。
すまん、修理に出したPCがまだ帰ってこず、
試して速度比較できる環境にないんだ。
755デフォルトの名無しさん
2018/09/30(日) 15:14:19.07ID:0APHfRwQ756デフォルトの名無しさん
2018/09/30(日) 15:21:38.02ID:0APHfRwQ757デフォルトの名無しさん
2018/09/30(日) 16:45:52.09ID:e88wFP8G 一般的に同値関係とは推移律が成り立ってる関係のことを言うので
全ての要素に対して先頭の要素と同値関係が成り立つのなら任意の要素間で同値関係が成り立つ
ちなみにソートして全探索を早く打ち切らせるテクニックのことは貪欲法という
全ての要素に対して先頭の要素と同値関係が成り立つのなら任意の要素間で同値関係が成り立つ
ちなみにソートして全探索を早く打ち切らせるテクニックのことは貪欲法という
758デフォルトの名無しさん
2018/09/30(日) 18:14:08.21ID:3FJv0aaM dictionary云々はハッシュ関数で非可逆圧縮してからバケットソートするようなもの
バケットソートはO(n)
バケットソートはO(n)
759デフォルトの名無しさん
2018/09/30(日) 19:44:34.07ID:0APHfRwQ760デフォルトの名無しさん
2018/10/02(火) 09:56:14.61ID:CXlZ46rN Arch LinuxのHaskellのリポジトリが
1年間メンテされずに死んでいる状態なのを見ると
Haskellもいよいよ落ち目だなと感じる
1年間メンテされずに死んでいる状態なのを見ると
Haskellもいよいよ落ち目だなと感じる
761デフォルトの名無しさん
2018/10/02(火) 10:46:10.19ID:ckiYxteQ よく知らないけど公式じゃあかんの?
762デフォルトの名無しさん
2018/10/02(火) 11:02:45.56ID:CXlZ46rN そういう問題ではなく
向こうでHaskellへの関心が薄れているという事を言いたかった
メンテしていた人もHaskell離れしたかなとか想像できてしまう
向こうでHaskellへの関心が薄れているという事を言いたかった
メンテしていた人もHaskell離れしたかなとか想像できてしまう
763デフォルトの名無しさん
2018/10/02(火) 19:43:32.30ID:TcTkE961 本邦では昨年、Qiitaでのアドベントカレンダーは、HaskellがGoについで投稿数が多かった。
764デフォルトの名無しさん
2018/10/05(金) 01:51:04.61ID:kIWl5j53 入門記事を読んだ人が入門記事を書いての繰り返しですやん。
765デフォルトの名無しさん
2018/10/05(金) 02:04:05.24ID:vYMMhlcW766デフォルトの名無しさん
2018/10/06(土) 18:21:22.11ID:nvkFLHfM ネットでは大手のHaskell導入報告が続いて沸いてるとこだがお前らどんだけ情弱だよ
767デフォルトの名無しさん
2018/10/06(土) 18:23:45.87ID:FAIH8E2E Haskell使ってはいけないような低学歴知恵遅れが
Haskellに興味をもってるからな
低学歴知恵遅れがHaskell触ってはいけない
ヤバイことがおきる
Haskellに興味をもってるからな
低学歴知恵遅れがHaskell触ってはいけない
ヤバイことがおきる
768デフォルトの名無しさん
2018/10/06(土) 18:45:45.19ID:iQB6eFVs サイモンペイトンジョーンズがFacebookいってたけどさ、
バック→Haskell
フロント→React
みたいな構成ってそんなメジャーなんやろか
バック→Haskell
フロント→React
みたいな構成ってそんなメジャーなんやろか
769デフォルトの名無しさん
2018/10/06(土) 20:53:46.19ID:py9kgJld770デフォルトの名無しさん
2018/10/07(日) 02:27:45.21ID:cvc83VBz ツイ見ろ
771デフォルトの名無しさん
2018/10/07(日) 08:23:56.85ID:VWepfHKo 誰の?
772デフォルトの名無しさん
2018/10/09(火) 07:56:37.24ID:pc4ijCgO MonadIO は抽象度が高くて万能すぎ、オーバースペックだよ。
そのせいで、関数の中で何やってるのかシグネチャからは分かりにくいし。
ということで、もっと細かく分けようぜ、という話。
https://chrispenner.ca/posts/monadio-considered-harmful
簡潔で分かりやすい。
こういうのパターンっていうのかな。
そのせいで、関数の中で何やってるのかシグネチャからは分かりにくいし。
ということで、もっと細かく分けようぜ、という話。
https://chrispenner.ca/posts/monadio-considered-harmful
簡潔で分かりやすい。
こういうのパターンっていうのかな。
773デフォルトの名無しさん
2018/10/09(火) 19:53:39.57ID:ikZDMvLJ githubを見る限りではとても盛り上がっているとは・・・
https://github.com/trending?l=haskell
相変わらず○○をHaskellで書いてみました系のプログラムばかり
https://github.com/trending?l=haskell
相変わらず○○をHaskellで書いてみました系のプログラムばかり
774デフォルトの名無しさん
2018/10/09(火) 22:29:07.16ID:1168jJnj なんてことないfizzbuzzもHaskellで書くと楽しくなっちゃうんだよな
初めてプログラムを書いたときのwkwkを思い出させてくれる、それがHaskell
初めてプログラムを書いたときのwkwkを思い出させてくれる、それがHaskell
775デフォルトの名無しさん
2018/10/10(水) 00:27:00.44ID:mnDhwBuZ Haskellでfizzbuzzをやろうとすると「数値か文字を出力する関数ってどうやるんだ?」
みたいなところでつまづきがち
みたいなところでつまづきがち
776デフォルトの名無しさん
2018/10/10(水) 06:58:53.24ID:h0OQje2u >>772
似たようなことはpurescriptではデフォルト(だった?)
似たようなことはpurescriptではデフォルト(だった?)
777デフォルトの名無しさん
2018/10/10(水) 12:38:31.88ID:Gg6vIVej 数値を文字列型にすれば良い
778デフォルトの名無しさん
2018/10/11(木) 01:03:51.12ID:g6Q8mWEK779デフォルトの名無しさん
2018/10/11(木) 12:44:03.11ID:kgTYxXGo780デフォルトの名無しさん
2018/10/11(木) 22:20:09.94ID:BadrZ8Hx 結局は書く人本人が気持ちよくなる為の言語だね
パフォーマンスに優れるとかもないし
パフォーマンスに優れるとかもないし
781デフォルトの名無しさん
2018/10/12(金) 02:12:33.00ID:C3Ny8aXI >>779
あーやっぱこれだね〜
あーやっぱこれだね〜
782デフォルトの名無しさん
2018/10/12(金) 07:44:29.57ID:KfUOHFbE 遅延ストリームを扱うならHaskellは速い方だろう
fizzbuzzの規模じゃそれを採用する利点はわからないけど
fizzbuzzの規模じゃそれを採用する利点はわからないけど
783デフォルトの名無しさん
2018/10/12(金) 08:45:23.98ID:gMRT6HYK むしろ最速の言語になってほしい。
「Haskellは参照透明性が保証されているために、最適化にアグレッシブになることができる。
そのため、高いコンポーザビリティによってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で最速である」
「Haskellは参照透明性が保証されているために、最適化にアグレッシブになることができる。
そのため、高いコンポーザビリティによってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で最速である」
784デフォルトの名無しさん
2018/10/12(金) 19:09:14.98ID:dVwqKDFL 「Haskellは参照透明性を保証するために、最適化を犠牲にした。
そのため、高い冗長性によってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で鈍速である」
そのため、高い冗長性によってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で鈍速である」
785デフォルトの名無しさん
2018/10/12(金) 20:38:19.51ID:P1gVq1Zk purescriptってどうなん?
786デフォルトの名無しさん
2018/10/12(金) 20:52:35.33ID:gMRT6HYK787デフォルトの名無しさん
2018/10/13(土) 06:54:47.20ID:KKBwY8Qn コンパイラフレンドリーに記述したときの速度に概ね不満はないけどコードからパフォーマンスが予測しづらいのがね
そのコードにパフォーマンス上の問題がないか測定してみないとわからない
適切に最適化がかかるかとかスペースリークがないかとか
そのコードにパフォーマンス上の問題がないか測定してみないとわからない
適切に最適化がかかるかとかスペースリークがないかとか
788デフォルトの名無しさん
2018/10/13(土) 07:37:36.01ID:dpKKSw3w789デフォルトの名無しさん
2018/10/13(土) 10:35:05.77ID:dM3fjinv 遅延評価だけでなくガベコレの遅さも問題視されるだろう(予測)
ガベコレやめてオブジェクトの寿命を予測できるレベルなら遅延評価も予測できそうだが
ガベコレやめてオブジェクトの寿命を予測できるレベルなら遅延評価も予測できそうだが
790デフォルトの名無しさん
2018/10/13(土) 18:49:50.11ID:hDWVpOOe Haskellはコンパイルさえ通ればバグは滅多にないが通説になっているけど
実際に使うと想定していた100倍くらいメモリを使っていたりと
原因特定が面倒なミスは激減するという程でもないよね。
実際に使うと想定していた100倍くらいメモリを使っていたりと
原因特定が面倒なミスは激減するという程でもないよね。
791デフォルトの名無しさん
2018/10/13(土) 20:07:33.53ID:H67rAYXW メモリがないならディスクを使えばいいかもね
ファイルに保存できた方が原因特定も楽だし
ファイルに保存できた方が原因特定も楽だし
792デフォルトの名無しさん
2018/10/13(土) 20:11:57.62ID:KKBwY8Qn 評価順序とスペースリークは他の言語にはないバグだから逆に増えてるところもある
しかも発見しづらい
サンクのサイズが一定量に収まるかとかIOの評価順序が正格かとかって静的に解析できそうな気がするができんもんかね
しかも発見しづらい
サンクのサイズが一定量に収まるかとかIOの評価順序が正格かとかって静的に解析できそうな気がするができんもんかね
793デフォルトの名無しさん
2018/10/13(土) 20:39:20.93ID:H67rAYXW データベース的な仕組みだとスペースリークを放置しているやつが多い
某OSのレジストリとか
某OSのレジストリとか
794デフォルトの名無しさん
2018/10/15(月) 21:26:01.71ID:e5ZigS6A Nixってなに?
795デフォルトの名無しさん
2018/10/15(月) 22:33:00.01ID:eL3fUBCp くだらない質問で悪いけど質問させてほしい
Haskellでの優先順位について
・演算子の優先順位の記述はある
・関数適用の優先順位の記述はある
でも、関数の優先順位の記述が見当たらないんだけど(どっかに、左結合ってのはみた)
関数の優先順位はどうなるの?
要するに、かっこ付けの順番なんだけど
1.関数適用
2.演算子
3.関数 <= 最下位の優先順位でいいの? 不確かだけど、F#ではそのような記述があった 希ガス
Haskellでの優先順位について
・演算子の優先順位の記述はある
・関数適用の優先順位の記述はある
でも、関数の優先順位の記述が見当たらないんだけど(どっかに、左結合ってのはみた)
関数の優先順位はどうなるの?
要するに、かっこ付けの順番なんだけど
1.関数適用
2.演算子
3.関数 <= 最下位の優先順位でいいの? 不確かだけど、F#ではそのような記述があった 希ガス
796795
2018/10/16(火) 00:16:52.78ID:J1KdR+sZ 795だけど、質問がうまくまとまってない希ガス
演算子と関数というのがあるけど、演算子も関数と見なしていいんだよね
ていうことは、
まず、第一の疑問は
1.関数適用の優先順位が高いとして、沢山ある関数(演算子も含む)の中でどの順番で行うのか?
第二の疑問として
3.関数 の優先順位は何?
例えば、compfunc = funcA . funcB (3 + 4)があった場合、最初の関数適用にfuncAと後ろの(.)が
が選ばれない理由でもいいかも
演算子と関数というのがあるけど、演算子も関数と見なしていいんだよね
ていうことは、
まず、第一の疑問は
1.関数適用の優先順位が高いとして、沢山ある関数(演算子も含む)の中でどの順番で行うのか?
第二の疑問として
3.関数 の優先順位は何?
例えば、compfunc = funcA . funcB (3 + 4)があった場合、最初の関数適用にfuncAと後ろの(.)が
が選ばれない理由でもいいかも
797デフォルトの名無しさん
2018/10/16(火) 00:29:51.00ID:Y+LwBtWJ a b c d e fの並びは(((((a b) c) d) e) f)
このa,b,c,d,e,fが関数だとか値のバインドだとか関係ない
そういう話ではない?
このa,b,c,d,e,fが関数だとか値のバインドだとか関係ない
そういう話ではない?
798デフォルトの名無しさん
2018/10/16(火) 00:34:17.39ID:Y+LwBtWJ 演算子を関数としてみなすなら
compfunc = funcA . funcB (3 + 4)
は関数として展開して
compfunc = (.) funcA (funcB ((+) 3 4))
で
compfunc = (((.) funcA) (funcB (((+) 3) 4)))
だよね
compfunc = funcA . funcB (3 + 4)
は関数として展開して
compfunc = (.) funcA (funcB ((+) 3 4))
で
compfunc = (((.) funcA) (funcB (((+) 3) 4)))
だよね
799デフォルトの名無しさん
2018/10/16(火) 00:43:59.67ID:J1KdR+sZ >>797
それを真としすると
自分の理解では、a : funcA b:(.) c: funcB d:(3+4)となるけど、
実際の計算は(((((a b) c) d) e) f)とあってないと思う。
compfunc = funcA . funcB . funcC (3 + 4)の方が分かりやすかったかもしれないけど
関数合成は (funcA . (funcB . funcC)) (3+4)だから (つまり関数合成は右結合)
(((((a b) c) d) e) f)になってないと思う。 (関数というか、カリー化は左結合)
それを真としすると
自分の理解では、a : funcA b:(.) c: funcB d:(3+4)となるけど、
実際の計算は(((((a b) c) d) e) f)とあってないと思う。
compfunc = funcA . funcB . funcC (3 + 4)の方が分かりやすかったかもしれないけど
関数合成は (funcA . (funcB . funcC)) (3+4)だから (つまり関数合成は右結合)
(((((a b) c) d) e) f)になってないと思う。 (関数というか、カリー化は左結合)
800デフォルトの名無しさん
2018/10/16(火) 00:47:21.87ID:J1KdR+sZ801デフォルトの名無しさん
2018/10/16(火) 01:38:23.70ID:iR5P4NYU >>796
演算子と関数とは似ているように思うかもしれないがちゃんと区別したほうがいい
まず関数適用とは雑に言えば項の間の半角スペースのこと
関数とか定数とか(ただし演算子は除く)をスペースでくっつけるのが関数適用
その関数適用の結合はカッコを除いて最優先なので、特に全ての演算子に優先する
(結合の仕方は>>797の通り)
そして
(.) :: (b -> c) -> (a -> b) -> a -> c
は慣れないうちは紛らわしいが、単に関数を引数に取る2項演算子なので
(演算子として使う限りは)関数適用より優先順位が低い
うーんいまいちちゃんと説明しきれてないし用語の使い方もアヤシイので
誰か詳しい人頼む
演算子と関数とは似ているように思うかもしれないがちゃんと区別したほうがいい
まず関数適用とは雑に言えば項の間の半角スペースのこと
関数とか定数とか(ただし演算子は除く)をスペースでくっつけるのが関数適用
その関数適用の結合はカッコを除いて最優先なので、特に全ての演算子に優先する
(結合の仕方は>>797の通り)
そして
(.) :: (b -> c) -> (a -> b) -> a -> c
は慣れないうちは紛らわしいが、単に関数を引数に取る2項演算子なので
(演算子として使う限りは)関数適用より優先順位が低い
うーんいまいちちゃんと説明しきれてないし用語の使い方もアヤシイので
誰か詳しい人頼む
802デフォルトの名無しさん
2018/10/16(火) 01:48:57.45ID:R77VKNPD haskellの構文のBNFを見てみればいいんでない?
803デフォルトの名無しさん
2018/10/16(火) 03:22:14.15ID:q8KCyqRj 質問です。
正確には覚えてないんですが、Haskell の型宣言を省略した場合、コンパイラ、インタプリタがよきにはからってくれてなるべく適用範囲が広い型をつけてくれます。
でもそれは Top-Level ではダメって制約があったと思うんですが、この制約なんか名前ついてたとおもうんですがなんでしたっけ?
これなんの為にあるんでしょう?
これ外すための GHC のオプションがあった記憶もあるんですがわかります?
数年ぶりに Haskell つかったら昔とったハズの杵柄がボロボロに orz。
正確には覚えてないんですが、Haskell の型宣言を省略した場合、コンパイラ、インタプリタがよきにはからってくれてなるべく適用範囲が広い型をつけてくれます。
でもそれは Top-Level ではダメって制約があったと思うんですが、この制約なんか名前ついてたとおもうんですがなんでしたっけ?
これなんの為にあるんでしょう?
これ外すための GHC のオプションがあった記憶もあるんですがわかります?
数年ぶりに Haskell つかったら昔とったハズの杵柄がボロボロに orz。
804デフォルトの名無しさん
2018/10/16(火) 07:09:37.73ID:t1I/4hrX805デフォルトの名無しさん
2018/10/16(火) 14:35:49.92ID:4kzhBxnD >>804
あざっす❗
あざっす❗
806デフォルトの名無しさん
2018/10/16(火) 16:03:37.14ID:Y+LwBtWJ >>799
compfunc = funcA 1 2 . funcB 4 5 . funcC 5 6 $ funcD 7 8
とあったとき、まず演算子を越えずに関数適用
compfunc = ((funcA 1) 2) . ((funcB 3) 4) . ((funcC 5 ) 6) $ ((funcD 7) 8)
このあとで演算子の優先順位で計算
>自分の理解では、a : funcA b:(.) c: funcB d:( 3+4)となるけど、
a:(.) b:funcA c:(funcB (3 + 4)) だよ
そして a:funcB b: (3 + 4)
そして a:(+) b:3 c :4
演算順序を決める丸括弧は展開出来ないよ
compfunc = funcA 1 2 . funcB 4 5 . funcC 5 6 $ funcD 7 8
とあったとき、まず演算子を越えずに関数適用
compfunc = ((funcA 1) 2) . ((funcB 3) 4) . ((funcC 5 ) 6) $ ((funcD 7) 8)
このあとで演算子の優先順位で計算
>自分の理解では、a : funcA b:(.) c: funcB d:( 3+4)となるけど、
a:(.) b:funcA c:(funcB (3 + 4)) だよ
そして a:funcB b: (3 + 4)
そして a:(+) b:3 c :4
演算順序を決める丸括弧は展開出来ないよ
807デフォルトの名無しさん
2018/10/17(水) 03:18:56.29ID:QhFRNLWc 300行近くあるコードなんですが
Haskellの書き方としてイケてない書き方あったら教えてもらえたら嬉しいです
BASIC言語風のインタプリタです
https://csacademy.com/code/4vUVk5c9/
Haskellの書き方としてイケてない書き方あったら教えてもらえたら嬉しいです
BASIC言語風のインタプリタです
https://csacademy.com/code/4vUVk5c9/
808795
2018/10/17(水) 09:26:31.84ID:NmM3N1fc なんとなくわかったというか 暫定でわかった
要するに”関数適用の優先順位は高い”なんだろうね
関数の優先順位の記述が無いのは、そのようなルールが不要だと思えばいいわけで。
かっこ付けのやるべき順序として
1.関数適用 部分適用が出来るなら強欲に
2.演算子の優先順位と結合性でかっこ付け
これで、かっこ付けが終わったので、シグネチャとの整合性を取ってみる。
あっていなければ、コンパイラーエラー
ということで、コンパイラーも理解出来そうなルールになっていそうだし、
>>806とも整合性が取れそうかな
要するに”関数適用の優先順位は高い”なんだろうね
関数の優先順位の記述が無いのは、そのようなルールが不要だと思えばいいわけで。
かっこ付けのやるべき順序として
1.関数適用 部分適用が出来るなら強欲に
2.演算子の優先順位と結合性でかっこ付け
これで、かっこ付けが終わったので、シグネチャとの整合性を取ってみる。
あっていなければ、コンパイラーエラー
ということで、コンパイラーも理解出来そうなルールになっていそうだし、
>>806とも整合性が取れそうかな
809デフォルトの名無しさん
2018/10/17(水) 09:28:42.96ID:NmM3N1fc >>806さん いろいろThx
810デフォルトの名無しさん
2018/10/17(水) 11:49:29.63ID:RJ0latBv BNF見ればちゃんと分かる
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html
単純化するなら
exp = exp1 | exp1 op exp
exp1 = exp2 | exp1 exp2
exp2 = var | (exp)
二項演算子の優先順位を実現するには別の処理が必要だけど
少なくとも関数適用と二項演算子の計算が並ぶことはない
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html
単純化するなら
exp = exp1 | exp1 op exp
exp1 = exp2 | exp1 exp2
exp2 = var | (exp)
二項演算子の優先順位を実現するには別の処理が必要だけど
少なくとも関数適用と二項演算子の計算が並ぶことはない
811デフォルトの名無しさん
2018/10/17(水) 12:47:09.36ID:NmM3N1fc812デフォルトの名無しさん
2018/10/17(水) 12:50:35.76ID:DKH+Jm9W >>811
どの言語をやるにしても、ちゃんとした理解には必要になるから頑張れ
どの言語をやるにしても、ちゃんとした理解には必要になるから頑張れ
813デフォルトの名無しさん
2018/10/17(水) 14:46:13.41ID:97sxRiiz >>807
イケてるかどうかなんて個人の好き嫌いだよ。
あなたの中に、こういう感じのコードは好きだけど、こういうのは嫌いというのがあって、
その基準に照らして好きなコードになっていたら、それはあなたの中ではイケてるコード、
嫌いなコードになっていたら、あなたの中ではイケてないコードということだ。
そして、好き嫌いの基準は人それぞれ、千差万別なんだよ。
他人の好き嫌いに無理に合わせる必要はない。
それを踏まえた上で、敢えて俺の好き嫌いを言うと、
俺は見通しが良くて、メンテしやすくて、発展させやすいコードが好きだ。
(宣言的ならなお良い)
だから、
・pureな計算とimpureなアクションを別の関数として分けているコードは好き。
分けていないコード大っ嫌い。
・高凝集度で低結合度なコードは好き。
逆は嫌い。
・1つの小さな仕事をさせている関数は好き。
いくつもの仕事をさせて肥えている関数は大嫌い。
・1つの役割だけをしっかり果たしているモジュールは好き。
ごった煮モジュールは大嫌い。
この基準でいくと、あなたのコードはまったくイケてない。
イケてるかどうかなんて個人の好き嫌いだよ。
あなたの中に、こういう感じのコードは好きだけど、こういうのは嫌いというのがあって、
その基準に照らして好きなコードになっていたら、それはあなたの中ではイケてるコード、
嫌いなコードになっていたら、あなたの中ではイケてないコードということだ。
そして、好き嫌いの基準は人それぞれ、千差万別なんだよ。
他人の好き嫌いに無理に合わせる必要はない。
それを踏まえた上で、敢えて俺の好き嫌いを言うと、
俺は見通しが良くて、メンテしやすくて、発展させやすいコードが好きだ。
(宣言的ならなお良い)
だから、
・pureな計算とimpureなアクションを別の関数として分けているコードは好き。
分けていないコード大っ嫌い。
・高凝集度で低結合度なコードは好き。
逆は嫌い。
・1つの小さな仕事をさせている関数は好き。
いくつもの仕事をさせて肥えている関数は大嫌い。
・1つの役割だけをしっかり果たしているモジュールは好き。
ごった煮モジュールは大嫌い。
この基準でいくと、あなたのコードはまったくイケてない。
814デフォルトの名無しさん
2018/10/18(木) 00:55:40.72ID:EL1XNa21 >>813
あざっす!勉強になりやした!精進しやす!
あざっす!勉強になりやした!精進しやす!
815デフォルトの名無しさん
2018/10/19(金) 20:20:03.11ID:XWoSmko3 >>813
そういうコードの設計センスはどうやって学んだのですか?
そういうコードの設計センスはどうやって学んだのですか?
816デフォルトの名無しさん
2018/10/19(金) 21:59:48.14ID:Jw4VQ9Ey >>815
大半はHaskell関係なくて、設計論の話
大半はHaskell関係なくて、設計論の話
817デフォルトの名無しさん
2018/10/19(金) 22:13:22.28ID:8Ox5P+xa テストどうすんべとか、保守どうしようとか、合成できるようにしたいとか
考えるとええんやで(こなみ)
考えるとええんやで(こなみ)
818デフォルトの名無しさん
2018/10/20(土) 12:25:50.44ID:u8BRF3D8819デフォルトの名無しさん
2018/10/24(水) 13:56:56.60ID:eHXbzfVY +が正格で:が正格じゃないということの意味を教えてください。
820デフォルトの名無しさん
2018/10/24(水) 15:31:36.63ID:eHXbzfVY じこかいけつしますたw
821デフォルトの名無しさん
2018/10/30(火) 14:24:11.19ID:pQwXzgRa stack の lts-12.x にはなぜ Yampa パッケージがないんだろ?
11.x の頃はあったのに。
11.x の頃はあったのに。
822デフォルトの名無しさん
2018/11/02(金) 08:09:05.71ID:QsNsn2yU stackでhp2prettyってどうやってインストールするの?
823デフォルトの名無しさん
2018/11/02(金) 15:49:58.24ID:98olsR6p824デフォルトの名無しさん
2018/11/03(土) 07:37:57.15ID:KyIBYeD2 >>823
ありがと。
ヘルプ見て、stack install == stack build --copy-bins って
カレントディレクトリのプロジェクトをビルドしてできた
実行ファイルをコピーするコマンドだと思いこんでた。
ありがと。
ヘルプ見て、stack install == stack build --copy-bins って
カレントディレクトリのプロジェクトをビルドしてできた
実行ファイルをコピーするコマンドだと思いこんでた。
825デフォルトの名無しさん
2018/11/07(水) 13:48:52.85ID:VCaKs67w 以前の GHC.Stats モジュールには GCStats 型がありましたが、
GHC 8,4,1 からは廃止され、代わりに RTSStats 型および GCDetails 型になったみたいです。
そこで質問です。
以前の currentBytesUsed 関数は今で言うとどの関数に対応、あるいは近いのでしょうか。
gcdetails_live_bytes 関数でしょうか。
GHC 8,4,1 からは廃止され、代わりに RTSStats 型および GCDetails 型になったみたいです。
そこで質問です。
以前の currentBytesUsed 関数は今で言うとどの関数に対応、あるいは近いのでしょうか。
gcdetails_live_bytes 関数でしょうか。
826デフォルトの名無しさん
2018/11/09(金) 08:25:29.12ID:rrSKeTdW f :: a -> b -> c
このコロン以降の部分って、英語圏の人は何て発音してるの?
"a to b to c" で良いの? 不自然かな?
このコロン以降の部分って、英語圏の人は何て発音してるの?
"a to b to c" で良いの? 不自然かな?
827デフォルトの名無しさん
2018/11/09(金) 11:20:46.63ID:DHGOZxva 英語圏のコミュニティで日本人なんだけど。。。って質問した方が早いのでは。。。
828デフォルトの名無しさん
2018/11/09(金) 11:46:57.84ID:z1XmYBYX そもそも日本人はどう読むんだよ
829デフォルトの名無しさん
2018/11/09(金) 11:47:53.76ID:p9aTnaT/ a arrow b arrow c
call a, b, and c
call a, b, and c
830デフォルトの名無しさん
2018/11/09(金) 12:13:53.97ID:vhYIIJha 漫画と同じだろ
台詞は発音するが絵は発音しない
a b c以外は発音しない
台詞は発音するが絵は発音しない
a b c以外は発音しない
831デフォルトの名無しさん
2018/11/09(金) 15:06:42.54ID:gCUmlTjd エフはエーからビーからシー
って読んでるわ
って読んでるわ
832デフォルトの名無しさん
2018/11/09(金) 19:57:17.40ID:Rc4d95qg >>828
ほんそれ
ほんそれ
833デフォルトの名無しさん
2018/11/09(金) 20:22:07.58ID:rrSKeTdW834デフォルトの名無しさん
2018/11/09(金) 20:43:11.08ID:Rc4d95qg それって、そもそも発音する場面なんてあるか?
って意味じゃ・・・
つか、無理にtoで読むとして
f::(a->b)->(a->c)
はどう読むつもりだよ
って意味じゃ・・・
つか、無理にtoで読むとして
f::(a->b)->(a->c)
はどう読むつもりだよ
835デフォルトの名無しさん
2018/11/09(金) 21:02:46.92ID:XtklT8Hz 身近にハスケルの話しできる人なんかいないから発音したこと無いぜ
836デフォルトの名無しさん
2018/11/09(金) 23:03:09.33ID:TUe4RwSk Haskell使って仕事してる人に聞いてみるしかないな
837デフォルトの名無しさん
2018/11/09(金) 23:07:51.58ID:9yt5Xmdj >>834
えっと、びーと、えっと、しー
えっと、びーと、えっと、しー
838デフォルトの名無しさん
2018/11/09(金) 23:19:25.21ID:ThtHVzoQ いや〜ん エッチィ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国が次々圧力も→高市政権の内情「日本は切る対抗カードなく、我慢しかない状況」と取材結果 [バイト歴50年★]
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★3 [♪♪♪★]
- 高市早苗首相。財務省の経済対策草案を「しょぼすぎる」と一刀両断し自らテコ入れ [バイト歴50年★]
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★4 [♪♪♪★]
- 日中関係悪化で「日本からもうすぐパンダがいなくなる」 中国SNSでトレンド1位に★2 [♪♪♪★]
- 【音楽】石川ひとみ「まちぶせ」はストーカーか 衆院委で質問 [膳摩漏★]
- 石破「フンっ!」→147円 高市「ぴょんぴょん!中国ばーか!」→157円 [834922174]
- 【速報】高市早苗「答弁撤回はしない」経済制裁へ★2 [931948549]
- 【速報】高市早苗「答弁撤回はしない」経済制裁へ [931948549]
- 【んな専🏡】ルーナイトたち~1週間お疲れ様なのらぁ~(・o・🍬)🏰
- 木村稔官房長官「台湾有事をめぐる高市発言は具体例として捉えられても仕方がない。」 [245325974]
- 【悲報】能登半島に高市早苗がやってくる! [616817505]
