関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/test/read.cgi/tech/1428597032/
探検
関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
2017/01/15(日) 23:43:54.28ID:Vh4eztBk
927デフォルトの名無しさん
2017/08/31(木) 07:18:24.63ID:3UP7YVEo >>926
巨大な双方向グラフを作ることになったんだけど、 使い方は次の通りちょっと特殊。
* あるノードにアクセスしたら、その近隣のノードも集中的にアクセスすることが多い
* ノードが持つ値の読み書きアクセスが圧倒的に多く、グラフの形を変えることは少ない
* ノードの値の書き込みアクセスよりは読み取りアクセスの方が多い
既存の汎用的なグラフ ライブラリと、双方向リンクで自作したグラフ ライブラリとで、
どっちが効率いいか実験してみようと思ったんだ。
でも双方向リンクは、ひとつのノードの値を変えるためにどうしてもグラフ全体を作り直す羽目になる。
どうにかならんものかと考えてたけど、どうにもならんね・・・
巨大な双方向グラフを作ることになったんだけど、 使い方は次の通りちょっと特殊。
* あるノードにアクセスしたら、その近隣のノードも集中的にアクセスすることが多い
* ノードが持つ値の読み書きアクセスが圧倒的に多く、グラフの形を変えることは少ない
* ノードの値の書き込みアクセスよりは読み取りアクセスの方が多い
既存の汎用的なグラフ ライブラリと、双方向リンクで自作したグラフ ライブラリとで、
どっちが効率いいか実験してみようと思ったんだ。
でも双方向リンクは、ひとつのノードの値を変えるためにどうしてもグラフ全体を作り直す羽目になる。
どうにかならんものかと考えてたけど、どうにもならんね・・・
928デフォルトの名無しさん
2017/08/31(木) 09:37:24.20ID:z8GPJM/w 「doubly linked list haskell」でググって適当な実装拾う
929デフォルトの名無しさん
2017/08/31(木) 11:49:25.22ID:lYwDQiZm すごハスにあるようなZipper構造かな必要なのは
930デフォルトの名無しさん
2017/08/31(木) 12:38:50.35ID:cadjyHiv 書き換えしないんだったら ([a], a, [a]) みたいなので充分なんだよな
コモナドにしてどうたらとか余計な話も無視して
コモナドにしてどうたらとか余計な話も無視して
931デフォルトの名無しさん
2017/08/31(木) 12:49:49.13ID:3UP7YVEo あの、欲しいのはリストじゃなくてグラフなんだ。
だから、zipper 系とは違う。
だから、zipper 系とは違う。
932デフォルトの名無しさん
2017/08/31(木) 14:03:01.85ID:UJfUdOL2 最低限木じゃないと効率的かつ単純なのは無理なんじゃないかな?
あんま自信ないけど
あんま自信ないけど
933デフォルトの名無しさん
2017/08/31(木) 14:05:39.83ID:3UP7YVEo 皆のレスがどうも勘違いしてると思ってたら、
俺が最初に双方向リンクと言ってしまったからか。
ごめん、相互リンクだ。
俺が最初に双方向リンクと言ってしまったからか。
ごめん、相互リンクだ。
934デフォルトの名無しさん
2017/08/31(木) 14:16:21.20ID:3UP7YVEo >>932
木構造でも、親ノードへのリンクを入れると相互リンクになって難しくなるよね。
ひとつのノードの値を変えるためには、
ツリー全体を作り直すことになるんじゃないかな。
HaskellのDOMツリーのデータ構造とかどうなってるんだろ・・・
木構造でも、親ノードへのリンクを入れると相互リンクになって難しくなるよね。
ひとつのノードの値を変えるためには、
ツリー全体を作り直すことになるんじゃないかな。
HaskellのDOMツリーのデータ構造とかどうなってるんだろ・・・
935デフォルトの名無しさん
2017/08/31(木) 14:36:16.80ID:3UP7YVEo よく考えたら、リストとかツリーでも、
途中のノードの値を変えたかったら、
そのノードまでリンクで繋がってる全ノードは、
新しくリンクを張り直さなくちゃいけないんだね。
途中のノードの値を変えたかったら、
そのノードまでリンクで繋がってる全ノードは、
新しくリンクを張り直さなくちゃいけないんだね。
936デフォルトの名無しさん
2017/08/31(木) 16:07:16.49ID:ByIgTrbm そうです。途中の値の変更は
リストならO(n)
ツリーならO(log n)
リストならO(n)
ツリーならO(log n)
937デフォルトの名無しさん
2017/08/31(木) 17:20:58.63ID:UJfUdOL2938デフォルトの名無しさん
2017/09/01(金) 01:21:03.60ID:5J9AnuIe 何が何でも1つのプログラミング言語で何とかしようとするのって
異国に行っても母国語で通そうとする観光客と同じ
異国に行っても母国語で通そうとする観光客と同じ
939デフォルトの名無しさん
2017/09/01(金) 06:41:46.01ID:YbmVmXZP940デフォルトの名無しさん
2017/09/02(土) 01:43:24.06ID:6rFZUKZZ >何が何でも1つのプログラミング言語で何とかしようとするのって
>異国に行っても母国語で通そうとする観光客と同じ
こういうやつにかぎってポリグロッタルコストを甘く見てる
>異国に行っても母国語で通そうとする観光客と同じ
こういうやつにかぎってポリグロッタルコストを甘く見てる
941デフォルトの名無しさん
2017/09/02(土) 02:26:59.07ID:zv/5K5Jn 私はHaskell以外のプログラミング言語で書く気はありません
942デフォルトの名無しさん
2017/09/02(土) 03:52:13.44ID:qGW8qyv/ 慣れるまで大変だけど、慣れたら居心地いい気がする
943デフォルトの名無しさん
2017/09/02(土) 07:28:06.22ID:pdF7ruXY 困ったらFFIでC呼び出せばいいだけだから助かる
944デフォルトの名無しさん
2017/09/08(金) 23:35:36.55ID:r8Qtf4kd ICFP 2017 で発表された資料、成果や知見はどこかで後悔されたりしないんですか?
動画が公開されてるんなら、有料でも見たいです。
動画が公開されてるんなら、有料でも見たいです。
945デフォルトの名無しさん
2017/09/09(土) 18:15:24.47ID:lkyt770O 発表者各自が公開してるの地道に探すしかねーんでないの
ICFP Conference(@icfp_conference)さん | Twitter
https://twitter.com/icfp_conference
ICFP Conference(@icfp_conference)さん | Twitter
https://twitter.com/icfp_conference
946デフォルトの名無しさん
2017/09/09(土) 20:11:43.28ID:TPWLKlk7 >>945
やはりそうですか。
毎年そうやって発表者や参加者の発信を探すのですが、
分散しており、詳しいことは書いてないことも多く、
情報集めに苦労する割には、たいてい徒労に終わります。
有料でいいので公式がまとめて公開してくれるといいのにと
ここ数年つたない英語でメールを出しているのですが、
相手にしてもらえませんね。
すいません、愚痴でした。
やはりそうですか。
毎年そうやって発表者や参加者の発信を探すのですが、
分散しており、詳しいことは書いてないことも多く、
情報集めに苦労する割には、たいてい徒労に終わります。
有料でいいので公式がまとめて公開してくれるといいのにと
ここ数年つたない英語でメールを出しているのですが、
相手にしてもらえませんね。
すいません、愚痴でした。
947デフォルトの名無しさん
2017/09/09(土) 23:36:02.27ID:9IxpzJRD icfpが何なのか知らないけど「icfp video」「icfp paper」で検索してみた
ICFP Video - YouTube
https://www.youtube.com/channel/UCwRL68qZFfub1Ep1EScfmBw
gasche - GitHub
https://github.com/gasche
ICFP 2016- Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming
http://www.sigplan.org/OpenTOC/icfp16.html
フェイスブック、レディっと、ラムダザウルチメイトなどの良く知られた媒体でも
事前告知や事後報告があると思う
ICFP Video - YouTube
https://www.youtube.com/channel/UCwRL68qZFfub1Ep1EScfmBw
gasche - GitHub
https://github.com/gasche
ICFP 2016- Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming
http://www.sigplan.org/OpenTOC/icfp16.html
フェイスブック、レディっと、ラムダザウルチメイトなどの良く知られた媒体でも
事前告知や事後報告があると思う
948デフォルトの名無しさん
2017/09/10(日) 00:33:58.75ID:et8drD+r >>947
指摘を受けて、もしかしてと思い、改めて公式サイトの中を探してみましたら、
paper は公開されていることが分かりました。
過去のも見てみましたら、去年のもの paper にはアクセスできるようでした。
(その前のは公式からはリンクは張られていない模様)
video も年によってはリンクが張られていたりします。
なかなかぱっと見では分かりにくいところにリンクがあるのですが、
やはり探し方が悪かったみたいでお恥ずかしいです。
ちなみに、ICFP は国際的な関数型言語の会議です。
使う側、処理系側双方の最新情報を発表したり、
ワークショップが開かれていたりします。
指摘を受けて、もしかしてと思い、改めて公式サイトの中を探してみましたら、
paper は公開されていることが分かりました。
過去のも見てみましたら、去年のもの paper にはアクセスできるようでした。
(その前のは公式からはリンクは張られていない模様)
video も年によってはリンクが張られていたりします。
なかなかぱっと見では分かりにくいところにリンクがあるのですが、
やはり探し方が悪かったみたいでお恥ずかしいです。
ちなみに、ICFP は国際的な関数型言語の会議です。
使う側、処理系側双方の最新情報を発表したり、
ワークショップが開かれていたりします。
949デフォルトの名無しさん
2017/09/11(月) 00:32:10.78ID:Xe2WUSa/ 問題解決もしくは近づいたのなら何よりです
950デフォルトの名無しさん
2017/09/11(月) 23:17:06.08ID:NiRp1zJ5 Haskellの正規表現ってどのライブラリを使うのが無難?
Text.Regex.Posixをimportしようとすると、Text.Regex.BaseかText.Regex.PCREの間違いじゃね?って言われて困惑
Text.Regex.Posixをimportしようとすると、Text.Regex.BaseかText.Regex.PCREの間違いじゃね?って言われて困惑
951デフォルトの名無しさん
2017/09/13(水) 18:15:30.36ID:15e8c4wP (´・ω・`)あのー
なにかおすすめの参考書ありませんか?
初心者です
むちゃくちゃ簡単でやさしく書いてるのが良いです
アマゾンで見つけて最近出たみたいなんだけどこれはどうなの?
Haskellによる関数プログラミングの思考法 https://www.amazon.co.jp/dp/4048930532/ref=cm_sw_r_cp_api_ozpUzbZS57HY2
なにかおすすめの参考書ありませんか?
初心者です
むちゃくちゃ簡単でやさしく書いてるのが良いです
アマゾンで見つけて最近出たみたいなんだけどこれはどうなの?
Haskellによる関数プログラミングの思考法 https://www.amazon.co.jp/dp/4048930532/ref=cm_sw_r_cp_api_ozpUzbZS57HY2
952デフォルトの名無しさん
2017/09/13(水) 19:15:57.75ID:jV0bEQ9+ 正直Haskellで「簡単でやさしく」は無理です
諦めてすごいH本やHaskellWikI,Hoogleや各種書籍、サイトを何度も往復して苦しみながら覚えてください
諦めてすごいH本やHaskellWikI,Hoogleや各種書籍、サイトを何度も往復して苦しみながら覚えてください
953デフォルトの名無しさん
2017/09/13(水) 19:18:52.25ID:15e8c4wP (´・ω・`)はい
954デフォルトの名無しさん
2017/09/13(水) 19:53:59.78ID:4h5PMlCQ すごいHaskell楽しくなんとかって奴がいいらしいよ
あとリアルワールドHaskell
あとリアルワールドHaskell
955デフォルトの名無しさん
2017/09/14(木) 00:00:37.91ID:55xYcYks https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E8%A8%98%E8%BF%B0%E8%A8%80%E8%AA%9E
HaskellベースのHDLってけっこう 多いのな
ビックリした
HaskellベースのHDLってけっこう 多いのな
ビックリした
956デフォルトの名無しさん
2017/09/14(木) 01:28:21.76ID:kgKbKDJJ >>951
他の人も書いてるけどやはり「すごいHaskell」がとっつきやすさは高いと思う
それでいて内容もちゃんとしている
「関数プログラミングの思考法」もいい本だとは思うのだが
目的がアルゴリズムデザインとかの方面であんまり初心者向けっぽくない
他の人も書いてるけどやはり「すごいHaskell」がとっつきやすさは高いと思う
それでいて内容もちゃんとしている
「関数プログラミングの思考法」もいい本だとは思うのだが
目的がアルゴリズムデザインとかの方面であんまり初心者向けっぽくない
958デフォルトの名無しさん
2017/09/14(木) 09:24:06.36ID:ux4IsQoU 英語が読めればwikibooksのやつもどうですか?
自分は"プログラミングHaskell"から入ったので初見じゃないですが、良さげに見えます。
内容も定期的に更新かかってますし。
自分は"プログラミングHaskell"から入ったので初見じゃないですが、良さげに見えます。
内容も定期的に更新かかってますし。
959デフォルトの名無しさん
2017/09/14(木) 10:02:22.29ID:Yrr+4vGX 「しゅごいHaskell」はダブルVサイン出しながら
読まなきゃいかんのでキーボードが打てない
読まなきゃいかんのでキーボードが打てない
960デフォルトの名無しさん
2017/09/14(木) 16:15:03.19ID:fLwKChPf What does it mean?
961デフォルトの名無しさん
2017/09/14(木) 23:15:23.23ID:BKIQZ2N0 He probably meant Haskell wikibook page is upto dated. And that is also why I recommend it for beginners too.
962デフォルトの名無しさん
2017/09/15(金) 08:29:13.24ID:K8WAqD4o >>957
あなたがそもそも関数型プログラミングに慣れ親しんでいないのであれば、まずはそこが第一の壁となるでしょう
まずはリストをメインに再帰やマッピング、畳み込みといった操作に慣れましょう
またHaskellはデフォルトでカリー化されているのでその妙味も十分に味わいましょう
次に壁となるのは、型や型クラスでしょうか?
ここではクラスやインスタンスといった単語が出てきますが、それらはいわゆるオブジェクト指向で使われているものとは意味が全く違うので注意してください
型に慣れ親しみ、常に適切な型を選択できるよう意識してください
そうすればコンパイラがあなたの強い味方となってくれます
最後に入門者の壁となるのは、おそらくモナドでしょう
モナドは数学の圏論由来の概念ですが、別段圏論に詳しくある必要はありません
基本的な部分では、モナドは単なる文脈であり、文脈を表すためのコンテナです
しかし、それ以上に高度で抽象的なことをやろうとすると、その理解では行き詰まるかもしれません
そんなときは、圏論に軽く触れてみるのもいいでしょう
少なくともかの有名な
「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」
をざっくりとでもいいので理解できれば、新たな視界が開けると思います
Haskellは簡単な言語でもやさしい言語でもありませんが、その代わり高度に抽象化された、バグの少ないプログラミングが可能です
あなたの成功を心より祈っています
あなたがそもそも関数型プログラミングに慣れ親しんでいないのであれば、まずはそこが第一の壁となるでしょう
まずはリストをメインに再帰やマッピング、畳み込みといった操作に慣れましょう
またHaskellはデフォルトでカリー化されているのでその妙味も十分に味わいましょう
次に壁となるのは、型や型クラスでしょうか?
ここではクラスやインスタンスといった単語が出てきますが、それらはいわゆるオブジェクト指向で使われているものとは意味が全く違うので注意してください
型に慣れ親しみ、常に適切な型を選択できるよう意識してください
そうすればコンパイラがあなたの強い味方となってくれます
最後に入門者の壁となるのは、おそらくモナドでしょう
モナドは数学の圏論由来の概念ですが、別段圏論に詳しくある必要はありません
基本的な部分では、モナドは単なる文脈であり、文脈を表すためのコンテナです
しかし、それ以上に高度で抽象的なことをやろうとすると、その理解では行き詰まるかもしれません
そんなときは、圏論に軽く触れてみるのもいいでしょう
少なくともかの有名な
「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」
をざっくりとでもいいので理解できれば、新たな視界が開けると思います
Haskellは簡単な言語でもやさしい言語でもありませんが、その代わり高度に抽象化された、バグの少ないプログラミングが可能です
あなたの成功を心より祈っています
963デフォルトの名無しさん
2017/09/15(金) 08:57:14.76ID:8dqnOzco 歳を取って反射神経鈍ってくると一々詳細を語るのが億劫になって抽象的なまま話を進めたくなるよね
Haskellは抽象的にプログラミングするインフラを整備している?
Haskellは抽象的にプログラミングするインフラを整備している?
964デフォルトの名無しさん
2017/09/15(金) 18:00:40.28ID:d/L5NKte Map a (Map b c)
Map (a,b) c
どっちが速いかみんな一度は悩んだことあると思う
Map (a,b) c
どっちが速いかみんな一度は悩んだことあると思う
965デフォルトの名無しさん
2017/09/15(金) 22:35:43.14ID:znUIhbu+ 悩まんでしょ
966デフォルトの名無しさん
2017/09/15(金) 22:47:16.31ID:eUG8Jdoq コンパイルしたらどうせ一緒になると思って適当に書いてたけど、変わるの?
967デフォルトの名無しさん
2017/09/15(金) 23:09:08.09ID:4fuQ9N5K Mapは平衡二分探索木だから各Map b cのサイズに開きがあると遅くなるね
968デフォルトの名無しさん
2017/09/16(土) 13:16:45.55ID:u+a6R9+A newtype F a b c = F (Map a (Map b c))
newtype G a b c = G (Map (a, b) c)
これでFとGはどうせ一緒のクラスになる
こういうポリモーフィズムの意味がわかってる人は速さで悩まない
newtype G a b c = G (Map (a, b) c)
これでFとGはどうせ一緒のクラスになる
こういうポリモーフィズムの意味がわかってる人は速さで悩まない
969デフォルトの名無しさん
2017/09/16(土) 15:43:07.25ID:QR311jcD それは実装を隠蔽しただけで速さの悩みを解決したわけではないのでは…
もちろん実装を隠蔽しておいて後でより速い実装に
容易に交換できるようにしておくのは大変有用だが
もちろん実装を隠蔽しておいて後でより速い実装に
容易に交換できるようにしておくのは大変有用だが
970デフォルトの名無しさん
2017/09/16(土) 20:52:50.94ID:u+a6R9+A pi :: Floating a => a
円周率piの値を隠蔽し精度の悩みを解決
円周率piの値を隠蔽し精度の悩みを解決
971デフォルトの名無しさん
2017/09/16(土) 21:24:55.55ID:MfZyyhcD 今更だけど、いつの間にか cabal のバージョンが 1 から 2 になってる
なんか大きく変わったの?
なんか大きく変わったの?
972デフォルトの名無しさん
2017/09/17(日) 08:09:36.24ID:QPoZRnuU973デフォルトの名無しさん
2017/09/21(木) 22:09:47.22ID:1QLcw3LX haskellコンパイラはユーザ定義のモナドが
モナド則満たすことを
チェックしてくれない所がウンコ
モナド則満たすことを
チェックしてくれない所がウンコ
974デフォルトの名無しさん
2017/09/21(木) 23:00:55.55ID:gD1zcn0E そんな超能力コンパイラがあるですか?
975デフォルトの名無しさん
2017/09/21(木) 23:55:50.59ID:Y0fSMmUh QuickCheck的なのがコンパイル時に走ってチェックしてくれたりするように
そのうちならないかなー
そのうちならないかなー
976デフォルトの名無しさん
2017/09/21(木) 23:58:25.67ID:h/TDh704 モナドを自作したことがないから後学のためにどういう状況でどういうモナドを自作すると効率的なのか教えていただけると幸いです
977デフォルトの名無しさん
2017/09/22(金) 00:28:53.04ID:kX95feab 適当に型を作ってたら実はモナドだった、みたいな
978デフォルトの名無しさん
2017/09/22(金) 16:55:50.20ID:xffnPG6j 原理的にモナド則のチェックの自動化は不可能なの?
圏論マスターでも無理なの?
圏論マスターでも無理なの?
979デフォルトの名無しさん
2017/09/22(金) 17:04:50.24ID:uYwUnAnO ゲーデルさんに聞けばわかるかも。
980デフォルトの名無しさん
2017/09/22(金) 17:56:16.78ID:4/60bB6Q ユーザが書いたモナドであることの形式的証明を
検証出来る処理系なら有るはず。
Coq辺り。
検証出来る処理系なら有るはず。
Coq辺り。
981デフォルトの名無しさん
2017/09/22(金) 19:52:40.81ID:uE400tii Vectorパッケージで、基本Unboxedにして、
Unboxedに出来なければBoxedにする、
途中でUnboxedにできるなら戻す、
でのを手でやってるのですが、スマートなやり方ってありますか?
Unboxedに出来なければBoxedにする、
途中でUnboxedにできるなら戻す、
でのを手でやってるのですが、スマートなやり方ってありますか?
982デフォルトの名無しさん
2017/09/23(土) 02:53:52.53ID:7lhkarx+ QuickSpecならなんとかしてくれる
かもしれない
かもしれない
983デフォルトの名無しさん
2017/09/23(土) 20:42:11.20ID:WVPJPMdD stack プロジェクト内の cabal ファイルの build-depends の項に sdl2 を書き込んで、stack build コマンドを実行しました。
すると、sdl2 パッケージのビルドでエラーが出て、「-fPCI を付けて再コンパイルしてください」と出力されました。
そこで stack build --ghc-options="-fPIC" コマンドを実行してみました。
しかし、それでも同様のエラーが起き、ビルドできません。
stack による sdl2 パッケージを利用するプログラムをビルドするにはどうすれば良いでしょうか。
すると、sdl2 パッケージのビルドでエラーが出て、「-fPCI を付けて再コンパイルしてください」と出力されました。
そこで stack build --ghc-options="-fPIC" コマンドを実行してみました。
しかし、それでも同様のエラーが起き、ビルドできません。
stack による sdl2 パッケージを利用するプログラムをビルドするにはどうすれば良いでしょうか。
984デフォルトの名無しさん
2017/09/23(土) 21:51:07.20ID:58d35SiT >>983
stack.yaml に、
ghc-options:
sdl2: -fPIC
を追記すればOK。たぶん。
https://github.com/commercialhaskell/stack/blob/master/doc/yaml_configuration.md#ghc-options
stack.yaml に、
ghc-options:
sdl2: -fPIC
を追記すればOK。たぶん。
https://github.com/commercialhaskell/stack/blob/master/doc/yaml_configuration.md#ghc-options
985デフォルトの名無しさん
2017/09/23(土) 22:50:55.76ID:WVPJPMdD >>984
やってみましたが、結果は変わりませんでした。
今使っている lts-9.5 の snapshot が
~/.stack/snapshot/x86_64-linux-tinfo6-nopie/lts-9.5
にあるのですが、nopie とあり、何か問題に関係ありそうなのですが、どうでしょうか。
やってみましたが、結果は変わりませんでした。
今使っている lts-9.5 の snapshot が
~/.stack/snapshot/x86_64-linux-tinfo6-nopie/lts-9.5
にあるのですが、nopie とあり、何か問題に関係ありそうなのですが、どうでしょうか。
986デフォルトの名無しさん
2017/09/23(土) 23:32:36.23ID:58d35SiT >>985
うーん、なんだかよくわからないけど、リンクフェーズで”recompile with -fPIC”と言われてしまう問題が報告されていて
https://github.com/commercialhaskell/stack/issues/2712
https://docs.haskellstack.org/en/stable/faq/#i-get-strange-ld-errors-about-recompiling-with-fpic
これによると、Arch Linux では ncurses5-compat-libs をインストールすると直るらしい。
うーん、なんだかよくわからないけど、リンクフェーズで”recompile with -fPIC”と言われてしまう問題が報告されていて
https://github.com/commercialhaskell/stack/issues/2712
https://docs.haskellstack.org/en/stable/faq/#i-get-strange-ld-errors-about-recompiling-with-fpic
これによると、Arch Linux では ncurses5-compat-libs をインストールすると直るらしい。
987デフォルトの名無しさん
2017/09/24(日) 10:57:49.47ID:G5x2bhDn >>986
とりあえず先に進めるようになりました。
アドバイスありがとうございました。
たしかに私は ArchLinux を使っています。
Haskell の問題にディストリビューションの違いが絡んでくるとは考えていませんでした。
はじめ ncurses5-compat-libs をインストールしただけでは解決されませんでした。
(ログインし直しても)
そこで stack を一度綺麗にアンインストールしてから再インストールし、
それでもダメで、更にビルド時に -fPIC オプションを付けたらエラー無く通りました。
何が原因で処置がどう働いてこういう結果になったのか、まだ何となくでしか分かりませんが、
とにかく SDL を用いたプログラムを試すことができるようになり良かったです。
とりあえず先に進めるようになりました。
アドバイスありがとうございました。
たしかに私は ArchLinux を使っています。
Haskell の問題にディストリビューションの違いが絡んでくるとは考えていませんでした。
はじめ ncurses5-compat-libs をインストールしただけでは解決されませんでした。
(ログインし直しても)
そこで stack を一度綺麗にアンインストールしてから再インストールし、
それでもダメで、更にビルド時に -fPIC オプションを付けたらエラー無く通りました。
何が原因で処置がどう働いてこういう結果になったのか、まだ何となくでしか分かりませんが、
とにかく SDL を用いたプログラムを試すことができるようになり良かったです。
988デフォルトの名無しさん
2017/09/25(月) 22:51:00.48ID:xypOJPnn 集合Aと整数mを引数に取り、Aの可能なm分割全体から成る集合Mを返す関数を作りたいです。
(m分割とは集合論的にm個の集合に分割することとする)
例:
集合 A = {a, b, c, d} と m=2 を引数に取ると、下記の集合Mを返す。
M = {{{a}, {b,c,d}}, {{b}, {a,c,d}}, {{c}, {a,b,d}}, {{d}, {a,b,c}}
, {{a,b}, {c,d}}, {{a,c}, {b,d}}, {{a,d}, {b,c}} }
集合を表す型は何でも良いです。
Data.List でも Data.Set でも、その他の型でも。
Haskell で効率よく書けるでしょうか。
ここでいう効率とは、空間よりも時間を優先します。
空間も小さければ尚良いですし、ソースが綺麗ならいっそう良いです。
かれこれ一週間ほど考えていますが (と言っても四六時中ではありませんが)、
なかなか良いアイデアが浮かびません。
前もって言っておきますが、実際の集合Aのサイズはせいぜい20程度で、分割数も2に固定です。
質問のきっかけとなった問題は愚直に実装して解決しました。
なので、この質問は純粋に頭の体操、ゲームです。
(m分割とは集合論的にm個の集合に分割することとする)
例:
集合 A = {a, b, c, d} と m=2 を引数に取ると、下記の集合Mを返す。
M = {{{a}, {b,c,d}}, {{b}, {a,c,d}}, {{c}, {a,b,d}}, {{d}, {a,b,c}}
, {{a,b}, {c,d}}, {{a,c}, {b,d}}, {{a,d}, {b,c}} }
集合を表す型は何でも良いです。
Data.List でも Data.Set でも、その他の型でも。
Haskell で効率よく書けるでしょうか。
ここでいう効率とは、空間よりも時間を優先します。
空間も小さければ尚良いですし、ソースが綺麗ならいっそう良いです。
かれこれ一週間ほど考えていますが (と言っても四六時中ではありませんが)、
なかなか良いアイデアが浮かびません。
前もって言っておきますが、実際の集合Aのサイズはせいぜい20程度で、分割数も2に固定です。
質問のきっかけとなった問題は愚直に実装して解決しました。
なので、この質問は純粋に頭の体操、ゲームです。
989デフォルトの名無しさん
2017/09/26(火) 00:11:58.02ID:lGqC8DP/ 集合の任意の要素m個(nCm)に1〜mの番号を重複なく振る(順列m!)、残りの要素に1〜mの番号を適当に振る(m^(n-m))
990デフォルトの名無しさん
2017/09/26(火) 07:15:14.90ID:YKUYL+7U >>989
その方法ですと重複が起きます。
極端な話、集合 {a, b} を 2 つに分割する場合、
番号 1 と番号 2 を重複無く振る方法は2通りあります。
1. a=1、b=2
2. a=2、b=1
残りの要素は無いのでそのまま目的の集合を作ると、
どちらの方法で作っても同じ集合 {{{1}, {2}}} になります。
最後に重複をまとめて排除するのでしょうか。
その方法ですと重複が起きます。
極端な話、集合 {a, b} を 2 つに分割する場合、
番号 1 と番号 2 を重複無く振る方法は2通りあります。
1. a=1、b=2
2. a=2、b=1
残りの要素は無いのでそのまま目的の集合を作ると、
どちらの方法で作っても同じ集合 {{{1}, {2}}} になります。
最後に重複をまとめて排除するのでしょうか。
991デフォルトの名無しさん
2017/09/26(火) 07:27:48.34ID:8PxDtYJG 部分集合作って差集合とのタプルにして最後に重複省くくらいしか思いつけない
992デフォルトの名無しさん
2017/09/26(火) 07:50:17.87ID:gfUhXOzb {a, b, c, d, e}でm=3なら
{a, b, c, d}でm=3のときの答えのリストにmap(:)'e'
それに加えて、{a, b, c}でm=2のときの答えに(:)'e'
集合の長さとmが同じならそのまま返す
みたいな感じじゃダメ?
{a, b, c, d}でm=3のときの答えのリストにmap(:)'e'
それに加えて、{a, b, c}でm=2のときの答えに(:)'e'
集合の長さとmが同じならそのまま返す
みたいな感じじゃダメ?
993デフォルトの名無しさん
2017/09/26(火) 07:51:32.23ID:gfUhXOzb 訂正
{a, b, c, d}でm=2のときの答えに(:)'e'
{a, b, c, d}でm=2のときの答えに(:)'e'
994デフォルトの名無しさん
2017/09/26(火) 10:27:56.68ID:g1C4tf16995デフォルトの名無しさん
2017/09/26(火) 10:46:10.91ID:cHfS1yYI inter :: a -> [[a]] -> [[[a]]]
inter x = go
where
go [] = []
go (y:ys) = ((x:y):ys) : map (y:) (go ys)
part :: Int -> [a] ->[[[a]]]
part _ [] = []
part 1 xs = [[xs]]
part k (x:xs) = map ([x]:) prev_ks ++ concatMap (inter x) ks
where
prev_ks = part (k-1) xs
ks = part k xs
main = print $ part 3 [1..4]
inter x = go
where
go [] = []
go (y:ys) = ((x:y):ys) : map (y:) (go ys)
part :: Int -> [a] ->[[[a]]]
part _ [] = []
part 1 xs = [[xs]]
part k (x:xs) = map ([x]:) prev_ks ++ concatMap (inter x) ks
where
prev_ks = part (k-1) xs
ks = part k xs
main = print $ part 3 [1..4]
996デフォルトの名無しさん
2017/09/26(火) 21:54:38.15ID:YKUYL+7U997デフォルトの名無しさん
2017/09/26(火) 23:41:18.71ID:pHNMsW6Q n個の異なる要素のリストから[3,3,4,1,8,...]などとサイズ指定リストに従って分割するときの全列挙をするにはどうしますか?
分割はサイズ以外に見分けはつかないものとします
[[a,b,c],[d,e,f]]
と
[[d,e,f],[a,b,c]]はダブルカウントです
分割はサイズ以外に見分けはつかないものとします
[[a,b,c],[d,e,f]]
と
[[d,e,f],[a,b,c]]はダブルカウントです
998デフォルトの名無しさん
2017/09/26(火) 23:55:56.84ID:LAGAI/jv 分割の言葉のお前の定義からきかせてもらおうか。英語でok
999デフォルトの名無しさん
2017/09/27(水) 00:47:00.32ID:wiD7jN/4 bunkatsu "abcdefghij" [1,2,3,4]
なら
[["a","bc","def","ghij"],...みたいにです
なら
[["a","bc","def","ghij"],...みたいにです
1000デフォルトの名無しさん
2017/09/27(水) 01:19:52.15ID:iTQClNYA >>999
listl take 自然変換
listl take 自然変換
10011001
Over 1000Thread このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 254日 1時間 35分 58秒
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 254日 1時間 35分 58秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★10 [樽悶★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- ひろゆき氏 高市首相の台湾有事発言 「日本が得たものあまりない。経済的なマイナスは明確に存在」 [冬月記者★]
- 【音楽】『日本レコード大賞』各賞発表! 大賞候補にILLIT、M!LK、ふるっぱー、幾田りら、アイナ、ミセスら… 作詩賞は指原莉乃 [冬月記者★]
- 小野田紀美大臣、山上について問われピシャリと論破「テロリストには何も言うことは無い」 [856698234]
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
- 【ヤフコメの嫌儲化😰】ヤフコメ、なぜかアンチ高市コメントだらけになる😨😱 [718678614]
- 【悲報】秋元康「女性アイドルグループはもうオワコン。会いにいける男性アイドルグループを作る」 [455031798]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【訃報】日経平均先物逝く、円安株安債券安 [943688309]
