関数型プログラミング言語 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
612デフォルトの名無しさん
2018/07/04(水) 06:46:15.75ID:We7MgVDS >>609
matplotlibやpandasあたりは、
そのためだけに、Python使うくらいのライブラリだから、
他の言語に使いたいライブラリがあれば、
その言語を使うで使い分けで良いんじゃない。
Excelの読み書きもなんかもPython使ってるよ。
matplotlibやpandasあたりは、
そのためだけに、Python使うくらいのライブラリだから、
他の言語に使いたいライブラリがあれば、
その言語を使うで使い分けで良いんじゃない。
Excelの読み書きもなんかもPython使ってるよ。
613デフォルトの名無しさん
2018/07/04(水) 07:58:03.61ID:RQ3++Y83 HaskellのシンタックスのPythonが欲しい
614デフォルトの名無しさん
2018/07/04(水) 09:21:13.05ID:NlExtjkH >>611
HaskellのComplexで四則演算などをしようとすると
各要素はRealFloatクラスのインスタンス (いわゆる浮動小数点数)である必要がある
Ratio a はRealFloatのインスタンスになれないので計算できない
こうなってる理由はざっくり言えばHaskellのNumが悪い
(参考: https://blog.miz-ar.info/2016/06/haskell-num-class/#abs_signum )
HaskellのComplexで四則演算などをしようとすると
各要素はRealFloatクラスのインスタンス (いわゆる浮動小数点数)である必要がある
Ratio a はRealFloatのインスタンスになれないので計算できない
こうなってる理由はざっくり言えばHaskellのNumが悪い
(参考: https://blog.miz-ar.info/2016/06/haskell-num-class/#abs_signum )
615デフォルトの名無しさん
2018/07/04(水) 11:08:34.25ID:y2B7jfXw616デフォルトの名無しさん
2018/07/04(水) 11:21:15.35ID:rsOJUgV3 >>609
例えば QuickPlot (https://github.com/sheegl/QuickPlot)
そこそこモダンな描画を行うライブラリでしたが、
README.md にあるとおり、もうメンテナンスは行われていません。
ビジュアライゼーションサーバーのクライアントを作る方がより効率的だから、だそうです。
私もそう思います。
haskell でグラフ描画ライブラリを作るなら、
・データの作成 (取得や加工、整形など)
・サーバーへアクセスするためのインターフェース
この2点の実装に絞りたいですね。
データの作成は、python では Pandas のデータフレームを挙げていますが、
haskell ではこんなのはどうでしょうか。
https://github.com/chrisdone/labels/tree/master/labels-explore
あと、gnuplot を卑下してるようですが、そんなにダメですか?
私には視認性の良いグラフに見えますけど。
Wikipedia のグラフにも使われていますし。
例えば QuickPlot (https://github.com/sheegl/QuickPlot)
そこそこモダンな描画を行うライブラリでしたが、
README.md にあるとおり、もうメンテナンスは行われていません。
ビジュアライゼーションサーバーのクライアントを作る方がより効率的だから、だそうです。
私もそう思います。
haskell でグラフ描画ライブラリを作るなら、
・データの作成 (取得や加工、整形など)
・サーバーへアクセスするためのインターフェース
この2点の実装に絞りたいですね。
データの作成は、python では Pandas のデータフレームを挙げていますが、
haskell ではこんなのはどうでしょうか。
https://github.com/chrisdone/labels/tree/master/labels-explore
あと、gnuplot を卑下してるようですが、そんなにダメですか?
私には視認性の良いグラフに見えますけど。
Wikipedia のグラフにも使われていますし。
617デフォルトの名無しさん
2018/07/04(水) 14:52:23.98ID:okkM4kUQ gnuplot も悪いとまでは言わないが、昔の解像度が低く色数もあまりなかった時代に最適化されてる気がするんだよ
Python のグラフと、微妙に用途が違うのかもしれないが
Python のグラフ
ttps://seaborn.pydata.org/examples/index.html
Python のグラフと、微妙に用途が違うのかもしれないが
Python のグラフ
ttps://seaborn.pydata.org/examples/index.html
618デフォルトの名無しさん
2018/07/04(水) 16:23:51.06ID:rsOJUgV3 >>617
すいません、違いがよくまかりません。
gnuplot デモ
http://gnuplot.info/demos/
私には低解像度&少色数時代の環境に最適化されているようにはどうしても見えないです。
すいません、違いがよくまかりません。
gnuplot デモ
http://gnuplot.info/demos/
私には低解像度&少色数時代の環境に最適化されているようにはどうしても見えないです。
619デフォルトの名無しさん
2018/07/04(水) 19:14:51.99ID:J/c/gMh10 会社のプレゼンに使うならPythonの例の方がオシャレに見える
しかしオシャレなグラフというのは見栄え以外の面では役に立たない
しかしオシャレなグラフというのは見栄え以外の面では役に立たない
620デフォルトの名無しさん
2018/07/04(水) 21:47:59.97ID:gFgZc5FG MY6
621デフォルトの名無しさん
2018/07/05(木) 02:06:23.28ID:4KPVS4+Q その無駄に思えるオシャレが大事なんだぜ
622デフォルトの名無しさん
2018/07/05(木) 06:27:20.02ID:fgqUaerO Pythonの例として上げられてるのは、seabornという
1. Rからデザインと
2. 人気のあるデータ表示方法
をパクって、同じことをmatplotlib.pyplotを裏で使ってお手軽にできるようにしたパッケージであって、
素のmatplotlib.pyplotのグラフはgnuplotのデフォルトと変わりのない見た目ですよ
gnuplotだって、山ほど表示用オプションがあって綺麗に表示できます
1. Rからデザインと
2. 人気のあるデータ表示方法
をパクって、同じことをmatplotlib.pyplotを裏で使ってお手軽にできるようにしたパッケージであって、
素のmatplotlib.pyplotのグラフはgnuplotのデフォルトと変わりのない見た目ですよ
gnuplotだって、山ほど表示用オプションがあって綺麗に表示できます
623デフォルトの名無しさん
2018/07/05(木) 09:04:27.74ID:HeNpkv8u >>622
gnuplot でお手軽に綺麗に表示できるようになってるの?
話が逸れたが、ある程度データ構造が共通に使えて
目的に応じて使えるかなり機能も見た目も
良くできたグラフライブラリが幾つかある、ってのが Python の状況だよ
個人的にはHaskell でそれが出来りゃ嬉しいが、、
Python は実行しないとエラーが出ないから、げんなりする時もある
教えてもらった labels- explorer は面白そうなんで見てみるよ
gnuplot でお手軽に綺麗に表示できるようになってるの?
話が逸れたが、ある程度データ構造が共通に使えて
目的に応じて使えるかなり機能も見た目も
良くできたグラフライブラリが幾つかある、ってのが Python の状況だよ
個人的にはHaskell でそれが出来りゃ嬉しいが、、
Python は実行しないとエラーが出ないから、げんなりする時もある
教えてもらった labels- explorer は面白そうなんで見てみるよ
624デフォルトの名無しさん
2018/07/05(木) 12:35:27.07ID:aP+h4Ji7 >>623
綺麗にできるかどうかは使用者のセンスに依ると思います。
python の方のサンプルは、単に淡い色を使い、
線を太めに表示しているだけに見えますが、違いますか?
他に python のグラフならではの特徴があれば言ってください。
下記のような設計のライブラリがあればあなたの要望は満たされますか?
1. 見た目が python のサンプルの様になる「デザインのプリセット」がある。
2. pandas のデータフレームに似た使い勝手の「2次元の表」からグラフを生成できる。
3. 上記1. 2. を満たせば、グラフの生成自体は gnuplot に任せても良い。
綺麗にできるかどうかは使用者のセンスに依ると思います。
python の方のサンプルは、単に淡い色を使い、
線を太めに表示しているだけに見えますが、違いますか?
他に python のグラフならではの特徴があれば言ってください。
下記のような設計のライブラリがあればあなたの要望は満たされますか?
1. 見た目が python のサンプルの様になる「デザインのプリセット」がある。
2. pandas のデータフレームに似た使い勝手の「2次元の表」からグラフを生成できる。
3. 上記1. 2. を満たせば、グラフの生成自体は gnuplot に任せても良い。
625デフォルトの名無しさん
2018/07/05(木) 18:25:11.62ID:rB4OVQ4f 一見丁寧に見えてなかなかに辛辣でワロた。
626デフォルトの名無しさん
2018/07/05(木) 18:32:51.78ID:Ia+ptacm そんなところ頑張りたくないからデフォルトで一般受けする図を出せる奴が欲しいってだけの議論でなんでこんな白熱するんだ
627デフォルトの名無しさん
2018/07/05(木) 18:54:20.69ID:rB4OVQ4f628デフォルトの名無しさん
2018/07/05(木) 21:16:31.45ID:aP+h4Ji7 勘違いしているようですが、python 視点とかはどうでもいいです。
要は、希望されている機能がどれだけ楽に実装できるかが問題なんです。
その「頑張りたくないからデフォルトで」がプリセットの提供で満たせ、
かつ gnuplot を使ってもいいのなら、
見た目の部分は頭をそれほど使わず実装できそうです。
また、データフレーム的なデータ構造も、
もうメンテされてなさそうですが、labels-explore で賄えます。
となれば、ライブラリの形はインターフェースを簡易化したラッパー的なもので十分。
一から作るより遙かに楽です。
でも、私の指摘の他に python のグラフならではの特徴があり、
それを求められているのであれば、実装が難しくなり、
正直腰が引けます。
そのための確認です。
要は、希望されている機能がどれだけ楽に実装できるかが問題なんです。
その「頑張りたくないからデフォルトで」がプリセットの提供で満たせ、
かつ gnuplot を使ってもいいのなら、
見た目の部分は頭をそれほど使わず実装できそうです。
また、データフレーム的なデータ構造も、
もうメンテされてなさそうですが、labels-explore で賄えます。
となれば、ライブラリの形はインターフェースを簡易化したラッパー的なもので十分。
一から作るより遙かに楽です。
でも、私の指摘の他に python のグラフならではの特徴があり、
それを求められているのであれば、実装が難しくなり、
正直腰が引けます。
そのための確認です。
629デフォルトの名無しさん
2018/07/05(木) 21:59:46.30ID:LtuS5J6M 普通にいける範囲なら実装してくれるってこと……?
神かよ
神かよ
630デフォルトの名無しさん
2018/07/05(木) 22:39:32.46ID:JLdZJLqI Pythonならでは、って訳じゃないが(むしろ Rのパクリだと思うが)
facet とかいうグラフを二次元の表に並べたオシャレなグラフは欲しい
軸はグラフ毎に共通にできたりバラバラにできたりする
seaborn の facetgrid ってクラス見てくれ、map でグラフ書いたりしてて、ちょっと関数型言語の影響がありそうだから
あとは逆にHaskell ならではの良さが出るかどうかだな
facet とかいうグラフを二次元の表に並べたオシャレなグラフは欲しい
軸はグラフ毎に共通にできたりバラバラにできたりする
seaborn の facetgrid ってクラス見てくれ、map でグラフ書いたりしてて、ちょっと関数型言語の影響がありそうだから
あとは逆にHaskell ならではの良さが出るかどうかだな
631デフォルトの名無しさん
2018/07/05(木) 23:17:35.48ID:mFkifadT > Haskellならではの良さ
フーム
フーム
632デフォルトの名無しさん
2018/07/05(木) 23:22:55.84ID:aP+h4Ji7 >>630
複数のグラフを並べるのは、gnuplot では、このサンプルの一番下のものですね。
http://gnuplot.sourceforge.net/demo_5.0/layout.html
すみませんが、python 自体は昔に少し触ったくらいで殆ど門外漢です。
不慣れなものを調べるのは面倒で、そこまで労力や時間をかけたくないです。
あくまで、暇ができるのでやってみましょうか、という話です。
なので、実装してほしい事は自分の口で、
python を知らない者にも分かるように説明してください。
それでも、あまりに大変そうならお断りするかも知れませんが。
あと何度も言いますが、オシャレなグラフになるかどうかは個人のセンスですので、
そんなものはライブラリに期待しないでください。
ある程度のプリセットは用意しようと思いますが、あくまで私のセンスです。
普通は利用者がパラメーターを調整して自分でオシャレに仕上げるものです。
複数のグラフを並べるのは、gnuplot では、このサンプルの一番下のものですね。
http://gnuplot.sourceforge.net/demo_5.0/layout.html
すみませんが、python 自体は昔に少し触ったくらいで殆ど門外漢です。
不慣れなものを調べるのは面倒で、そこまで労力や時間をかけたくないです。
あくまで、暇ができるのでやってみましょうか、という話です。
なので、実装してほしい事は自分の口で、
python を知らない者にも分かるように説明してください。
それでも、あまりに大変そうならお断りするかも知れませんが。
あと何度も言いますが、オシャレなグラフになるかどうかは個人のセンスですので、
そんなものはライブラリに期待しないでください。
ある程度のプリセットは用意しようと思いますが、あくまで私のセンスです。
普通は利用者がパラメーターを調整して自分でオシャレに仕上げるものです。
633デフォルトの名無しさん
2018/07/06(金) 00:29:48.55ID:qcgYo1MM それはいけない。
現にSeaborneはおしゃれに仕上げて来ているので、Pythonならライブラリに期待できるのにHaskellでは期待出来ないということになってしまう
現にSeaborneはおしゃれに仕上げて来ているので、Pythonならライブラリに期待できるのにHaskellでは期待出来ないということになってしまう
634デフォルトの名無しさん
2018/07/06(金) 01:50:57.76ID:nHf3/Uiq >>633
プログラミング言語を用いてグラフを作る目的は、
データの取得、加工、整形までをサクッとプログラムしたのだから、
そのデータの全体像を捉えるための可視化も「ついでに」してしまおうというもの。
つまり、プロセッシングしたデータの特徴を「すぐに見たい」という要求に応えるもの。
その様な目的のグラフに求めるのは、データの様相を正しく映すこと。
オシャレなんて入る余地は微塵もありません。
(例えば haskell には使用メモリ量をプロファイルしたデータのグラフ化ツールがありますが、
そのグラフにオシャレさは必要でしょうか)
もし、人にカッコイい思われるグラフを作りたいとか、
人にインパクトを与えるグラフを作りたいという目的ならば、
なにもプログラミング言語を使わなくてもいい。
というのが、古臭いかもしれませんが、私の考えです。
なので、あくまでオシャレなグラフを作るライブラリを求めているのでしたら、
私のモチベーションは大きく下がるので、
この件から降ります。
プログラミング言語を用いてグラフを作る目的は、
データの取得、加工、整形までをサクッとプログラムしたのだから、
そのデータの全体像を捉えるための可視化も「ついでに」してしまおうというもの。
つまり、プロセッシングしたデータの特徴を「すぐに見たい」という要求に応えるもの。
その様な目的のグラフに求めるのは、データの様相を正しく映すこと。
オシャレなんて入る余地は微塵もありません。
(例えば haskell には使用メモリ量をプロファイルしたデータのグラフ化ツールがありますが、
そのグラフにオシャレさは必要でしょうか)
もし、人にカッコイい思われるグラフを作りたいとか、
人にインパクトを与えるグラフを作りたいという目的ならば、
なにもプログラミング言語を使わなくてもいい。
というのが、古臭いかもしれませんが、私の考えです。
なので、あくまでオシャレなグラフを作るライブラリを求めているのでしたら、
私のモチベーションは大きく下がるので、
この件から降ります。
635デフォルトの名無しさん
2018/07/06(金) 02:04:10.34ID:qcgYo1MM >>634
そういう考えなら降りた方が良いと思うよ
そういう考えなら降りた方が良いと思うよ
636デフォルトの名無しさん
2018/07/06(金) 05:21:13.62 なんでオシャレにしないといけないんですか(正論)
637デフォルトの名無しさん
2018/07/06(金) 06:38:28.09ID:hZ+CPQ2X 自己肯定感かな
論理に自信があるなら論理だけでいいがそうでなければオシャレが必要なような気がする
論理に自信があるなら論理だけでいいがそうでなければオシャレが必要なような気がする
638デフォルトの名無しさん
2018/07/06(金) 06:41:34.00ID:2hmUlp+S 何がオシャレなのかを定義して
正確に人に伝えるところからじゃないの?
正確に人に伝えるところからじゃないの?
639デフォルトの名無しさん
2018/07/06(金) 07:12:51.82ID:hZ+CPQ2X もし定義できないならできないと伝えるのが正しい言葉なんです
640デフォルトの名無しさん
2018/07/06(金) 07:46:50.10ID:vkH0MZEq ユーザーは最初から見た目を重視してんのに、ここにきていきなりオシャレは必要ないって突っ返すのは、
さすがにPythonがどうとかHaskellがどう以前にコミュニケーション不全
さすがにPythonがどうとかHaskellがどう以前にコミュニケーション不全
641デフォルトの名無しさん
2018/07/06(金) 08:37:44.78ID:ODtONBJi 万能なプリセットなんておれは期待してないから、
適当なのを真似るだけで全然問題ないよ
ただ別に金出してるわけでもないから、おれは好き勝手書いてるけど別に従う必要はないよ
あとちょっとグラフに対するおれの感覚と違っているようだから書いておく
少なくとも今は、一種類のデータだけじゃなく、沢山の種類のデータを見たい人がいるんだよ。
そういう人にとっては、情報は圧縮されていて欲しい。忙しいから、全体を見たいんだ。
例えば一台の使用メモリ量じゃなく50台のを見たい、とかだよ。
そんな時に、50枚のグラフを渡されて一個一個が完璧に可視化しているでしょ、とか言われたら困る。
画面に収まるようにするには、削ってもいい情報を削り、例えばfacetみたいな方法でまとめるしかない。
かといって圧縮しすぎても分からなくなるし難しいけどね。
適当なのを真似るだけで全然問題ないよ
ただ別に金出してるわけでもないから、おれは好き勝手書いてるけど別に従う必要はないよ
あとちょっとグラフに対するおれの感覚と違っているようだから書いておく
少なくとも今は、一種類のデータだけじゃなく、沢山の種類のデータを見たい人がいるんだよ。
そういう人にとっては、情報は圧縮されていて欲しい。忙しいから、全体を見たいんだ。
例えば一台の使用メモリ量じゃなく50台のを見たい、とかだよ。
そんな時に、50枚のグラフを渡されて一個一個が完璧に可視化しているでしょ、とか言われたら困る。
画面に収まるようにするには、削ってもいい情報を削り、例えばfacetみたいな方法でまとめるしかない。
かといって圧縮しすぎても分からなくなるし難しいけどね。
642デフォルトの名無しさん
2018/07/06(金) 10:10:20.21ID:nHf3/Uiq >>641
> 画面に収まるようにするには、削ってもいい情報を削り、例えばfacetみたいな方法でまとめるしかない。
> かといって圧縮しすぎても分からなくなるし難しいけどね。
私は「全体像」を捉えるための可視化と言っています。
細部を見るための可視化とは言っていません。
(50個分のグラフで表されるデータの全体像を捕らえたいという要望に、
50枚のグラフを作るなど愚の骨頂)
そして、それはあなたがオシャレではないと感じている gnuplot でできますよね。
gnuplot のサンプル見ましたか?
gnuplot でもできることは理解したけど、
オシャレではないので却下という事ですか?
> 画面に収まるようにするには、削ってもいい情報を削り、例えばfacetみたいな方法でまとめるしかない。
> かといって圧縮しすぎても分からなくなるし難しいけどね。
私は「全体像」を捉えるための可視化と言っています。
細部を見るための可視化とは言っていません。
(50個分のグラフで表されるデータの全体像を捕らえたいという要望に、
50枚のグラフを作るなど愚の骨頂)
そして、それはあなたがオシャレではないと感じている gnuplot でできますよね。
gnuplot のサンプル見ましたか?
gnuplot でもできることは理解したけど、
オシャレではないので却下という事ですか?
643デフォルトの名無しさん
2018/07/06(金) 11:23:26.70 長い棒グラフを端折る為に、下端を0以外の数値にしちゃうとか、マナー違反しない限りもう好きにやってくれ
644デフォルトの名無しさん
2018/07/06(金) 11:46:42.42ID:aeaUac9w オシャレって結局UXだからね
手軽に良いUXが得られる方を使うのは自然っちゃ自然なわけで
手軽に良いUXが得られる方を使うのは自然っちゃ自然なわけで
645デフォルトの名無しさん
2018/07/06(金) 14:15:19.37ID:hZ+CPQ2X UXを定義できないなら予測もできない
予測できると思ってるならやっぱり定義するべき
予測できると思ってるならやっぱり定義するべき
646デフォルトの名無しさん
2018/07/06(金) 18:44:45.57ID:aeaUac9w UX自体の定義は単純だよね
プロダクトによってユーザーが得る経験
良し悪しになると一意には定まらないけど良い悪いのアンケでも取って統計的有意差を得られれば良い悪いとしていいと思う
もし客観主義として定義可能なものしか定義と認めないと言うならお手上げだ
良いUXが得られるとされるプロセスには既にアンケなどによるユーザ要求の明確化が含まれてしまうからね
プロダクトによってユーザーが得る経験
良し悪しになると一意には定まらないけど良い悪いのアンケでも取って統計的有意差を得られれば良い悪いとしていいと思う
もし客観主義として定義可能なものしか定義と認めないと言うならお手上げだ
良いUXが得られるとされるプロセスには既にアンケなどによるユーザ要求の明確化が含まれてしまうからね
647デフォルトの名無しさん
2018/07/07(土) 09:26:18.48ID:IVdrrdB1 アンケ取って結果を発表するところまで全部がUXになるからお手上げだな
放○線を測定して数値を報道するみたいなUXだ
放○線を測定して数値を報道するみたいなUXだ
648デフォルトの名無しさん
2018/07/07(土) 11:29:34.03ID:o7Nl1O6h 出来ない出来ないと言い訳ばかりして実際出来ているPythonから目をそらす
649デフォルトの名無しさん
2018/07/07(土) 11:58:08.73ID:IVdrrdB1 プロシュー○「出来る…そんな言葉は使う必要がねーんだ。」
650デフォルトの名無しさん
2018/07/07(土) 12:00:36.05 たかがグラフ一つでいつまでもスレを汚さないで
もっと本格的な話をして
もっと本格的な話をして
651デフォルトの名無しさん
2018/07/07(土) 21:46:46.78ID:amcAQv9O 質問
let a = takeWhile p $ sort xs
これって、どこまでソート処理されるかは、
xs の並び方と条件 p によるよね
(厳密にはaの評価方法によるけど)
今のsortの実装は確かマージソートだったはずだから、
極端な話、条件に合う要素がただ一つだけ先頭にあれば、
ソート処理はすぐに終わると思っていい?
let a = takeWhile p $ sort xs
これって、どこまでソート処理されるかは、
xs の並び方と条件 p によるよね
(厳密にはaの評価方法によるけど)
今のsortの実装は確かマージソートだったはずだから、
極端な話、条件に合う要素がただ一つだけ先頭にあれば、
ソート処理はすぐに終わると思っていい?
652デフォルトの名無しさん
2018/07/07(土) 23:14:16.03ID:CxD5piUN >>651
そういう意図なら
sort $ takeWhile p xs
じゃないかな
最初に書いてある式だと、takeWhile p が引数のリストを評価しようとしたときに
sort xsの第一要素を見る必要があるのでxsをソートし終わらないと評価が進まないはず
そういう意図なら
sort $ takeWhile p xs
じゃないかな
最初に書いてある式だと、takeWhile p が引数のリストを評価しようとしたときに
sort xsの第一要素を見る必要があるのでxsをソートし終わらないと評価が進まないはず
653デフォルトの名無しさん
2018/07/08(日) 00:09:13.07ID:Xnl3te8c マージソートでマージが遅延されるならhead $ sort xsはO(n)だと思う
いい感じの説明用コードが思いつかないけど
あとたぶん例のクイックソートも
いい感じの説明用コードが思いつかないけど
あとたぶん例のクイックソートも
654デフォルトの名無しさん
2018/07/08(日) 00:15:59.84ID:Xnl3te8c あークイックソートは先頭だけでも最悪O(n^2)になったりするか
655デフォルトの名無しさん
2018/07/08(日) 01:32:29.33ID:fmVgo5Ue656デフォルトの名無しさん
2018/07/08(日) 01:40:40.69ID:fmVgo5Ue ふと思いついたが、比較関数に unsafePerformIO を入れて比較回数をカウントすれば分かるかも
今は実験環境が無いから、起きたら試してみる
お騒がせしてごめん、という結果になるかも
お休み、お前ら
今は実験環境が無いから、起きたら試してみる
お騒がせしてごめん、という結果になるかも
お休み、お前ら
657デフォルトの名無しさん
2018/07/08(日) 09:12:56.04ID:fmVgo5Ue 実験したら、やっぱり評価に必要な部分しかソートされなかったよ
実験は takeWhile じゃなく take でやった
[実験コード]
ucomp :: IORef Int -> Int -> Int -> Ordering
ucomp ref x y = unsafePerformIO $ do
modifyIORef ref (+1)
return $ compare x y
main = do
let g = mkStdGen 1
let xs = shuffle' [1..8] 8 g
rc <- newIORef 0
let ys = take 8 $ sortBy (ucomp rc) xs
putStrLn $ show $ maximum ys
c <- readIORef rc
putStrLn $ show c
take で取り出す要素数を8個と3個で実験し、show c の結果を比較
8個 c=19
3個 c=14
やっぱ遅延評価ってイイね
ベスト3を決めるのに他言語みたいに全部を評価する必要がない
ちなみに、100万個の要素でもやってみた
all c=19237801
3個 c=1413225
質問したけど、ひとりで納得してしまった、すまん
実験は takeWhile じゃなく take でやった
[実験コード]
ucomp :: IORef Int -> Int -> Int -> Ordering
ucomp ref x y = unsafePerformIO $ do
modifyIORef ref (+1)
return $ compare x y
main = do
let g = mkStdGen 1
let xs = shuffle' [1..8] 8 g
rc <- newIORef 0
let ys = take 8 $ sortBy (ucomp rc) xs
putStrLn $ show $ maximum ys
c <- readIORef rc
putStrLn $ show c
take で取り出す要素数を8個と3個で実験し、show c の結果を比較
8個 c=19
3個 c=14
やっぱ遅延評価ってイイね
ベスト3を決めるのに他言語みたいに全部を評価する必要がない
ちなみに、100万個の要素でもやってみた
all c=19237801
3個 c=1413225
質問したけど、ひとりで納得してしまった、すまん
658デフォルトの名無しさん
2018/07/08(日) 09:49:58.54ID:ZNji3Zip >>657
>ベスト3を決めるのに他言語みたいに全部を評価する必要がない
別に他言語でも全部を評価する必要はない。
https://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
>ベスト3を決めるのに他言語みたいに全部を評価する必要がない
別に他言語でも全部を評価する必要はない。
https://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
659デフォルトの名無しさん
2018/07/08(日) 10:45:22.88ID:JJmFxw3L どんな言語だろうが全部ソートすれば O(n*log(n)) で最小値や最大値を探すのは O(n)
この n と n*log(n) の差を無視できないなら
そもそも n と 100*n の差を無視するのもダメじゃないかと思う
この n と n*log(n) の差を無視できないなら
そもそも n と 100*n の差を無視するのもダメじゃないかと思う
660デフォルトの名無しさん
2018/07/08(日) 11:20:47.41ID:fmVgo5Ue >>658
いや、そうじゃなくてさ
上位m個の選択処理とソート処理とをソース上ではきっちり分けてるじゃん
ソースを読む人間にとってはすげー読みやすいわけよ
なのに内部処理的には2つが連携して、
必要なところまでしかソートされないだろ
選択処理のためにワザワザ特殊なソート処理をしなくてもさ
そこがすげーって感動してるんだよ
いや、そうじゃなくてさ
上位m個の選択処理とソート処理とをソース上ではきっちり分けてるじゃん
ソースを読む人間にとってはすげー読みやすいわけよ
なのに内部処理的には2つが連携して、
必要なところまでしかソートされないだろ
選択処理のためにワザワザ特殊なソート処理をしなくてもさ
そこがすげーって感動してるんだよ
661デフォルトの名無しさん
2018/07/08(日) 11:30:44.71ID:Xnl3te8c まあソートなんて如何にもキャッシュ次第なアルゴリズムで
連結リストと遅延評価のO(N)が配列と正格評価のO(NlogN)に
現実的なNの範囲で勝てるのかものかどうか・・・
連結リストと遅延評価のO(N)が配列と正格評価のO(NlogN)に
現実的なNの範囲で勝てるのかものかどうか・・・
662デフォルトの名無しさん
2018/07/08(日) 13:00:05.06ID:MJ8iSrG7 まるで永久機関の話を見ているようだ
663デフォルトの名無しさん
2018/07/08(日) 22:57:14.98ID:wt6yCeB5 具体例や比喩で抽象度を下げるのは良い
だが「永久機関っぽいもの」の集合を作ったらむしろ抽象度が上がり収拾がつかなくなる
だが「永久機関っぽいもの」の集合を作ったらむしろ抽象度が上がり収拾がつかなくなる
664デフォルトの名無しさん
2018/07/09(月) 10:04:31.05ID:pOD9hGUD arrayパッケージのData.Array.(!)はO(1)ですか。
665デフォルトの名無しさん
2018/07/11(水) 00:08:42.37ID:l1CMhfek Haskellの採用とユーザ満足度が向上
https://www.infoq.com/jp/news/2018/07/haskell-user-survey-2018
https://www.infoq.com/jp/news/2018/07/haskell-user-survey-2018
666デフォルトの名無しさん
2018/07/13(金) 00:35:06.69ID:vrIUPTb8 発展編! Haskellで「型」のポテンシャルを最大限に引き出すには?【第二言語としてのHaskell】
https://employment.en-japan.com/engineerhub/entry/2017/10/03/110000
https://employment.en-japan.com/engineerhub/entry/2017/10/03/110000
667デフォルトの名無しさん
2018/07/14(土) 09:44:23.46ID:sMbeASmt yampaムズ過ぎ
初心者用のシンプルで教育的なチュートリアルって無いの?
英語でもいいから教えて
初心者用のシンプルで教育的なチュートリアルって無いの?
英語でもいいから教えて
668デフォルトの名無しさん
2018/07/15(日) 00:11:52.51ID:89Btz4it >>677
Yampaエアプだが、このサイトが良さそうだ
http://bitterharvest.hatenablog.com/archive/category/Haskellプログラミング講座(上級編:ゲーム)
Yampaエアプだが、このサイトが良さそうだ
http://bitterharvest.hatenablog.com/archive/category/Haskellプログラミング講座(上級編:ゲーム)
669デフォルトの名無しさん
2018/07/15(日) 05:50:15.76ID:uHtx5/Ti >>668
申し訳ない
そこは、FRPの基礎概念である「ビヘイビアとイベント」と、
Yampaの基礎概念である「シグナル関数」との繋がりが言葉で説明されていないんだ
コードを書きまくって慣れろ、って感じ
申し訳ない
そこは、FRPの基礎概念である「ビヘイビアとイベント」と、
Yampaの基礎概念である「シグナル関数」との繋がりが言葉で説明されていないんだ
コードを書きまくって慣れろ、って感じ
670デフォルトの名無しさん
2018/07/15(日) 08:13:24.43ID:89Btz4it >>669
フーム
ビヘイビアは Time → a でイベントは [ (Time, a) ]
シグナル関数は (Time → a) → (Time → b)
のようなことが 「FRPの話 - maoeのブログ」で少しだけ説明されているね。
もう少し長い解説をElm開発者の人が論文に書いてた。
http://elm-lang.cn/assets/papers/concurrent-frp.pdf
フーム
ビヘイビアは Time → a でイベントは [ (Time, a) ]
シグナル関数は (Time → a) → (Time → b)
のようなことが 「FRPの話 - maoeのブログ」で少しだけ説明されているね。
もう少し長い解説をElm開発者の人が論文に書いてた。
http://elm-lang.cn/assets/papers/concurrent-frp.pdf
671デフォルトの名無しさん
2018/07/15(日) 08:23:05.35ID:89Btz4it >>665 ほらね、Haskell普及のためにはツールの拡充が必要なんだよ。
https://github.com/alanz/vscode-hie-server/pull/83
これこれこういうのを待ってた。emacs対応はよ
https://github.com/alanz/vscode-hie-server/pull/83
これこれこういうのを待ってた。emacs対応はよ
672デフォルトの名無しさん
2018/07/15(日) 09:30:20.96ID:uHtx5/Ti673デフォルトの名無しさん
2018/07/27(金) 11:27:32.40ID:qBTTu3Zk importのhidingとかqualifiedとか適当にやってるせいで、いつも収拾がつかなくなってる。
ブラックリストかホワイトリストか、asで名前付けるのはどんな時か。みんなどうしてるの?
ブラックリストかホワイトリストか、asで名前付けるのはどんな時か。みんなどうしてるの?
674デフォルトの名無しさん
2018/07/27(金) 21:52:57.03ID:lmpcLfYu675デフォルトの名無しさん
2018/07/29(日) 20:22:22.75ID:tC3jGbCj インポートリストをざっと見ることで、モジュールの役目が何となく掴めて嬉しい。たとえば
import Data.Text.Lazy
import Text.Parsec
だったら、ああなんかをパーズするんだな、と分かる。
一方、
import Math (sin,cos,tan)
みたいになっていても、このモジュールは三角関数を使うやつ、ということは判るが、それが大して役に立つとは思えない。
だから値の明示的インポートはやめて、hidingだけに統一しようかな、と考えてる。
値がバッティングして、かつ両方使いたいならそのモジュールは qualified する。
import Data.Text.Lazy
import Text.Parsec
だったら、ああなんかをパーズするんだな、と分かる。
一方、
import Math (sin,cos,tan)
みたいになっていても、このモジュールは三角関数を使うやつ、ということは判るが、それが大して役に立つとは思えない。
だから値の明示的インポートはやめて、hidingだけに統一しようかな、と考えてる。
値がバッティングして、かつ両方使いたいならそのモジュールは qualified する。
676デフォルトの名無しさん
2018/07/29(日) 20:25:02.63ID:tC3jGbCj >>674
基本大文字を拾って as している。
import qualified Data.Map as M
import qualified Data.Set as S
だが
import qualified Text.Regex.TDFA as TDFA
つらい
基本大文字を拾って as している。
import qualified Data.Map as M
import qualified Data.Set as S
だが
import qualified Text.Regex.TDFA as TDFA
つらい
677デフォルトの名無しさん
2018/07/31(火) 21:58:40.13ID:6DhCQI2V678デフォルトの名無しさん
2018/08/11(土) 12:54:39.21ID:dGCQYNDS get programming with haskell 読み終わった。
679デフォルトの名無しさん
2018/08/12(日) 03:22:15.33ID:fh95vopi >>678
感想は?
感想は?
680デフォルトの名無しさん
2018/08/12(日) 09:41:11.96ID:mCQrOvpG >>678
凄いハスケルより初心者向きで実用的でわかりやすい。
凄いハスケルより初心者向きで実用的でわかりやすい。
681デフォルトの名無しさん
2018/08/12(日) 11:23:29.51ID:1lJIW3H3682デフォルトの名無しさん
2018/08/12(日) 11:30:59.98ID:mCQrOvpG >>681
アプリケーションは作らないけれどコマンドラインのプログラムは作る。
アプリケーションは作らないけれどコマンドラインのプログラムは作る。
683デフォルトの名無しさん
2018/08/12(日) 17:25:24.07ID:1lJIW3H3 もしかしてFRPとマルチスレッドって相性悪い?
684デフォルトの名無しさん
2018/08/12(日) 18:12:55.83ID:HMPSYWub 新分子設計は並列処理を酷使するだろうが
強化プラスチックが特別どうということはないだろう
強化プラスチックが特別どうということはないだろう
685デフォルトの名無しさん
2018/08/12(日) 18:50:22.57ID:RPd+D2gX >>684
FRPの有限要素解析?
FRPの有限要素解析?
686デフォルトの名無しさん
2018/08/12(日) 19:11:53.89ID:OVUWpXpl687デフォルトの名無しさん
2018/08/13(月) 06:20:04.15ID:HYnqBmQs いいねえ。気軽に使えるからコマンドラインは好き。
自分で使うツールを作るのが一番モチベ上がるね
自分で使うツールを作るのが一番モチベ上がるね
688デフォルトの名無しさん
2018/08/13(月) 14:03:54.60ID:DTF7R3qv Get Programming with Haskellはタイトルのとおり初心者向けの本だよ
600ページの本で400ページ超えたところでstack導入して、
あとは、簡単なコマンドラインツール、http、JSON、dbおさわりくらい
それまでは、ghci使ってhaskellの学習
600ページの本で400ページ超えたところでstack導入して、
あとは、簡単なコマンドラインツール、http、JSON、dbおさわりくらい
それまでは、ghci使ってhaskellの学習
689デフォルトの名無しさん
2018/08/26(日) 22:17:17.61ID:hKYk5Tea Haskell開発ワークフロー。お前らはどれ?
1. stackの--file-watch
2. ghciの:r
3. ghcid
4. エディタのフック
https://www.fpcomplete.com/blog/2018/08/haskell-development-workflows-4-ways
1. stackの--file-watch
2. ghciの:r
3. ghcid
4. エディタのフック
https://www.fpcomplete.com/blog/2018/08/haskell-development-workflows-4-ways
690デフォルトの名無しさん
2018/08/27(月) 22:15:37.17ID:8S3lymML 今やすいぞ 多分半額程度
ソフトウェアシステムアーキテクチャ構築の原理 第2版
https://www.amazon.co.jp/ソフトウェアシステムアーキテクチャ構築の原理-第2版-ニック-ロザンスキ-ebook/dp/B00ZF44J0I/ref=tmm_kin_title_0?_encoding=UTF8&qid=1535375513&sr=1-1
ソフトウェアシステムアーキテクチャ構築の原理 第2版
https://www.amazon.co.jp/ソフトウェアシステムアーキテクチャ構築の原理-第2版-ニック-ロザンスキ-ebook/dp/B00ZF44J0I/ref=tmm_kin_title_0?_encoding=UTF8&qid=1535375513&sr=1-1
691デフォルトの名無しさん
2018/08/29(水) 13:20:47.63ID:nTrDfIjn >>689
俺は2
俺は2
692デフォルトの名無しさん
2018/09/04(火) 09:34:44.70ID:0nZVvdsT カリー化された関数の表記がよく分かりません。
add' :: Int -> (Int -> Int)
add' x y = x + y
↑これはどうやって解釈すればいいのでしょうか?
add' は関数を返す関数であるにもかかわらず、 = x + y となっているので数を返す関数のように見えます。
↓このλ式を使った表記は何の問題もないと思います。
add = \x -> (\y -> x + y)
add' :: Int -> (Int -> Int)
add' x y = x + y
↑これはどうやって解釈すればいいのでしょうか?
add' は関数を返す関数であるにもかかわらず、 = x + y となっているので数を返す関数のように見えます。
↓このλ式を使った表記は何の問題もないと思います。
add = \x -> (\y -> x + y)
693デフォルトの名無しさん
2018/09/04(火) 09:40:03.69ID:0nZVvdsT add x = \y -> x + y
これでも問題ないと思います。
これでも問題ないと思います。
694デフォルトの名無しさん
2018/09/04(火) 10:34:46.73ID:ntR3woJY Int -> (Int -> Int) も
Int -> Int -> Int も同じやろ
add 1 2 としたらIntになるし
add 1 としたらInt -> Intの関数が得られる
それだけ
更に引数3つとるaddなら
add = \x -> (\y -> (\z -> x + y + z))
と同じ意味だし、haskellはデフォでそういう仕組になってるってことやろ
Int -> Int -> Int も同じやろ
add 1 2 としたらIntになるし
add 1 としたらInt -> Intの関数が得られる
それだけ
更に引数3つとるaddなら
add = \x -> (\y -> (\z -> x + y + z))
と同じ意味だし、haskellはデフォでそういう仕組になってるってことやろ
695デフォルトの名無しさん
2018/09/04(火) 10:40:17.26ID:0nZVvdsT >>694
ありがとうございます。
add' :: Int -> (Int -> Int)
add' x y = x + y
↑この表記って、よくない表記じゃないですか?
add' x y = x + y
↑これをみて、型が add' :: Int -> (Int -> Int) だとはとても分かりません。
ありがとうございます。
add' :: Int -> (Int -> Int)
add' x y = x + y
↑この表記って、よくない表記じゃないですか?
add' x y = x + y
↑これをみて、型が add' :: Int -> (Int -> Int) だとはとても分かりません。
696デフォルトの名無しさん
2018/09/04(火) 10:48:31.75ID:W1MTXd47 じゃあどんな型だと思うんだい?
697デフォルトの名無しさん
2018/09/04(火) 10:48:48.98ID:ntR3woJY 逆にそれ見たらどういう型だと思った?
Int -> Int -> Int
って思ったんじゃない?
なんの本読んでるかしらんけど
例えば add x y z なら Int -> Int -> Int -> Int だけど
実際には
Int -> (Int -> (Int -> Int))
こうなってるってことを言いたいんやろ
Int -> Int -> Int
って思ったんじゃない?
なんの本読んでるかしらんけど
例えば add x y z なら Int -> Int -> Int -> Int だけど
実際には
Int -> (Int -> (Int -> Int))
こうなってるってことを言いたいんやろ
698デフォルトの名無しさん
2018/09/04(火) 10:50:47.26ID:0nZVvdsT699デフォルトの名無しさん
2018/09/04(火) 10:52:13.57ID:0nZVvdsT 1 2
のように整数をスペース区切りで二つ並べたものに対して、
1 + 2
を対応させる関数に見えます。
のように整数をスペース区切りで二つ並べたものに対して、
1 + 2
を対応させる関数に見えます。
700デフォルトの名無しさん
2018/09/04(火) 10:54:55.24ID:0nZVvdsT 関数を返す関数なんですから、
=
の右には数ではなく関数を書くべきです。
=
の右には数ではなく関数を書くべきです。
701デフォルトの名無しさん
2018/09/04(火) 10:57:59.07ID:0nZVvdsT f x = x + 2
などの例を見て、
f ● = ■
という表記は、
f(●) = ■
という意味かと思います。
などの例を見て、
f ● = ■
という表記は、
f(●) = ■
という意味かと思います。
702デフォルトの名無しさん
2018/09/04(火) 11:29:45.35ID:ntR3woJY add は関数を返す関数じゃなくて引数を2つとって値を返す関数やろ
そこでもう勘違いしとる
add 2 3 の結果は関数じゃなくて値やろ?
add 2 のように引数を一個だけ渡したら部分適用されて引数を一個とる関数が返るってだけや
haskellはそういう部分適用できる関数を書きやすいように
add x y = x + y を add = \x -> (\y -> x + y)に自動で変換してくれるってだけ
糖衣構文ってやつ
嫌なら全部ラムダ式で書けばいいよ
そこでもう勘違いしとる
add 2 3 の結果は関数じゃなくて値やろ?
add 2 のように引数を一個だけ渡したら部分適用されて引数を一個とる関数が返るってだけや
haskellはそういう部分適用できる関数を書きやすいように
add x y = x + y を add = \x -> (\y -> x + y)に自動で変換してくれるってだけ
糖衣構文ってやつ
嫌なら全部ラムダ式で書けばいいよ
703デフォルトの名無しさん
2018/09/04(火) 11:41:42.58ID:W1MTXd47 >>698
じゃああなたが今勉強してるカリー化って何なんですかね?
じゃああなたが今勉強してるカリー化って何なんですかね?
704デフォルトの名無しさん
2018/09/04(火) 12:05:07.87ID:/45N32wx **argv :: char
*argv :: char*
argv :: char**
add' x y :: Int
add' x :: a -> Int
add' :: b -> a -> Int
C言語を学習した人はHaskellも分かる
これが知能だ
*argv :: char*
argv :: char**
add' x y :: Int
add' x :: a -> Int
add' :: b -> a -> Int
C言語を学習した人はHaskellも分かる
これが知能だ
705デフォルトの名無しさん
2018/09/04(火) 12:52:41.14ID:JkSql3w1 Haxe では関数の型は、
function sum (a:Int, b:Int) : Int
Int -> Int -> Int
引数1 -> 引数2 -> 戻り値
最後は戻り値
function sum (a:Int, b:Int) : Int
Int -> Int -> Int
引数1 -> 引数2 -> 戻り値
最後は戻り値
706デフォルトの名無しさん
2018/09/04(火) 12:54:41.46ID:tHCjwI0T707デフォルトの名無しさん
2018/09/04(火) 14:03:08.32ID:TMcC/EnP 通りすがりだけど勉強になった
haskell面白そうだな
haskell面白そうだな
708デフォルトの名無しさん
2018/09/04(火) 20:06:44.00ID:f+p4hPZb Haskellちょっといじってると楽しいけどこれで飯食うのは自分には絶対無理という確信がある
709デフォルトの名無しさん
2018/09/04(火) 20:32:29.35ID:kOsSso2/ Haskellで食っていきたい
710デフォルトの名無しさん
2018/09/04(火) 21:00:34.43ID:jmLwKshs Haskell丼食いたい
711デフォルトの名無しさん
2018/09/05(水) 02:13:16.34ID:sfHxtAx4 市場を作れ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【硬貨】500円だと思ったら「500ウォンが入っていた」価値は約10分の1 全国で飲食店などで“500ウォントラブル”相次いで報告 [ぐれ★]
- 【神奈川新聞】「暇空茜」を県警追送検 [746833765]
- ハムエッグ派VSベーコンエッグ派
- 俺のチンポがでかすぎて、お前らにじゃあ見せてみろって言われた際にうpするのが恥ずかくて困ってます
- 山上徹也の妹「父親と長男自殺しました、母親が宗教に数億円貢ぎ貧困、次男が総理大臣射殺しました」
- 貧者飯ってグミ考えた
- 男子あるある
