[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 07/21 14:46 / Filesize : 290 KB / Number-of Response : 1014
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型プログラミング言語Haskell Part30



1 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 23:43:54.28 ID:Vh4eztBk.net]
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28
echo.2ch.net/test/read.cgi/tech/1428597032/

932 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 17:24:15.30 ID:YH54NEsT.net]
>>921
あー。Haskellでは状態を変更しない為に単方向リストを用いるって書いてなかった?

933 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 17:35:40.48 ID:osPI36Tt.net]
>>922
リストの定義とか使い方とかは載ってたけど、
なんで単方向のなのかの説明は無かったよ。
「Haskell:The Craft of Functional Programming」
「Beginning Haskell: A Project-Based Approach」

934 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 17:47:54.21 ID:YH54NEsT.net]
マジかぁ……

935 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 03:30:11.22 ID:lYwDQiZm.net]
Purely Functional Data Structuresなら触れられてるかと思って探してみたけど
そもそも双方向連結リスト出てこないな(´・ω・`)
でも永続データ構造の概念を知ればなぜ扱われていないかが分かるだろう多分

936 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 05:24:22.47 ID:8YNqT7yd.net]
何で双方向リストの必要なんかあるんですか
途中で戻るとか男らしくないっすよ

937 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 07:18:24.63 ID:3UP7YVEo.net]
>>926
巨大な双方向グラフを作ることになったんだけど、 使い方は次の通りちょっと特殊。

* あるノードにアクセスしたら、その近隣のノードも集中的にアクセスすることが多い
* ノードが持つ値の読み書きアクセスが圧倒的に多く、グラフの形を変えることは少ない
* ノードの値の書き込みアクセスよりは読み取りアクセスの方が多い

既存の汎用的なグラフ ライブラリと、双方向リンクで自作したグラフ ライブラリとで、
どっちが効率いいか実験してみようと思ったんだ。

でも双方向リンクは、ひとつのノードの値を変えるためにどうしてもグラフ全体を作り直す羽目になる。
どうにかならんものかと考えてたけど、どうにもならんね・・・

938 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 09:37:24.20 ID:z8GPJM/w.net]
「doubly linked list haskell」でググって適当な実装拾う

939 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 11:49:25.22 ID:lYwDQiZm.net]
すごハスにあるようなZipper構造かな必要なのは

940 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 12:38:50.35 ID:cadjyHiv.net]
書き換えしないんだったら ([a], a, [a])  みたいなので充分なんだよな
コモナドにしてどうたらとか余計な話も無視して



941 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 12:49:49.13 ID:3UP7YVEo.net]
あの、欲しいのはリストじゃなくてグラフなんだ。
だから、zipper 系とは違う。

942 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 14:03:01.85 ID:UJfUdOL2.net]
最低限木じゃないと効率的かつ単純なのは無理なんじゃないかな?
あんま自信ないけど

943 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 14:05:39.83 ID:3UP7YVEo.net]
皆のレスがどうも勘違いしてると思ってたら、
俺が最初に双方向リンクと言ってしまったからか。

ごめん、相互リンクだ。

944 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 14:16:21.20 ID:3UP7YVEo.net]
>>932
木構造でも、親ノードへのリンクを入れると相互リンクになって難しくなるよね。

ひとつのノードの値を変えるためには、
ツリー全体を作り直すことになるんじゃないかな。

HaskellのDOMツリーのデータ構造とかどうなってるんだろ・・・

945 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 14:36:16.80 ID:3UP7YVEo.net]
よく考えたら、リストとかツリーでも、
途中のノードの値を変えたかったら、
そのノードまでリンクで繋がってる全ノードは、
新しくリンクを張り直さなくちゃいけないんだね。

946 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:07:16.49 ID:ByIgTrbm.net]
そうです。途中の値の変更は
リストならO(n)
ツリーならO(log n)


947 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 17:20:58.63 ID:UJfUdOL2.net]
>>934
ランダムアクセスしないなら木に入れなくてもその都度親リストを作ればいいんだけどね
なおかつそれをカーソル的に使ってやれば平均で更新のコストも減らせる
ってこれzipperか

948 名前:デフォルトの名無しさん [2017/09/01(金) 01:21:03.60 ID:5J9AnuIe.net]
何が何でも1つのプログラミング言語で何とかしようとするのって
異国に行っても母国語で通そうとする観光客と同じ

949 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 06:41:46.01 ID:YbmVmXZP.net]
>>938
ひとつの言語がどこまでできて、何が得意で何が苦手なのか、
ひとつの言語に集中してそういうのを学ぼうとするのも、
おまえの言う「母国語で通そうとする観光客」カテゴリに入るのか?

950 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 01:43:24.06 ID:6rFZUKZZ.net]
>何が何でも1つのプログラミング言語で何とかしようとするのって
>異国に行っても母国語で通そうとする観光客と同じ

こういうやつにかぎってポリグロッタルコストを甘く見てる



951 名前:デフォルトの名無しさん [2017/09/02(土) 02:26:59.07 ID:zv/5K5Jn.net]
私はHaskell以外のプログラミング言語で書く気はありません

952 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 03:52:13.44 ID:qGW8qyv/.net]
慣れるまで大変だけど、慣れたら居心地いい気がする

953 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 07:28:06.22 ID:pdF7ruXY.net]
困ったらFFIでC呼び出せばいいだけだから助かる

954 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 23:35:36.55 ID:r8Qtf4kd.net]
ICFP 2017 で発表された資料、成果や知見はどこかで後悔されたりしないんですか?
動画が公開されてるんなら、有料でも見たいです。

955 名前:デフォルトの名無しさん [2017/09/09(土) 18:15:24.47 ID:lkyt770O.net]
発表者各自が公開してるの地道に探すしかねーんでないの

ICFP Conference(@icfp_confere

956 名前:nce)さん | Twitter
https://twitter.com/icfp_conference
[]
[ここ壊れてます]

957 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 20:11:43.28 ID:TPWLKlk7.net]
>>945
やはりそうですか。

毎年そうやって発表者や参加者の発信を探すのですが、
分散しており、詳しいことは書いてないことも多く、
情報集めに苦労する割には、たいてい徒労に終わります。

有料でいいので公式がまとめて公開してくれるといいのにと
ここ数年つたない英語でメールを出しているのですが、
相手にしてもらえませんね。

すいません、愚痴でした。

958 名前:デフォルトの名無しさん [2017/09/09(土) 23:36:02.27 ID:9IxpzJRD.net]
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
www.sigplan.org/OpenTOC/icfp16.html
フェイスブック、レディっと、ラムダザウルチメイトなどの良く知られた媒体でも
事前告知や事後報告があると思う

959 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 00:33:58.75 ID:et8drD+r.net]
>>947
指摘を受けて、もしかしてと思い、改めて公式サイトの中を探してみましたら、
paper は公開されていることが分かりました。

過去のも見てみましたら、去年のもの paper にはアクセスできるようでした。
(その前のは公式からはリンクは張られていない模様)
video も年によってはリンクが張られていたりします。

なかなかぱっと見では分かりにくいところにリンクがあるのですが、
やはり探し方が悪かったみたいでお恥ずかしいです。


ちなみに、ICFP は国際的な関数型言語の会議です。
使う側、処理系側双方の最新情報を発表したり、
ワークショップが開かれていたりします。

960 名前:デフォルトの名無しさん [2017/09/11(月) 00:32:10.78 ID:Xe2WUSa/.net]
問題解決もしくは近づいたのなら何よりです



961 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 23:17:06.08 ID:NiRp1zJ5.net]
Haskellの正規表現ってどのライブラリを使うのが無難?
Text.Regex.Posixをimportしようとすると、Text.Regex.BaseかText.Regex.PCREの間違いじゃね?って言われて困惑

962 名前:デフォルトの名無しさん [2017/09/13(水) 18:15:30.36 ID:15e8c4wP.net]
(´・ω・`)あのー
なにかおすすめの参考書ありませんか?
初心者です
むちゃくちゃ簡単でやさしく書いてるのが良いです
アマゾンで見つけて最近出たみたいなんだけどこれはどうなの?



Haskellによる関数プログラミングの思考法 https://www.amazon.co.jp/dp/4048930532/ref=cm_sw_r_cp_api_ozpUzbZS57HY2

963 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:15:57.75 ID:jV0bEQ9+.net]
正直Haskellで「簡単でやさしく」は無理です
諦めてすごいH本やHaskellWikI,Hoogleや各種書籍、サイトを何度も往復して苦しみながら覚えてください

964 名前:デフォルトの名無しさん [2017/09/13(水) 19:18:52.25 ID:15e8c4wP.net]
(´・ω・`)はい

965 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:53:59.78 ID:4h5PMlCQ.net]
すごいHaskell楽しくなんとかって奴がいいらしいよ
あとリアルワールドHaskell

966 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 00:00:37.91 ID:55xYcYks.net]
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ってけっこう 多いのな
ビックリした

967 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 01:28:21.76 ID:kgKbKDJJ.net]
>>951
他の人も書いてるけどやはり「すごいHaskell」がとっつきやすさは高いと思う
それでいて内容もちゃんとしている
「関数プログラミングの思考法」もいい本だとは思うのだが
目的がアルゴリズムデザインとかの方面であんまり初心者向けっぽくない

968 名前:デフォルトの名無しさん [2017/09/14(木) 06:01:32.83 ID:yKCuCAfu.net]
>>954
>>956
(´・ω・`)すごいHaskell読んでみます
ありがとー

969 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 09:24:06.36 ID:ux4IsQoU.net]
英語が読めればwikibooksのやつもどうですか?
自分は"プログラミングHaskell"から入ったので初見じゃないですが、良さげに見えます。
内容も定期的に更新かかってますし。

970 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 10:02:22.29 ID:Yrr+4vGX.net]
「しゅごいHaskell」はダブルVサイン出しながら
読まなきゃいかんのでキーボードが打てない



971 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 16:15:03.19 ID:fLwKChPf.net]
What does it mean?

972 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 23:15:23.23 ID:BKIQZ2N0.net]
He probably meant Haskell wikibook page is upto dated. And that is also why I recommend it for beginners too.

973 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 08:29:13.24 ID:K8WAqD4o.net]
>>957
あなたがそもそも関数型プログラミングに慣れ親しんでいないのであれば、まずはそこが第一の壁となるでしょう
まずはリストをメインに再帰やマッピング、畳み込みといった操作に慣れましょう
またHaskellはデフォルトでカリー化されているのでその妙味も十分に味わいましょう

次に壁となるのは、型や型クラスでしょうか?
ここではクラスやインスタンスといった単語が出てきますが、それらはいわゆるオブジェクト指向で使われているものとは意味が全く違うので注意してください
型に慣れ親しみ、常に適切な型を選択できるよう意識してください
そうすればコンパイラがあなたの強い味方となってくれます

最後に入門者の壁となるのは、おそらくモナドでしょう
モナドは数学の圏論由来の概念ですが、別段圏論に詳しくある必要はありません
基本的な部分では、モナドは単なる文脈であり、文脈を表すためのコンテナです
しかし、それ以上に高度で抽象的なことをやろうとすると、その理解では行き詰まるかもしれません
そんなときは、圏論に軽く触れてみるのもいいでしょう
少なくともかの有名な
「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」
をざっくりとでもいいので理解できれば、新たな視界が開けると思います

Haskellは簡単な言語でもやさしい言語でもありませんが、その代わり高度に抽象化された、バグの少ないプログラミングが可能です
あなたの成功を心より祈っています

974 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 08:57:14.76 ID:8dqnOzco.net]
歳を取って反射神経鈍ってくると一々詳細を語るのが億劫になって抽象的なまま話を進めたくなるよね
Haskellは抽象的にプログラミングするインフラを整備している?

975 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 18:00:40.28 ID:d/L5NKte.net]
Map a (Map b c)

Map (a,b) c


どっちが速いかみんな一度は悩んだことあると思う

976 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 22:35:43.14 ID:znUIhbu+.net]
悩まんでしょ

977 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 22:47:16.31 ID:eUG8Jdoq.net]
コンパイルしたらどうせ一緒になると思って適当に書いてたけど、変わるの?

978 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 23:09:08.09 ID:4fuQ9N5K.net]
Mapは平衡二分探索木だから各Map b cのサイズに開きがあると遅くなるね

979 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 13:16:45.55 ID:u+a6R9+A.net]
newtype F a b c = F (Map a (Map b c))
newtype G a b c = G (Map (a, b) c)

これでFとGはどうせ一緒のクラスになる
こういうポリモーフィズムの意味がわかってる人は速さで悩まない

980 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 15:43:07.25 ID:QR311jcD.net]
それは実装を隠蔽しただけで速さの悩みを解決したわけではないのでは…
もちろん実装を隠蔽しておいて後でより速い実装に
容易に交換できるようにしておくのは大変有用だが



981 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 20:52:50.94 ID:u+a6R9+A.net]
pi :: Floating a => a

円周率piの値を隠蔽し精度の悩みを解決

982 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 21:24:55.55 ID:MfZyyhcD.net]
今更だけど、いつの間にか cabal のバージョンが 1 から 2 になってる

なんか大きく変わったの?

983 名前:デフォルトの名無しさん [2017/09/17(日) 08:09:36.24 ID:QPoZRnuU.net]
>>4にある解説ページをちらっとみた
たしかに数式に似た感じでものすごく簡単に書けるみたいだね
たしかに直感的だとおもった

984 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:09:47.22 ID:1QLcw3LX.net]
haskellコンパイラはユーザ定義のモナドが
モナド則満たすことを
チェックしてくれない所がウンコ

985 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 23:00:55.55 ID:gD1zcn0E.net]
そんな超能力コンパイラがあるですか?

986 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 23:55:50.59 ID:Y0fSMmUh.net]
QuickCheck的なのがコンパイル時に走ってチェックしてくれたりするように
そのうちならないかなー

987 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 23:58:25.67 ID:h/TDh704.net]
モナドを自作したことがないから後学のためにどういう状況でどういうモナドを自作すると効率的なのか教えていただけると幸いです

988 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 00:28:53.04 ID:kX95feab.net]
適当に型を作ってたら実はモナドだった、みたいな

989 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 16:55:50.20 ID:xffnPG6j.net]
原理的にモナド則のチェックの自動化は不可能なの?
圏論マスターでも無理なの?

990 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 17:04:50.24 ID:uYwUnAnO.net]
ゲーデルさんに聞けばわかるかも。



991 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 17:56:16.78 ID:4/60bB6Q.net]
ユーザが書いたモナドであることの形式的証明を
検証出来る処理系なら有るはず。
Coq辺り。

992 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 19:52:40.81 ID:uE400tii.net]
Vectorパッケージで、基本Unboxedにして、
Unboxedに出来なければBoxedにする、
途中でUnboxedにできるなら戻す、
でのを手でやってるのですが、スマートなやり方ってありますか?

993 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 02:53:52.53 ID:7lhkarx+.net]
QuickSpecならなんとかしてくれる
かもしれない

994 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 20:42:11.20 ID:WVPJPMdD.net]
stack プロジェクト内の cabal ファイルの build-depends の項に sdl2 を書き込んで、stack build コマンドを実行しました。
すると、sdl2 パッケージのビルドでエラーが出て、「-fPCI を付けて再コンパイルしてください」と出力されました。
そこで stack build --ghc-options="-fPIC" コマンドを実行してみました。
しかし、それでも同様のエラーが起き、ビルドできません。

stack による sdl2 パッケージを利用するプログラムをビルドするにはどうすれば良いでしょうか。

995 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 21:51:07.20 ID:58d35SiT.net]
>>983
stack.yaml に、
ghc-options:
sdl2: -fPIC
を追記すればOK。たぶん。
https://github.com/commercialhaskell/stack/blob/master/doc/yaml_configuration.md#ghc-options

996 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:50:55.76 ID:WVPJPMdD.net]
>>984
やってみましたが、結果は変わりませんでした。

今使っている lts-9.5 の snapshot が
~/.stack/snapshot/x86_64-linux-tinfo6-nopie/lts-9.5
にあるのですが、nopie とあり、何か問題に関係ありそうなのですが、どうでしょうか。

997 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:32:36.23 ID:58d35SiT.net]
>>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 をインストールすると直るらしい。

998 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 10:57:49.47 ID:G5x2bhDn.net]
>>986
とりあえず先に進めるようになりました。
アドバイスありがとうございました。

たしかに私は ArchLinux を使っています。
Haskell の問題にディストリビューションの違いが絡んでくるとは考えていませんでした。

はじめ ncurses5-compat-libs をインストールしただけでは解決されませんでした。
(ログインし直しても)

そこで stack を一度綺麗にアンインストールしてから再インストールし、
それでもダメで、更にビルド時に -fPIC オプションを付けたらエラー無く通りました。

何が原因で処置がどう働いてこういう結果になったのか、まだ何となくでしか分かりませんが、
とにかく SDL を用いたプログラムを試すことができるようになり良かったです。

999 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 22:51:00.48 ID:xypOJPnn.net]
集合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に固定です。
質問のきっかけとなった問題は愚直に実装して解決しました。
なので、この質問は純粋に頭の体操、ゲームです。

1000 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 00:11:58.02 ID:lGqC8DP/.net]
集合の任意の要素m個(nCm)に1〜mの番号を重複なく振る(順列m!)、残りの要素に1〜mの番号を適当に振る(m^(n-m))



1001 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 07:15:14.90 ID:YKUYL+7U.net]
>>989
その方法ですと重複が起きます。
極端な話、集合 {a, b} を 2 つに分割する場合、
番号 1 と番号 2 を重複無く振る方法は2通りあります。
1. a=1、b=2
2. a=2、b=1
残りの要素は無いのでそのまま目的の集合を作ると、
どちらの方法で作っても同じ集合 {{{1}, {2}}} になります。

最後に重複をまとめて排除するのでしょうか。

1002 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 07:27:48.34 ID:8PxDtYJG.net]
部分集合作って差集合とのタプルにして最後に重複省くくらいしか思いつけない

1003 名前:デフォルトの名無しさん [2017/09/26(火) 07:50:17.87 ID:gfUhXOzb.net]
{a, b, c, d, e}でm=3なら

{a, b, c, d}でm=3のときの答えのリストにmap(:)'e'
それに加えて、{a, b, c}でm=2のときの答えに(:)'e'

集合の長さとmが同じならそのまま返す

みたいな感じじゃダメ?

1004 名前:デフォルトの名無しさん [2017/09/26(火) 07:51:32.23 ID:gfUhXOzb.net]
訂正
{a, b, c, d}でm=2のときの答えに(:)'e'

1005 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 10:27:56.68 ID:g1C4tf16.net]
>>992
>>993
要素数5でm=3なら、結果の集合の要素数は25ですけど、
その方法で25個すべて出ます?

1006 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 10:46:10.91 ID:cHfS1yYI.net]
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]

1007 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 21:54:38.15 ID:YKUYL+7U.net]
>>995
素晴らしいです。

正直 >>992 の時点では意味が分からなかったです。
(答えに (:a)'e' とか)
コード見て意味が分かりました。

1008 名前:デフォルトの名無しさん mailto:.sage [2017/09/26(火) 23:41:18.71 ID:pHNMsW6Q.net]
n個の異なる要素のリストから[3,3,4,1,8,...]などとサイズ指定リストに従って分割するときの全列挙をするにはどうしますか?

分割はサイズ以外に見分けはつかないものとします

[[a,b,c],[d,e,f]]

[[d,e,f],[a,b,c]]はダブルカウントです

1009 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:55:56.84 ID:LAGAI/jv.net]
分割の言葉のお前の定義からきかせてもらおうか。英語でok

1010 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 00:47:00.32 ID:wiD7jN/4.net]
bunkatsu "abcdefghij" [1,2,3,4]
なら
[["a","bc","def","ghij"],...みたいにです



1011 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 01:19:52.15 ID:iTQClNYA.net]
>>999
listl take 自然変換

1012 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 254日 1時間 35分 58秒

1013 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<290KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef