関数型プログラミング言語Haskell Part22
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/03/23(土) 12:34:19.09ttp://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/
Part21 ttp://toro.2ch.net/test/read.cgi/tech/1358702176/
0685デフォルトの名無しさん
2013/06/30(日) 16:57:00.42[lo, hi]なのに(lo, hi)と同じ実装を許容するなら但し書きを書くのが適切。
0686デフォルトの名無しさん
2013/06/30(日) 18:01:43.49でも、>>682 の作り方なら下限は出力されるんじゃない?
「絶対」ではなく「実装依存」ってこと?
0687デフォルトの名無しさん
2013/06/30(日) 21:38:38.36足下は初めは平身低頭に知恵を乞いておきながら、用が済めば急にタメ口になるとは何としたことか
0688デフォルトの名無しさん
2013/06/30(日) 21:55:55.540689デフォルトの名無しさん
2013/06/30(日) 22:16:19.65ホントごめん。
初めは質問者専用の口調で書いたのだけど、2回目の時にそれを忘れてて、
3回目で、なんかもういいや、ってなってしまった。
0690デフォルトの名無しさん
2013/06/30(日) 22:44:07.970691デフォルトの名無しさん
2013/06/30(日) 23:11:37.34まあ自分はやらかしたことないけど(梯子外し)
0692デフォルトの名無しさん
2013/07/01(月) NY:AN:NY.AN0693デフォルトの名無しさん
2013/07/02(火) NY:AN:NY.ANttp://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96
あと英文のmonadの項目誰か訳してくれい(泣
0694デフォルトの名無しさん
2013/07/02(火) NY:AN:NY.AN0695デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN0696デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN勉強したが、こいつは無理って諦められたんだよ
0697デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN思考の柵が吹き飛んだ
0698デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.ANまってろよ、今大熊さんの本を読んでるところなんだ
0699デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.ANHaskell入門書ってないでしょうか
0700デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN読んでないとモグリなの?
0701デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN読み終わるころにはlisp処理系の自作ができる
0702デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN結論から言えば、Lisp が分かる人をターゲットにした Haskell の入門書はありません。
Haskell を学ぶに当たって、Lisp が分かっている事そのものはたいして役に立たちません。
強いて言えば、Lisp で参照透過性を意識したプログラミングに慣れていれば、
Haskell のその部分で躓くことはないだろうという程度です。
なので、そのような入門書を出版する動機がないのでしょう。
しかし、Haskell の Haskell らしさが出る部分はそれだけではありません。
どのような入門書にも、参照透過性を含め他の Haskell らしさの部分は解説してあります。
ちなみに、SICP で学んだ事は他のどのような言語でプログラムする際にも活きます。
0703デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.ANhttp://ja.wikibooks.org/wiki/48時間でSchemeを書こう
> このチュートリアルの対象読者は主に以下の2種類です。
LispかSchemeを知っていて、Haskellを学びたい人
プログラミング言語を何も知らないけれども、一定の背景知識を持っていてコンピュータに詳しい人
0704デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.ANそれを入門書の代わりに使うのなら、
素直に普通の入門書を読んだ方が良いような気がするなぁ
まぁターゲットとしては >>699 にドンピシャだけど
0705デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0706デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0707デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN俺は趣味で、ゲートICの立体構造をアルゴリズムと見なして、どんな構造なら性能を上げられそうかのシミュレーションに使ってるけど。
0708デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0709デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0710デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0711デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN0712デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANそれは本物のクイックソートか?
0713デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN1) クイックソートって、列から適当な要素を選択して、
2) それよりも小さい要素を集めた列と、大きい要素を集めた列を作り、
3) 作られた2つの列に対して 1)、2) を施し、列を連結する、ものだよね。
このアルゴリズムの骨組みを守りつつ、
平均・最良の計算量が O(n log n) で、最悪が O(n^2) になっていれば、
どれほど馬鹿な実装方法を使おうが、どれほど処理に時間かかろうが、
どれもみんなクイックソートを名乗っていいと思う。
Haskell の稚拙なクイックソートの例は入門サイトや入門書にはたいてい載ってるし、
どんなバカでも理解できるだろうし実装できる。
だから >>710 のは、いくら何でも偽物ってことはないだろ。
というか Haskell の偽物のクイックソートの例を見てみたい。
と思ったのだが、どうだろう?
0714デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0715デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0716デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0717デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0718デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0719デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANzipperの説明を読むだけでエクスタシーに達します
0720デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0721デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0722デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0723デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0724デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN>>712じゃないけど、Haskellのよくあるクイックソートは、
空間計算量が最悪O(n^2)になるという点で普通のクイックソートと違って怪しい
0725デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN量子コンピュータが実現した世界で何言ってんだ?
0726デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANtwitterでも今年に入ってからこの話題で盛り上がったようだ
まとめのタイトルが笑える
http://togetter.com/li/445854
0727デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN怪しいというのが曖昧でよく分からないのですが、
「空間計算量が最悪でもO(nlogn)である」というのは、
クイックソートである事の必要条件なのでしょうか。
0728デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN俺にも分からん
0729デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0730デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0731デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANqs :: (Ord a) => [a] -> [a]
qs [] = []
qs (x:xs) = qs (filter (< x) xs) ++ [x] ++ qs (filter (> x) xs)
空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?
0732デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.ANなんかwikipediaのクイックソートのページにも実用性が云々と書かれているけど、そもそもリストという
データ構造自体がソートと相性が悪いんだから、そんなこと言っても仕方ないと思うけどね
大量のデータを扱うなら他のデータ構造を使うべきだし、ごく少量のデータなら入門書の実装の
方がむしろ実用的だろう
>>731
それだと重複した要素が消えることないかな?
0733デフォルトの名無しさん
2013/07/06(土) NY:AN:NY.AN0734デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANデータモデルとデータの追加でよいソートは異なる
0735デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN>空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?
入力が既に正順か逆順にソートされている場合。O(n^2)になるのは正順か逆順のどちらか
だけなんだけど忘れた。この板のHaskell関係の過去スレの一つに議論があったはず
(ちょっと探したけど見つからなかった、曖昧でごめん)
0736デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN0737デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANコーディングの合間に喫煙していたと何故判ったのですか!?
0738デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANHaskellで一から作ったライブラリ
どっちが幸せになれるの
0739デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN(+) (-)
:: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a
これを解説してください。(+) を数ではない (-) に適用できる?
0740デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN恥ずかしい
0741デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANヒント:カリー
0742デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANx :: Num a => a
y :: Num a => a
(+)(-) f x yのかたちで呼び出すんだろうけど
Num (a -> a -> a)が意味不明すぎる
自然数をラムダ関数で表現するやつかな
0743デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANNumとして解釈できるラムダ関数を定義すれば良いんだよな
えーとどんなだっけ
0744デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN0745デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN(-)はデフォルトでは「数」じゃないけど、インスタンスを定義すれば数になる
たとえばNumInstancesパッケージのData.NumInstances.Function
http://hackage.haskell.org/packages/archive/NumInstances/1.3/doc/html/src/Data-NumInstances-Function.html
をインポートすると、
instance (Num b) => Num (a -> b)
が定義されるので、例えば(Int -> Int -> Int)を加減乗除できるようになる
0746デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANすまんすまん、= を書き忘れてた。
< か > のどちらかに = を追加して考えて。
>>735 >>736
モリタポ使っても、なぜか Part 7 が見れない。
>>731 のような感じのクイックソートの実装だと、
A ++ B ++ C という形の式が大枠であるよね。
これを順に弱頭部正規形にして評価していくとき、最悪の場合、
左側の ++ 演算子が評価可能になるまで(++の左辺が x:xs の形になるまで)ずっと、
(((・・・((A'' ++ B '' ++ C'') ++ B' ++ C'))・・・))) ++ B ++ C
というような再帰的な形で左側が伸びていくと思う。
未評価の A'' や B' などが何個作られるかというと、
qs 関数が適用するリストの長さを n とすると、ざっと見積もって
3 + 2 * (n - 1) 個かな。
(最初の 3 は一番深い所の A++B++C で、2 は ()++B++C の B と C)
最悪ここまで式が伸びきるので、空間計算量は O(n) ではないか、
と俺は思ったんだが、どこで勘違いをしているのか分からない。
過去ログ Part 7 が見られるようになったら調べてみるけど、
今の所自分の頭ではこう考えた。
0747デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN> (+) を数ではない (-) に適用できる?
できない。
*Main> :type (+) (-)
(+) (-) :: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a
これが言っているのは、ざっくりいえば「もし、(-)が数であれば、(-)に(+)を適用できますよ」ということ。
まず、プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるようにしてあげなければならない。
首尾よくそれが実現できたら、晴れて(+)を(-)に適用できる。
0748デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANありがとうございます。
> プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるように
これが実際できてしまう、というのが、Data.NumInstances なのか。
0749デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANWikipediaのラムダ計算の自然数と算術の項目に
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97#.E8.87.AA.E7.84.B6.E6.95.B0.E3.81.A8.E7.AE.97.E8.A1.93
0 := \f->\x->x
1 := \f->\x->f x
2 := \f->\x->f (f x)
3 := \f->\x->f (f (f x))
(+) = \m->\n->\f->\x-> m (f (n f x))
としてラムダ関数で自然数の計算をシミュレートする方法が載ってる
0750デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.ANそれだと自然数の型が(forall a. (a -> a) -> a)みたいになって、
>>739で要求されてる(a -> a -> a)とは別物
0751デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN0752デフォルトの名無しさん
2013/07/07(日) NY:AN:NY.AN(+) が間違ってるな。
(+) := \m->\n->\f->\x-> m f (n f x)
0753デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANID:t6uYFe0B!と本に書いてあるのですが、他の言語でも出来そうな気がするのですが?
nibai :: Int ->Int
nibai n = 2*n
void nibai(int n){
value = 2*n;}
0754デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0755デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN「haskellが他の言語と違うのはside effect freeだから!」
と書かれていた本のタイトル名を教えてください。
0756デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANそんな関数に私もなりたい
0757デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0758デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0759デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.AN0760デフォルトの名無しさん
2013/07/08(月) NY:AN:NY.ANああ、全ての行が見てるとムズムズする
0761デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0762デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.ANID:7EcXvLZJ!Not in scope: `GLFW.defaultDisplayOptions'
Not in scope: `GLFW.setWindowPosition'
とエラーが出ました。
参照しているttp://www.youtube.com/watch?v=LIlBvBT6dIcでは使えていますが何がいけないのでしょうか?
import qualified Graphics.UI.GLFW as GLFW
import Graphics.Rendering.OpenGL.Raw
main = do
GLFW.initialize
GLFW.openWindow
GLFW.defaultDisplayOptions
GLFW.setWindowPosition $ 110
clear Colour{red = 0, green = 0, blue = 1, alpha = 0.1}
GLFW.swapBuffers
GLFW.sleep 5
data Colour = Colour {red, green, blue, alpha :: GLclampf}
clear :: Colour -> IO()
clear (Colour(red, green, blue, alpha)) = do
glClearColor red green blue alpha
(glClear . fromIntegral) gl_COLOR_BUFFER_BIT
0763デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANに書いてあったけどクラスの価値をほとんど捨ててる設計じゃん。
0764デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.AN0765デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.AN/ /パカ
/ /
/ /ハ,,ハ
/ ヽ(=゚ω゚)ノ__ぉはぃょぅ
// ( x ) /
" ̄ ̄ ̄ ̄
0766デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANパッケージが違う
動画で使ってるのはGLFWでなくてGLFW-bの方
0767デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANGLFW-b パッケージにはその関数はあるけど、GLFW パッケージにはないよ。
0768デフォルトの名無しさん
2013/07/10(水) NY:AN:NY.ANID:cVdIS5P/!どうやって使うのか調べてきます。
けど、動画を見る限りじゃGLFW-bが見当たらないのですが。
0769デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.ANマージ
0770デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANそれマージで言ったん?ソートすんならすぐ出せ
マージなら2ちゃんねらソート力を挙げて列べるが
0771デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANID:Hq+EmFHl!ttp://stackoverflow.com/questions/1712237/how-does-primitive-recursion-differ-from-normal-recursionの回答に、
「原始再帰関数とは他の原始再帰関数で定義されいて自然数の構造の再帰である。」とありますが、
イマイチ分かりません。
例えば、自然数を使った
fac::Int->Int
fac x
| x > 0 = x*fac(x-1)
|x==0 = 1
は原始再帰関数で、
inverse::String->String
inverse value = case (value) of
[]->[]
(x:xs)-> inverse xs ++ [x]
は原始再帰関数では無い。
ということでしょうか?
base caseにヒットして関数が終了するのであればそうなのかな〜と思っていたのですが。
0772デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANその関数の性質を帰納法で証明できる関数だと理解していたが、違うだろうか
0773デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANもちろん文字列上の原始帰納関数ということで問題ないが。
0774デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.AN0775デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANチューリング機械計算可能関数には一般帰納関数も含まれるから。
0776デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANID:Hq+EmFHl!ん?では普通の帰納関数とはなんでしょうか?
上の方に一般帰納関数というのがありますが。
0777デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANHaskellの話題じゃないし。
0778デフォルトの名無しさん
2013/07/13(土) NY:AN:NY.ANID:Hq+EmFHl!確かにスレチだ。すみませんでした。
0779デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN0780デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANなんで Haskell だと「今一番熱い漫画は?」みたいなノリで頻繁に投げかけられるんだろ。
Haskell の最新事情を追いたかったら、こんな所で質問するより、
メーリングリストにでも登録して議論してた方が何倍も良いと思う。
0781デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANそう考えていた時期が私にもありました
0782デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.ANバージョンに関係なく、ライブラリのzipファイルをコピーするだけでOKにしてほしいです
0783デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN数学を知らないものには猫に小判
かく言う俺は数学の記述法自体が過去の遺産を引きずって不合理極まりないと思っているが
0784デフォルトの名無しさん
2013/07/14(日) NY:AN:NY.AN■ このスレッドは過去ログ倉庫に格納されています