関数型プログラミング言語Haskell Part21
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2013/01/21(月) 02:16:16.07ttp://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/
0809デフォルトの名無しさん
2013/03/15(金) 00:11:39.940810デフォルトの名無しさん
2013/03/15(金) 00:14:00.44GOTOしての関数呼び出しと、GOTOとしてのλ式の違いは、GOTOが制御を奪えるかどうか
GOTOとしてのλ式はフローや繰り返しの最中で制御を横取りできてしまう
0811デフォルトの名無しさん
2013/03/15(金) 00:15:31.38>>763の第一項目(goto)の話をしてるんだが
0812デフォルトの名無しさん
2013/03/15(金) 00:17:05.880813デフォルトの名無しさん
2013/03/15(金) 00:24:32.250814デフォルトの名無しさん
2013/03/15(金) 00:33:09.83>・OOPでは、個性のないクロージャがオブジェクトに抽象化されてオブジェクト自身が持ちまわされるが、グローバル変数に代入する場合にはそれが難しい
いやいやオブジェクト云々は問題が起きる理由の一つでしょ?それを否定してどうするんだ
そうじゃなくて、クロージャが(悪い?)gotoになる問題が、
(プリミティブな)クロージャをグローバル変数に代入したり、関数からクロージャを返して別のソースコードで利用される場合には発生しなくて、
別のソースコードで定義してあるクラスのオブジェクトのフィールドに代入する場合には発生する理由を聞きたいんだけど
0815デフォルトの名無しさん
2013/03/15(金) 00:35:42.74え・・・国語も出来ないのに
>メソッドの出力またはフィールドの値がクロージャのクラスを単体テストする場合
メソッドの出力かフィールドの値は自発的に単体テストを施行しちゃうAIらしい
0816デフォルトの名無しさん
2013/03/15(金) 00:37:18.730817デフォルトの名無しさん
2013/03/15(金) 00:40:18.23反論を跳ね返すオナニー用のマジックミラーやで
実際のところ何もわかってないから相手するだけ無駄
0818デフォルトの名無しさん
2013/03/15(金) 00:42:39.94モスバーガーの食い方のアレを思い出すわ
0819デフォルトの名無しさん
2013/03/15(金) 00:45:20.03こいつと話し合いができるのは彼しかいない
0820デフォルトの名無しさん
2013/03/15(金) 00:46:11.66制御を横取りするのはschemeのcall/ccとかでは?
クロージャが制御を横取りする具体例を出してよ
まさかただの高階関数を指して制御を横取りとか言ってないですよね
0821デフォルトの名無しさん
2013/03/15(金) 00:59:02.980822デフォルトの名無しさん
2013/03/15(金) 01:17:00.640823デフォルトの名無しさん
2013/03/15(金) 01:18:39.770824デフォルトの名無しさん
2013/03/15(金) 01:20:58.560825デフォルトの名無しさん
2013/03/15(金) 01:29:13.38限定継続 とかで調べるといいよ
0826デフォルトの名無しさん
2013/03/15(金) 01:33:41.13それ呼び出し元に戻ってくるじゃん
goto?
0827デフォルトの名無しさん
2013/03/15(金) 01:38:10.550828デフォルトの名無しさん
2013/03/15(金) 01:51:41.63(読みにくいものはいくらでもあるけどさ。)
http://ja.wikibooks.org/wiki/Scheme/%E7%B6%99%E7%B6%9A%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E5%88%A9%E7%94%A8%E4%BE%8B
自分は同人誌でこの辺読んだだけだけど。
0829デフォルトの名無しさん
2013/03/15(金) 03:33:32.04○最単純例 (\f -> exitSuccess) (print "hai")
○よくやる悪い例(>>786)
c = (\(f,xs) -> " and " ++ (f xs))
func [x] = x
func (x:xs) = x ++ (c (func, xs))
○推奨される例 ハンドラの例外処理にクロージャを渡す
0830デフォルトの名無しさん
2013/03/15(金) 04:43:47.180831デフォルトの名無しさん
2013/03/15(金) 04:45:39.07「OOPとクロージャは相性悪い」
なんて言ってる人は
「FPと高階関数は相性悪い」
と言ってるのにほぼ等しいことを自覚してくれ。
0832デフォルトの名無しさん
2013/03/15(金) 04:46:51.79あれはOOPLではない。OO用語を使った命令型言語だ。
0833デフォルトの名無しさん
2013/03/15(金) 05:58:49.49クロージャが元凶だってことだけはわかった。
0834デフォルトの名無しさん
2013/03/15(金) 07:01:56.720835デフォルトの名無しさん
2013/03/15(金) 08:03:31.86一般人や初心者にはなんか頭良さそうって思われてるけど、同じ分野の人からは馬鹿にされてるタイプ
0836デフォルトの名無しさん
2013/03/15(金) 08:10:50.98少しは建設的なことはいえないのですか?
0837デフォルトの名無しさん
2013/03/15(金) 08:15:58.62このスレに来ている人たちは、OOPもクロージャも関係ない。
「プログラミングHaskell」の巻末索引に登場する程度の概念でさらっと
やって欲しい。
0838デフォルトの名無しさん
2013/03/15(金) 08:17:56.92直球のブーメランだな
0839デフォルトの名無しさん
2013/03/15(金) 08:35:00.290840デフォルトの名無しさん
2013/03/15(金) 11:28:08.92>OOPLではない。OO用語を使った命令型言語だ。
もしかしてOOPLと命令型言語が相反する概念だと勘違いしてる?
JavaもC++もRubyも、どれも全部「OOPLであり同時に命令型言語」だぞ
0841デフォルトの名無しさん
2013/03/15(金) 12:58:51.77メッセージ送信をメソッド呼び出しだと思ってるでしょ?
0842デフォルトの名無しさん
2013/03/15(金) 13:13:34.500843デフォルトの名無しさん
2013/03/15(金) 15:23:39.180844デフォルトの名無しさん
2013/03/15(金) 15:37:54.52自らHaskell使いを名乗ることなど出来んのだよ
0845デフォルトの名無しさん
2013/03/15(金) 19:13:30.590846デフォルトの名無しさん
2013/03/15(金) 19:52:31.540847デフォルトの名無しさん
2013/03/15(金) 20:30:33.49いろいろおかしくなったらメソッド呼び出しは悪 (メッセージ送信は悪ではない)
0848デフォルトの名無しさん
2013/03/15(金) 21:52:37.550849デフォルトの名無しさん
2013/03/16(土) 03:39:46.94メッセージ送信かメソッド呼び出しかは、(構造としての)オブジェクトの粒度と独立性の程度の問題
クラスとメソッドがオブジェクトとして閉じていて、送信元オブジェクトとメッセージとレシーバのオブジェクトが独立していると「表現できるか」がが問題
呼び出し元をオブジェクトとして表現して、関数モジュールを呼び出す際の引数をオブジェクトとは独立して存続していると表現すれば機械語も立派なOOPL
ソースコード上の表現だけで判断するなら真にメッセージパッシングしてるのはerlangだけ
言語仕様だけ見た場合のOOPLと命令型言語の決定的な違いは、メソッドやフィールドの隠匿にこそある
0850デフォルトの名無しさん
2013/03/16(土) 06:40:17.89> ソースコード上の表現だけで判断するなら真にメッセージパッシングしてるのはerlangだけ
Smalltalkでもメッセージセレクタは識別子ではなく文字列リテラルなんだが?
0851デフォルトの名無しさん
2013/03/16(土) 08:35:55.670852デフォルトの名無しさん
2013/03/16(土) 09:05:29.79Smalltalkのメッセージパッシングなんてゴミ
0853デフォルトの名無しさん
2013/03/16(土) 09:14:56.050854デフォルトの名無しさん
2013/03/16(土) 09:52:30.150855デフォルトの名無しさん
2013/03/16(土) 09:57:44.450856デフォルトの名無しさん
2013/03/16(土) 11:52:01.280857デフォルトの名無しさん
2013/03/16(土) 11:59:17.560858デフォルトの名無しさん
2013/03/16(土) 12:04:28.460859デフォルトの名無しさん
2013/03/16(土) 12:06:07.780860デフォルトの名無しさん
2013/03/16(土) 12:08:56.230861デフォルトの名無しさん
2013/03/16(土) 12:18:03.850862デフォルトの名無しさん
2013/03/16(土) 12:22:03.070863デフォルトの名無しさん
2013/03/16(土) 12:35:18.75myTake :: Int -> [a] -> [a]
myTake num (x:xs)
| num < 0 = error"Not Valid"
| num == 0 = [] -- Non-Exhastiveになる myTake 0 []
| num == 1 = [x]
| num > 0 = [x] ++ myTake (num -1) (xs)
| otherwise = error"Not Valid"
myTake 2 [] -> Non-Exhastive
0864デフォルトの名無しさん
2013/03/16(土) 13:13:57.95take _ [] = []
0865デフォルトの名無しさん
2013/03/16(土) 13:14:13.91myTake 2 [] は myTake num (x:xs) にパターンマッチしていません。
第1引数の 2 は num にパターンマッチしていますが、
第2引数の [] が (x:xs) にパターンターンマッチしていないからです。
マッチするパターンが記述されていないから、Non-Exhastive になります。
Haskell はデフォルトでは、第1引数がパターンマッチすれば、
第2引数以降のパターンマッチ調査は必要になるまでとりあえず棚上する、
という動きはしません。
コンパイルが通るようにするには、
myTake num [] に対する関数定義をちゃんと書く必要があります。
これが一番素直で簡単で根本的な解決です。
ついでながら、先ほどの棚上げ処理をするように明示する方法もあります。
棚上げ処理は正確には反駁不可パターンなどと言い、
棚上げしたいパターンの記述にチルダ文字を前置することで指定します。
myTake num ~(x:xs) = ・・・
ただし、少なくとも今回あなたが書いたプログラムに限れば、
反駁不可パターンをそのまま使うだけではコンパイルが通るというだけで、
根本的な解決にはならない(実行時例外が起きる)ので意味はないですが。
0866デフォルトの名無しさん
2013/03/16(土) 13:24:38.95| num > 0 = x : myTake (num -1) xs
0867デフォルトの名無しさん
2013/03/16(土) 13:29:06.320868デフォルトの名無しさん
2013/03/16(土) 13:31:58.09nBanme :: [a] -> Int -> a
nBanme [] _ = error"カラ"
nBanme (x:xs) n
| n < 0= error"セロ"
| n == 0 = x
| n > 0 = nBanme (xs) (n-1)
| otherwise = error"ヘン"
のように関数ノ名が何個もあるのではなく
nBanme :: [a] -> Int -> a
nBanme list n
| list == [] || n < 0 = error""
| n == 0 && list == (x:xs) = x
| n > 0 && list == (x:xs) = nBanme (xs) (n-1)
| otherwise = error"Something Wrong"
な感じで関数名が一つなのを定義したいです。
反駁不可パターンなどはもうすこし勉強して理解したいとおもいます。
0869デフォルトの名無しさん
2013/03/16(土) 13:41:52.010870デフォルトの名無しさん
2013/03/16(土) 14:15:16.070871デフォルトの名無しさん
2013/03/16(土) 14:18:26.87そんな変なこだわり持って読みにくいコード書くつもりならPGやめたほうがいいと思う
0872デフォルトの名無しさん
2013/03/16(土) 14:25:08.70プログラミングHaskellの最後の章にあるみたいなプログラムの正しさを確認する時とかに、
等式の集まりからなるパターンのほうが扱いやすい、みたいなのがあるので、
一つの式にすることにこだわるのはあまり良くないと思う。
0873デフォルトの名無しさん
2013/03/16(土) 14:51:33.52MVarとか使ってforkIO先で書き換えて同期取るんですかね?
0874デフォルトの名無しさん
2013/03/16(土) 14:59:25.480875デフォルトの名無しさん
2013/03/16(土) 15:32:27.70fork した計算の結果が得られるまで待てばいいんだよね。
mergeIO や nmergeIO はなんか使えると思う。
GHC 7.8 でライブラリから取り除かれるから、
代わりに SafeSemaphore パッケージ使えとも書かれているが。
0876デフォルトの名無しさん
2013/03/16(土) 18:27:13.33開発で使う場合、実質Haskell = GHCなのに何考えてんだ
0877デフォルトの名無しさん
2013/03/16(土) 18:30:20.892010 標準は、もうそんなには変わらないと思うけど。
標準化されてないものは、そりゃあもうしょうがないでしょ。
0878デフォルトの名無しさん
2013/03/16(土) 20:50:47.45なるほどありがとう
0879デフォルトの名無しさん
2013/03/16(土) 22:11:33.58nth' :: [a] -> Int -> [a]
nth' list number = case (list, number) of
([], number < 0)-> error"Invalid Negative"
([], number == 0)-> error"Index Too Large"
((x:xs), number > 0)-> [x] ++ nth' xs (number - 1)
_-> error"Something Wrong"
-}
nBan :: [a] -> Int -> [a]
nBan list number = case (list) of
[] -> case (number) of
number < 0 -> error"dame"
[] -> case (number) of
number == 0 -> error"dame"
(x:xs) -> case (number) of
number > 0 -> [x] ++ nBan xs (number - 1)
_ -> error"Hen"
どっちもなぜか違う。
0880デフォルトの名無しさん
2013/03/16(土) 22:15:22.800881デフォルトの名無しさん
2013/03/16(土) 23:09:13.30似たようなものだと考えていいけど、値を使おうとしたときに
中身がnullだった場合の処理を書くことを強制させられるという点が違う。
でもfromJustというチート関数があるので完全じゃない。
検索するとわかるから多少ましかも。
0883デフォルトの名無しさん
2013/03/16(土) 23:22:12.34別に強制されないと思う
f x = let (Just y) = x in y
とか書けるし
0884デフォルトの名無しさん
2013/03/16(土) 23:29:23.73それもそうですね
これ警告出せなかったっけ?
0885デフォルトの名無しさん
2013/03/17(日) 01:38:55.96終わってもいいけど次の言語も半分は今までと同じになるよ
どの辺が同じになるのかも見当がつくから完全に白紙に戻ることはない
0886デフォルトの名無しさん
2013/03/17(日) 09:16:17.29次の言語、どの辺が同じになるか、
面白いね。もうちょっとしゃべってよ
0887デフォルトの名無しさん
2013/03/17(日) 09:29:11.66OOP メッセージパシング
0888デフォルトの名無しさん
2013/03/17(日) 09:32:24.21Haskell特有でもなんでもない。
メッセージパッシングはとっくにOOPから捨てられただろ。
今のメジャーなOOPLはみんなメソッドを叩くだけだ。
0889デフォルトの名無しさん
2013/03/17(日) 09:39:08.200890デフォルトの名無しさん
2013/03/17(日) 09:41:48.630891デフォルトの名無しさん
2013/03/17(日) 10:01:57.35いいねえ
次は、オブジェクト指向のこころとMeyerのオブジェクト指向入門の
限界についても意見を聴きたいね
>>889
wてなんだ?
0892デフォルトの名無しさん
2013/03/17(日) 10:07:18.780893デフォルトの名無しさん
2013/03/17(日) 10:09:18.320894デフォルトの名無しさん
2013/03/17(日) 10:15:41.340895デフォルトの名無しさん
2013/03/17(日) 10:42:41.69納得
0896デフォルトの名無しさん
2013/03/17(日) 10:43:39.58OOが言語を差別するから、次世代の言語を同じだと思えなくなる
それならOOの本を読まずにOOPLを語る方が良い
0897デフォルトの名無しさん
2013/03/17(日) 10:48:45.72>OOPLはOOが育てた、Haskellは育ててないといって
ソースplz
0898デフォルトの名無しさん
2013/03/17(日) 10:52:24.70このスレ情緒不安定しぐる
0899デフォルトの名無しさん
2013/03/17(日) 10:56:54.31と言うか同一人物かな
0900デフォルトの名無しさん
2013/03/17(日) 11:09:27.840901デフォルトの名無しさん
2013/03/17(日) 11:13:33.500902デフォルトの名無しさん
2013/03/17(日) 11:19:55.91こんな感じですか
http://www.youtube.com/watch?v=oTKSTf4dr-k
0903デフォルトの名無しさん
2013/03/17(日) 11:27:45.29等式推論とかやりたいなら
あまり関係ないものでも等価だと主張するぐらいが丁度いいんじゃないの
0904デフォルトの名無しさん
2013/03/17(日) 11:37:39.75型クラス継承はメッセージOOの継承とは別物だけど
メイヤーの表明OOでのサブタイプ多相は成立してるよね
0905デフォルトの名無しさん
2013/03/17(日) 13:38:31.310906デフォルトの名無しさん
2013/03/17(日) 13:44:53.28どこのスレのOO厨にフルボッコされたんだ?
俺がかわりにやっつけてきてやるよ。
0907デフォルトの名無しさん
2013/03/17(日) 14:09:24.34抽象度と客観度は比例すると思ってる奴がいるんだよ
そういう奴は、抽象的であるOOが主観的なわけがないと思い込む
0908デフォルトの名無しさん
2013/03/17(日) 15:01:08.42wwwwwwwwwwwwwwww
0909デフォルトの名無しさん
2013/03/17(日) 19:47:03.86「完全教祖マニュアル」に、トンデモ論を言い続けていれば理論づけてくれる人が現れる、ってのがあるな。
レス数が900を超えています。1000を超えると表示できなくなるよ。