トップページtech
1001コメント316KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/01/21(月) 02:16:16.07
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
Part20 ttp://toro.2ch.net/test/read.cgi/tech/1350428908/
0159デフォルトの名無しさん2013/02/16(土) 20:50:39.64
QtでGUIが構築できるようになるパッケージって無いですか
0160デフォルトの名無しさん2013/02/17(日) 03:51:51.74
>>158

この人怖い!
0161デフォルトの名無しさん2013/02/17(日) 11:15:41.97
>>160
いや、言われて当然だろう。

ライプニッツがモナドを提唱していた事を知っていたのなら、
「モナド ライプニッツ haskell」でググれば、
それぞれのモナドが無関係なことは直ぐ分かる。
それもしないで食い下がってくれば言いたくもなるぞ。

最近、簡単な調査を怠ってくだらない質問してくる奴多いな。
0162デフォルトの名無しさん2013/02/17(日) 16:35:21.08
haskellスレは今日も殺伐
0163デフォルトの名無しさん2013/02/17(日) 17:52:26.05
>>161
まだ根に持ってるの?w
0164デフォルトの名無しさん2013/02/17(日) 21:02:56.91
Foldableはあるのに
Filterableってクラスはないのかしら
0165デフォルトの名無しさん2013/02/17(日) 21:30:23.43
標準ライブラリには無いね。

Filterableクラスは、具体的にはどんな関数を持ったクラス?
どのようなケースで必要になる? あるいは、どのようなケースであると便利?
0166デフォルトの名無しさん2013/02/17(日) 21:35:04.15
[a]にもSet aにも同名で同機能なfilterという関数が定義されてるのに
まとめられてないのが気持ち悪く感じたので
同じような機能なら何でもかんでもまとめてクラスにしちゃおうって考え方はマズイかなあ
0167デフォルトの名無しさん2013/02/17(日) 21:42:58.81
foldは単位元と二項演算が必要というのが制約だけど、filterは大した制約ないでしょ?
0168デフォルトの名無しさん2013/02/17(日) 21:56:30.57
いや普通にあってもおかしくないけどfilterable
何がそんなに気に障るのか
0169デフォルトの名無しさん2013/02/17(日) 21:57:24.13
大した制約があるかどうかが重要であるという説明をしないと
大した制約があるかどうかに着目した理由がわからない
0170デフォルトの名無しさん2013/02/17(日) 22:07:20.91
collctionならnatualにfilterableだわねえ
0171デフォルトの名無しさん2013/02/17(日) 22:13:08.21
リストの方のfilterは集合と違って、順序が保存される点で厳密には同じ機能でないからとか
0172デフォルトの名無しさん2013/02/17(日) 22:13:50.30
>>166
Data.List と Data.Set には、filter の他にも
partition や split、(\\) など、共通な関数はあるが、
これらはどうする?

Data.Array 系や Data.Map 系などと Data.Set の間にもいくつかあるね。
0173デフォルトの名無しさん2013/02/17(日) 22:21:15.08
Foldableからfilterは作れないわけではない
http://www.haskell.org/haskellwiki/Foldable_and_Traversable
ApplicativeとMonoidを要求してるけど、Applicativeに関してはpureしか使わないから、あまり誉められた型クラスの
使い方ではない
しかし残念ながら a -> f a のみの型クラスはデフォルトにはない

リストやSetはMonoidにできるけど、Mapなんかは無理だから、
filterを一般化するには専用の型クラスを作るしかないのかな?
0174デフォルトの名無しさん2013/02/17(日) 22:26:47.24
>>171
同じ型のコレクションになるんだから当たり前かと。
0175デフォルトの名無しさん2013/02/18(月) 03:39:16.79
instance Filterable (Hoge a) eliciting Foldable
なんて機能があればいいな(提案)
0176デフォルトの名無しさん2013/02/18(月) 13:39:44.19
もう目が覚めました
今日からhaskellやめてpython使いになります
0177デフォルトの名無しさん2013/02/18(月) 13:47:21.09
>>176
まあちょっと座って落ち着きなさい
このお茶を飲みなさいな
0178デフォルトの名無しさん2013/02/18(月) 13:56:17.46
>>176
お前にOCamlを使う権利を与えよう
0179デフォルトの名無しさん2013/02/18(月) 15:27:36.99
OPyH(オパーイエッチ)
0180デフォルトの名無しさん2013/02/18(月) 20:15:44.39
Haskellって、最も目を覚ましていないと使えない言語だと思う
0181デフォルトの名無しさん2013/02/18(月) 21:39:12.72
そういう自画自賛的なのは要らないから
0182デフォルトの名無しさん2013/02/18(月) 22:02:57.67
眠い頭じゃコードが書けないってことだろ
0183デフォルトの名無しさん2013/02/18(月) 22:07:24.60
Queryable Combinable Filterable Indexed とか全部作っちゃえよ

http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Set.html
0184デフォルトの名無しさん2013/02/18(月) 22:35:39.05
ハッスル!ハッスル!
0185デフォルトの名無しさん2013/02/19(火) 02:25:51.81
>>181
ここを追い出されたらどこへ行けば……
0186デフォルトの名無しさん2013/02/19(火) 03:28:57.54
別に追い出すなんて言ってないんだから……
べべ別にアンタが居なくなったら寂しいとかそういうんじゃないんだからねっ!
0187デフォルトの名無しさん2013/02/19(火) 08:41:26.00
やはりRubyにおけるRails的なものが無いと広まらない
と思ったけどYesodがそういう位置づけだったか
「Yesodだとこんな簡単にWebアプリが作れる!!」的なステマが足りないのだろうか
0188デフォルトの名無しさん2013/02/19(火) 10:35:36.13
売り込むなら簡単よりも堅牢とかじゃない?
正直Rails等を置き換えるほどのものじゃないと思うけど
0189デフォルトの名無しさん2013/02/19(火) 10:58:08.96
「Yesodだとこんな堅牢にWebアプリが作れる!!」
だと、それが本当だとしても、インパクトが少ない。
目を輝かせたニュービーが大量流入するぐらいのキャッチーさが欲しいところ。
0190デフォルトの名無しさん2013/02/19(火) 12:38:49.18
10分のコーディングでスゲーサイト作るところをYouTubeにアップするとか
0191デフォルトの名無しさん2013/02/19(火) 13:38:00.12
そういうのはもう溢れてるだろ……
0192デフォルトの名無しさん2013/02/19(火) 13:44:32.81
Haskellで作ったシステムで金融危機予知してぼろ儲けしたはwwwww
みたいな事するしかないな
0193デフォルトの名無しさん2013/02/19(火) 13:48:26.51
>>189
イージーカムイジリーオカダというではないか
そもそもHaskellの取っ付きにくさを見ればキャッチーなんて縁遠くて然るべきなのだ

Haskellの標語には質実剛健こそ相応しい
0194デフォルトの名無しさん2013/02/19(火) 13:58:14.39
こういう奴がいる限りは流行んないでしょ
0195デフォルトの名無しさん2013/02/19(火) 14:13:13.90
僕が間違ってました
0196デフォルトの名無しさん2013/02/19(火) 14:18:51.35
全力で成功を回避する
0197デフォルトの名無しさん2013/02/19(火) 15:35:29.87
入門書の最初の方で必ずと言っていいほど、素数を求めるとかの数学的な例題を出すのがいけないと思う
そのせいで他言語やってきた普通の人が他の言語で解決してきた問題をhaskell(関数型言語)でどう解決するのかがぴんとこなくなっていると思う
0198デフォルトの名無しさん2013/02/19(火) 16:47:25.91
入門書自体そんなにないけど最初に素数を求める本なんて具体的にあったっけ?
0199デフォルトの名無しさん2013/02/19(火) 17:14:52.07
>>197
底辺はお呼びじゃない。
0200デフォルトの名無しさん2013/02/19(火) 17:21:42.63
>>197
そう言う意味では「ふつける」はいい本だったと思う
何故か一部で評判が悪いけど
0201デフォルトの名無しさん2013/02/19(火) 17:28:04.13
Haskell十分流行ってんじゃん
Smalltalkと比べろ
0202デフォルトの名無しさん2013/02/19(火) 17:28:32.84
RealWorldHaskellみたいな本が増えるといいんですけどね
Natural Language Processing for the Working Programmer(Web上で無料で読めるからググれ)
はNLPを題材にしてHaskellも同時に学ぶという本で、
良さそうだったんだけど、まだ未完成。あと英語だし。
0203デフォルトの名無しさん2013/02/19(火) 17:34:04.94
その本のタイトルちょっと慣用とずれてるよね。
応用を視野に入れて理論をスッキリと概説するのが〜 for working 〜シリーズなので。
タイトルに反してHaskellコードベッタリな本になってしまってる。
0204デフォルトの名無しさん2013/02/19(火) 17:36:32.47
Effective Haskellみたいな本はないの?
0205デフォルトの名無しさん2013/02/19(火) 17:40:36.40
RWH以外のなにかを求めている?
0206デフォルトの名無しさん2013/02/19(火) 17:46:44.86
RWHは内容的にも物理的にも重い
そしてちょっと古い
0207デフォルトの名無しさん2013/02/19(火) 18:38:10.92
・HaskellのTips本が無い

・設計上の陥りやすい罠とその回避策をまとめた本が無い

・Haskellデザインパターンが無い

・Haskellメタプログラミング(HMP)本が無い

・HaskellのガベコレがJavaに適わない

・『Haskellの設計と進化』本が無い

・Haskellマガジンが創刊されない

・Haskellラムダキーホルダーが無い
0208デフォルトの名無しさん2013/02/19(火) 19:01:30.56
Haskellラムダキーホルダーって、それただの棒だよね
0209デフォルトの名無しさん2013/02/19(火) 19:23:48.53
Haskellラムダお菓子として展開すればあるいは
0210デフォルトの名無しさん2013/02/19(火) 19:41:23.45
なにより、マスコットが居ない
0211デフォルトの名無しさん2013/02/19(火) 19:53:58.90
ラムダ饅頭
0212デフォルトの名無しさん2013/02/19(火) 20:12:41.30
そうだ!必要なのはマスコットだ!
0213デフォルトの名無しさん2013/02/19(火) 20:27:33.27
よし、マスコットは病弱そうな女の子風でどうだ?
0214デフォルトの名無しさん2013/02/19(火) 20:37:27.30
Haskellの国際大会で日本の女子中学生が初めて金を取った

ってニュースをNHKが流せば、かなり人気出ると思う
0215デフォルトの名無しさん2013/02/19(火) 21:12:46.43
必要ないだろ…
0216デフォルトの名無しさん2013/02/19(火) 23:00:37.58
マス子ちゃん、君の堅牢な部分をみせてごらん?
0217デフォルトの名無しさん2013/02/19(火) 23:09:06.87
レシピブックほしい
0218デフォルトの名無しさん2013/02/20(水) 01:11:51.91
Set aとかMap k aってどうあがいてもFunctorとかのインスタンスに出来ないの?
出来るような仕様にしても良くね?不便じゃね?
0219デフォルトの名無しさん2013/02/20(水) 02:57:49.14
>>216
ガッチガチじゃあないか……

どれ、早速……

ん、もうかい?意外に速いんだな
0220デフォルトの名無しさん2013/02/20(水) 07:15:58.95
>>218
Map型は標準ライブラリの中でも既にFunctorクラスのインスタンスだよ。

Set型は標準ライブラリの中ではFunctorクラスのインスタンスではないが、
必要なら自分でインスタンス化すれば良いだけじゃないか?
0221デフォルトの名無しさん2013/02/20(水) 08:05:38.31
遠隔操作事件のウィルスがHaskellで作られてたなら警察も操作やりやすかっただろうに( ´Д`)y━・~~
0222デフォルトの名無しさん2013/02/20(水) 10:01:28.62
Set a は a がOrdのインスタンスである必要があるけどそれでもFunctorにできるの?
http://www.randomhacks.net/articles/2007/03/15/data-set-monad-haskell-macros
みたいにゴニョゴニョするしかないの?
0223デフォルトの名無しさん2013/02/20(水) 10:18:39.68
Setはまともな形でFunctorにするのは無理だね
0224デフォルトの名無しさん2013/02/20(水) 12:49:29.55
>>222
では逆に訊くが、もし Set 型が Functor クラスのインスタンスだったら、
Set a 型の値 x と関数 f::(a -> b) に対する関数適用 fmap f x は
どのような戻り値になって欲しいんだ?
具体的な値を使って例示&説明してみてくれ。

その値と戻り値の組みが作れるかどうか = Functor クラスのインスタンスにできるかどうか
という事で良いんだよな?
0225デフォルトの名無しさん2013/02/20(水) 12:53:49.46
>>223
まともって何だ?

今自分がプログラムするのに必要となる型に対して、
必要な分だけ過不足無くインスタンスを定義すれば良いだけだと思うが。

もしかして、fmap の結果が同じ値になってしまって、
Set の構造が元のものと変わってしまう、と言いたいのか?

でも、それは仕方ないだろ。
今自分がプログラムするのにそのような仕様が欲しいのなら、
そのようにプログラムすればいい。
構造が変わってしまっては困るのなら、
構造が変わらない場合だけを正しく定義し、
構造が変わる場合はエラーを出すように作れば良い。
0226デフォルトの名無しさん2013/02/20(水) 13:24:49.73
>>225
instance Functor Set where
fmap = Set.map
とすれば型エラーになるはず

↓こんな風に
http://codepad.org/ynVAbAoF

fmapは(a->b)->Set a->Set bの関数を要求するけど、これにaとbがOrdであることを付け足すことが文法上無理って話じゃないの?
0227デフォルトの名無しさん2013/02/20(水) 16:18:39.68
restricted monadとかいうのと同じテクニックを使ったまともじゃないFunctorの例
http://codepad.org/VdGgAakp
0228デフォルトの名無しさん2013/02/20(水) 20:12:09.85
>>226
そりゃ fmap = Set.map なんてすればエラーになるに決まってる。

fmap = 自作しろ

という話だ。
正確に言えば、自分のプログラムの仕様に合うように自作しろ、ということだ。

あと、Set 型は instance (Ord a) => Set a ではない。
Monoid クラスのインスタンスであるために
型引数 a が Ord クラスのインスタンスであることが要求されるが、
Set 型自体が Ord クラスのインスタンスになっているわけではない。

まぁたしかに、Set 型を使う関数の多くが、
型引数が Ord クラスのインスタンスであることを要求してはいるがね。
0229デフォルトの名無しさん2013/02/20(水) 20:55:55.15
ちょっと何言ってるかわからないですね…
Set a のaがOrdを想定していることはMonoidと何の関係もないし、aがOrdでないようなSet aはemptyとsingleton以外には基本的に構築できないし、当然すべきでもない
型チェックをパスするfmapを定義することは、自明で無意味なもの(fmap _ _ = empty とか)を除いて不可能
0230デフォルトの名無しさん2013/02/20(水) 21:14:23.72
>>229
もとの質問をちゃんと読んでくれ。>>218

どうあがいても無理なのか? と彼は訊いているんだよ。
Haskell の仕様としてできない事になっている、と勘違いしている。
(Map も Functor ではないと勘違いしているのだから、思い込みも甚だしい)

これを否定する事実を提示するだけで、この疑問は解消されるだろう。
つまり、あがけばできるし、できない仕様にはなっていない事を示せば良い。

instance Functor Set where
fmap f s = let xs = toList s
xs' = fmap f xs
in fromDistinctAscList xs'

それに元の質問は、Functor 版 Set をどのようなシーンでどう使いたいのか
まったく言っていない。
だから、質問は無理かどうかを訊いているだけなのだろう。
0231デフォルトの名無しさん2013/02/20(水) 21:22:52.68
fmap = undefined
でなんでもFunctorだよ!
0232デフォルトの名無しさん2013/02/20(水) 21:28:08.21
せめてFunctor則を満たせ
0233デフォルトの名無しさん2013/02/20(水) 21:39:50.06
mapMonotonicは単に型が通るだけで、fmapとしては全く無意味な定義だよ
もし質問の回答として
「fmap _ _ = empty にすればいいよ」
と言われたら、質問者を馬鹿にしてるととられて当然だ
そしてfmap=mapMonotonic も全く同じレベルの話だ

だいたいMonoidのインスタンスであるためにOrdがどうこう、みたいな全く頓珍漢なデタラメを言いながら、>>218を「思いこみも甚だしい」だなんてよく言えたものだ
彼は単にMapがFunctorであることを知らなかっただけだろう
0234デフォルトの名無しさん2013/02/20(水) 21:56:15.19
>>233
> 彼は単にMapがFunctorであることを知らなかっただけだろう

質問する前に、標準ライブラリのドキュメントの Data.Map のページを見て、
Functor のインスタンスではないかどうかを確認するのが
「普通の質問者のすること」だと思うが。

仕様上できないと思っており、確認もしないのなら、
知らないというよりは思い込みだろ(知らないの部類に入ることかも知れんが)。

質問する前にちょっと確認するだけで分かることだぞ。
正確に言えば、ドキュメントの Data.Map のページには、
This module re-exports the value lazy Lazy API, plus several value strict functions from Strict.
と書かれているのだから、Data.Map.Lazy や Data.Map.Strict を見て確認するだろ。
そこにはちゃんと Functor (Map k) と書かれている。
0235デフォルトの名無しさん2013/02/20(水) 22:06:13.42
>>234
たかだかその程度の瑕疵じゃないか
MonoidのためにOrdがどうこうみたいな意味不明な妄言を書いたり、全く無意味な定義で「インスタンスにできる」と言い張ったりするのは「普通の解答者のすること」じゃないよ
少なくとも彼を叩けた立場じゃない
0236デフォルトの名無しさん2013/02/20(水) 22:52:56.26
>>235
あぁ、ごめん
Set 型自体が Ord クラスのインスタンスになっているわけではない、
というのは俺の勘違いだ。
Ord のインスタンスになっている。
たしかに叩けた立場じゃないな。

それは謝る。
申し訳なかった >>218 >>235


それとは別に、>>218 の、「どうあがいても」無理か、という疑問には
俺は問題なく答えてるよな。
できない仕様になっている、という誤った認識をちゃんと正してるつもりだが。
0237デフォルトの名無しさん2013/02/20(水) 23:00:31.06
>>235
あと、「インスタンスにできる」として例示したものが
全く無意味な定義かどうかは、質問の内容によるだろ。

こういうシーンでこう使いたいのだができないか、
と具体的に質問されれば、あの例では全く無意味である可能性は高い。

しかし、あの質問の内容ならば、無理では無いこと、
できない仕様では無いことの証拠を示す例で十分だ。

それを、こちらが勝手に質問の意図を推測するのは余計だと思うぞ。
0238デフォルトの名無しさん2013/02/20(水) 23:06:36.53
いやどうあがいてもまともなFunctorインスタンス無理だろ
ここでいう「まともな」とは
・Functor則を満たす
・ドキュメントで明示的に禁止されているやりかたでSetのAPIを使わない
の二点を守ること
0239デフォルトの名無しさん2013/02/20(水) 23:17:03.02
fmap=mapMonotonic
でもFunctor則は一応満たすよ
まあFunctor則を満たす「だけ」だけど
0240デフォルトの名無しさん2013/02/20(水) 23:17:10.16
>>230ってFunctor則満たすんじゃね
ぱっとみ反例が思いつかん
0241デフォルトの名無しさん2013/02/20(水) 23:20:31.90
満たすよ Functor則はね
でもFunctor則しか満たさない
0242デフォルトの名無しさん2013/02/20(水) 23:27:57.26
Functor則に従うなら問題ないな
0243デフォルトの名無しさん2013/02/20(水) 23:30:20.84
ドキュメントで明示的に禁止されているやりかたでSetのAPIを使わない
ってのがよう分からん

SetのAPIで使い方にルールがある関数があって、
そのルールを満たさないと普通はコンパイルエラーかなんか出るけど、
>>230みたいなことをすると、エラーにならないからダメってことかな
0244デフォルトの名無しさん2013/02/20(水) 23:30:34.29
なんか変なやつが住み着いてるな
02452182013/02/20(水) 23:34:10.28
fmap は Set.map と同じ仕様を望んでたけど
無理っぽいですね
0246デフォルトの名無しさん2013/02/20(水) 23:34:14.32
>>243
ほとんどの関数において、なぜSet aのaがOrd aであることを要求されているかわかる?
0247デフォルトの名無しさん2013/02/20(水) 23:35:21.14
>>243
たとえばfromDistinctAscListには、昇順なリストしか渡しちゃだめって書いてあるよね
>>230だとfromDistinctAscListに昇順でないリストが渡るかもしれないからまともじゃない
0248デフォルトの名無しさん2013/02/20(水) 23:35:49.48
前提がないなら、>>218の「どうあがいても」は>>238で言われるところの「まともな」範囲の話と考えるのが常識的だと思うの
0249デフォルトの名無しさん2013/02/20(水) 23:41:04.52
>>247
でもさ、それを言ったら標準ライブラリ自体が「まともじゃない」ってならない?

標準ライブラリが、昇順なリストしか渡しちゃだめ、というルールを設けてるんだから、
昇順性を壊さない関数だけ fmap に渡せるというルールを設けてもいいじゃん。

なんでそれを使った自作関数がルールを設けたらまともじゃない扱いになるの?
0250デフォルトの名無しさん2013/02/20(水) 23:48:13.53
>>249
自分で定義する関数ならルールは仕様の一部として勝手に決めていいけど、
クラスメソッドはクラス定義の段階で既に仕様が決まっているから、条件を付け加えるのはまずい
(実用上便利なら、仕様を厳密に守らないインスタンス(Numのabsが実装されてないとか)でも
それなりに許容されるけど、>>230はあまりにも壊れてる)
0251デフォルトの名無しさん2013/02/20(水) 23:53:52.22
>>245
ちゃんとやるにはFunctorの定義に手を入れる必要がある
たとえば、

{-# LANGUAGE ConstraintKinds, TypeFamilies, KindSignatures #-}

import qualified Data.Set as S
import GHC.Exts (Constraint)

type family Domain (f :: * -> *) a :: Constraint

class Functor' f where
 fmap' :: (Domain f a, Domain f b) => (a -> b) -> f a -> f b

type instance Domain S.Set a = Ord a
instance Functor' S.Set where
 fmap' = S.map

type instance Domain [] a = ()
instance Functor' [] where
 fmap' = map
0252デフォルトの名無しさん2013/02/20(水) 23:57:07.72
>>250
なるほどね、納得。
0253デフォルトの名無しさん2013/02/21(木) 01:42:41.62
諸君、久し振りに議論しているね
02542182013/02/21(木) 08:24:29.44
『すごいH』にモナドとしての[]を拡張して確率値付きにしてやろうというのがあったけど
http://codepad.org/8KWk2kXP
結果が Prob {getProb = [(2,1 % 4),(3,1 % 2),(4,1 % 4)]} になるように
同じ事象をまとめたいのだけどそれには a がEqである必要あるから無理だよね?
0255デフォルトの名無しさん2013/02/21(木) 16:20:40.14
[3,1,2,8] -> [1,2,3,8] , "abdc" -> "abcd"この様に小さい順に並びか得たいです。
remove :: (Ord a) => a -> [a] -> [a]
remove _ []= []
remove k (x:xs)
| k == x= remove k xs
| otherwise= x : remove k xs

maxElement :: (Ord a) => [a] -> a
maxElement []= error""
maxElement [x]= x
maxElement (x:y:xs)
| x < y= maxElement (y:xs)
| otherwise= maxElement (x:xs)

inOrder :: (Ord a) => [a] -> [a]
inOrder []= []
inOrder (x:xs)= maxElement (x:xs) : inOrder (remove (maxElement (x:xs)) xs)
綺麗にコードしたいのです。
0256デフォルトの名無しさん2013/02/21(木) 18:05:36.04
ただのソートじゃないか
0257デフォルトの名無しさん2013/02/21(木) 19:30:36.43
すいません。勉強の為に出来るだけprelude?の関数は使わないようにしたいのです。
Quicksortでしたっけコレ?
0258デフォルトの名無しさん2013/02/21(木) 19:35:08.51
quicksort [] = []
quicksort x:xs = [y|y<-xs,y<=x] ++ x ++ [y|y<-xs,x<y]
■ このスレッドは過去ログ倉庫に格納されています