17/09/23 02:53:52.53 7lhkarx+.net
QuickSpecならなんとかしてくれる
かもしれない
994:デフォルトの名無しさん
17/09/23 20:42:11.20 WVPJPMdD.net
stack プロジェクト内の cabal ファイルの build-depends の項に sdl2 を書き込んで、stack build コマンドを実行しました。
すると、sdl2 パッケージのビルドでエラーが出て、「-fPCI を付けて再コンパイルしてください」と出力されました。
そこで stack build --ghc-options="-fPIC" コマンドを実行してみました。
しかし、それでも同様のエラーが起き、ビルドできません。
stack による sdl2 パッケージを利用するプログラムをビルドするにはどうすれば良いでしょうか。
995:デフォルトの名無しさん
17/09/23 21:51:07.20 58d35SiT.net
>>983
stack.yaml に、
ghc-options:
sdl2: -fPIC
を追記すればOK。たぶん。
URLリンク(github.com)
996:デフォルトの名無しさん
17/09/23 22:50:55.76 WVPJPMdD.net
>>984
やってみましたが、結果は変わりませんでした。
今使っている lts-9.5 の snapshot が
~/.stack/snapshot/x86_64-linux-tinfo6-nopie/lts-9.5
にあるのですが、nopie とあり、何か問題に関係ありそうなのですが、どうでしょうか。
997:デフォルトの名無しさん
17/09/23 23:32:36.23 58d35SiT.net
>>985
うーん、なんだかよくわからないけど、リンクフェーズで”recompile with -fPIC”と言われてしまう問題が報告されていて
URLリンク(github.com)
URLリンク(docs.haskellstack.org)
これによると、Arch Linux では ncurses5-compat-libs をインストールすると直るらしい。
998:デフォルトの名無しさん
17/09/24 10:57:49.47 G5x2bhDn.net
>>986
とりあえず先に進めるようになりました。
アドバイスありがとうございました。
たしかに私は ArchLinux を使っています。
Haskell の問題にディストリビューションの違いが絡んでくるとは考えていませんでした。
はじめ ncurses5-compat-libs をインストールしただけでは解決されませんでした。
(ログインし直しても)
そこで stack を一度綺麗にアンインストールしてから再インストールし、
それでもダメで、更にビルド時に -fPIC オプションを付けたらエラー無く通りました。
何が原因で処置がどう働いてこういう結果になったのか、まだ何となくでしか分かりませんが、
とにかく SDL を用いたプログラムを試すことができるようになり良かったです。
999:デフォルトの名無しさん
17/09/25 22:51:00.48 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:デフォルトの名無しさん
17/09/26 00:11:58.02 lGqC8DP/.net
集合の任意の要素m個(nCm)に1~mの番号を重複なく振る(順列m!)、残りの要素に1~mの番号を適当に振る(m^(n-m))
1001:デフォルトの名無しさん
17/09/26 07:15:14.90 YKUYL+7U.net
>>989
その方法ですと重複が起きます。
極端な話、集合 {a, b} を 2 つに分割する場合、
番号 1 と番号 2 を重複無く振る方法は2通りあります。
1. a=1、b=2
2. a=2、b=1
残りの要素は無いのでそのまま目的の集合を作ると、
どちらの方法で作っても同じ集合 {{{1}, {2}}} になります。
最後に重複をまとめて排除するのでしょうか。
1002:デフォルトの名無しさん
17/09/26 07:27:48.34 8PxDtYJG.net
部分集合作って差集合とのタプルにして最後に重複省くくらいしか思いつけない
1003:デフォルトの名無しさん
17/09/26 07:50:17.87 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:デフォルトの名無しさん
17/09/26 07:51:32.23 gfUhXOzb.net
訂正
{a, b, c, d}でm=2のときの答えに(:)'e'
1005:デフォルトの名無しさん
17/09/26 10:27:56.68 g1C4tf16.net
>>992
>>993
要素数5でm=3なら、結果の集合の要素数は25ですけど、
その方法で25個すべて出ます?
1006:デフォルトの名無しさん
17/09/26 10:46:10.91 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:デフォルトの名無しさん
17/09/26 21:54:38.15 YKUYL+7U.net
>>995
素晴らしいです。
正直 >>992 の時点では意味が分からなかったです。
(答えに (:a)'e' とか)
コード見て意味が分かりました。
1008:デフォルトの名無しさん
17/09/26 23:41:18.71 pHNMsW6Q.net
n個の異なる要素のリストから[3,3,4,1,8,...]などとサイズ指定リストに従って分割するときの全列挙をするにはどうしますか?
分割はサイズ以外に見分けはつかないものとします
[[a,b,c],[d,e,f]]
と
[[d,e,f],[a,b,c]]はダブルカウントです
1009:デフォルトの名無しさん
17/09/26 23:55:56.84 LAGAI/jv.net
分割の言葉のお前の定義からきかせてもらおうか。英語でok
1010:デフォルトの名無しさん
17/09/27 00:47:00.32 wiD7jN/4.net
bunkatsu "abcdefghij" [1,2,3,4]
なら
[["a","bc","def","ghij"],...みたいにです
1011:デフォルトの名無しさん
17/09/27 01:19:52.15 iTQClNYA.net
>>999
listl take 自然変換
1012:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 254日 1時間 35分 58秒
1013:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています