関数型プログラミング言語 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
161デフォルトの名無しさん
2017/10/30(月) 00:12:43.74ID:XzbjUl3p 今はコンパイラに解決させるようにしているようだね
haskell - Foldl memory performance in GHC 8.0.x - Stack Overflow
https://stackoverflow.com/questions/42747159/foldl-memory-performance-in-ghc-8-0-x
haskell - Foldl memory performance in GHC 8.0.x - Stack Overflow
https://stackoverflow.com/questions/42747159/foldl-memory-performance-in-ghc-8-0-x
162デフォルトの名無しさん
2017/10/30(月) 00:31:06.68ID:VIeJ5TeT 中身としてはこれかな
foldlを直す - 純粋関数空間 http://tanakh.jp/posts/2014-04-07-foldl-is-broken.html
>>158のように素直に定義したらどっちでも変わらないのはその通りで、
foldlの方は末尾再帰の形になってるからseqすることでいい感じに動いてくれる
foldlを直す - 純粋関数空間 http://tanakh.jp/posts/2014-04-07-foldl-is-broken.html
>>158のように素直に定義したらどっちでも変わらないのはその通りで、
foldlの方は末尾再帰の形になってるからseqすることでいい感じに動いてくれる
163デフォルトの名無しさん
2017/10/30(月) 08:02:56.80ID:WTE/ZW3E164デフォルトの名無しさん
2017/10/30(月) 08:39:48.03ID:rELgjW3C foldlを使うことってほぼない気がする
だいたいfoldl'を使ってる
だいたいfoldl'を使ってる
165デフォルトの名無しさん
2017/10/30(月) 08:42:25.25ID:WTE/ZW3E >>160
その問題は、要するにグラフが準オイラー路になっているかどうかを判定するものだよ。
各駅を頂点、各路線を辺とするグラフが、
準オイラー路であれば彼らは計画達成できるし、
そうなっていなければ計画は達成できない。
グラフが準オイラー路であることと、
次数が奇数の頂点がちょうど2つ存在することとは同値。
要するに、一筆書きができるかどうかだよ。
Haskell で素直に拙くプログラムしても特に問題ないだろうね。
たとえば、N個の要素を持つInt型配列にaccumArrayで次数を集計して、
filterで奇数だけ濾し取り、要素数を調べる。
その問題は、要するにグラフが準オイラー路になっているかどうかを判定するものだよ。
各駅を頂点、各路線を辺とするグラフが、
準オイラー路であれば彼らは計画達成できるし、
そうなっていなければ計画は達成できない。
グラフが準オイラー路であることと、
次数が奇数の頂点がちょうど2つ存在することとは同値。
要するに、一筆書きができるかどうかだよ。
Haskell で素直に拙くプログラムしても特に問題ないだろうね。
たとえば、N個の要素を持つInt型配列にaccumArrayで次数を集計して、
filterで奇数だけ濾し取り、要素数を調べる。
166デフォルトの名無しさん
2017/10/30(月) 08:46:34.46ID:I1PPVtSx >>164
最適化で正格になるはずだけど明示的に正格版使う必要ある?
最適化で正格になるはずだけど明示的に正格版使う必要ある?
167デフォルトの名無しさん
2017/10/30(月) 08:49:38.37ID:WTE/ZW3E168デフォルトの名無しさん
2017/10/30(月) 09:33:39.10ID:032bj4sa haskellで連結判定って面倒そう
169デフォルトの名無しさん
2017/10/30(月) 11:24:36.92ID:WTE/ZW3E170デフォルトの名無しさん
2017/10/30(月) 11:28:25.84ID:WTE/ZW3E171デフォルトの名無しさん
2017/10/30(月) 11:57:14.99ID:I1PPVtSx 最適化O2からなの忘れてたすまん
172デフォルトの名無しさん
2017/10/30(月) 12:01:00.21ID:WTE/ZW3E >>160
Haskell が得意なアルゴリズムは分割統治なので、
できるだけ分割統治で解けないか考える、
というのが一般的なアプローチ。
だけど、この問題はそれでは解けそうもないので、
他の命令型言語と同じアルゴリズムを使うしかないと思う。
で、これは一筆書き問題なので、
「連結グラフがオイラー路かまたは準オイラー路なら一筆書き可能」
という定理を利用することになる。
オイラー路や準オイラー路の判定は簡単。
肝は連結グラフの判定だけど、これはもう素直に調べるしかない。
普通ならグラフ用ライブラリを使うところだけど、
競技ならまず使えないだろうから、2次元配列を使ってグラフを表現する。
そして頂点をひとつ決めて、そこから全頂点を辿れるか調べる。
これしかないね。
Haskellにはとことん向かない問題だと思う。
Haskell が得意なアルゴリズムは分割統治なので、
できるだけ分割統治で解けないか考える、
というのが一般的なアプローチ。
だけど、この問題はそれでは解けそうもないので、
他の命令型言語と同じアルゴリズムを使うしかないと思う。
で、これは一筆書き問題なので、
「連結グラフがオイラー路かまたは準オイラー路なら一筆書き可能」
という定理を利用することになる。
オイラー路や準オイラー路の判定は簡単。
肝は連結グラフの判定だけど、これはもう素直に調べるしかない。
普通ならグラフ用ライブラリを使うところだけど、
競技ならまず使えないだろうから、2次元配列を使ってグラフを表現する。
そして頂点をひとつ決めて、そこから全頂点を辿れるか調べる。
これしかないね。
Haskellにはとことん向かない問題だと思う。
173デフォルトの名無しさん
2017/10/30(月) 12:13:21.53ID:/4xzRH5O Haskellわからんからわからんのだがこれとか簡単にかけてそうなんだがそうでもないのか?
https://yukicoder.me/submissions/213035
https://yukicoder.me/submissions/213035
174デフォルトの名無しさん
2017/10/30(月) 12:24:13.36ID:oL0091Lz >>173
連結性の判定を忘れてた
連結性の判定を忘れてた
175デフォルトの名無しさん
2017/10/30(月) 12:25:22.45ID:/4xzRH5O >>174
よく見たらWrong Answerだったわ...orz
よく見たらWrong Answerだったわ...orz
176160
2017/10/30(月) 20:27:20.42ID:kEApsxXD177デフォルトの名無しさん
2017/10/30(月) 22:41:45.81ID:bEDc9q0a 連結判定だけじゃなくてグラフがらみは総じて苦手じゃないかな
178デフォルトの名無しさん
2017/10/31(火) 01:03:17.65ID:hkKKSLGp コンパイラはグラフ簡約するのに言語はグラフ苦手なのかよお
179デフォルトの名無しさん
2017/10/31(火) 01:46:52.15ID:HrVASABH つうか制約のない連結性の判定を深さ優先探索でするのは別にHaskellのせいじゃないだろ
180デフォルトの名無しさん
2017/10/31(火) 03:22:06.20ID:mBYeMGb0 グラフ苦手って競技プログラミングで使う場合のみやろ?普段使う分にはグラフライブラリに突っ込めばいいだけやし気にする必要無いやで!
181デフォルトの名無しさん
2017/10/31(火) 08:27:49.90ID:v6NvB8KL ライブラリでも、計算量は多くなるよね?
182デフォルトの名無しさん
2017/10/31(火) 08:33:52.06ID:ipWwIy6g わざわざ車輪の再発明させる競プロってなんなん
183デフォルトの名無しさん
2017/10/31(火) 08:44:38.36ID:DbaXyY3l Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
純粋な関数型言語でそんなこと可能なのですか?
純粋な関数型言語でそんなこと可能なのですか?
184デフォルトの名無しさん
2017/10/31(火) 08:50:21.95ID:DbaXyY3l185デフォルトの名無しさん
2017/10/31(火) 10:02:54.23ID:HrVASABH >>183
>Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
>純粋な関数型言語でそんなこと可能なのですか?
読む分にはO(1)に決まってる
そもそもData.Vectorのドキュメントに様々な関数の計算量が書いてあるだろ
>Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
>純粋な関数型言語でそんなこと可能なのですか?
読む分にはO(1)に決まってる
そもそもData.Vectorのドキュメントに様々な関数の計算量が書いてあるだろ
186デフォルトの名無しさん
2017/10/31(火) 10:40:05.74ID:DbaXyY3l187デフォルトの名無しさん
2017/10/31(火) 11:15:03.94ID:HrVASABH はあ?
インデクスからメモリ上の位置(たとえばポインタ)へのO(1)な関数があればいいだけだろ
通常の配列もハッシュも変わらん
インデクスからメモリ上の位置(たとえばポインタ)へのO(1)な関数があればいいだけだろ
通常の配列もハッシュも変わらん
188デフォルトの名無しさん
2017/10/31(火) 11:25:52.68ID:u1zcRbeB ライブラリとして提供されてるからそうであって、
Haskellの構文としては書けないって話では?
Haskellの構文としては書けないって話では?
189デフォルトの名無しさん
2017/10/31(火) 11:28:55.70ID:0GSWnPMN >>187
キッシヨ
キッシヨ
190デフォルトの名無しさん
2017/10/31(火) 11:31:18.73ID:0GSWnPMN ミスった
キスしよ、な
キスしよ、な
191デフォルトの名無しさん
2017/10/31(火) 11:33:38.62ID:DbaXyY3l192デフォルトの名無しさん
2017/10/31(火) 11:36:03.56ID:K+wdnCfv 純粋データ型のオブジェクトはすべて構築物
(つまり既存のオブジェクトから構築されたもの)
という視点を持たないとこの手の話は一生理解できんと思う
(つまり既存のオブジェクトから構築されたもの)
という視点を持たないとこの手の話は一生理解できんと思う
193デフォルトの名無しさん
2017/10/31(火) 11:46:17.59ID:DbaXyY3l194デフォルトの名無しさん
2017/10/31(火) 13:07:49.38ID:xZzZlui7 1 = \x _ _ ... -> x
2 = \_ x _ ... -> x
3 = \_ _ x ... -> x
~
という自然数を定義すれば
\i -> i a b c ...
で参照O(1)な配列の出来上がり
2 = \_ x _ ... -> x
3 = \_ _ x ... -> x
~
という自然数を定義すれば
\i -> i a b c ...
で参照O(1)な配列の出来上がり
195デフォルトの名無しさん
2017/10/31(火) 13:20:29.54ID:DbaXyY3l196デフォルトの名無しさん
2017/10/31(火) 13:30:02.62ID:xZzZlui7 >>195
\x y z ... -> \i -> i x y z ...
\x y z ... -> \i -> i x y z ...
197デフォルトの名無しさん
2017/10/31(火) 13:43:09.29ID:xihCdoaS C言語で実装してラップしてんじゃないの(知らんけど)
198デフォルトの名無しさん
2017/10/31(火) 13:47:50.97ID:DbaXyY3l >>196
すげーおまえ頭いいなって思ったが、すまん、
こっちの頭が悪すぎた、まだ何となくしか理解できん。
たとえば、リストから一次元配列を作る関数をつくってくれないか?
ずうずうしいと思ったら、ヒントだけでも。
fromList :: [a] -> 配列型 a
fromList xs = ムニャムニャ
すげーおまえ頭いいなって思ったが、すまん、
こっちの頭が悪すぎた、まだ何となくしか理解できん。
たとえば、リストから一次元配列を作る関数をつくってくれないか?
ずうずうしいと思ったら、ヒントだけでも。
fromList :: [a] -> 配列型 a
fromList xs = ムニャムニャ
199デフォルトの名無しさん
2017/10/31(火) 15:36:16.62ID:xihCdoaS C言語で実装してラップしてんじゃないの(知らんけど)
200デフォルトの名無しさん
2017/10/31(火) 15:50:28.40ID:xZzZlui7 >>198
いやチャーチエンコーディングのパクリだよ
fromList xs = foldl ($) (\x y z ... -> \i -> x y z ...) xs
実際は型チェックが通らないからアキュームレーターの関数を
data Func a b = Res b | Func (a -> Func a b)
みたいな型で作って結果をパターンマッチすればいい
いやチャーチエンコーディングのパクリだよ
fromList xs = foldl ($) (\x y z ... -> \i -> x y z ...) xs
実際は型チェックが通らないからアキュームレーターの関数を
data Func a b = Res b | Func (a -> Func a b)
みたいな型で作って結果をパターンマッチすればいい
201デフォルトの名無しさん
2017/10/31(火) 16:16:10.45ID:DbaXyY3l202デフォルトの名無しさん
2017/10/31(火) 18:15:23.97ID:gU/sNGWK 競プロで使えるグラフライブラリにData.Graphってのあるのな
Data.Graph
https://hackage.haskell.org/package/containers-0.5.10.2/docs/Data-Graph.html
Data.Graph
https://hackage.haskell.org/package/containers-0.5.10.2/docs/Data-Graph.html
203デフォルトの名無しさん
2017/10/31(火) 19:08:38.44ID:1toVIYFj >>202
上の問題でverticesとreachableの長さを比較すればと思ったら
verticesは辺の無い頂点も列挙する仕様だったわ
まあGraphの中身はリストの配列だから自分で数えればいいんだけど
上の問題でverticesとreachableの長さを比較すればと思ったら
verticesは辺の無い頂点も列挙する仕様だったわ
まあGraphの中身はリストの配列だから自分で数えればいいんだけど
204デフォルトの名無しさん
2017/10/31(火) 21:49:16.80ID:uNFhbghr 関数合成ってhoge.piyoよかhoge . piyoの方が可読性高い?
205デフォルトの名無しさん
2017/11/01(水) 00:06:04.05ID:viv8LMSD206デフォルトの名無しさん
2017/11/01(水) 00:26:27.90ID:llNAjsKg hackageのソースコード見ても合成のドットは離して書いてるの多いね
207デフォルトの名無しさん
2017/11/01(水) 00:27:10.19ID:WlWR964+208デフォルトの名無しさん
2017/11/01(水) 01:06:06.52ID:Fgn1cTLB 人間も間違えねえよってつっかかってくる人昔みかけた
そういう人が出たら、宗教戦争やめろっていうつもりだったのに
そういう人が出たら、宗教戦争やめろっていうつもりだったのに
209デフォルトの名無しさん
2017/11/01(水) 07:53:11.67ID:DzcCU70V 「大文字と小文字を間違えない」の主語は何かの戦争か
そもそも主語を書く必要があるのか
そもそも主語を書く必要があるのか
210デフォルトの名無しさん
2017/11/01(水) 09:43:47.82ID:55me074h データコンストラクタも大文字なので(ry
211デフォルトの名無しさん
2017/11/01(水) 11:37:03.55ID:DzcCU70V 最初の文字が大文字やドットなら特別な意味がありそう
最初ってどこなのかは正規表現で定義すれば間違いなさそう
最初ってどこなのかは正規表現で定義すれば間違いなさそう
212デフォルトの名無しさん
2017/11/04(土) 23:17:33.32ID:GxslH7p8 リスト内包表記がdo表記に一対一に対応するのは知っていますが、
言語拡張 TransformListComp によって拡張されたリスト内包表記も、
一対一に対応するdo表記があるのでしょうか。
then group by e using f の働きがどのような仕組みなのかよく分からないので、
対応するdo表記を調べて理解を深めたいです。
言語拡張 TransformListComp によって拡張されたリスト内包表記も、
一対一に対応するdo表記があるのでしょうか。
then group by e using f の働きがどのような仕組みなのかよく分からないので、
対応するdo表記を調べて理解を深めたいです。
213デフォルトの名無しさん
2017/11/05(日) 08:59:13.86ID:BXN9Zljm214デフォルトの名無しさん
2017/11/05(日) 11:02:14.73ID:33a+kqna >>213
いろいろ実験したり、GHCのユーザーガイドを読んだりしたところ、
then group by p using f の働きが理解できました。
しかし、結局のところ対応するdo表記は分かりませんでした。
そんなものはもともと無いのかもしれません。
もしかしたらCoreを出力してみると何か分かるかもしれませんが、
自分の中ではもう問題が解決しているので、そこまで調べるモチベーションがありません。
なので、ここでその結果を報告することはできません。
代わりに、then group by p using f がどのような働きになっているのか、
私の知見だけでも述べた方が良いでしょうか。
いろいろ実験したり、GHCのユーザーガイドを読んだりしたところ、
then group by p using f の働きが理解できました。
しかし、結局のところ対応するdo表記は分かりませんでした。
そんなものはもともと無いのかもしれません。
もしかしたらCoreを出力してみると何か分かるかもしれませんが、
自分の中ではもう問題が解決しているので、そこまで調べるモチベーションがありません。
なので、ここでその結果を報告することはできません。
代わりに、then group by p using f がどのような働きになっているのか、
私の知見だけでも述べた方が良いでしょうか。
215デフォルトの名無しさん
2017/11/05(日) 13:47:42.35ID:iHS/FHvi 知見は歓迎です
216デフォルトの名無しさん
2017/11/05(日) 14:29:15.46ID:g7Wivisu https://downloads.haskell.org/~ghc/7.8.3/docs/html/users_guide/syntax-extns.html#monad-comprehensions
> D[ e | Q then group by b using f, R ] = f (\Qv -> b) D[ Qv | Q ] >>= \ys ->
> case (fmap selQv1 ys, ..., fmap selQvn ys) of
> Qv -> D[ e | R ]
> where Qv is the tuple of variables bound by Q (and used subsequently)
> selQvi is a selector mapping Qv to the ith component of Qv
別にモナドで定義されてるからdoで定義してもいいけど
Qvから要素を取り出す方法がアドホックにしか書けないから
doを使わないにしろ一対一で対応するようには書けない
> D[ e | Q then group by b using f, R ] = f (\Qv -> b) D[ Qv | Q ] >>= \ys ->
> case (fmap selQv1 ys, ..., fmap selQvn ys) of
> Qv -> D[ e | R ]
> where Qv is the tuple of variables bound by Q (and used subsequently)
> selQvi is a selector mapping Qv to the ith component of Qv
別にモナドで定義されてるからdoで定義してもいいけど
Qvから要素を取り出す方法がアドホックにしか書けないから
doを使わないにしろ一対一で対応するようには書けない
217デフォルトの名無しさん
2017/11/05(日) 18:08:38.19ID:Rt4/SB7E Haskellの表記を楽にする6つのghc拡張 - Qiita
https://qiita.com/philopon/items/b812e43128654245e42d
https://qiita.com/philopon/items/b812e43128654245e42d
218デフォルトの名無しさん
2017/11/05(日) 23:15:17.53ID:s0bBqtdw >>217
MultiWayIfとBinaryLiterals以外は可読性落ちとるやないかーい
MultiWayIfとBinaryLiterals以外は可読性落ちとるやないかーい
219デフォルトの名無しさん
2017/11/05(日) 23:28:42.70ID:33a+kqna >>212 です。
then group by p using f の働きはいろいろ不思議な部分があるのですが、
すべての疑問は、then group by p using f で使う関数 f :: (a -> t) -> [a] -> [[a]] の第1引数は
どのような関数が渡されるのか、ということに集約されました。
(それが分かって初めて、これは then f by p の f でも同じだと気づきましたが、
こちらでは理解につまづかない程度の簡単な例しか扱っていなかったので)
この関数 f は、then group by p using f が現れるより左にある全てのバインダを要素に持つ組から p への関数
と考えれば納得がいきました。
たとえば、
[ (x, y) | x <- [1,2,1], y <- "ok", then group by x using groupWith]
ですと、then より左のバインダを要素に持つ組というのは、つまり
<1, o>, <1, k>, <2, o>, <2, k>, <1, o>, <1, k> といった組です。
(実際に内部で使われている実際のデータ型は分かりません)
このような組から x への関数なので、
g <1, o> = 1
g <1, k> = 1
g <2, o> = 2
g <2, k> = 2
という関数です。
このような関数 g が groupWith 関数の第1引数に渡されると考えると辻褄が合いました。
then group by p using f の働きはいろいろ不思議な部分があるのですが、
すべての疑問は、then group by p using f で使う関数 f :: (a -> t) -> [a] -> [[a]] の第1引数は
どのような関数が渡されるのか、ということに集約されました。
(それが分かって初めて、これは then f by p の f でも同じだと気づきましたが、
こちらでは理解につまづかない程度の簡単な例しか扱っていなかったので)
この関数 f は、then group by p using f が現れるより左にある全てのバインダを要素に持つ組から p への関数
と考えれば納得がいきました。
たとえば、
[ (x, y) | x <- [1,2,1], y <- "ok", then group by x using groupWith]
ですと、then より左のバインダを要素に持つ組というのは、つまり
<1, o>, <1, k>, <2, o>, <2, k>, <1, o>, <1, k> といった組です。
(実際に内部で使われている実際のデータ型は分かりません)
このような組から x への関数なので、
g <1, o> = 1
g <1, k> = 1
g <2, o> = 2
g <2, k> = 2
という関数です。
このような関数 g が groupWith 関数の第1引数に渡されると考えると辻褄が合いました。
220デフォルトの名無しさん
2017/11/13(月) 22:38:59.83ID:GpiHsSLN haskell始めてみたいんだけどまだプログラミング能力があまりないので不安
他の言語をどれくらい書けるようにしておくべき?
他の言語をどれくらい書けるようにしておくべき?
221デフォルトの名無しさん
2017/11/13(月) 23:15:58.10ID:IehbHsjb むしろ手続き型言語に慣れ親しんだ脳みそだと関数型は取っ付きにくいから
いきなりHaskellでいいと思うよ
いきなりHaskellでいいと思うよ
222デフォルトの名無しさん
2017/11/13(月) 23:27:39.67ID:ZUv/XWe7 >>221
Masterminds of Programming という本で Haskell 委員会のひとりが、
他言語をちゃんとできるヤツはHaskellも上手く使える、という趣旨のことを言ってた。
Masterminds of Programming という本で Haskell 委員会のひとりが、
他言語をちゃんとできるヤツはHaskellも上手く使える、という趣旨のことを言ってた。
223デフォルトの名無しさん
2017/11/13(月) 23:30:10.81ID:ZUv/XWe7 >>221
それどころか、いきなりHaskellをやるのはお勧めしない感じだった。
それどころか、いきなりHaskellをやるのはお勧めしない感じだった。
224デフォルトの名無しさん
2017/11/13(月) 23:30:57.19ID:PxhTPMZi >>222
「ちゃんと出来る」の意味が、常人と違う予感。
「ちゃんと出来る」の意味が、常人と違う予感。
225デフォルトの名無しさん
2017/11/13(月) 23:42:04.93ID:dMdke9KA いきなりHaskellの難点はどのHaskell入門書籍やサイトも基本的なプログラミング知識を前提としちゃってるとこかな
変数とか関数とかリストとかマップとか
でもHaskellというか関数型パラダイムにできるだけ早い時期から触れとくのは良いことだと思う
変数とか関数とかリストとかマップとか
でもHaskellというか関数型パラダイムにできるだけ早い時期から触れとくのは良いことだと思う
226デフォルトの名無しさん
2017/11/14(火) 00:36:12.17ID:XSI09cgL227デフォルトの名無しさん
2017/11/14(火) 00:42:09.25ID:Meoq/IF/ SICP読んでからhaskellやるのは大丈夫?
228デフォルトの名無しさん
2017/11/14(火) 02:30:14.88ID:RezF4qhu Haskellは日本語どころか
英語でググっても答えが見つからない問題にぶち当たる率が
他のメジャーな言語と比べると高すぎるから初学者向きじゃないよ
もくもく会に参加したり、Stack Overflowで質問したりと
双方向的な方法を挟まないと一定以上に到達するのは難しい
英語でググっても答えが見つからない問題にぶち当たる率が
他のメジャーな言語と比べると高すぎるから初学者向きじゃないよ
もくもく会に参加したり、Stack Overflowで質問したりと
双方向的な方法を挟まないと一定以上に到達するのは難しい
229デフォルトの名無しさん
2017/11/14(火) 11:28:30.93ID:eZNGHHYs 問題自体が難しい
だから答えが見つからない
と解釈するのが自然
問題自体をよく見ようとせず、SEOや脳味噌のことを考えるのは的外れだと思う
だから答えが見つからない
と解釈するのが自然
問題自体をよく見ようとせず、SEOや脳味噌のことを考えるのは的外れだと思う
230デフォルトの名無しさん
2017/11/14(火) 19:55:37.30ID:0CBPSjnu ocamlの元のmlで挫折しそうになった。
f#がたのしい
f#がたのしい
231デフォルトの名無しさん
2017/11/14(火) 20:17:46.83ID:WUG8DCiI 例えばC言語の楽しさを1とすると
haskell,ocaml,f#の楽しさはどれぐらい?
haskell,ocaml,f#の楽しさはどれぐらい?
232デフォルトの名無しさん
2017/11/14(火) 21:11:59.47ID:eZNGHHYs F#はC#の知識を前提とすることを許可されている感がある
箸の上げ下ろしどころか知識を得るのにも許可を必要とする異常な環境に適応したのがF#
箸の上げ下ろしどころか知識を得るのにも許可を必要とする異常な環境に適応したのがF#
233デフォルトの名無しさん
2017/11/14(火) 22:22:03.84ID:0CBPSjnu f#はなんかこう昔懐かしbasicの関数型言語版のよう
な気がする。
な気がする。
234デフォルトの名無しさん
2017/11/14(火) 22:22:45.27ID:0CBPSjnu haskell構文がやだ。
235デフォルトの名無しさん
2017/11/14(火) 22:58:23.51ID:LvvrWEBo236デフォルトの名無しさん
2017/11/14(火) 22:59:13.88ID:wshk46M/ F#固有のライブラリ使ったことないな
構文的にC#よりF#楽
あとはHaskell並みの肩推論あれば文句ないんだけど
Haskellは遅延評価使いどころを見つけづらい
構文的にC#よりF#楽
あとはHaskell並みの肩推論あれば文句ないんだけど
Haskellは遅延評価使いどころを見つけづらい
237デフォルトの名無しさん
2017/11/14(火) 23:31:10.95ID:lH5WJrT0 結構凝ってるみたいっすねえ
238デフォルトの名無しさん
2017/11/15(水) 01:49:26.34ID:9iJNvTMA むしろ構文が好きだわ
限りなく不要な物は省く的な
限りなく不要な物は省く的な
239デフォルトの名無しさん
2017/11/15(水) 07:22:37.14ID:1MOdQV57 インデントルールにたまにハマるくらいかな
一応ブレース&セミコロン方式でも書けるようだが
一応ブレース&セミコロン方式でも書けるようだが
240デフォルトの名無しさん
2017/11/15(水) 12:36:08.57ID:Lu+q1695 合成関数を左から右に書きたい
何か数学でそんな書き方もあったと思うんだけど忘れた
何か数学でそんな書き方もあったと思うんだけど忘れた
241デフォルトの名無しさん
2017/11/15(水) 17:52:48.58ID:C1PNunQ6 Control.Arrow の (>>>) 演算子使えばいい
($) の引数入れ替えたヴァージョンなら Data.Function の (&) 演算子
($) の引数入れ替えたヴァージョンなら Data.Function の (&) 演算子
242デフォルトの名無しさん
2017/11/15(水) 17:55:11.80ID:C1PNunQ6243デフォルトの名無しさん
2017/11/15(水) 21:31:38.92ID:ouxrorYh Preludeに引数を入れ替えるというだけの関数なかったっけ?
マニアック過ぎて忘れてしまった
マニアック過ぎて忘れてしまった
244デフォルトの名無しさん
2017/11/15(水) 22:05:39.40ID:C1PNunQ6 つ flip
全然マニアックじゃないよ……
全然マニアックじゃないよ……
245デフォルトの名無しさん
2017/11/16(木) 19:05:18.93ID:U25znXQF Haskellが競プロで得意なグラフ問題がatcoderでマラソン形式で出題されているらしい
246デフォルトの名無しさん
2017/11/16(木) 20:02:11.38ID:fiTPZdVA 誰もhaskell使ってないでしょ
247デフォルトの名無しさん
2017/11/16(木) 20:10:09.25ID:sSGm4ReW 使うものじゃないからな。
248デフォルトの名無しさん
2017/11/16(木) 20:21:11.26ID:F5ZZYHwp 競プロでHaskell使ってた人は皆Rustに移ったイメージ
249デフォルトの名無しさん
2017/11/16(木) 20:28:57.17ID:BHFP68Bt 競プロは普通に手続き型かつ破壊的の方がいいもんな
入力範囲も固定だし、Haskellで挑む理由がない
入力範囲も固定だし、Haskellで挑む理由がない
250デフォルトの名無しさん
2017/11/16(木) 21:32:29.59ID:F5ZZYHwp 関数型っぽく書くと実装が一瞬で完了する簡単な問題が結構あったりはする
251デフォルトの名無しさん
2017/11/16(木) 21:43:12.74ID:wcx5gPy1 競プロより Project Euler で付けた力の方が将来の糧になりそう
252デフォルトの名無しさん
2017/11/16(木) 22:35:40.89ID:1hTLcaK1 Haskellはアルゴリズムをうまくfold系で書ければ
融合則とかで綺麗さと速度を両立できる感じになるけど
うまく書けないとSTRefとか使うことになって
なぜHaskellやってるんだって気分になる
融合則とかで綺麗さと速度を両立できる感じになるけど
うまく書けないとSTRefとか使うことになって
なぜHaskellやってるんだって気分になる
253デフォルトの名無しさん
2017/11/17(金) 00:37:00.18ID:ehxZncBr ストリーム処理的にしか使ってない
254デフォルトの名無しさん
2017/11/17(金) 00:38:56.41ID:ehxZncBr ストリーム処理的にしか使ってない
https://ideone.com/kYgQxV
https://ideone.com/kYgQxV
255デフォルトの名無しさん
2017/11/17(金) 11:21:31.36ID:7fJDQyWy256デフォルトの名無しさん
2017/11/17(金) 12:39:19.61ID:edPG1sGH 別にIORefやSTRefを使ったっていいじゃない
FFIだってポインターだってあるじゃない
ただしStateモナド、テメーはダメだ
FFIだってポインターだってあるじゃない
ただしStateモナド、テメーはダメだ
257デフォルトの名無しさん
2017/11/17(金) 16:36:27.24ID:FedOcmK4 よく知らないけど
カーソル的なクラスと同じように使えるんじゃない?Stateって
Stateモナドに入るのがインスタンス生成で>>=がメソッドコール
カーソル的なクラスと同じように使えるんじゃない?Stateって
Stateモナドに入るのがインスタンス生成で>>=がメソッドコール
258デフォルトの名無しさん
2017/11/17(金) 17:56:56.51ID:oGefn9Ej 1 s -> (a, s)
2 s -> (a -> s -> s) -> s
3 (a -> s -> s) -> s -> s
4 (a -> s -> s) -> s -> [a] -> s
1がStateで4がfoldr
2 s -> (a -> s -> s) -> s
3 (a -> s -> s) -> s -> s
4 (a -> s -> s) -> s -> [a] -> s
1がStateで4がfoldr
259デフォルトの名無しさん
2017/11/17(金) 20:49:15.19ID:M/sHB851 Haskellって他人のコード読むと
▲ a b = □ . ○ $ map ■ $ (△ a) $ ▼ $ ◎ b []
where
◎ b xs = 〜長い処理〜
こんなんばかりで脳がパンクするんだが
▲ a b = □ . ○ $ map ■ $ (△ a) $ ▼ $ ◎ b []
where
◎ b xs = 〜長い処理〜
こんなんばかりで脳がパンクするんだが
260デフォルトの名無しさん
2017/11/17(金) 20:52:24.67ID:FaJpeIXU むしろ他人のコードでも割とサクサク読めるのがHaskellのメリットじゃね?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】「国立ガラガラじゃん!」 「タダ券ばら撒かないんだっけ?」天皇杯決勝、6万7750人収容のスタンドに目立つ空席 [鉄チーズ烏★]
- 中国の渡航自粛、影響は限定的 日本人客が来店しやすく [♪♪♪★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★14 [BFU★]
- ゼレンスキー氏、アメリカの支援失う危険あるとウクライナ国民に演説 米和平案めぐり [1ゲットロボ★]
- 台湾有事での集団的自衛権行使に賛成48.8%、「反対」が44.2% ★3 [♪♪♪★]
- 【英FT】国土の大部分を日本の残忍な占領下におかれたという苦しみの記憶を今なお抱え続けている中国 [1ゲットロボ★]
- 他サポ 2025-261
- ハム専ファンフェス
- @@@令和七年大相撲九州場所 vol.11@@@
- 京都競馬4回5日目エリザベス女王杯★3
- 【D専】
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1807
- 【高市朗報】ホタテ業者「あ、中国に禁輸されても全然困ってないです」 [931948549]
- 高市早苗「G20サミット、なめられない服を選びました。外交交渉でマウント取れる服買わないとなぁ」大炎上 [165981677]
- 中国、高市早苗を国連に提訴。「国際社会に問う」 [271912485]
- 【実況】博衣こよりのえちえちゼルダの伝説 ムジュラの仮面🧪 ★7
- 【高市悲報】観光地から中国人🇨🇳が消え始める。。。。。。。。。。。。。日本人さあ、ほんとにこれでいいのか??? [573041775]
- 【画像】俺の散歩コースだけどどう思う?
