関数型プログラミング言語Haskell Part27_©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net
2015/01/08(木) 21:02:35.67ID:IQPOX3u7haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part26
http://peace.2ch.net/test/read.cgi/tech/1406436392/
0002デフォルトの名無しさん 転載ダメ©2ch.net
2015/01/08(木) 21:03:43.02ID:IQPOX3u725) http://peace.2ch.net/test/read.cgi/tech/1393313450/
24) http://toro.2ch.net/test/read.cgi/tech/1382705669/
23) http://toro.2ch.net/test/read.cgi/tech/1376111807/
22) http://toro.2ch.net/test/read.cgi/tech/1364009659/
21) http://toro.2ch.net/test/read.cgi/tech/1358702176/
20) http://toro.2ch.net/test/read.cgi/tech/1350428908/
19) http://toro.2ch.net/test/read.cgi/tech/1340760070/
18) http://toro.2ch.net/test/read.cgi/tech/1331902463/
17) http://toro.2ch.net/test/read.cgi/tech/1325510368/
16) http://toro.2ch.net/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.net/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.net/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.net/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.net/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.net/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.net/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.net/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.net/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.net/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.net/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.net/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.net/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.net/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.net/test/read.cgi/tech/1013846140/
01) http://pc.2ch.net/tech/kako/996/996131288.html
0003デフォルトの名無しさん 転載ダメ©2ch.net
2015/01/08(木) 21:05:17.88ID:IQPOX3u7(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
http://en.wikibooks.org/wiki/Haskell
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters
Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/
(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
http://www.haskell.org/haskellwiki/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86%E3%83%83%E3%83%97
Haskell - Wikibooks (先述Wikibooksの日本語版。未編集の項目、多)
http://ja.wikibooks.org/wiki/Haskell
Programming in Haskell
http://www.sampou.org/cgi-bin/haskell.cgi
Haskell のお勉強
http://www.shido.info/hs/
Haskell Programming
http://www.geocities.jp/m_hiroi/func/haskell.html
本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/
0004デフォルトの名無しさん 転載ダメ©2ch.net
2015/01/08(木) 21:06:46.46ID:IQPOX3u7Keyword = "Haskell"
(米) http://www.amazon.com/s/rh=n:283155,n:3839,k:Haskell
(日) http://www.amazon.co.jp/s/rh=n:492352,k:Haskell
Keyword = "functional programing" (米) | "関数 プログラミング" (日)
(米) http://www.amazon.com/s/rh=n:283155,n:3839,k:functional%20programing
(日) http://www.amazon.co.jp/s/rh=n:492352,k:%E9%96%A2%E6%95%B0%20%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&ie=UTF8
----
テンプレは以上です。
0005デフォルトの名無しさん
2015/01/09(金) 00:48:19.81ID:jgy+4bNd0006デフォルトの名無しさん
2015/01/09(金) 01:01:59.82ID:vIp0tEWIでもpythonの本も買ったからこっちから読みますわ
0007デフォルトの名無しさん
2015/01/09(金) 02:18:54.18ID:emL8ycJOこれ頼む
オライリーの表紙がカブトムシなのは何でなんだ?
perlのラクダ、pythonの蛇のようにマスコット?
0008デフォルトの名無しさん
2015/01/09(金) 07:41:03.23ID:ToFRVBIh0009デフォルトの名無しさん
2015/01/09(金) 16:51:28.96ID:F3f5qdO+>>7
動物表紙の動物と内容に関係がない場合もある
0010デフォルトの名無しさん
2015/01/09(金) 17:15:24.57ID:tI2NmPAJサンキュー
0011デフォルトの名無しさん
2015/01/10(土) 08:26:14.49ID:iL1AszUz前スレで、List の関数を使った時の最適化について書かれていましたが、
それって、. (dot) で関数合成した時と、$ 若しくは () で関数を繋いでいった時で
違いはありますか?
時々、
unlines . sort $ lst
unlines $ sort lst
みたいな書き方のどちらが良いか、疑問に思うことがあります。
0012デフォルトの名無しさん
2015/01/10(土) 09:07:18.18ID:6Zs1j09x0013デフォルトの名無しさん
2015/01/10(土) 10:14:04.82ID:FFZpwEly最適化オプション付けるとインライン展開可能な関数は全てインライン展開されるから、そこで挙げてる程度の違いは気にする必要無し
0014デフォルトの名無しさん
2015/01/11(日) 01:39:49.80ID:jxNnnj3b0015デフォルトの名無しさん
2015/01/11(日) 01:53:57.06ID:q/YrvBDO問題の性質を静的に(宣言的に)表しているとは言い難いような気がします。
その性質自体がいくぶん動的な体をしているので仕方ないかも知れませんが。
皆さんなら、どのようにプログラムするでしょうか。
[問題]
型aの値には「大きさ」という属性があり、それは関数 (HaveSize a) => size :: a -> Int で得られる。
ただし戻り値は正の整数で、また、size x = size y となる x, y ∈a も存在する。
問題は、型 [a] の値と大きさ n(非負正数)のコンテナがあるとき、
[a] の要素を左から順にコンテナに溢れ出ないように詰め込んでいった場合に
どれだけの部分リストが詰め込めるかを調べる関数 saturate を作ること。
[例]
map size [a, b, c, d, e] = [2, 1, 3, 2, 3] とする。
コンテナの大きさが 7 なら、[a,b,c] がコンテナに詰め込める。
なぜなら [a, b, c] の大きさの合計が 2+1+3=6 で、
更に d を詰めようとすれば 6+2=8 になりコンテナの大きさを超えるからである。
コンテナの大きさが 6 の場合も同じく [a, b, c] まで詰め込める。
コンテナの大きさが 1 以下なら詰め込める部分リストは空リスト [] である。
[私の解答例]
saturate :: (HaveSize a) => Int -> [a] -> (Int, [a])
saturste _ [] = (0, [])
saturate n (x:xs)
| n < s = (0, [])
| otherwise = (s, x) +: saturate (n - s) xs
where s = size x
infixr 5 +:
(+:) :: (Int, a) -> (Int, [a]) -> (Int, [a])
(m, x) +: (n, xs) = (m + n, x: xs)
0016デフォルトの名無しさん
2015/01/11(日) 02:13:40.35ID:q/YrvBDOちなみに、関数 saturate の型について細かいことは問いません。
最低限、引数としてリスト [a] とコンテナのサイズがあり、
戻り値として実際に詰め込めた部分リスト [a] があればいいです。
他の引数があっても、制約を課してもいいです。
解答例のように部分リストの大きさも同時に分かれば尚いいですが、
それは後から sum . map size でも得られるので無くてもかまいません。
ちなみに、ちなみに、私の自分の解答に対する不満というのは、
問題の中に特に再帰的な性質が陽に現れている訳ではないのに、
関数の中で再帰を陽に使っていることです。
これは、たとえば部分が全体の縮小版になっているという
本質的に再帰的な性質を持つ階乗の計算をする関数を
再帰を陽に使って表すのとは訳が違う、ような気がなんとなくします。
0017デフォルトの名無しさん
2015/01/11(日) 08:16:23.15ID:q/YrvBDOもしかして、再帰は再帰でも、分割統治の出番ですか?
0018デフォルトの名無しさん
2015/01/11(日) 10:28:31.59ID:xBHWy4LPPrelude> f 7 [2,1,3,2,3]
[2,1,3]
Prelude> f 6 [2,1,3,2,3]
[2,1,3]
Prelude> f 1 [2,1,3,2,3]
[]
0019デフォルトの名無しさん
2015/01/11(日) 11:13:36.60ID:xBHWy4LPPrelude> instance HaveSize [a] where size = length
Prelude> let f n = length . last . takeWhile ((>=) n . sum) . scanl (\ ls a -> [a] ++ ls) []
Prelude> let saturate n xs = take (f n $ map size xs) xs
Prelude> saturate 7 ["aa", "b", "ccc", "dd", "eee"]
["aa","b","ccc"]
Prelude> saturate 6 ["aa", "b", "ccc", "dd", "eee"]
["aa","b","ccc"]
Prelude> saturate 1 ["aa", "b", "ccc", "dd", "eee"]
[]
0020デフォルトの名無しさん
2015/01/11(日) 12:49:54.72ID:kRBMF/fRリストに対する明示的な再帰が嫌なら
saturate = flip $ foldr (\x t n -> if n < size x then [] else x : t (n - size x)) (const [])
saturate n xs = map snd $ takeWhile ((<= n) . fst) $ zip (scanl1 (+) (map size xs)) xs
あたりが素直なんじゃないかな。
0021デフォルトの名無しさん
2015/01/11(日) 18:26:01.66ID:yONU8dYOすごいhaskell本のp140 7章 木を植えよう の
treeInsert関数が 型引数a と 引数xを比較してるように見えるんだけど
haskell初心者の自分にしては意味不明なんだけど
どういう事なんだ。。。
0022デフォルトの名無しさん
2015/01/11(日) 18:42:53.13ID:wpfi8qHRhttp://codepad.org/Lf22gQhJ
>>20
ちゃんと Node a 〜〜ってパターンマッチして変数名付けてあるよ
0023デフォルトの名無しさん
2015/01/11(日) 18:44:27.23ID:wpfi8qHR0024デフォルトの名無しさん
2015/01/11(日) 20:31:52.09ID:xBHWy4LPsumは漸化で扱うべきだというところまで
考えが至らなかったのはまだまだ修行が足りないな
0025デフォルトの名無しさん
2015/01/11(日) 20:44:03.47ID:yONU8dYOあっそこパターンマッチして変数名つけてるのか
aが型名に使ってて 型と変数を比較してるように見えて???って状態になった
パターンマッチをよく理解してなかった ありがどう
0026デフォルトの名無しさん
2015/01/11(日) 21:33:43.65ID:q/YrvBDO自分のも含めてですが、どれも数ヶ月後にコードを読み返したとき、
何をやっているのか「すぐに分かる」ようなものではなさそうです。
>>20 の後者のは比較的に問題の仕様を思い出しやすいと思いましたが。
アドバイスをいただいておきながら生意気言ってすみません。
でも参考にさせていただきます。
結果リストの各要素の大きさの合計も同時に得るに誰も挑戦しなかったのは、
それによってコードが一気に複雑になるからですね。
やはり、両者は別の問題を解く計算として分けた方が良さそうですね。
ベンチについてですが、すいません、今回は処理速度はたいして気にしていません。
初めにはっきり言っておくべきでした。
コンテナのサイズもせいぜい50くらいです。
求めていたのは、問題の仕様をいかに宣言的にコード化するかでした。
それに、素直にやれば計算量オーダーは O(n) のはずなので、
各例とも極端な差は出ないのではないでしょうか。
ともかく、ありがとうございました。
参考にさせていただき、自分のコードを見直します。
0027デフォルトの名無しさん
2015/01/11(日) 21:52:14.39ID:37IhO0loなりすまし死ね!
0028デフォルトの名無しさん
2015/01/11(日) 22:35:26.27ID:Wjx+GIH1スルー&NGワード推奨。
0029デフォルトの名無しさん
2015/01/11(日) 23:09:31.16ID:xBHWy4LP> 結果リストの各要素の大きさの合計も同時に得るに誰も挑戦しなかったのは、
> それによってコードが一気に複雑になるからですね。
自分で言われてるように、必要ないものを同時に考えたくないだけで省いた
> それは後から sum . map size でも得られるので無くてもかまいません。
説明が丁寧なのはいいのだけど、HaveSizeクラスの部分とかも
ちょっと問題が冗長だと感じました。
0030デフォルトの名無しさん
2015/01/11(日) 23:59:31.77ID:ajGCArfk再帰的な構造のデータから再帰的な構造のデータを得ようとしているんだから、
そこで「再帰は何か違う」って言ったら手続き的に書くしかないと思うよ
0031デフォルトの名無しさん
2015/01/12(月) 00:23:49.94ID:YuUyOY1J今回の場合は inits を使うようなやり方だと宣言的になりやすいと思う。
import Data.List (inits)
saturate n xs = last $ takeWhile ((<= n) . sum . map size) $ inits xs
でも inits を使うと O(n^2) になってしまう。
map reverse $ inits xs なら O(n) で作れるけど、少し煩雑になる。
他は>>15や>>20と同じようなことになってあまり宣言的じゃなくなると思う。
0032デフォルトの名無しさん
2015/01/12(月) 00:40:22.44ID:YcSZDoGu高階関数を使えってことだと解釈してたわ
0033デフォルトの名無しさん
2015/01/12(月) 00:49:23.67ID:65bVV+dl0034デフォルトの名無しさん
2015/01/12(月) 01:44:40.42ID:JPDNTFYW再帰を陽に使っているという言い方が完全に間違っていました、すいません。
再帰を手続きっぽく使っているというべきでした。
たとえば、リストに対する分割統治アルゴリズムも再帰的ですが、
部分を解く計算が全体を解く計算と同じなので、
<全体の解> = <部分1の解> `合成する` <部分2の解> とか、
<全体の解> = <部分のどれかの解>
などの構造でプログラムが書けるので非常に宣言的に見え、気持ちいいです。
ソースから何を解いているのかを読み取るのも比較的に楽ですし。
それに比べて >>15 の再帰の使い方は、いかにも
C 言語で for ループを使っているところをHaskell に直訳しました的な感じで、
とても手続きっぽく見えて気持ち悪いです。
そういう再帰の使い方を裏に隠すのが foldl などの標準ライブラリ関数なので、
>>32 の解釈のとおりなのですが、そうすると今度は
上手くやらないと書かれたソースが技巧的になる傾向があり、
宣言的だけど意図が分かりにくいということになりかねません。
宣言的で読み解きやすいプログラムにはできないものか、という質問でした。
>>33
はい、参考にさせていただきます。
0035デフォルトの名無しさん
2015/01/12(月) 10:01:32.94ID:SO+1IXbJsaturateSimple :: HaveSize a => Int -> [a] -> (Int, [a])
saturateSimple _ [] = (0, [])
saturateSimple n xs
| 0 <= n = (sumSize, taked)
| otherwise = (0, [])
where
sumSize = sum $ map size taked
taked | Just takeRange' <- takeRange = take takeRange' xs
| otherwise = xs
takeRange = findIndex (>n) sizedList
sizedList = scanl1 (+) $ map size xs
0037チラシの裏
2015/01/12(月) 12:17:22.38ID:2dVlW8Fh初めから有効な物しか生成しないのが細民的
じゃあ有効な物しか生成しないってどうやるのって考えると、その関数も扱うデータがメタになっただけで結局のところ溢れたもんを除いてる
但し富豪版に比べてそういった関数ではショートカットの指示を組み込むことができる
じゃあ富豪的に書いて、幾つかショートカットの指示が簡単にアタッチできれば細民版と等価なチューンナップが気楽にできるのではないか
0038デフォルトの名無しさん
2015/01/12(月) 14:49:07.39ID:MSt1/O77自分で data を定義した時に、その record (?) を纏めて扱いたいのですが
そのような方法はありますか?
具体的にこれを訊きたい状況は次のとおりです:
data Person = {firstName::String, lastName::String, address:String, age:Int}
みたいな構造があったとして、これにたとえば tsv みたいな感じの show を定義したいとき、
import Data.List (intersperse)
instance Show Person where
show (Person f l ad ag) = intersperse '\t' [f,l,ad,show ag]
みたいに (f,l,ad,ag を) 手で書いていくしかないのでしょうか、というのが最初の疑問
雰囲気的には
show p = intersperse '\t' (fields p)
みたいにかけるとうれしいなあ…と思いつつ型とか考えると無理っぽい気もして、
でも全部手で書くのってなんだかあんまりな気がするので、これを解決したいというものです
0039デフォルトの名無しさん
2015/01/12(月) 15:40:36.10ID:YcSZDoGuFunctional Programming should be your #1 priority for 2015
OOP cannot save us from the Cloud Monster anymore.
https://medium.com/@jugoncalves/functional-programming-should-be-your-1-priority-for-2015-47dd4641d6b9
このコラムの↓の節を読むといいよ
"I've tried. It's too complex and it has poor readability"
0040デフォルトの名無しさん
2015/01/12(月) 17:56:45.05ID:SO+1IXbJTemplateHaskellを使う
aesonのData.Aeson.THが似たような事してるから参考にするといい
0041デフォルトの名無しさん
2015/01/13(火) 00:21:35.96ID:cYmnRneR頑張ってみます、ありがとうございます!
0042デフォルトの名無しさん
2015/01/13(火) 02:03:38.95ID:MG2YbkJIhttp://b.hatena.ne.jp/entry/qiita.com/kenokabe/items/0dfe134428665d66d757
Haskell逸れるけどすごい記事みっけた
0043デフォルトの名無しさん
2015/01/13(火) 02:51:02.17ID:GRV5h97d0044デフォルトの名無しさん
2015/01/13(火) 08:18:51.96ID:alzVIBRo0045デフォルトの名無しさん
2015/01/13(火) 08:29:28.64ID:iwEn0lQMコメント欄がすごい
コメントした人におかしな因縁
0046デフォルトの名無しさん
2015/01/13(火) 09:08:23.86ID:d5cnoHN30047デフォルトの名無しさん
2015/01/13(火) 09:29:05.89ID:wsAKsNYg0048デフォルトの名無しさん
2015/01/13(火) 10:37:15.59ID:MWu5lHoG0049デフォルトの名無しさん
2015/01/13(火) 11:12:10.37ID:ELm0xWmC0050デフォルトの名無しさん
2015/01/13(火) 11:42:47.85ID:QGHEOvQdどこにあるのよ・・・この人そんな有名なのか
0051デフォルトの名無しさん
2015/01/13(火) 11:47:55.94ID:1H8UE7ajhttp://qiita.com/hiruberuto/items/26a813ab2b188ca39019#comment-93b50be778fd0aa9d401
この人は大丈夫なんだろうか
そもそも関数型にもOOにもどちらも詳しくないような....
0052デフォルトの名無しさん
2015/01/13(火) 11:51:54.93ID:NasWx0i50053デフォルトの名無しさん
2015/01/13(火) 11:54:15.25ID:NasWx0i50054デフォルトの名無しさん
2015/01/13(火) 12:29:12.79ID:QwH8/l3Xkenokabeのゴシップ記事発見
0055デフォルトの名無しさん
2015/01/13(火) 13:33:59.30ID:mZyyNyazこの板にあったと思うが落ちたっぽい
0056デフォルトの名無しさん
2015/01/13(火) 13:42:07.71ID:MWu5lHoG0057デフォルトの名無しさん
2015/01/13(火) 13:49:15.58ID:1SCKzRDk0058デフォルトの名無しさん
2015/01/13(火) 13:49:20.91ID:N/anipzC0059デフォルトの名無しさん
2015/01/13(火) 13:51:59.41ID:mZyyNyaz式の参照透明性と、任意の式が参照透明だという言語の性質の区別がつかないのかな?
0060デフォルトの名無しさん
2015/01/13(火) 13:53:28.65ID:mZyyNyazhttp://peace.2ch.net/test/read.cgi/tech/1403215505/
0061デフォルトの名無しさん
2015/01/13(火) 14:12:12.19ID:GVOYJ26Fワラタ
0062デフォルトの名無しさん
2015/01/13(火) 14:43:33.74ID:Ti00MPXp勉強会に押し掛けられてあんな熱弁されたら自分が主催者なら出禁にするが。
0063デフォルトの名無しさん
2015/01/13(火) 14:50:41.62ID:MWu5lHoGやはりこんだけの逸材がヲチられてないわけがなかった
0064デフォルトの名無しさん
2015/01/13(火) 14:51:56.29ID:kHWdi0LB友達にはなりたくないけど。
0065デフォルトの名無しさん
2015/01/13(火) 16:02:46.26ID:WRZgnkoL0066デフォルトの名無しさん
2015/01/13(火) 16:29:54.67ID:x2ugWPUO0067デフォルトの名無しさん
2015/01/13(火) 16:58:34.76ID:rzW7OceThttps://plus.google.com/app/basic/102413788769460359022
0068デフォルトの名無しさん
2015/01/13(火) 19:14:22.19ID:gOSKC6xL0069デフォルトの名無しさん
2015/01/13(火) 21:27:43.51ID:m5MaD2Xa恥をおそれない度胸だけはある
0070デフォルトの名無しさん
2015/01/13(火) 21:35:42.28ID:gOSKC6xLまったく理解できてなかったんだな。
すぐに思いつくだけでもEager HaskellとかUrとかあるんだが。
0071デフォルトの名無しさん
2015/01/13(火) 21:37:18.30ID:m5MaD2Xaわろた
0072デフォルトの名無しさん
2015/01/13(火) 22:25:25.54ID:MG2YbkJIブログの方は明らかに異常だし。
0073デフォルトの名無しさん
2015/01/13(火) 22:28:23.68ID:MG2YbkJIhttps://plus.google.com/102413788769460359022/posts
これは〇〇〇〇ですねぇ・・・
0074デフォルトの名無しさん
2015/01/13(火) 22:30:05.02ID:MG2YbkJIhttp://qiita.com/kenokabe/items/b182e41c5ce9ef1cbc49
0075デフォルトの名無しさん
2015/01/13(火) 22:58:25.21ID:6joM9log0076デフォルトの名無しさん
2015/01/14(水) 00:18:36.08ID:lNtPuHRx完全に名誉毀損なんだがこの人無事で済むかな
0077デフォルトの名無しさん
2015/01/14(水) 00:19:29.37ID:lNtPuHRx0078デフォルトの名無しさん
2015/01/14(水) 00:25:19.24ID:iDcmklay0079デフォルトの名無しさん
2015/01/14(水) 00:29:33.85ID:e9uoW40mTemplateHaskellとかってみんなどうやって勉強した?というかどの程度使ってる?
0080デフォルトの名無しさん
2015/01/14(水) 02:23:16.58ID:jipyguuI0081デフォルトの名無しさん
2015/01/14(水) 02:52:59.46ID:mcKb4bstだったけどそろそろ使おうかなーって思い始めてきた
0082デフォルトの名無しさん
2015/01/14(水) 05:28:12.58ID:0/018ead前回8日と比較して50倍以上に上昇したと発表した。
原因は不明で、東電広報部は「13日に再度採取して濃度を調べる」と話している。
東電によると、地下水の放射性物質濃度が上昇した井戸は、港湾から約55メートルの距離にある。
12日に採取した地下水には1リットル当たり、セシウム134が140ベクレル、セシウム137が470ベクレル含まれていた。
また、ストロンチウム90などのベータ線を出す放射性物質は1万5000ベクレル検出された。
いずれも、この井戸における濃度の最高値を更新した。
0083デフォルトの名無しさん
2015/01/14(水) 05:30:02.49ID:8+86tzomどうでしょうか?
0084デフォルトの名無しさん
2015/01/14(水) 08:08:18.99ID:dWmqx90ikenokabe
0085デフォルトの名無しさん
2015/01/14(水) 08:49:21.39ID:e9uoW40m問題に合わせて自己定義のモナドを利用するわかりやすい例が乗ってるサイトとかないでしょうか
0086デフォルトの名無しさん
2015/01/14(水) 09:04:23.74ID:jipyguuI0087デフォルトの名無しさん
2015/01/14(水) 09:29:38.17ID:Bk8LvlSfFreeモナドで状態遷移が分かりやすかった
Freeモナドにするだけでいろんなモナドの機能がタダで手に入るので
モナド自作するならまずFreeを考えるようにしてる
0088デフォルトの名無しさん
2015/01/14(水) 10:26:14.65ID:4jaQ7hCVえぇ〜!?
0089デフォルトの名無しさん
2015/01/14(水) 10:38:54.43ID:Bk8LvlSfhttp://glengreen.com/wp-content/uploads/2014/04/free-hugs.jpg
0090デフォルトの名無しさん
2015/01/14(水) 11:51:15.04ID:f0jv2plsえぇ〜!?
0091デフォルトの名無しさん
2015/01/14(水) 18:46:30.59ID:mcKb4bstファントムタイプってのは data A a b c = A { foo :: a, bar :: b } って定義した時の c みたいに実際に保持する値の型とは関係ない型パラメータの事。
データの内部状態を表したり、関連のある他の型を表したりするのに使う。
0092デフォルトの名無しさん
2015/01/14(水) 19:32:56.59ID:jipyguuIな、なるほど?
A a b Char と A a b Int は同じデータコンストラクタで値を作れるけど、型は違うよ、ってことを明示できる、みたいな??
興味深いけど、有用なシーンがパッと思いつかないっす。。
0093デフォルトの名無しさん
2015/01/14(水) 20:40:36.31ID:mcKb4bst型パラメータの数を、コンストラクタを書くのに必要な数よりも多くする事が出来るよってだけの機能だからね
例えば、XMLを扱う時に、同じ意味のデータが色んな種類のノードの属性として設定出来て、だけど明確に区別して扱う必要がある時なんか便利な場合の1つ
<foo name="hage"><bar name="debu">
みたいな感じの時に
newtype Name a = Name Text
data Foo
data Bar
ってして、Name FooとName Barを取り違える事が無いように出来る。
だけど、どっちも中身は一緒だから同じ処理を行うことが出来る。
0094デフォルトの名無しさん
2015/01/14(水) 21:22:15.46ID:jipyguuIなるほど!
0095デフォルトの名無しさん
2015/01/15(木) 01:36:34.74ID:sgAYXfdG代数データ型で data Value = MyInt i | MyBool b | MyChar c みたいなのを
定義してやったときに、Valueに対する関数の中で、3種類のどれに対してもは
意味をなさないような、そういう関数を定義したくなることがある。
"prettyprint"みたいなのはどの値にも適用できるし適用したいが
たとえば"not"みたいなのはMyIntやMyCharな値に対しては定義したくない。
かといってundefinedにしてしまうと型検査の恩恵を放棄してしまうことになる。
そういう時に data Value tag みたいに幽霊型でタグ付けをして、
not :: Value Bool -> Value Bool みたいに型をつければいいんじゃね、というのが典型的な使い方では?
あと、タグのところに型レベル自然数とか入れてやれば依存型の真似事もできる。
0096デフォルトの名無しさん
2015/01/15(木) 05:30:44.53ID:xElnjyle世界を見渡して、それを主張している人は居たりしますか?
0097デフォルトの名無しさん
2015/01/15(木) 08:18:03.39ID:s7mFuZtY最近Qiita で有名なkenokabeさんという人はそう言ってる。ただ、信じてる、ってだけで証拠は無いみたい。
銀の弾丸である、って主張する為には、それを取り入れたために問題解決が飛躍的に捗るようになった、って例をあげなきゃならないけど、少なくともHaskell に関してそういう話は聞かないね。
積極的に採用してる企業の話も何故かあまり聞かない。NTTデータ? だっけ。あとは金融系とか? よく知らない。
0098デフォルトの名無しさん
2015/01/15(木) 08:19:40.92ID:s7mFuZtY0099デフォルトの名無しさん
2015/01/15(木) 08:30:46.11ID:rIDPcTewオブジェクト指向や関数型は「敗者の道具」である (4/4)
NTTデータでは独自に定義したコーディング規約や夕会でのコードレビューといっ
た工夫をしています。例えばコーディング規約には「if文、case文の使用禁止。
パターンマッチもしくはガードを利用する」「do構文の使用禁止」...
つらポヨ
0100デフォルトの名無しさん
2015/01/15(木) 09:38:12.35ID:4U9NF0gk0101デフォルトの名無しさん
2015/01/15(木) 10:20:39.64ID:rIDPcTew0102デフォルトの名無しさん
2015/01/15(木) 10:24:42.19ID:6WtClJFS0103デフォルトの名無しさん
2015/01/15(木) 11:46:00.46ID:m4up9uXTラムダ禁止じゃないなら面倒なだけで問題ではないな
0104デフォルトの名無しさん
2015/01/15(木) 11:55:29.23ID:E2BgZv7kそもそもモナド変換子つかって既存のモナドを組み合わせることに慣れるのが先かな
0105デフォルトの名無しさん
2015/01/15(木) 12:06:21.82ID:rIDPcTewミカカピラミッドの労働者に選択権が与えられてないことは問題では?
出展: http://research.microsoft.com/en-us/um/people/simonpj/papers/haskell-retrospective/HaskellRetrospective.ppt
Syntactic redundancy
- Seductive idea: provide just one way of doing any particular thing
- Haskell's choice: provide multiple ways, and let the programmer decide
- Main example: "declaration style" vs "expression style"
SLPJ's conclusion syntactic redundancy is a big win
0106デフォルトの名無しさん
2015/01/15(木) 17:28:29.01ID:f2vn4nEl「人月の神話」によると、そもそも銀の弾丸は存在してなくて、言語やデータベースの選択以前に、既にデスマーチは始まってる。
(従来のシステムに、これとあれとそれ加えて。 仕様? 従来システム見りゃ分かるでしょ、とかね)
0107デフォルトの名無しさん
2015/01/15(木) 17:45:25.19ID:J9qaHf6Oこの場合は関数型使って起きる問題1つ取り上げればOKじゃないか?
0108デフォルトの名無しさん
2015/01/15(木) 20:36:18.58ID:RFmTHJSs0109デフォルトの名無しさん
2015/01/15(木) 21:10:10.16ID:JATjUjrDθθ
θθθ<do禁止を採用!
011097
2015/01/15(木) 23:53:19.07ID:OORFnd44俺に言ってる?
俺は、関数型が銀の弾丸ではない、なんて主張してないよ。
むしろ関数型は銀の弾丸だと信じたい派。でも彼の氏と同様に根拠は持ってないんだ。
関数型が実世界で実際に有用だ、ってことを確認するためには、もうちょっと利用者が多くなくちゃだと思う。でも評判の割に広まってない気がする。
普及のボトルネックはなんなんだろうね。
計算量が見えにくいから? 一般に言われてるように、モナドが難しいから? チュートリアルが足らない?
少なくともdo禁止は、普及の為には良くないと思うぜ。
0111デフォルトの名無しさん
2015/01/15(木) 23:54:04.90ID:JATjUjrDhttp://ecx.images-amazon.com/images/I/71R2WqhkWhL._AA1200_.jpg
0112デフォルトの名無しさん
2015/01/16(金) 00:19:47.27ID:jXGCgSDl0113デフォルトの名無しさん
2015/01/16(金) 00:29:40.13ID:7RAOESVpあとはcabalが初心者にとっては分かりにくいかも?
0114デフォルトの名無しさん
2015/01/16(金) 00:40:35.56ID:jXGCgSDl言葉尻捉えて申し訳ない
RustのCargoすごいわかりやすいんだよね
慣れればcabalも強力なんだろうけど
0115デフォルトの名無しさん
2015/01/16(金) 06:21:28.78ID:m6F6FFaY0116デフォルトの名無しさん
2015/01/16(金) 11:55:10.02ID:Kt0KQddJこの二つが最大の壁
0117デフォルトの名無しさん
2015/01/16(金) 18:51:06.11ID:23PqdXkM>再代入が出来ない、ループ構文がない
>この二つが最大の壁
この二つが壁でもなんでもないことに気がつくのが最大の壁。
つうかそもそも代入じゃないから「再」代入というのすらおかしい。
0118デフォルトの名無しさん
2015/01/16(金) 21:03:26.63ID:RnIhG8e/関数型が中々普及しないのは実装が普及してなくてこの言語じゃないとできないって事がないからじゃない?
たとえばjavascriptなんかはいい言語だから流行ったわけじゃなくてブラウザに実装されてるしクライアント側を弄りたいならこれしかないから流行った
関数型でたぶん一番流行ってるscalaはjvmで使えてjava資産が使える上に関数型っていう+αを提示できたから流行ったんだと思う
0119デフォルトの名無しさん
2015/01/16(金) 21:04:40.44ID:RnIhG8e/0120デフォルトの名無しさん
2015/01/16(金) 21:54:11.44ID:3StKnz1eHaskellでは代入を束縛と呼ぶのだと勘違いしたまま流してしまう者が出る
0121デフォルトの名無しさん
2015/01/16(金) 22:20:54.89ID:23PqdXkM右辺値の時は親切に箱の中まで見てくれてるだけ、と。
まあ、kenokabeが右辺値と左辺値の違いも知らんで
i = i+1 を「論理破綻している!」とか喚いてるのを考えれば
教育的必要もないではないのか。
0122デフォルトの名無しさん
2015/01/16(金) 22:33:50.78ID:7RAOESVpScalaの特徴は「今までの資産が使える」
Rubyの特徴は「Railsが使える」
そしてHaskell の特徴は「代入が出来ない」
…は?
ってなるってことね。
そうじゃなくて例えば、「その制約がある代わり、実行速度はC言語より速い!」みたいに言えばいいわけだ。
0123デフォルトの名無しさん
2015/01/16(金) 22:49:03.95ID:M7+5sHyEせっかくなので、すべて読みました。
ですが、ごめんなさい。
>>39 さんが結局のところ私に何を伝えたかったのか、
いろいろ考えてみましたが分かりませんでした。
0124デフォルトの名無しさん
2015/01/16(金) 23:04:38.96ID:7BNe3Ira横だけど、「初心者のうちは汚く見えるコードでも、慣れると自然に読めるようになるもんだ」って意見だと思った。
0125デフォルトの名無しさん
2015/01/16(金) 23:18:49.11ID:aNG0k4BC0126デフォルトの名無しさん
2015/01/16(金) 23:22:33.08ID:aNG0k4BC0127デフォルトの名無しさん
2015/01/16(金) 23:50:28.40ID:23PqdXkMlambdabotは普通にcabal installで入らなかったっけ??
0128デフォルトの名無しさん
2015/01/17(土) 00:09:37.52ID:Rzvv0lBm0129デフォルトの名無しさん
2015/01/17(土) 00:15:24.46ID:nbXIjbMvhoogleをローカルで使う方法はググればいくつか出てくるが、
それでも分からない、やったけどエラーが出るということ?
0130デフォルトの名無しさん
2015/01/17(土) 00:18:10.70ID:nDBRDZK6ポイントフリーリファクタリングは楽しそうだね。
0131デフォルトの名無しさん
2015/01/17(土) 03:36:07.71ID:Z6TDshQkなんとかビルドできるが、cabalファイルとソースの書き換えをかなり。
0132デフォルトの名無しさん
2015/01/17(土) 10:05:51.71ID:6s7WqR3fhttp://qiita.com/satomip/items/f37fcdf74d0288d5d006
0133デフォルトの名無しさん
2015/01/17(土) 10:12:22.85ID:wxApzmRDこいつのおかげで実装されそうだな
0134デフォルトの名無しさん
2015/01/17(土) 11:19:38.89ID:9f7/hZueデータのロゴって、イルミナティだよね
0135デフォルトの名無しさん
2015/01/17(土) 13:05:32.01ID:U3O9F3X5結局、Qiitaもkenokabeみたいな奴の溜まり場になりそうで怖い
何が怖いって、こいつの記事をストックしてる人数だよ。手遅れかも知れない
0136デフォルトの名無しさん
2015/01/17(土) 15:14:24.66ID:QMmm32TZ函数當立
歳在乙未
喧嘩大好
0137デフォルトの名無しさん
2015/01/17(土) 15:33:21.34ID:RqygZy6s他の良質な記事を抑えて出てくるもんなぁ
0138デフォルトの名無しさん
2015/01/17(土) 15:37:32.93ID:Ic5awU+00139デフォルトの名無しさん
2015/01/17(土) 18:27:59.89ID:RqygZy6sアレがいつも通りに弁護士に訴える詐欺とかすればqiitaでも凍結とかされそうだけど
何故かqiitaではそういう事しなさそうだし
他の関数型ガチ勢には何故か真っ向から突っ込んだりしないし
関数型ガチ勢もアレ呼ばわりして触れたがらないし
初心者に対してほんと悪影響だな
勘違いした関数型信者と関数型に対して偏見を抱いたプログラマを生成してる
0140デフォルトの名無しさん
2015/01/17(土) 18:29:10.30ID:Z6TDshQk>勘違いした関数型信者と関数型に対して偏見を抱いたプログラマを生成してる
後者は確かにいるが、前者は本当にいるのか?
0141デフォルトの名無しさん
2015/01/17(土) 18:35:31.03ID:Z6TDshQkとりあえず駱駝師匠と毛の壁の邂逅が待ち遠しいのうww
0142デフォルトの名無しさん
2015/01/17(土) 18:44:10.97ID:RqygZy6sいや毛の壁をストックしている人にいるだろうっていう予想
0143デフォルトの名無しさん
2015/01/17(土) 18:52:03.13ID:Z6TDshQkそれまでに関数型プログラミングしたことあればあれをストックはしないよな。
で、毛の壁さんはマトモにコード書かないので、そういうひとたちには
どういうのが関数型プログラミングなのか読んでもわかんないでしょ。
だから、信者にすらなりようがないと思うんだが。
毛の壁もCodeIQかなんかの問題でも関数型で解いてみせりゃいいのにねえw
それにしてもなぜ関数型自己陶酔エヴァンジェリスト様がJavaScriptとかSwiftとか
つかってんだろうなあ(棒
0144デフォルトの名無しさん
2015/01/17(土) 19:33:20.25ID:RqygZy6shaskell,scala,ocamlの話とか殆どしねーし
0145デフォルトの名無しさん
2015/01/17(土) 19:35:51.64ID:Ic5awU+00146デフォルトの名無しさん
2015/01/17(土) 22:25:30.38ID:nDBRDZK6何が怖いんだか全然わかんないだけど、例えば、Haskell スレ民にとってkenokabeさんがもたらす最悪の事態、って何?
0147デフォルトの名無しさん
2015/01/17(土) 22:44:38.21ID:rzZFM78tよく見てないけど、その人が暴れるとHaskell Wikiが荒れたり
Hackageが落ちたりFunctional Pearlが読めなくなったりするのだろうか?
0148デフォルトの名無しさん
2015/01/17(土) 22:45:16.36ID:wxApzmRDあれ読んで誤解するならそもそも向いてない人だろうし
0149デフォルトの名無しさん
2015/01/18(日) 00:00:31.56ID:kH3OICBy右翼はイかれた迷惑な奴らだから彼らの言うことに耳を傾けないようにしよう
と考えるようになる
0150デフォルトの名無しさん
2015/01/18(日) 00:14:53.57ID:X/G7lLxo完全に嫌がらせだよな。荒らしに近い。
0151デフォルトの名無しさん
2015/01/18(日) 00:17:22.53ID:tpa5WE6c右翼が関数型プログラミングってことね?
関数型に関する記事を書いたり、ツイートしたりするのがやり難くなる、ってことか。読者に無視を決め込まれたり、迷惑がられたりする怖れがあるから。
なるほど、そういわれると俺んとこに流れてくるツイートも最近、ピリピリしてるのが多い気がする。
0152デフォルトの名無しさん
2015/01/18(日) 00:24:23.33ID:tpa5WE6c今でも合コンとかお見合いとかで「趣味は2ちゃんヲチです」って堂々と言いにくいけど、kenokabeさんの事態が進行すれば最悪、転職するときとかに困ったことになるワケだ。
面接官「あなたが使えるプログラミング言語は何ですか?」
俺「JavaとRuby」
面接官「ほうほう」
俺「あとHaskell です」
面接官「ヒエッ」
0153デフォルトの名無しさん
2015/01/18(日) 01:08:45.30ID:IU9bGGXQ0154デフォルトの名無しさん
2015/01/18(日) 02:09:58.36ID:LNrZ+2U/それに関数型が嫌な思いをしようがHaskellの知った事ではないわ
だって全部どうでもいいコメントだし
大袈裟に言おうがIOが使われてもなんとも思わん
それは型システムのエラーがないから
つまり関数型に対しての情などない
0155デフォルトの名無しさん
2015/01/18(日) 02:30:49.62ID:V765A4GC0156デフォルトの名無しさん
2015/01/18(日) 03:13:27.52ID:vV/jf7DW0157デフォルトの名無しさん
2015/01/18(日) 06:32:59.94ID:EYEBc+Bn0158デフォルトの名無しさん
2015/01/18(日) 13:12:39.69ID:jSIag6l6とりあえず、毛が大学で数学をまったく触ったことがないことはよくわかった。
自然数の構成の話すら知らず、ベクトルと直積の関係すら理解できてない。
それにしても加法や乗法みたいな演算まで「数」なんですかw
「+n」と「n」の区別が付かない人っていやあねえ。
0159デフォルトの名無しさん
2015/01/18(日) 13:13:11.88ID:jSIag6l60160デフォルトの名無しさん
2015/01/18(日) 13:39:15.56ID:5TdGTnEJ0161デフォルトの名無しさん
2015/01/18(日) 13:41:53.04ID:28lxxI0L0162デフォルトの名無しさん
2015/01/18(日) 14:56:18.70ID:HnHximbt0163デフォルトの名無しさん
2015/01/18(日) 14:58:12.81ID:HnHximbtだった、というのは、彼のアカウントが凍結されてるから。
0164デフォルトの名無しさん
2015/01/18(日) 15:20:29.05ID:IU9bGGXQ0165デフォルトの名無しさん
2015/01/18(日) 15:39:04.34ID:xe/M680A自分への批判や揶揄は何が何でも返答しておかないと我慢できない病気だから、
今後も「困ったチャン」として暴れまわる。Twitterでそれは実証されている。
0166デフォルトの名無しさん
2015/01/18(日) 15:45:31.62ID:Eb4kkeMA近いうちに起訴されて有罪になると思うよ。そうなったら黙るかな。
あと、民事レベルの名誉毀損も何人かに対して行ってるから、そのうち摘む。
0167デフォルトの名無しさん
2015/01/18(日) 17:41:12.51ID:IU9bGGXQ0168デフォルトの名無しさん
2015/01/18(日) 18:22:35.00ID:V765A4GC0169デフォルトの名無しさん
2015/01/18(日) 18:49:10.13ID:UJxN9Diw自分の悪口を2chに書き込んでるのはこの弁護士だって妄想を抱き誹謗中傷を繰り返した
0170デフォルトの名無しさん
2015/01/18(日) 19:09:17.47ID:UJxN9Diw荒らしに近いってか荒らしだろ
0171デフォルトの名無しさん
2015/01/18(日) 19:12:47.48ID:+m9GpZ+lリンク先にあるリンクからどうぞ。
https://plus.google.com/app/basic/102413788769460359022
0172デフォルトの名無しさん
2015/01/18(日) 19:17:54.55ID:HhZm6YePhttp://twittersickuser.blogspot.jp/2014/01/motokentw.html
ちなみにエントリは Part30 まであります。例によって長文病を発揮しているので、これを読む裁判官も大変だろうなと思う。
で、本人は「刑事告訴は虚偽告訴なので、虚偽告訴罪告訴します」と息巻いたものの、
その後は音沙汰なし。
http://twittersickuser.blogspot.jp/2014/04/motokentw-20.html
「公開質問」と銘打っているが、一体どこが公開質問なのかというのは置いておこう。
0173デフォルトの名無しさん
2015/01/18(日) 19:21:19.88ID:HhZm6YePhttps://plus.google.com/102413788769460359022
0174デフォルトの名無しさん
2015/01/18(日) 19:31:26.99ID:WxVggn07駱駝公案書いただけじゃね?
毛の壁と接触してる?
0175デフォルトの名無しさん
2015/01/18(日) 19:42:56.42ID:IU9bGGXQ0176デフォルトの名無しさん
2015/01/18(日) 20:45:45.78ID:V765A4GCあーそういう意味じゃないな
接触はしてないと言うかするわけがない
あそこら辺の人はアレがでたらめだとひと目見抜けないと(関数型プログラミング言語を使うのは)難しいって感じで放置しそう
0177デフォルトの名無しさん
2015/01/18(日) 20:48:19.28ID:ozX7xrZl0178デフォルトの名無しさん
2015/01/18(日) 20:57:45.23ID:ERirhDOz0179デフォルトの名無しさん
2015/01/18(日) 23:09:56.08ID:m3hmoOOc0180デフォルトの名無しさん
2015/01/19(月) 07:22:58.14ID:e75uCkWu0181デフォルトの名無しさん
2015/01/19(月) 07:23:57.16ID:e75uCkWu0182デフォルトの名無しさん
2015/01/19(月) 08:29:09.56ID:h1tmdNUx「これこれこういう本を読め」って、あんたQiitaでも散々自分の記事のリンク張って、
読めって強要しているじゃないか
0183デフォルトの名無しさん
2015/01/19(月) 10:06:32.13ID:tWyHvUIe0184デフォルトの名無しさん
2015/01/19(月) 10:11:16.40ID:W5DPVPB80185デフォルトの名無しさん
2015/01/19(月) 10:34:59.45ID:W+ZMH4Rm0186デフォルトの名無しさん
2015/01/19(月) 11:07:20.34ID:t2o2vSxL0187デフォルトの名無しさん
2015/01/19(月) 13:09:30.75ID:7cIVKz160188岡部健
2015/01/19(月) 13:23:16.84ID:jdcvUTrq青空文庫を読む apk
便利だよ、使ってねクズども
0189デフォルトの名無しさん
2015/01/19(月) 16:35:00.12ID:Wl5S0I/B0190デフォルトの名無しさん
2015/01/19(月) 16:38:17.97ID:Wl5S0I/B0191デフォルトの名無しさん
2015/01/19(月) 17:36:56.76ID:RjD6WSsn0192デフォルトの名無しさん
2015/01/19(月) 18:31:40.95ID:zYruZwCtこの程度だったのか・・・・・
0193デフォルトの名無しさん
2015/01/19(月) 19:14:55.07ID:1zvC0LuUhttp://yomogi.2ch.net/test/read.cgi/net/1419377805/
0194デフォルトの名無しさん
2015/01/20(火) 01:19:59.90ID:NaIuJpGPhaskell のコードを書いて、ghcmod 使ったりコンパイルしたりする、
という場合、ghc じたいが sandbox に気づいてそこのライブラリを使う、というのは起こらなくて、
myproject.cabal を作るのは必須という理解でいいですか?
なんかくだすれみたいで申し訳ないのですが、どうもハッキリ掴めないのでお許しを
0195デフォルトの名無しさん
2015/01/20(火) 07:47:39.53ID:8CmI1DCg・双方向連結リストじゃない単方向連結リストだ
・「始端」は自己参照的なEmptyPairだ(「終端」ではない)
・でもセルごとの連結ポインタは後続のセルから先行のセルを指すようになっている
・実装は配列
kenokabeちゃんはリストというデータ構造を知らない
0196デフォルトの名無しさん
2015/01/20(火) 07:50:15.67ID:8CmI1DCghttps://plus.google.com/102413788769460359022/posts
"通っていた学校 University of California, Los" とあるけど、絶対ウソ。
0197デフォルトの名無しさん
2015/01/20(火) 07:55:46.62ID:8CmI1DCgvar $push = M.$push = function(arr, data)
{
arr[arr.length] = data;
};
この実装でなんで
「ほら見ろ逆方向リストで動作するじゃねーか」と
言い張れるのか果てしなく謎だ。
0198デフォルトの名無しさん
2015/01/20(火) 08:28:14.07ID:Z11IUfXNcabal exec ghc -- --[ghcオプション]
みたいにすればsandbox awareにghc使える。
0199デフォルトの名無しさん
2015/01/20(火) 10:35:44.47ID:NaIuJpGPありがとうございます。ちょっと cabal のマニュアル読み直してきます
0200デフォルトの名無しさん
2015/01/20(火) 10:58:53.32ID:Nn6T7LRa0201デフォルトの名無しさん
2015/01/20(火) 10:59:28.98ID:Nn6T7LRa0202デフォルトの名無しさん
2015/01/20(火) 13:21:19.76ID:r45csLnY0203デフォルトの名無しさん
2015/01/20(火) 14:58:36.18ID:Nn6T7LRa0204デフォルトの名無しさん
2015/01/20(火) 23:34:29.85ID:Nn6T7LRa東京電力福島第一原子力発電所と第二原子力発電所で、作業員が死亡する事故が相次ぎ、第一原発では、21日廃炉作業を中止して、安全点検を実施することになりました。
背景について東京電力は、記者会見で、「作業量が多くなっていることも考えなければならない」と述べ、作業の進め方や安全対策に問題がないか検討する考えを示しました。
20日午前9時半ごろ、福島第二原発で、廃棄物を処理する建物で点検作業をしていた40代の作業員の男性が、点検用の機具に頭を挟まれ、ドクターヘリで病院に搬送されましたが、死亡しました。
福島第一原発でも、19日午前9時ごろ、雨水をためるタンクの点検をしていた50代の作業員の男性が、高さおよそ10メートルのタンクの天井から転落し、20日未明になって死亡しました。
さらに柏崎刈羽原発でも、19日、作業員が足場から3メートル余り下に転落して大けがをしました。
こうした事態を受けて東京電力は、3つの原発の所長とテレビ会議で結ぶ異例の記者会見を開き、姉川尚史原子力・立地本部長が陳謝しました。
現在、福島第一原発では、廃炉や汚染水対策などのため、去年の同じ時期のほぼ2倍に当たる1日およそ7000人の作業員が働いていますが、
「作業量の急増が、事故が相次ぐ背景にあるのではないかと」問われたのに対し、姉川本部長は、「作業量が多くなっていることも考えなければならない」と述べ、作業の進め方や安全対策に問題がないか検討する考えを示しました。
福島第一原発では、21日、廃炉作業のほとんどを中止し、安全点検を実施することになり、第二原発でも安全の徹底が図られるまで、作業を中止するということです。
福島第一原発では、去年3月にも、崩れてきた土砂の下敷きになって作業員が死亡したほか、11月には、タンクの増設工事中に、鋼材が落下して3人が重軽傷を負うなど、作業事故が相次ぎ安全対策が課題になっています。
東電社長「安全確保までほとんどの作業再開せず」
0205デフォルトの名無しさん
2015/01/21(水) 10:02:49.56ID:tSYl3nCX0206デフォルトの名無しさん
2015/01/21(水) 10:11:05.68ID:b1WEqEY30207デフォルトの名無しさん
2015/01/21(水) 10:12:38.22ID:PxbGo4hc気分。
紀文のはんぺん。
0208デフォルトの名無しさん
2015/01/21(水) 10:12:59.70ID:mE4mMlsp先に定義を見せておかないと後のコードが読めなさそうなものはlet、
名前を見れば何をやってるかわかるよね、なものは後からwhereで補足、
ってのが一般的なんじゃないかね。
ただ個人的にはdoの中ではletも使うが、そうでないところでは
ほぼwhereしか使わん。複雑なのは型を明示してトップレベルに書いちゃうし。
ただ、whereと違ってlet in は式なので、declaration styleではなく
expression styleの人はlet の方がいいはず。
0209デフォルトの名無しさん
2015/01/21(水) 11:52:00.61ID:g6aErnoK毛の壁の新作キター
0210デフォルトの名無しさん
2015/01/21(水) 11:52:53.36ID:g6aErnoK0211デフォルトの名無しさん
2015/01/21(水) 12:13:50.54ID:tSYl3nCXなるほど。確かにdo内でwhereを使うのはしっくりこない感じあります
0212デフォルトの名無しさん
2015/01/21(水) 12:26:32.64ID:tSYl3nCXボトムとか入出力とか積極的に扱いたい、って需要があって…
1. それをうまくやる方法としてモナドが発見されて、実現のために参照透過性の確保が必要になった。
2. デフォルト遅延評価が採用された。
って経緯だと思うんだけど、
遅延評価なしの言語でモナドってどうなの?
0213212
2015/01/21(水) 12:48:33.18ID:tSYl3nCX違うか、参照透過の為にモナドが必要なんだ。
逆に言うと、モナドを使った結果、(入出力も)参照透過に表現できる。
0214デフォルトの名無しさん
2015/01/21(水) 13:32:55.89ID:Oex/ZY2d0215デフォルトの名無しさん
2015/01/21(水) 13:57:24.11ID:IlRdpzFj0216デフォルトの名無しさん
2015/01/21(水) 14:24:07.34ID:tSYl3nCXないと思うです。
でも Haskell 以外でモナドメジャーじゃないし、どうなのかな、って。
0217デフォルトの名無しさん
2015/01/21(水) 14:29:33.51ID:fNn/u+Hw0218デフォルトの名無しさん
2015/01/21(水) 14:47:43.51ID:tSYl3nCX(>>=)が第一引数に対して正格でないのは何ででしたっけ…
0219デフォルトの名無しさん
2015/01/21(水) 14:56:08.53ID:tSYl3nCX0220デフォルトの名無しさん
2015/01/21(水) 21:25:39.56ID:abguHzCC0221デフォルトの名無しさん
2015/01/21(水) 23:17:05.40ID:Vh0iozsQ遅延評価 → 副作用があるとまずい
その対偶は
副作用無し(≒参照透明) → 遅延評価でも大丈夫
一方副作用は必要
参照透明を保ったまま副作用を扱う仕組みがモナド
>>213で合ってる
0222デフォルトの名無しさん
2015/01/22(木) 00:01:32.40ID:yXMo1Viy>参照透明を保ったまま副作用を扱う仕組みがモナド
駱駝師匠の受け売りではないが、参照透明を保ちつつモナドで
隠伏的に世界状態を受け渡すのがHaskellのIOのコツなんで、
普通の言語で「副作用」と呼ばれるものを、世界→(値,世界)な
関数としていわば「主作用」にしているというべきではあるまいか。
つうかだな、この観点からは手続き型言語の手続き自体が、
計算機の状態から計算機の状態への純粋な関数なんだよね。
0223デフォルトの名無しさん
2015/01/22(木) 00:29:11.30ID:FeOaPmA2http://qiita.com/camlspotter@github/items/06b3d8af27feedf91cf2
駱駝師匠ってこれのことだよね?
その観点だとそうなので、だからむしろそういう観点で語られるより、
参照透明(同じ式の値はどこでも同じ)という観点から語って、
手続き型言語とは違うことを強調してることが多いと思う。
0224デフォルトの名無しさん
2015/01/22(木) 00:39:11.17ID:3m94e4CI0225デフォルトの名無しさん
2015/01/22(木) 00:54:14.02ID:yXMo1Viyうーん、値は値でいいんだよ。
同じ引数で同じ関数を呼び出した時に同じ返り値、ってのが守られてればいい。
引数として計算機の状態を明示的に追加すれば、いわゆる手続きも純粋な関数。
そしてこれは実は参照透明。可変な値は実際には計算機の状態を受け取る関数だから。
0226デフォルトの名無しさん
2015/01/22(木) 00:57:47.95ID:yXMo1Viy計算機の状態を受け取る関数として理解するのは「通常とは違う意味」なのかもな。
個人的にはそういう関数として理解することが多いので、ズレてるのかもしれん。
0227デフォルトの名無しさん
2015/01/22(木) 01:13:08.79ID:J1v0x3Vw個人的には命令を表す抽象型だと思っておく方が誤解が少ないと思う
関数だと思うことで目から鱗が落ちる人も居るみたいだから全否定はできないが
0228デフォルトの名無しさん
2015/01/22(木) 01:59:40.16ID:yXMo1ViyHoare論理とか手続き型の表示意味論とか考えるとむしろ「世界状態の関数」という理解の方が本筋に思えるのだよ。
命令を表す抽象型、という方が便利な方便に思える(いや確かに1級の値として扱えるし便利なんだが)。
0229デフォルトの名無しさん
2015/01/22(木) 02:41:58.82ID:AOQ2U7ssどうでもいいけどそれ対偶じゃなくて逆じゃないかと思うのだが
0230デフォルトの名無しさん
2015/01/22(木) 02:54:10.14ID:yXMo1Viy対偶は「副作用があってもまずくない→遅延評価でない」
逆は「副作用があるとまずい→遅延評価である」
裏は「遅延評価でない→副作用があってもまずくない」
「副作用無し→ 遅延評価でも大丈夫」はこのいずれでもない。
0231デフォルトの名無しさん
2015/01/22(木) 07:11:06.21ID:mciTShj5遅延評価 → 副作用があるとまずい
は
遅延評価 → 副作用あり → まずい
だからflipして戻すと
副作用あり → 遅延評価だとまずい
で、裏を取れば
副作用無し → 遅延評価でも大丈夫
ということで意味的には逆(裏)のつもりだったけど、
書き方がまずくて対偶だと勘違いした。
0232デフォルトの名無しさん
2015/01/22(木) 07:29:09.34ID:yXMo1Viyお前さんがしたいだろう主張の正しい定式化は
(遅延評価が採用されている ∧ 副作用がある) → 動作がまずい
⇔遅延評価が採用されている → (副作用がない ∨ 動作がまずい)
⇔遅延評価が採用されている → (副作用がある → 動作がまずい)
だ。これはお前さんの
(遅延評価が採用されている → 副作用がある) → 動作がまずい
ではない。「flipして戻すと」とか最初からできない。
その時点で逆だの対偶だのと関係なくなってるわ。
0233デフォルトの名無しさん
2015/01/22(木) 07:59:21.85ID:hihrfS9D0234デフォルトの名無しさん
2015/01/22(木) 08:20:28.03ID:yXMo1Viyそれなら「flipして戻す」とかできないだろ。
前2つは「→」で結合されてないんだからな。
0235デフォルトの名無しさん
2015/01/22(木) 08:24:04.14ID:gOPwVEDJflip :: (a -> (b -> c)) -> (b -> (a -> c))
なんですけど…
0236デフォルトの名無しさん
2015/01/22(木) 08:43:59.72ID:C1enpK1Tしぃっ!
0237デフォルトの名無しさん
2015/01/22(木) 08:45:42.60ID:7Blthlt50238デフォルトの名無しさん
2015/01/22(木) 08:46:07.01ID:J1v0x3VwIOを世界状態の関数だと思うと、例外とか並行性で訳分からなくならない?
例えば、mv :: MVar Intのとき、
modifyMVar_ mv (return . (+2))
と
modifyMVar_ mv (return . (+1)) >> modifyMVar_ mv (return . (+1))
は違う意味だけど、この二つが異なる「関数」だと言うのは簡単じゃない気がする
0239デフォルトの名無しさん
2015/01/22(木) 09:12:23.26ID:yXMo1Viyありゃ、そらそうだ。すまんね。だが、それで言えるのは
副作用がある → (遅延評価が採用されている → 動作がまずい)
なので(これは正しい定式だ)、
>>231が「flipして戻す」をしてないってこったね。
0240デフォルトの名無しさん
2015/01/22(木) 09:14:16.99ID:yXMo1Viy>>231は「flipして戻す」はしてるのか。すまんほんとうにすまん。
眠くてボケてるな。
単に対偶とか逆とか裏とかを取るそういう操作じゃないってだけだ。
0241デフォルトの名無しさん
2015/01/22(木) 09:28:26.88ID:m5cyHAPkおかげさまで、遅延評価とHaskell の関わりが解りました。
全域が参照透過だからこそ、遅延評価をデフォルトにできたんすね。
圏論の枠組みで値を扱いたい
↓
Moggi「モナドあれ」
↓
入出力含む全てを参照透過にできた → コンパイラが攻撃的になれるので動作速度も上がった
↓
遅延評価をデフォルトにできた → モジュール性上がった
0242デフォルトの名無しさん
2015/01/22(木) 09:33:24.41ID:luu2eUXma → b だとまずい = a → (b → まずい)
b → a だとまずい = b → (a → まずい)
は両方とも意味は同じなんだけど、同じ意味に対して書き方が二つあって、
左辺の逆、裏、対偶は違うものになるってことだと思う。
0243デフォルトの名無しさん
2015/01/22(木) 09:39:51.90ID:luu2eUXm参照透過にしたい & 遅延評価にしたい
↓
副作用の扱いに困る
↓
モナドを使えば良いことに気づく
だよ。
ちなみにkenokabeが圏論とか言ってるのは完全にデタラメだよ。
0244デフォルトの名無しさん
2015/01/22(木) 09:45:32.68ID:luu2eUXmすまん、これは括弧無しだとさすがにまずかった。
a → (b だとまずい) = a → (b → まずい)
b → (a だとまずい) = b → (a → まずい)
0245デフォルトの名無しさん
2015/01/22(木) 10:03:41.42ID:m5cyHAPkへええ、参照透過も遅延評価も結果じゃなくて目的だったんですか!
Haskell と圏論の繋がりがわかんないです。
そういえば訳本の教科書には圏論のけの字も出てこないし、Preludeではidも(.)もCategoryのクラスメソッドじゃないし、歴史的にはクライスリトリプルをモナドとして基幹に採用して以来、徐々に圏論を取り入れてきた、って感じなんすかね。
0246デフォルトの名無しさん
2015/01/22(木) 10:14:15.85ID:TlerM3muOOP で言うデザインパターンはイディオムだけど、 Haskell では型クラスとして記述可能にしているという違いはある。
つっても、例えばモナドがモナド則を満たすかどうかみたいにインターフェイス以外に必要なルールはプログラマの責任だけどな。
0247デフォルトの名無しさん
2015/01/22(木) 10:22:57.72ID:ZxT+7VDJhttp://b.hatena.ne.jp/entry/qiita.com/kenokabe/items/61d156005c7831c693cd
0248デフォルトの名無しさん
2015/01/22(木) 10:28:47.74ID:m5cyHAPk実際は両方が重要だったってことね。
0249デフォルトの名無しさん
2015/01/22(木) 10:38:43.08ID:y/T1Azr6圏論はデザインパターン、ですか。そういう視点は無かった。勉強になります。
0250デフォルトの名無しさん
2015/01/22(木) 10:53:22.85ID:C1enpK1T0251デフォルトの名無しさん
2015/01/22(木) 11:39:34.25ID:yXMo1ViySystem.Mem ( performGC:: IO() ) 使えば?
0252デフォルトの名無しさん
2015/01/22(木) 12:12:33.73ID:J1v0x3Vw-threadedを付けてコンパイルするとデフォルトで0.3秒のアイドル後に自動GC
https://downloads.haskell.org/~ghc/6.10.1/docs/html/users_guide/runtime-control.html#id2622480
0253デフォルトの名無しさん
2015/01/22(木) 12:16:17.06ID:yXMo1Viy0254デフォルトの名無しさん
2015/01/22(木) 12:25:44.90ID:vPFLQWeixs = 'x' : xs
参照透過の目的はデータ構造を初期化する順序を自由にすること
(関数を定義する順序は元々問題なかった)
xs = foo 'x'
ys = foo 'y'
0255デフォルトの名無しさん
2015/01/22(木) 15:19:16.52ID:C1enpK1T流石です
0256デフォルトの名無しさん
2015/01/22(木) 16:51:17.12ID:JA0C5j9Tそして別エントリとして同じ内容を投稿かwwww
0257デフォルトの名無しさん
2015/01/22(木) 22:03:05.55ID:K0V9CDcS圏論をプログラミング言語の理論に応用してその結果を取り入れようという流れと、
圏論の構造を言語内に取り込もうという流れがあると思う。
モナドの場合はMoggiは前者の意図だったんだけど、Wadlerが後者もやった。
後者は比較的最近の流れで、元々は圏論を取り込もうという目的はなかったと思う。
>>246が言ってるのは後者の話で、Haskellに関する前者の話も沢山ある。
0258デフォルトの名無しさん
2015/01/22(木) 23:32:32.10ID:+0By/pHuクライスリ圏は、名前の通りKleisliという人の研究に基づく。
後に言う Kleisli triple は圏論の一般論の中で整理された。整理された後もしばらくは triple
と呼ばれていたが、複合語を作るときに triple だと困る(字面上意味不明の言葉になりやすい)
ため、MacLaneがモナドという名称を提案した。モナドという名称はライプニッツの単子論から借りてきたものだけど、ただ単に名前を借りてきたというのが実情。
(「カテゴリー」なんかも元々はアリストテレスの哲学に関連する用語の名詞を借りてきたもの。)
ただし、モナドは関手圏における「一般化された半群(モノイド)」とみなせるという事情があり、「モノイド」と音が近い哲学用語として「モナド」が選ばれたというぐらいの意味はある。
以上のことは「圏論の基礎」pp.183-198 あたりをよく読めば判る。そして、この辺のことは数学の内部での動機によって研究されていて、
コンピュータサイエンスとはあまり関連が意識されていなかった。
Moggiは "Computational lambda-calculus and monads" で計算の圏論的意味論を示した。この中で彼は色々な種類の「計算」が
X --> T(Y) という形の「射」として捉えられると主張した。ただし、Tは考えている圏における自己関手。ところで、このような「計算」
の合成可能性を考えると、Tは自己関手であるにとどまらず、モナドであることが要求される。(要点は、T(T(X)) のような「二重の文脈」
を一重つまりT(X) の形に解くことができるかということ)。カルテジアン積を持つ圏を考えるともう少し強い性質が要求されるが、
これが「強モナド」というもの。
Moggiの論文はいくつかの例が取り上げられており、たとえば状態モナドなども扱われている。関数の内部状態のような、数学的には
ちょっと扱いに困るようなものが、Moggiの示した工夫に依ってうまく扱えるということは、「純粋な関数」(従って呼ばれる毎に遷移する内部状態を持たない)
たちとモナドを組み合わせて、「内部状態を持つ関数」などをシミュレートできるということを意味する。
0259デフォルトの名無しさん
2015/01/22(木) 23:39:27.07ID:+0By/pHuじゃあなんで「純粋な関数」に固執する意味があるのか。
個人的にはあんまないと思うけど、一応
1.純粋な関数であれば(呼び出し回数に応じて返す値が変わるようなことはないので)最適化しやすい(ほんとかなぁ)。
2.最外最左簡約のように、「同じ部分式を何度も評価する」ことになりやすい評価戦略を選んだ場合、もし関数の純粋性が保証されているならば
「グラフ簡約」のような最適化手法により、良いコードが生成できる(ことがある)。
なんてことはあると思います。じゃあなんで「最外簡約」みたいなマイナーな評価戦略を使いたいかといえば
・無限リスト、例えば [1 ..] みたいのが余裕で作れて表現力が増す。
ぐらいしか思いつきませんが、とにかく「計算の結果次第で配列の長さが変わる」ような計算を、あまり
チマチマとしたコードを書かずにズバッと書けたりして俺TUEEEできるというのがいいんですかね。
まあ頭いい人は放っておくと変なものを作るということなんだと思います。
0260デフォルトの名無しさん
2015/01/22(木) 23:57:29.31ID:+0By/pHu蛇足。
「最外簡約」は、構文木を根の方から評価しようという評価戦略で、評価の実態からそのように呼ばれている。
一方で、プログラミングする人の気持で、構文木の終端が評価の最後の方にまで遅延されるという印象に基づいて
「遅延評価」とも呼ばれます。
いずれにせよ「遅延評価」をあまり神秘的に考える必要はないです。
0261デフォルトの名無しさん
2015/01/23(金) 02:43:28.47ID:9Ll9FhEC停止する可能性がある計算は必ず停止するというのがあったと思うんですが
それはあまり重視されない?
0262デフォルトの名無しさん
2015/01/23(金) 03:19:59.17ID:jnn1J11N0263デフォルトの名無しさん
2015/01/23(金) 11:34:44.27ID:FG7Cgjgq無限ループは副作用じゃないか
同じ引数で結果が2通り以上になるのは副作用
なら0通りも副作用ではないか
0264デフォルトの名無しさん
2015/01/23(金) 11:58:54.97ID:5jDftkrl>無限ループは副作用じゃないか
f(n) = f(n-1)はたとえば、f(5)=f(4)で、同じ引数なら同じ結果の純粋な関数だ。
単に続けてf(4)も計算しようとするから停止しないだけ。
それが気に入らないなら、停止しないということを「⊥ ボトム」という値で
表現すれば、f(5) = ⊥ は常に成り立つんだからやっぱり純粋性は保たれている。
0265デフォルトの名無しさん
2015/01/23(金) 13:07:46.09ID:FG7Cgjgq0266デフォルトの名無しさん
2015/01/23(金) 13:15:42.27ID:mGGgFMZE0267デフォルトの名無しさん
2015/01/23(金) 13:39:39.55ID:5jDftkrl>⊥はNothingに似てるしMaybeはMonadだから副作用と関係ありそうだけどな
そういう適当な連想ゲームしてっとkenokabeになるぞ。
0268デフォルトの名無しさん
2015/01/23(金) 14:05:12.06ID:FG7Cgjgqだからプログラミング言語がある
0269デフォルトの名無しさん
2015/01/23(金) 15:05:27.84ID:mGGgFMZE0270デフォルトの名無しさん
2015/01/23(金) 16:28:32.03ID:hSE1K7on0271デフォルトの名無しさん
2015/01/23(金) 16:52:38.24ID:mGGgFMZEあんなバカ記事ストックしてる奴らも悪いけど、ある意味すげーわ
0272デフォルトの名無しさん
2015/01/23(金) 17:49:56.81ID:he2eREiv少し読んだら前だけじゃなく後ろからも手斧飛んでて笑った。
何がしたいんだよ。
0273デフォルトの名無しさん
2015/01/23(金) 18:00:53.81ID:FG7Cgjgq0274デフォルトの名無しさん
2015/01/23(金) 22:03:27.40ID:psNR2ovjそれを別のマシンにダウンロードして、そこで元と同じ環境になるようにしたい。
この場合、cabal.sandbox.config ファイルの中に書かれている絶対パスを
それぞれのダウンロード先の環境に合わせて書き直さなければならないの?
たとえば、local-repo: [なんとか]/.cabal-sandbox/packages の値とか。
この [ なんとか] の部分を消して相対パスにしたら、パスが見つからないというエラーが出た。
0275デフォルトの名無しさん
2015/01/23(金) 22:06:34.99ID:8zAsCc6J通常の意味では副作用じゃないけど、
型に⊥を加えるのは全域関数の圏のモナドだよ。
0276デフォルトの名無しさん
2015/01/23(金) 23:17:22.27ID:5jDftkrl知ってる。リフティング。
しかし、モナドは別に副作用ではない。
0277デフォルトの名無しさん
2015/01/24(土) 00:19:47.30ID:FLIgZ7JZ全域関数を純粋な関数として他は副作用とする考えもあるし、そういう言語もあるよ。
http://www.rise4fun.com/koka/tutorial
0278デフォルトの名無しさん
2015/01/24(土) 00:57:27.87ID:d5sOd2yH0279デフォルトの名無しさん
2015/01/24(土) 10:35:16.53ID:ldvaOpkQ0280デフォルトの名無しさん
2015/01/24(土) 12:09:46.58ID:SXwXQLVs0281デフォルトの名無しさん
2015/01/24(土) 12:34:55.72ID:kvIaPjFBHaskellには無関係な式が二つ以上ある
独立したモジュールが複数存在する
つまり数学者の脳内とプログラマの脳内でやってることが違う
0282デフォルトの名無しさん
2015/01/24(土) 12:45:49.96ID:oRbgo8RH遅延評価の形式的な議論とプログラマとしての理解にはなにも違いがないし、
君が理解してないだけだと思う
0283デフォルトの名無しさん
2015/01/24(土) 20:25:38.71ID:oGAF5m1n英語でもかまいません。
0284デフォルトの名無しさん
2015/01/25(日) 08:00:31.97ID:4n+jRXJnでも遅延評価ってあんまり実装されてる言語無いんだね
0285デフォルトの名無しさん
2015/01/25(日) 10:17:56.04ID:CZVIVtmk0286デフォルトの名無しさん
2015/01/25(日) 10:35:28.00ID:47J/10kQ正格評価の言語なら遅延評価させたい部分で()->*を渡すだけでいいのだから。
0287デフォルトの名無しさん
2015/01/25(日) 10:56:39.83ID:yeeuIM7T0288デフォルトの名無しさん
2015/01/25(日) 11:08:22.84ID:s2HjDF7wcall by value な純粋関数型言語で、
引数を call by need で渡すのってできるの?
0289デフォルトの名無しさん
2015/01/25(日) 12:30:43.11ID:47J/10kQ副作用無しの言語ならメモ化も面倒。
けどメリットは少ない。
0290デフォルトの名無しさん
2015/01/25(日) 13:43:20.57ID:CZVIVtmkLisp「関数もマクロも必要だから」Smalltalk「ブロックが必要」Haskell「遅延評価」
0291デフォルトの名無しさん
2015/01/25(日) 14:45:02.13ID:yaDwD3P+Haskellはイディオムが多すぎる、と思った。
多くのイディオムを身に着けたら効率の良いプログラミングは可能だろうが、
チーム開発は可能なのかな・・。
熟練者を集めても、頼っているイディオムに大きな違いがあるだろうに。
0292デフォルトの名無しさん
2015/01/25(日) 15:01:30.80ID:TO6nbIrr頭への負荷が平気ならイディオム連呼が
そうでないなら正規な表現の組み合わせで表現するのが効率がよい
効率の良さは結局人の性質によって異なるのだ
しかし頭への負担はどんな人間でも年とともにつらくなってくるものだから
将来を考えたらきっちり正規形で考える癖をつけとくべきだな
0293デフォルトの名無しさん
2015/01/25(日) 23:02:37.58ID:CZVIVtmkHaskellは型とクラスが多すぎる
変数の型と型変数のクラスを自動でチェックしたら効率の良いデバッグが可能
熟練者は頼っている型とクラスに大きな違いがある
>>292
静的型付けの効率の良さは人の性質によって異なる
0294デフォルトの名無しさん
2015/01/25(日) 23:11:41.00ID:p3bk5TEE完全に道具に遊ばれてるな
0295デフォルトの名無しさん
2015/01/26(月) 13:16:24.01ID:NLE6CajI0296デフォルトの名無しさん
2015/01/26(月) 14:14:42.52ID:rq658b9R0297デフォルトの名無しさん
2015/01/26(月) 19:49:58.93ID:XNIaxWEk0298デフォルトの名無しさん
2015/01/26(月) 20:00:14.82ID:86moXcK60299デフォルトの名無しさん
2015/01/26(月) 20:08:46.77ID:6ykKj8/Z毛一人をBANってのは何か違うよな
一番簡単な方法ではあるけども
0300デフォルトの名無しさん
2015/01/26(月) 21:11:30.40ID:WHjADl5Sqiitaが毛の壁とやりとりしたが改善されなかったからって言ってたから
あの長文をqiitaに送りつけたんだろう
たぶん注意→凍結→ユーザー資格取り消し
ってやりとりがあったと思われ
0301デフォルトの名無しさん
2015/01/26(月) 21:20:48.76ID:AD59R4uGここにいるのなら奴のことは忘れろ
0302デフォルトの名無しさん
2015/01/26(月) 22:45:50.83ID:1uLj9DBphttp://web.archive.org/web/20080622204226/http://www.cs.vu.nl/boilerplate/
ライブラリ ドキュメントの Data.Data のページに boilerplate へのリンクが貼ってあるが切れてて、探してたら見つかった。
やっと Data 型クラスの使い方がちょっと分かってきた。
仕組みはまだ分からんが。
0303デフォルトの名無しさん
2015/01/27(火) 00:28:25.15ID:1sPJsT1Q0304デフォルトの名無しさん
2015/01/27(火) 00:49:25.01ID:9RKPRbxp一人の敗者を除く全員が平等な世界のどこが良いのか
0305デフォルトの名無しさん
2015/01/27(火) 00:55:23.26ID:ON3kwsIb0306デフォルトの名無しさん
2015/01/27(火) 01:15:28.77ID:pyp4F36Ghttp://yomogi.2ch.net/test/read.cgi/net/1421926957/
0307デフォルトの名無しさん
2015/01/27(火) 17:27:41.86ID:+1Xip5apまさか毛も今回のスペシャルフォーメーションにQの運営がゲスト参加してるとは思うまいw
0308デフォルトの名無しさん
2015/01/27(火) 18:05:56.19ID:GDvEOGFIhttp://qiita.com/esumii/items/ec589d138e72e22ea97e
0309デフォルトの名無しさん
2015/01/27(火) 18:15:19.71ID:RZorUkzCもっとひどいやつがいるぞ
「extern は要らない子!」って今でも連呼しているが、こういうやつこそ ban されないと
0310デフォルトの名無しさん
2015/01/27(火) 18:44:45.47ID:ON3kwsIb0311デフォルトの名無しさん
2015/01/27(火) 20:19:19.21ID:ox5yAQX/// |:!
//,. -/r‐- 、| !
/,/ ./ | _」 ト、
/.\`/ |二...-┘ ヽ
. i ,.>、;/ー- 、 l
! ∠.._;'____\ |
,!イ く二>,.、 <二>`\.、ヽ.
/'´レ--‐'ノ. `ー---- 、 |\ ヽ、 「forが無いようだが…」
\ `l (!" Jfヽ! `''-;ゝ
`‐、jヽ ヾニニゝ ゙イ" }_,,. ‐''´
`´\ ー / ,ィ_}
. |_ `ー ''´ _」'
_,.| ~||「  ̄ 人|、._
,r==;"´ ヽ ミ|||彡 / ` ー`==、-、
. ///,イ ___ ヽ|||_,,. ‐''´___ | | | |ヽ
0312デフォルトの名無しさん
2015/01/27(火) 23:01:22.39ID:8Es+EE5Kつ forM_
0313デフォルトの名無しさん
2015/01/28(水) 07:48:57.72ID:zESgryfs誰の顔だと思う?
,.-―: ̄`ー::::::::::、
/::::::::::::.::::::::::::::::::::::::::::`::、、
/::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
ヽ:::: ´、ひ> ;: l .<ひ>' 、::::::::/
ヽ:::::  ̄ .)::; l  ̄ l::::/
、:::::.. /:::; .,-、 l:::/、
,―:::::::: ゝヽ- ー' 、 l::/,、ヽ
l,、,、,,:、:: / ,--、,-.、_ l /::::::,、,、l
l,、,、,、,、,、::、 `ー ̄-' /:::::::::::,、,、l
l,、,、,、,、,、,、::ヽ /::::::::、,、,、,、,ノ:\
l,、,、,、,、,、,、,、,、,,ー― ':::::::,、,、,、,/,、,、,、,、,`
/,、,、,、,、,、,、,、,、,、:::::::::::::::::::::::::::、,、、,、,、,、,、,、,、
0314デフォルトの名無しさん
2015/01/28(水) 08:05:33.60ID:slxhZiXoスレ違いも大概にするか、親不知から海に飛び込んで落っ死ねカス
0315デフォルトの名無しさん
2015/01/28(水) 08:23:42.88ID:PZUlbwjy関数型bot
0316デフォルトの名無しさん
2015/01/28(水) 12:11:51.87ID:1UBwC5Qa0317デフォルトの名無しさん
2015/01/28(水) 12:45:31.15ID:YDLWOLdXあっちの同じ人の書き込みを見るとkenokabeに粘着する人のようだし、
このスレもkenokabeに粘着する人に粘着されるのかもしれない。
0318デフォルトの名無しさん
2015/01/28(水) 14:08:39.14ID:1WBxC8/8逆に使いこなせたら全て自分の手柄にしないと割に合わない
でも自分の手柄にしたいなら関数型ではなく自己流でやるべき
関数型が正しいかどうかは知らんが
自己責任論が多かれ少なかれ嘘臭いのはみんな知ってる
0319デフォルトの名無しさん
2015/01/28(水) 19:27:21.59ID:GcZv3SAt0320デフォルトの名無しさん
2015/01/28(水) 19:28:42.26ID:D4DppUD9ひしひしと伝わってくるw
でも筋はいいのでHaskellの子孫に考え方が継承されればいいと思っている
自分はJavaやScalaでの関数型プログラミングのドキュメントを読んでも
ピンと来なかったがHaskellのドキュメントを読んで少し解った気がする
0321デフォルトの名無しさん
2015/01/28(水) 19:31:32.93ID:93RLbcHP0322デフォルトの名無しさん
2015/01/29(木) 06:01:24.39ID:LrWrINrL0323デフォルトの名無しさん
2015/01/29(木) 08:35:38.22ID:FGN+iwuI/::::::::::::.::::::::::::::::::::::::::::`::、、
/::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
ヽ:::: ´、ひ> ;: l .<ひ>' 、::::::::/
ヽ:::::  ̄ .)::; l  ̄ l::::/
、:::::.. /:::; .,-、 l:::/、
,―:::::::: ゝヽ- ー' 、 l::/,、ヽ Qiitaによる圏論弾圧を許すな!
l,、,、,,:、:: / ,--、,-.、_ l /::::::,、,、l
l,、,、,、,、,、::、 `ー ̄-' /:::::::::::,、,、l
l,、,、,、,、,、,、::ヽ /::::::::、,、,、,、,ノ:\
l,、,、,、,、,、,、,、,、,,ー― ':::::::,、,、,、,/,、,、,、,、,`
/,、,、,、,、,、,、,、,、,、:::::::::::::::::::::::::::、,、、,、,、,、,、,、,、
0324デフォルトの名無しさん
2015/01/29(木) 08:47:40.40ID:TTUB+Uno0325デフォルトの名無しさん
2015/01/29(木) 10:15:00.02ID:2lYDg0Ki0326デフォルトの名無しさん
2015/01/29(木) 11:03:55.08ID:XWNZF0m4http://nmuta.dip.jp/~muta/tog301.pdf
0327デフォルトの名無しさん
2015/01/29(木) 11:57:00.17ID:YfwvpXl2正義感とか誤解しないでくれ
関数型言語というのは我々は高尚なんだ
ゴミが混じってはいけないのだよ
https://lispmachine.files.wordpress.com/2013/03/chart-dmitry-ignatiev.jpg
0328デフォルトの名無しさん
2015/01/29(木) 11:58:03.66ID:CAv4BBBaHaskellが崩壊してもHaskellは真の関数型ではなかったと言い訳できるからだよ
そういうトリックを使ってる自覚のある識者には正義感なんてないだろ
0329デフォルトの名無しさん
2015/01/29(木) 12:45:27.10ID:rtImRMnr0330デフォルトの名無しさん
2015/01/29(木) 13:57:27.94ID:zNgdEinm「話せば分かる」は最低限のコミュニケーション能力がある相手じゃないと成り立たない。
コミュニケーションとれない人間、威圧的な人間に構うと疲れるだけ。
毛の壁ほどではない、分かりにくい隔離対象もいるから注意な。
0331デフォルトの名無しさん
2015/01/29(木) 14:32:14.62ID:4sa11BOVほんとマジで金払うから死んでくれない?手伝うから
いくら払ったら元のスレに戻してくれる?ニホンゴワカル?
0332デフォルトの名無しさん
2015/01/29(木) 19:06:49.81ID:s5T9RiNx地の言葉を使いたまえ、君に合わせよう
0333デフォルトの名無しさん
2015/01/29(木) 20:18:05.22ID:+HWonkUoその後で、プロジェクトにソースファイルをいくつか追加したので、
*.cabal ファイルの build-dependsに未記入のパッケージがいくつか出てきました。
それらパッケージ名を書き加えたいのですが、*.canal ファイルの更新をサボっていたため、
結構な数があります。
そこで、指定したディレクトリ以下にある *.hs ファイル内で
インポートしているモジュールのパッケージの一覧を得る簡単な方法はないでしょうか。
今の *.cabal ファイルを退避させておいて、改めて cabal init コマンドを使って
適当に *.cabal ファイルを作って、その中の build-depens の項目だけを
先ほど退避させておいた *.cabal ファイルにコピペするのが一番楽でしょうか。
0334デフォルトの名無しさん
2015/01/29(木) 20:24:13.31ID:pKGFftLs最近いろいろと話題になってはいるけど
Haskell使いの人は気にしないのが一番では
0335デフォルトの名無しさん
2015/01/29(木) 21:01:02.98ID:3YyToo6+0336デフォルトの名無しさん
2015/01/29(木) 21:20:00.38ID:TKGinLzw<*> [f g h] [1 2 3] = [f(1) f(2) f(3) g(1) g(2) g(3) h(1) h(2) h(3)]
になるようだが、なぜ、
<*> [f g h] [1 2 3] = [f(1) g(2) h(3)]
になるように定義されていないの?
0337デフォルトの名無しさん
2015/01/29(木) 21:28:27.17ID:+AdaLcLWIdentity Law : pure id <*> v = v
が満たされないから。お前さんの提案する定義だと
pure id <*> [1,2,3] =1
になっちまうだろ。
0338デフォルトの名無しさん
2015/01/29(木) 21:37:09.02ID:+AdaLcLWpure id <*> [1,2,3] == [1]
になっちまうだろ、だ。
Identity Lawがわかりにくいなら、
そもそもpure f <*> は fmap f と等価なので、
fmap id [1,2,3] == [1,2,3]
である以上、
pure id <*> [1,2,3] == [1,2,3]
でなければならん、と考えてくれ。
0339デフォルトの名無しさん
2015/01/29(木) 21:38:09.04ID:TKGinLzw> Identity Law : pure id <*> v = v
そう言うなら、なぜこの規則を課すのがよいの?という疑問なのだが
0340デフォルトの名無しさん
2015/01/29(木) 21:43:50.38ID:TKGinLzw結局、そうなってるからそうなってる、と理解しろってこと?
0341デフォルトの名無しさん
2015/01/29(木) 21:51:44.46ID:+AdaLcLWApplicativeがFunctorである以上、ほかにどうしろと?
つうか、Applicative Lawsを満たすようにApplicativeを実装しようね、
つうのはMonadはMonad Lawsを満たすように実装しようね、
というのと同じ性質のお約束なので、破りたきゃ破れるが、
Functorとしての振る舞いと整合性が取れないそんな糞みたいな型を
作られても使いようがない、というだけのこと。
Applicative Lawsが成立するところにApplicativeそのものの有用性があるんだからな。
0342デフォルトの名無しさん
2015/01/29(木) 22:06:52.89ID:TKGinLzw<*> [id] [1 2 3] = [1 2 3]
は納得したとして、それから
<*> [f g h] [1 2 3] = [f(1) f(2) f(3) g(1) g(2) g(3) h(1) h(2) h(3)]
はどうやって出てくるの?
0343デフォルトの名無しさん
2015/01/29(木) 22:22:06.70ID:+AdaLcLW気に入る答えとは思えんが、Monadとの整合性から出てくる。
fmap を入れ子で適用した結果の
[[f 1, f 2, f 3], [g 1, g 2, g 3], [h 1, h 2, h 3] ]
に対してjoin(これはリストモナドではconcatのことだ)を適用した
結果と同じにならなければならんので。
0344デフォルトの名無しさん
2015/01/29(木) 22:33:00.11ID:+AdaLcLWpure a = repeat a と定義すれば、お前さんの提案の<*>でも
pure f <*>と fmap fとを等価にできる。
ただ、それはMonadにするのが困難なだけ。
0345デフォルトの名無しさん
2015/01/29(木) 22:33:18.98ID:+HWonkUo>>341 さんとは別の視点で説明してみます。
Monad が Applicative なのは分かりますよね。
(Haskell の型クラス的には、歴史的な理由で、そう強制されてはいませんが)
だから、Applicative 型クラスの説明にもこう書いてあります。
If f is also a Monad, it should satisfy
・pure = return
・(<*>) = ap
この対応は意味的にもごく自然に見えるので納得できると思います。
リストは Monad なので、[f, g, h] <*> [1, 2, 3] は結局のところ liftM2 id [f, g, h] [1, 2, 3] です。
liftM2 の定義はこうなっています。
liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
この定義も、不思議なところはありませんね。
これを >>= 演算子を使った表記にするとこうなります。
liftM2 f m1 m2 = m1 >>= (\x1 -> m2 >>= (\x2 -> return (f x1 x2)))
リストモナドの >>= 演算子の定義はこうです。
m >>= k = foldr ((++) . k) [] m
つまり、リストの要素を一つ一つバラして、それぞれに関数 k を施し、結果を ++ で繋いでリストに戻す。
リストモナドの >>= 演算子の定義としてはこれまた自然な方法です。
ここまでくれば、[f, g, h] <*> [1, 2, 3] が [f 1, g 2, h 3] ではなく、
[f 1, f 2, f 3, g 1, g 2, g3, h 1, h2, h 3] となるのが自然だと感じるのではないでしょうか。
0346デフォルトの名無しさん
2015/01/29(木) 22:42:32.79ID:b9PfoQGR/::::::::::::.::::::::::::::::::::::::::::`::、、
/::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
ヽ:::: ´、ひ> ;: l .<ひ>' 、::::::::/
ヽ:::::  ̄ .)::; l  ̄ l::::/
、:::::.. /:::; .,-、 l:::/、
,―:::::::: ゝヽ- ー' 、 l::/,、ヽ
l,、,、,,:、:: / ,--、,-.、_ l /::::::,、,、l
l,、,、,、,、,、::、 `ー ̄-' /:::::::::::,、,、l
l,、,、,、,、,、,、::ヽ /::::::::、,、,、,、,ノ:\
l,、,、,、,、,、,、,、,、,,ー― ':::::::,、,、,、,/,、,、,、,、,`
/,、,、,、,、,、,、,、,、,、:::::::::::::::::::::::::::、,、、,、,、,、,、,、,、
0347デフォルトの名無しさん
2015/01/29(木) 22:43:16.27ID:+AdaLcLWというわけで、Preludeでのリストモナドと整合的な
Applicativeとしての振る舞いは[f 1, f 2, f 3, g 1, g 2,...]なやつの方だ。
お前さんの提案しているzip風の振る舞いは工夫すればApplicativeにはできる。
それをMonadにしようとすると無限リストに関するなんかのMonadにはできるかもしれんが(確信はない)、
Preludeにあるようなリストモナドとは別の挙動をするMonadになるはず。
なので、お前さんのzip風のやつは標準的なリストモナドに対応するApplicativeの振る舞いではないのは確か。
だがしかし、うむ、お前さんの直観は意外に正しかった気がする。
0348デフォルトの名無しさん
2015/01/29(木) 23:01:34.47ID:TKGinLzw一気には咀嚼できないのでこのへんでちょっと読み返してみます。
あともうひとつ。Function, Functor, Applicative, Monadと来てるが、
これで一揃い出尽くしているの?
0349デフォルトの名無しさん
2015/01/29(木) 23:22:32.81ID:rtImRMnr一揃いがどういう範囲を指すのかしらないけど
それらに関連する標準型クラスはまだまだある
typeclassopedia参照
http://snak.tdiary.net/images/20091020_0.jpg
0350デフォルトの名無しさん
2015/01/29(木) 23:25:29.46ID:TKGinLzw> <*> [f g h] [1 2 3] = [f(1) g(2) h(3)]
> になるように定義されていないの?
こう定義すると、2つの入力の要素数が等しくないといけないという
窮屈な制約がつくのが致命的ということはないの?
0351デフォルトの名無しさん
2015/01/30(金) 00:13:12.69ID:q2Om0pvmこのような部分関数はerrorやundefinedによる例外というIOモナドを用いないと補足できない地雷を純粋な関数に埋め込む危険な物です
限定的な状況での効率化の為に用いるのは良いと思いますが、Applicativeのインスタンスを部分関数にするのは踏むの間違い無しな地雷原を自ら作るようなものです
0352デフォルトの名無しさん
2015/01/30(金) 02:22:51.88ID:UcbP/yFMheadとtailに分けて処理して、っていう素直な捉え方だと<*>は奇妙に見えるかもしれん。
そんな場合はApplicativeを使わず書いた方がいいんじゃない?
読む側も書く側も無理矢理な使い方されると困る
0353デフォルトの名無しさん
2015/01/30(金) 09:18:18.88ID:gVgHpLV/そこは別に短い方にあわせれば問題ない。zipと一緒。
この定義でもAplicativeにできることは確認した。
ただ、zipWith ($) fs xs で充分なんで使いドコロがあまりない。
0354デフォルトの名無しさん
2015/01/30(金) 09:54:25.50ID:rGzX5MxDあの定義だと、
<*>: m(a - >b) ->(ma - >mb) というシンプルな型定義に対して素直でない、
なんていう考え方はないの?
0355デフォルトの名無しさん
2015/01/30(金) 10:37:10.94ID:gVgHpLV/型定義からは、関数のリスト[a->b]をリスト[a]からリスト[b]への関数にするだけなんで、
素直でないとはいえない。
リストをタプルの拡張みたいなものとして考えればむしろ自然。
ただ、pure x を「ミニマルな無限リスト repeat x」と考える必要がでてくるだけ。
0356デフォルトの名無しさん
2015/01/30(金) 11:08:34.47ID:RRvMLdPL内包表記で書けば (!!) が出てくる
zipWith f xs ys = [f (xs!!i) (ys!!i) | ・・・]
0357デフォルトの名無しさん
2015/01/30(金) 11:28:37.14ID:gVgHpLV/>リストの順序を変えると結果が変わる
普通のApplicativeだって、結果のリストの順序は変わるから結果は変わるだろ。
非決定性の計算として見た場合にはリスト内の順序が重要ではないとはいえ。
順序対として見た場合に順序が変わると結果が変わるのは当然、というかそうでないと困る。
0358デフォルトの名無しさん
2015/01/30(金) 11:54:16.82ID:gVgHpLV/[a] は Int -> a な(部分)関数と等価、 [a->b] は Int -> (a->b) と等価なので、
[a->b]<*>[a] の <*> を Int -> a と Int -> (a->b) から Int -> b を合成する関数とみれば、
実はこの <*> は (->)Applicative の <*> そのものになるんだ。
なんで、同様にして(->) Monadと同じような構造を持ったMonadも作れるはず。
ただ、あくまで部分関数なので、そこのところをMaybeと同様に処理してやらなきゃいけないだろうけど。
0359デフォルトの名無しさん
2015/01/30(金) 12:17:20.65ID:tKIiSgS/join を diagonal とすれば対応するモナドが出る
0360デフォルトの名無しさん
2015/01/30(金) 12:39:02.10ID:gVgHpLV/>Control.Applicative.ZipList
>join を diagonal とすれば対応するモナドが出る
それだと長さが違うリストの時にdiagonalが取れないのだよ。
各リストの長さを無理やり揃えて足りない分はNothingで埋めるみたいなことをしないといかん。
で、そのNothingを放置できないので最終結果から削ったりとかするとMonad Lawsが破れる……
0361デフォルトの名無しさん
2015/01/30(金) 14:04:18.96ID:BdpgM/J/diagonal ([]:xss) = []
diagonal ((x:xs):xss) = x : diagonal (map (drop 1) xss)
return = repeat
m >>= f = diagonal (fmap f m)
として monad law 破れる?
diagonal ([]:xss) の場合に [] にしないって話?
でも「短い方に合わせる」だと自動的にこれじゃない?
0362デフォルトの名無しさん
2015/01/30(金) 14:35:06.50ID:rGzX5MxD<*>: m(a -> b) -> (ma -> mb)
>>=: (a -> mb) -> (ma -> mb)
と来たわけだがが、
?1: (a -> b) -> (a -> mb)
?2: (a -> b) -> (ma -> b)
?3: m(a -> b) -> (ma -> b)
?4: m(a -> b) -> (a -> mb)
?5: (a -> mb) -> (ma -> b)
?6: (a -> mb) -> (a -> b)
?7: (ma -> mb) -> (a -> b)
はなんか意味あるの?
0363デフォルトの名無しさん
2015/01/30(金) 15:10:14.28ID:RRvMLdPL?4 x y = x <*> pure y
2,3,5,6,7は m a -> a を含意するっぽいのでダウンキャストのように型が無意味になる
0364デフォルトの名無しさん
2015/01/30(金) 16:31:41.69ID:J8sbmrGfKindle版 2422円なんだけど
0365デフォルトの名無しさん
2015/01/30(金) 18:06:14.49ID:skYnsWRxただ版元のPacktはGitHub上の有名プロダクトのcontributorに無差別で執筆依頼メールを送るスパム出版社だから要注意
0366デフォルトの名無しさん
2015/01/30(金) 20:36:40.11ID:Muu2OiOR俺は kobo で電子書籍を買ってしまったんで、アドバイスしよう。
そうとう後ろの方のページまで進まないと、あまり得るものはないと正直感じた。
買う前に目次をよーく見て、本当に興味あるタイトルが何個あるか数えてみてくれ。
あくまで cookbook なんで、原理の説明はない。
お題が出されて、それを行うコードが並び、最後に「何を行っているか」を文字で説明する。
それだけだ。
「なぜそうしたのか」の説明や、他のコードとの比較、コードのブラッシュアップなどはない。
また、示されているコードは全体的に手続き的なものが多い。
関数型特有の宣言的なコードはほとんどお目にかかれないと思っていい。
最後に、全体的に、Webで探せばすぐ見つかるお題が多い。
だから、買う前に目次の各項目でググってみることを勧める。
それで興味あるタイトルの実装方法が理解できれば買う必要はない。
そういうことなんで、知りたいことが数多く目次にピンポイントにあって、
いちいちネットで探すのも面倒で、実装方法も洗練されてなくていいから、
と言うのなら買ってもいいかな、という程度の本かと。
それでも、一通り目を通したら売りたくなると思う。
だから買うにしても、この本に限っては電子書籍はやめとけ。
俺はこういう経験は初めてだから、勉強代だと思って後悔しないことにした。
0367デフォルトの名無しさん
2015/01/30(金) 21:27:21.61ID:6lVvNn2h0368デフォルトの名無しさん
2015/01/30(金) 22:55:28.43ID:Muu2OiORwidths :: [a] -> [[a]] -> [Int]
width hs [] = ・・・
widths hs ess = ・・・
バグの根本原因がこの手の過ちだったことに気づくのに数時間かかった。
これでもコンパイルは何の問題もなく通ってしまうからな。
他にも、-Wall で発見できるくだらないバグはいろいろあると思う。
0369デフォルトの名無しさん
2015/01/30(金) 23:24:34.77ID:RRvMLdPLその代償として関数名を連呼しなければならない
0370デフォルトの名無しさん
2015/01/31(土) 01:01:40.32ID:V1osBC+h0371デフォルトの名無しさん
2015/01/31(土) 01:29:18.35ID:LJmJpMKu0372デフォルトの名無しさん
2015/01/31(土) 10:35:01.41ID:tp4m2468やれやれ、下人が何やら大はしゃぎの様子だが、ぼくからすればこれは「してやったり」であってだね。
Qiitaのアカウントを消されたのは「想定内」。
おまえらの「愚かな成功体験」だな? Qiitaの運営はおまえらの存在を知らないからね。
風評に丸め込まれた点については否定しない。こういう怒りってなかなか伝わりにくいんだ。
しかしね、こういう事例がある。
http://qiita.com/esumii/items/ec589d138e72e22ea97e
少々稚拙な部分はあるものの、おおむね健全なエントリだ。
こうゆうう流れはさ、ぼくのエントリの数々(ストック数は今もなおトップクラス)が無かったら、
生まれてこなかったのさ。
「議論が議論を呼びこむ」ためには、少々過激な言葉や挑発的なタイトルも必要なスパイスなわけ。
これこそがぼくがリスペクトする「Think different」。
Think differentで何が悪い?Think differentで誰が死んだ?
「Think differentでQiitaに活気がもたらされた」。
おまえらの計算通りにはいかない。クズ
0373デフォルトの名無しさん
2015/01/31(土) 11:26:23.94ID:r2W96dEsその結果が、機械は大爆発するが人はアンダーコントロールとかいうディストピア
0374デフォルトの名無しさん
2015/01/31(土) 11:29:57.05ID:29y+W13dもしくは住所教えろ
二度と指と口が使えないようにしてやる
0375デフォルトの名無しさん
2015/01/31(土) 12:07:39.93ID:Klh2e7Hk何かに敗れた事でもあるのか
0376デフォルトの名無しさん
2015/01/31(土) 12:20:34.48ID:r2W96dEs0377デフォルトの名無しさん
2015/01/31(土) 12:33:59.84ID:tlLNvvFeそれはありだ、つまり相手の力を利用して背負い投げをかける、というやつだ
0378デフォルトの名無しさん
2015/01/31(土) 12:48:19.54ID:tnaZDtOU0379デフォルトの名無しさん
2015/01/31(土) 13:27:09.81ID:wv2lcnXa0380デフォルトの名無しさん
2015/02/01(日) 19:06:21.16ID:vd3vYCPC0381デフォルトの名無しさん
2015/02/01(日) 21:38:09.55ID:BR+DKYut0382デフォルトの名無しさん
2015/02/02(月) 00:46:22.38ID:ygtetN3u関係ないというのは確かなんだから。
0383デフォルトの名無しさん
2015/02/02(月) 07:44:40.16ID:NKcmyih9おまえら嫉妬してるだけだろ
0384デフォルトの名無しさん
2015/02/02(月) 07:55:04.28ID:+z6Wv4m/生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
0385デフォルトの名無しさん
2015/02/02(月) 08:04:48.29ID:rJw1gGUcHaskellに触れるのも金輪際やめて欲しい。
0386デフォルトの名無しさん
2015/02/02(月) 08:23:10.21ID:0Fbz8OCq頭がちがちの保守派には嫌われるだろう
Qiitaの運営含め。
0387デフォルトの名無しさん
2015/02/02(月) 10:50:51.39ID:e5vtqmbM人工無能がやることと同じ
0388デフォルトの名無しさん
2015/02/02(月) 11:01:50.86ID:H9q5ynrKMonadってほんとにそんなにうれしいものなの?
ちょっとしたプログラム技法にしか見えないんだが
0389デフォルトの名無しさん
2015/02/02(月) 11:04:07.15ID:wLKbauU8そうだよ
0390デフォルトの名無しさん
2015/02/02(月) 11:57:56.69ID:/f/SzpPpスクリプトのように型がなければいらないけど型があれば急に価値が上がる技法
0391デフォルトの名無しさん
2015/02/02(月) 11:58:22.91ID:Z/2OEvZeおまえhiruberutoだろ?死ね
0392デフォルトの名無しさん
2015/02/02(月) 12:03:30.76ID:rJw1gGUc居所白状しろ
殺す
0393デフォルトの名無しさん
2015/02/02(月) 13:26:26.64ID:QDSUpXSJ0394デフォルトの名無しさん
2015/02/02(月) 13:38:34.39ID:H9q5ynrKもう少し具体的に
0395デフォルトの名無しさん
2015/02/02(月) 21:57:16.68ID:p+nI3cfLtemplate <template <typename T> class M, typename A>
M<A> join(M<M<A> > x) {return bind<M, M<A>, A>(x, id<M<A> >);}
Haskell
join x = x >>= id
0396デフォルトの名無しさん
2015/02/03(火) 06:22:05.18ID:h89g7l/U>> 395
それってむしろ型クラス(と型推論)の手柄なんじゃ…
モナドって何が便利なんだろうね
俺はモナドという構造がプログラミング言語の中に案外たくさんあるから
型クラスを使って共通のインターフェースを与えることにしたみたいな解釈だけど
0397デフォルトの名無しさん
2015/02/03(火) 07:38:02.39ID:h23XZm3t0398デフォルトの名無しさん
2015/02/03(火) 07:48:06.09ID:uSJof6v6コメント指摘が不毛だと理解して指摘エントリを書く方向に移行したんだろうが
いい加減こいつも精神病臭い
0399デフォルトの名無しさん
2015/02/03(火) 10:06:10.15ID:HN01ei1Rコメントが・・・・・
0400デフォルトの名無しさん
2015/02/03(火) 10:35:21.65ID:QQGs8hUK0401デフォルトの名無しさん
2015/02/03(火) 11:34:05.28ID:TZB29Y9v0402デフォルトの名無しさん
2015/02/03(火) 13:16:42.41ID:BnkH9b9q0403デフォルトの名無しさん
2015/02/03(火) 15:33:40.99ID:7Y38tVHLそれで合ってるで
0404デフォルトの名無しさん
2015/02/03(火) 15:58:09.25ID:eQSyEZGw逆にメソッド名を書き型名を補完するのが正解だ
0405デフォルトの名無しさん
2015/02/03(火) 18:46:44.98ID:OMwCp+uVf1 . f2 . f3 $ f4 x
f1 $ f2 $ f3 $ f4 x
は結果は同じだけど
. の方はf1, f2, f3を合成してその関数にf4 xの結果を引数として渡す
$の方はf4 xの結果をf3に引数として渡してその結果をまたf2に引数として渡してその結果をf1に渡す
っていう認識てあってる?
0406デフォルトの名無しさん
2015/02/03(火) 19:41:27.86ID:3jCOO4gfinfixr 9 .
infixr 0 $
数字の大きい順に、この場合右側にある演算子から適用される
0407デフォルトの名無しさん
2015/02/04(水) 10:07:17.90ID:hySE26tsは左の $ から適用されるように感じるのですが病気ですか
0408デフォルトの名無しさん
2015/02/04(水) 10:45:04.37ID:nepGnRhU> モナドという構造がプログラミング言語の中に案外たくさんあるから型クラスを使って共通の
そういう共通構造ってモナドやアプリカティブの前にはどんなのがあったの?
それはもう出尽くしたの?それともまだあるの?
そもそも、出尽くしたかまだあるかというのはどうやって議論できるものなの?
0409デフォルトの名無しさん
2015/02/04(水) 11:57:57.66ID:u3Xbp/MM0410デフォルトの名無しさん
2015/02/04(水) 12:37:15.03ID:jjGZkBtHhttp://nmuta.dip.jp/~muta/tog301.pdf
0411デフォルトの名無しさん
2015/02/04(水) 19:14:52.43ID:m3L0Q0jhrc の方はなぜ fork されたのか説明したサイトはあるでしょうか。
0412デフォルトの名無しさん
2015/02/04(水) 19:15:30.17ID:acvc5+Js0413デフォルトの名無しさん
2015/02/04(水) 20:46:25.51ID:KyFvIE+ZHaskellで組み込みとか思考してた岡部究さんと誤認してほしくないので
フルネームで岡部健と書いて欲しい
0414デフォルトの名無しさん
2015/02/04(水) 21:44:46.77ID:fXvep0kf0415デフォルトの名無しさん
2015/02/04(水) 21:58:04.00ID:E92Eb1xr0416デフォルトの名無しさん
2015/02/04(水) 22:49:29.08ID:Deq+RQ930417デフォルトの名無しさん
2015/02/05(木) 00:48:41.41ID:gLl3//bvこのスレじゃなくてjavascriptのスレとかの方が相応しいんじゃないか
0418デフォルトの名無しさん
2015/02/05(木) 08:47:29.80ID:hD7mBKMO0419デフォルトの名無しさん
2015/02/05(木) 15:46:53.66ID:m9FY3Zygtanakahさんのなりすまし死ね!
0420デフォルトの名無しさん
2015/02/05(木) 18:45:12.27ID:1JCfxVIb0421デフォルトの名無しさん
2015/02/05(木) 18:53:28.45ID:blaXaOuCHaskellで組み込みとか思考してた岡部究さんと誤認してほしくないのでフルネームで岡部健と書いて欲しい
0422デフォルトの名無しさん
2015/02/05(木) 19:02:47.33ID:hSWQ8bee殺すぞ
0423デフォルトの名無しさん
2015/02/05(木) 19:11:56.01ID:FbWxCKGC0424デフォルトの名無しさん
2015/02/05(木) 20:33:01.70ID:qP5yT/o//::::::::::::.::::::::::::::::::::::::::::`::、、
/::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
ヽ:::: ´、ひ> ;: l .<ひ>' 、::::::::/
ヽ:::::  ̄ .)::; l  ̄ l::::/
、:::::.. /:::; .,-、 l:::/、
,―:::::::: ゝヽ- ー' 、 l::/,、ヽ
l,、,、,,:、:: / ,--、,-.、_ l /::::::,、,、l
l,、,、,、,、,、::、 `ー ̄-' /:::::::::::,、,、l
l,、,、,、,、,、,、::ヽ /::::::::、,、,、,、,ノ:\
l,、,、,、,、,、,、,、,、,,ー― ':::::::,、,、,、,/,、,、,、,、,`
/,、,、,、,、,、,、,、,、,、:::::::::::::::::::::::::::、,、、,、,、,、,、,、,、
0425デフォルトの名無しさん
2015/02/05(木) 20:44:40.03ID:4UwWdyPZ放射能プルームの直撃を受けた。空母は金属味を伴う生暖かい雲に包まれたが、飛行甲板では作業が続けられた」。
1月31日都内で開かれた「被ばく学習会」の呉東(ごとう)正彦弁護士の報告は衝撃的だった。甲板の汚染が一番
酷かったが、除染作業では防護服も付けていなかった。被ばくを知っていた上官はヨウ素剤を飲んだが、一般水兵には
配られなかった。米軍の報告書によれば、約5000人の水兵のうち約2000人に、呼吸器系・消化器系・妊娠異常・
甲状腺がんなど体の異常が出ている。そして、すでに2名の若い兵士が「骨膜肉腫」と「急性白血病」で死亡した。
水兵たちは若者が圧倒的で貧困層が多い。その人たちが放射能でやられてしまった。健康被害を受けると
働けなくなり、医療費を払えなくなる。切羽詰ったかれらがやむなく東電を相手に損害賠償(1200億円の基金創設に
よる補償)を求めて、2012年12月にサンディエゴ地裁に提訴した。最初に訴えたのは、甲板で勤務していた
リンゼイ・クーパーさん。27歳のシングルマザーで「ひどい鼻血・全身倦怠・甲状腺障害」に襲われたあと、
生理が半年に一回になり「不妊」と診断された。その後、「私も同じ」と名乗り出る人が増え、現在原告は239名に達している。
裁判はまだ始まったばかりで、東電側はさまざまな難癖をつけて、裁判の却下・引き伸ばしを画策してきたが、
昨年10月28日に東電の却下申し立てが否定され、米国南カリフォルニア連邦地裁で、本格的審理が始まることとなった。
「これはもう一つの被ばくで、日本国のどこよりも深刻な放射能被害が米兵の中に出ていることを知ってほしい。
裁判を応援してほしい」と呉東さんは結んだ。
0426靖国参拝、皇族、国旗国歌、神社神道を異常に嫌うカルト
2015/02/06(金) 10:19:39.33ID:3Na3mkxM・沢山の人が偏った意見を一貫して支持する
偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法
・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法
偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い
10人に一人はカルトか外国人
「ガスライティング」で検索を!....
0427デフォルトの名無しさん
2015/02/07(土) 20:42:56.34ID:jvjYgCCQコメントは行頭の -- 以外は認められないのでしょうか。
0428デフォルトの名無しさん
2015/02/07(土) 22:39:32.12ID:GsJmtuWsなんで公式なんを見んのや…。
0429デフォルトの名無しさん
2015/02/07(土) 23:32:03.78ID:jvjYgCCQ公式サイト https://www.haskell.org/cabal/ を見てるのですが、
探している情報を見つけられません。
どのリンクを辿ればよいのでしょうか。
0430デフォルトの名無しさん
2015/02/07(土) 23:44:05.43ID:jvjYgCCQやっと見つけました。
公式サイトトップの [User's Guide] から Cabal User Gude のページへ行って、
そこの What's in Package の節の最後にある [developing packages] から
Cabal User Guie: Developing Cabal packages へ行くと、
求めていた情報がありました。
分かりにくいですね。
0431デフォルトの名無しさん
2015/02/08(日) 10:09:58.72ID:y5e+HqvL0432デフォルトの名無しさん
2015/02/08(日) 17:34:23.00ID:XnSvUQKs関数と言うもの自体がよくわからない。中学生向けの関数の教材とか
をやったほうがいいかんじ?。初歩の数学的知識がないとだめなのかな。
0433デフォルトの名無しさん
2015/02/08(日) 18:09:59.77ID:y5e+HqvL他の言語の知識を仮定してないやつなら「関数とは何か」から解説してると思う
0434デフォルトの名無しさん
2015/02/08(日) 18:31:14.58ID:XnSvUQKsなんかワクワクしてきた。準備して楽しんでくるよ。
0435デフォルトの名無しさん
2015/02/08(日) 19:43:34.86ID:GJ4+6x6Q中学や高校までの数学と論理的には独立してる話なのだが
0436デフォルトの名無しさん
2015/02/08(日) 19:58:40.71ID:vtzL8Kp1関数も中学レベルの理解で足りるし
0437デフォルトの名無しさん
2015/02/08(日) 20:02:25.85ID:SGYTxz30「あるxに対して、yがただ一つ定まる時、yはxの関数である」
って説明。
関数というものの本質を簡潔かつ的確に捉えていていい説明だと思うんだけど、
大体ノートに文言書き写しただけで、掘り下げられることなく先に進んじゃうのよね
0438デフォルトの名無しさん
2015/02/08(日) 20:09:34.19ID:SGYTxz30○「xの値を定めると、yがただ一つ〜」
でした。すまそ
0439デフォルトの名無しさん
2015/02/08(日) 20:30:14.38ID:skbJjy5yって小学校で教えられたっけな
0440デフォルトの名無しさん
2015/02/08(日) 21:11:45.53ID:RjWbtoq/ローカル変数を知らない人が再帰やλ式を理解できる?
0441デフォルトの名無しさん
2015/02/09(月) 00:04:53.73ID:AazwEOnB0442デフォルトの名無しさん
2015/02/09(月) 00:21:56.99ID:dbXbgnkdで、数学勉強すればいいのか何て思ってはいけない。HaskellやれHaskell。
すごいhaskellとかふつうのhaskellとか買って書いてあることをやればいい。
英語が読めるならRealWorldHaskellがオンラインで読める。
モナドやら圏論を勉強させたがる奴に出くわすだろうが、無視して構わん。邪魔なだけ。
ゲンミツなギロンとやらがしたい馬鹿は放っとけ。
0443デフォルトの名無しさん
2015/02/09(月) 00:28:40.73ID:WXDYRMWKオブジェクト指向の為に生物学を始めるようなもの
そうか‥‥
0445デフォルトの名無しさん
2015/02/09(月) 01:07:10.43ID:0cXvK/Rb型レベルのプログラミングを弄ろうとすると必要になってくるけどな。
0446デフォルトの名無しさん
2015/02/09(月) 01:16:46.95ID:Wxg28sUk0447デフォルトの名無しさん
2015/02/09(月) 03:12:39.58ID:cnpUeik30448デフォルトの名無しさん
2015/02/09(月) 07:51:47.11ID:cxy5oANg欠陥人間君
0449デフォルトの名無しさん
2015/02/09(月) 08:20:50.08ID:S2TfdUS9すごいHaskellは今日の夜には届くはず。
要するに、とりあえずはじめろ、いきづまったら調べろ
ってことだよな。
はじめるまえに何か必要だったかどうかが気になって
たんだけど、助かったよ。
ブラウザで、勉強する程度のプログラム環境そろえられるようだし
楽になったね。
0450デフォルトの名無しさん
2015/02/09(月) 08:22:20.34ID:8SvV/M2E0451デフォルトの名無しさん
2015/02/09(月) 09:16:28.20ID:KO64xtRG0452デフォルトの名無しさん
2015/02/09(月) 10:42:31.95ID:C/Xqp5ET無くなったの?要らなくなったの?別物になったの?完全に解決されたの?
副作用が関係するモナドって、IOモナドだけ? 状態モナドも? その他の
モナドは副作用と関係ないの?
0453デフォルトの名無しさん
2015/02/09(月) 11:00:47.06ID:0cXvK/Rb暗黙に引き渡せば副作用を持つ不純な関数(ないし手続き)。
明示して引数で持ち回る純粋な関数の
引数部分を隠蔽したのがモナド。
だからモナドは手続きと同じ構造を持つというだけ。
リストモナドの非決定性計算を副作用と考えるような「副作用」の定義に拠るなら、
全てのモナドは副作用を扱っている(が、そう考えても別に役には立たない)。
0454デフォルトの名無しさん
2015/02/09(月) 11:02:59.77ID:cnpUeik3しつこいよ
0455デフォルトの名無しさん
2015/02/09(月) 11:05:46.42ID:cnpUeik3どこが自然な流れだ
0456デフォルトの名無しさん
2015/02/09(月) 11:30:41.67ID:C/Xqp5ETサンクスだが、まず文章レベルで不明点がいくつかある。一つ一つ聞きたい。
> 明示して引数で持ち回れば純粋な関数、
何を明示?何が持ち回れば?
要するに、型がA->Bなのは純関数と言ってる?
> 暗黙に引き渡せば副作用を持つ不純な関数(ないし手続き)。
型がA->MBなのは不純関数と言ってる?
> 明示して引数で持ち回る純粋な関数の
> 引数部分を隠蔽したのがモナド。
A->MBのMがモナドだと言ってる?
> だからモナドは手続きと同じ構造を持つというだけ。
この後とも関係するが、IOモナドは手続きっぽいが、
リストは手続きではないよね。
> リストモナドの非決定性計算を副作用と考えるような「副作用」の定義に拠るなら、
> 全てのモナドは副作用を扱っている(が、そう考えても別に役には立たない)。
リストをなぜわざわざ非決定性なんて呼ぶの?値が複数あるだけだね?
非決定性計算をなぜ副作用と呼ぶの?純関数は非決定的ではないから、
というなら、「副作用」って「不純」と同義に使っているのかな?
0457デフォルトの名無しさん
2015/02/09(月) 12:02:04.55ID:/ejTkxKzモナドによって副作用を起こす処理は>>=の中に隠蔽する事が出来た。
>>=の第一引数でどんな副作用を起こすのか指示を出す事が出来る。
>>=は副作用を持つように実装しなければいけない訳ではなく、リストモナドやMaybeやEitherのように処理の構造を表すことも出来る。
そしてモナドは概ね『副作用・状態系』と『処理構造系』に分かれる。
副作用・状態系で代表的なモナドはIO、ST、State、Reader、Writer
処理構造系で代表的なモナドはMaybe、Either、リスト
他にもあるけど、この辺が分かれば分かる
0458デフォルトの名無しさん
2015/02/09(月) 12:14:14.36ID:0cXvK/Rb> 何を明示?何が持ち回れば?
蓄積引数使って末尾呼び再帰にする場合を考えればわかる。
> 型がA->MBなのは不純関数と言ってる?
そうではない。それだけではそのmは単にbを取る型構築子に過ぎない。
IO bの実体はRealWorld -> (b, RealWorld)という純粋な関数だ。
だが、このRealWorldは隠蔽されており、IOの外側からはアクセスできない。
隠蔽された引数の受け渡しと処理を裏で行い隠蔽し続けるのがモナドの役割。
> この後とも関係するが、IOモナドは手続きっぽいが、
> リストは手続きではないよね。
モナドはいわゆる手続きと同じ構造を持つが、他のものと同じ構造を持つことも妨げられない。
> リストをなぜわざわざ非決定性なんて呼ぶの?値が複数あるだけだね?
数学的な意味での関数は複数の値を直接に返すことはできない。
そこで、A型の値を複数同時に返したければ冪集合P(A)型の値をひとつ返す、と考える。
明示的にP(A)型を扱う計算を書いてもいいのだが、余りに面倒なので
P(A)に対する計算をAに対する計算から組み立てる構造を提供するのが
リストモナドの役割だ。
> 非決定性計算をなぜ副作用と呼ぶの?純関数は非決定的ではないから、
> というなら、「副作用」って「不純」と同義に使っているのかな?
そういう流儀があるというだけの話。
CS研究者でないなら、クライスリ圏の射なので〜云々、とか気にしてもしょうがない。
0459デフォルトの名無しさん
2015/02/09(月) 12:16:31.84ID:0cXvK/Rb結局は同じことなのだが、まあ余計な話だ。気にするな。
0460デフォルトの名無しさん
2015/02/09(月) 13:10:07.32ID:C/Xqp5ET> それだけではそのmは単にbを取る型構築子に過ぎない。
えっ、型構成子に過ぎないんじゃないの?
> IO bの実体はRealWorld -> (b, RealWorld)という純粋な関数だ。
「a -> IO bの実体は、a -> (b, RealWorld)という純粋な関数とみることができる」?
> だが、このRealWorldは隠蔽されており、IOの外側からはアクセスできない。
「だが、このRealWorld(=IO)を入力値にもつ関数は文法的に禁止されている」?
> モナドはいわゆる手続きと同じ構造を持つが、
「モナドはいわゆる手続きと同じ構造を持つことができるが、」?
> 数学的な意味での関数は複数の値を直接に返すことはできない。
そう? 値域が直積型の関数でいいんじゃない? ああ後ろに冪集合P(A)型の値
と書いてるけど、これでもいいし。細かくてスマンな
0461健論
2015/02/09(月) 14:27:13.69ID:Z8j1LvoC/::::::::::::.::::::::::::::::::::::::::::`::、、
/::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
ヽ:::: ´、ひ> ;: l .<ひ>' 、::::::::/
ヽ:::::  ̄ .)::; l  ̄ l::::/
、:::::.. /:::; .,-、 l:::/、
,―:::::::: ゝヽ- ー' 、 l::/,、ヽ
l,、,、,,:、:: / ,--、,-.、_ l /::::::,、,、l
l,、,、,、,、,、::、 `ー ̄-' /:::::::::::,、,、l
l,、,、,、,、,、,、::ヽ /::::::::、,、,、,、,ノ:\
l,、,、,、,、,、,、,、,、,,ー― ':::::::,、,、,、,/,、,、,、,、,`
/,、,、,、,、,、,、,、,、,、:::::::::::::::::::::::::::、,、、,、,、,、,、,、,、
0462デフォルトの名無しさん
2015/02/09(月) 14:42:55.11ID:nsz9u5Yhこれ面白いよね
副作用を排除する代わりに再帰を使ってTuring completeになるんだけど
Turing completeってことは結局なにも排除されていないんじゃないかと
0463デフォルトの名無しさん
2015/02/09(月) 15:21:18.12ID:05bgzRUC> 「a -> IO bの実体は、a -> (b, RealWorld)という純粋な関数とみることができる」?
ちがくね?
そういう書きかたしたいなら,
「a -> IO bの実体は,a -> RealWorld -> (b, RealWorld)という……」じゃね?
0464デフォルトの名無しさん
2015/02/09(月) 15:42:59.21ID:C/Xqp5ETわかった。
a ->IO -> (b,IO) でもいい?
それで、
結局、モナドによって、副作用はなくなったのあるの?
参照透明性は確保されたのされていないの?
0465デフォルトの名無しさん
2015/02/09(月) 15:50:01.05ID:nsz9u5Yhイベント駆動と同じ
コールバック関数を作る権限はあるがイベントを起こす権限がないので副作用が起きない
0466デフォルトの名無しさん
2015/02/09(月) 16:58:51.32ID:05bgzRUC> a ->IO -> (b,IO) でもいい?
俺は詳しくないから合ってるかわからないけど,
IOって,それだけでは(IO ナントカ にしないと)型そのものじゃないよね?
でもここで仮に書いてるRealWorldというのは「『現実世界全体』を表すデータ」の型なんじゃないのか
0467デフォルトの名無しさん
2015/02/09(月) 18:19:55.19ID:0cXvK/Rb>値域が直積型の関数でいいんじゃない? ああ後ろに冪集合P(A)型の値
>と書いてるけど、これでもいいし。細かくてスマンな
返ってくる値の個数自体が非決定的なので単なる直積では上手くいかない。
いずれにせよ、リストモナドは冪集合関手に対応しているということを述べたまで。
0468デフォルトの名無しさん
2015/02/09(月) 18:31:06.00ID:0cXvK/Rb>結局、モナドによって、副作用はなくなったのあるの?
>参照透明性は確保されたのされていないの?
副作用は純粋な枠組によって「表現」されているに過ぎない。
それをあるというかないというかは自由だ。
ZF集合論上にペアノ算術を構築できるところで、
「集合論の中には結局のところ自然数があるの? ないの?」
という問いと似たようなもので、たいした意味はない。
0469デフォルトの名無しさん
2015/02/09(月) 20:30:54.38ID:tNNwE3JC>参照透明性は確保されたのされていないの?
隔離されて実行を後回しにされてるだけだからmainの内側の世界として見れば副作用は起こらない
実行環境含めての話ならそりゃ当然ある
じゃないと何の役にも立たない
0470デフォルトの名無しさん
2015/02/09(月) 20:42:49.23ID:C/Xqp5ETどういうことか教えてくれ。
何から何が隔離されてる? 後回し?
0471デフォルトの名無しさん
2015/02/09(月) 20:46:45.06ID:DixNi1JA参照透明性は保たれている。副作用は副作用の定義による。
0472デフォルトの名無しさん
2015/02/09(月) 20:57:42.72ID:0cXvK/Rb>実行環境含めての話ならそりゃ当然ある
>じゃないと何の役にも立たない
side-effectsという概念は個々の特定の意味論の内部でのみ意味を持つ。
実行環境について「副作用」がある、と主張するのは端的な範疇錯誤だ。
0473デフォルトの名無しさん
2015/02/09(月) 20:57:55.50ID:NeCNZel9なので、一つのモナドに対して一つ計算効果というか副作用(?)が伴う。
ていうか、混乱は副作用(side-effect)という用語をつかっているからだ、
計算効果(computational effect)使え。
なんかよくわからん『計算』という概念をとりあえずモナドで定式化
してみましたって話なんだから。
0474デフォルトの名無しさん
2015/02/09(月) 21:09:45.06ID:C/Xqp5ET> 参照透明性は保たれている
ていうか、純関数でないようにしたので「参照透明性がない」と指摘できなくなった、
というのが正しいのでは?
>>473
計算効果≒副作用というんだから、モナドではもちろん副作用がある、ということね?
0476デフォルトの名無しさん
2015/02/09(月) 21:43:08.57ID:CiRoFONAテーブルの列に Haskell の Day 型と Int 型があり、
毎月の合計を出したいです。
そのために、Day 型の値の年と月で groupBy や orderBy したいのですが、
どのようにすればよいでしょうか。
0477デフォルトの名無しさん
2015/02/09(月) 23:53:37.23ID:NeCNZel9モナドでは副作用はあるかどうかというか、その副作用もとい計算効果を定式化するためのものだよ。
だから、a -> m b 型の関数は何か計算効果(副作用、非決定計算、継続etc...)を持つというのが正しい。
0478デフォルトの名無しさん
2015/02/09(月) 23:55:35.56ID:bwEZbR4B0479デフォルトの名無しさん
2015/02/10(火) 00:33:51.16ID:nZohWp9h0480デフォルトの名無しさん
2015/02/10(火) 08:56:04.72ID:SJUUXy/5これも参照透明性は保たれてることになるの?
0481デフォルトの名無しさん
2015/02/10(火) 09:38:20.27ID:wjh+ePZc0482デフォルトの名無しさん
2015/02/10(火) 10:15:51.98ID:nZohWp9hいやそらとっくの昔に読んだのでいまさら感想も何も、内容はワリとそのまま
(純粋な関数ならAが値域になるような)様々な計算の様態を
非停止性計算:⊥の追加によるリフティング A∪{⊥}
非決定性計算:ベキ集合 P(A)
副作用:記憶域の集合Sに対して (A × S)^S
例外:(A+E)
継続:結果の集合Rに対して R^(R^A)
などと構成して、関手や対応する自然変換やそういうのをまとめて
Kleisli Triple, Monadとして構成できるよ、というだけの話なんだが。
0483デフォルトの名無しさん
2015/02/10(火) 10:38:47.68ID:wjh+ePZcまる写しやん。そんなん皆知ってるよ
ここは、あんたの味付けで言う場所やでw
0484デフォルトの名無しさん
2015/02/10(火) 10:42:59.32ID:nZohWp9h味付けなんかいらんだろ。正確にそのまま読みゃいいだけだ。
プログラム項の表示はKleisli Tripleで与えられるよ、ってだけなんだから。
0485デフォルトの名無しさん
2015/02/10(火) 11:02:55.54ID:wjh+ePZc0486デフォルトの名無しさん
2015/02/10(火) 11:42:52.80ID:wjh+ePZc参照透明性ていうのは、式表現あるいは言語についていう性質。
チューリング機械はそういうものじゃないよね(。。。と思うのだが)
0487デフォルトの名無しさん
2015/02/10(火) 15:46:42.74ID:9CApkSQv0488デフォルトの名無しさん
2015/02/10(火) 19:54:14.49ID:wjh+ePZc何言ってるのw
0489デフォルトの名無しさん
2015/02/10(火) 20:23:30.53ID:jjYGyJgg2. モナドであることの条件にコンストラクタの隠蔽なんて無い
以上のことから、モナド「だから」純粋関数型で副作用を使える、何てのは世迷い言だと分かる。
コンストラクタが隠された型の中にアクセスする方法として何が許容できるか、という問題があって、
a -> IO bという関数ならいいだろう(>>=, return)、(a -> b) -> (IO a -> IO b)もいいだろう(fmap)、
IO型以外にも色々使えるから共通化しよう(Monad, Functor, Applicative)、って発展してきた。
モナドモナド連呼すんなよ。モナドが存在しなくてもIOは役目を果たせる。
0490デフォルトの名無しさん
2015/02/10(火) 20:47:16.14ID:19+gjHNtその頃のHaskellは全く知らないけど
0491デフォルトの名無しさん
2015/02/10(火) 21:01:23.39ID:Y9PoDGJyイベントループを公開してもしなくても目的は達成できますよ
0492デフォルトの名無しさん
2015/02/10(火) 21:13:17.70ID:mzLpLH75計算の概念がモナドになるんじゃなくて、モナド M を使ったときの a -> M b 型の関数に、計算を抽象化して扱うと便利ということ。
0493デフォルトの名無しさん
2015/02/10(火) 21:15:02.37ID:mzLpLH75>まる写しやん。そんなん皆知ってるよ
あなた以外の人がほとんど理解できてないからこのスレがずっと続いてるんだが。
0494デフォルトの名無しさん
2015/02/10(火) 21:50:25.53ID:2TtYwZaSおれもそれぐらいは結構な人が知っとると思うぞ。
Moggiは計算の概念というものをモナドで定式化して、計算効果というものはモナドで
取り扱われるものだということになった。それで計算効果と副作用を混同しているから
現在混乱中ということじゃん。
0495デフォルトの名無しさん
2015/02/10(火) 22:05:15.28ID:JohjsGmAEsqueleto について質問です。
select $ from $ \r -> do
orderBy [asc <ここ>]
groupBy (<ここ>)
return <ここ>
r が指すテーブルに date (sql) 型の列があるとして、
<ここ>でその年や月だけを指定することはできるのでしょうか?
postgresql で言えば to_char、mysql で言えば date_format による変換です。
(本当は文字列型ではなく数値型で得たいのですが、共通関数がなく、
最大公約数的機能を提供するライブラリでは無理そうなので諦めます)
どこも SqlExpr (Value a) 型が要求される所です。
これが Value a 型だけであれば toGregorian 関数を fmap してみるのですが、
SqlExpr の中なのでそれもできません。
なにか方法はないでしょうか。
0496デフォルトの名無しさん
2015/02/10(火) 22:13:27.69ID:wjh+ePZcなんか曖昧な言い方だったのでスルーしてた
イベント駆動と今の問題がどう関係するか、すまんが少し説明してくれんか
0497デフォルトの名無しさん
2015/02/10(火) 22:53:48.05ID:Y9PoDGJyモナド動物園が嫌なら継続以外は無視していい
0498デフォルトの名無しさん
2015/02/10(火) 23:40:33.95ID:wjh+ePZc何言ってるの?
0499デフォルトの名無しさん
2015/02/10(火) 23:43:19.10ID:FuAhwWmu0500デフォルトの名無しさん
2015/02/10(火) 23:49:33.22ID:2TtYwZaSモナドになったんだっけか。あれは確かに他と毛色が違う。
0501デフォルトの名無しさん
2015/02/11(水) 00:14:34.50ID:BNTMxspI0502デフォルトの名無しさん
2015/02/11(水) 00:27:08.75ID:XbF0Kw7B0503デフォルトの名無しさん
2015/02/11(水) 00:33:23.05ID:+jnuF4cU>postgresql で言えば to_char、mysql で言えば date_format による変換です。
よくわからんがpostgresql でもmysql でもwhere句の出番ではないのかね?
0504デフォルトの名無しさん
2015/02/11(水) 00:39:07.16ID:4qKDFlQMライブラリは丸投げして型の話ばかりすればいい
0505デフォルトの名無しさん
2015/02/11(水) 10:00:45.87ID:PH3lpTx+たとえば下記のテーブル record において amount 列を月毎に集計したいです。
date (date) amount (integer)
2014-12-05 6
2014-12-21 53
2015-01-18 41
・・・
Haskell の persistent ライブラリのテンプレートで定義したテーブルの型は以下です。
Record
date Data.Time.Callendar.Day
amount Int
私が普段使っているのは PostgreSQL ですが、それだと、たとえば次のように書けます。
(他にも様々な書き方があると思います)
select date_part('year', date) as y, date_part('month', date) as m, sum(amount) from record group by y, m;
Hakell の esqueleto ライブラリには groupBy 関数があるので実現できるかと思ったのですが、
なかなかできません。
ちなみに、persistent ライブラリには group by に相当する機能が無さそうです。
0506デフォルトの名無しさん
2015/02/11(水) 21:35:53.91ID:zQ7E6eZT0507デフォルトの名無しさん
2015/02/11(水) 22:22:42.90ID:4qKDFlQM0508デフォルトの名無しさん
2015/02/12(木) 08:57:25.23ID:un2yYeN8これはもう何を読んだなんてのは役に立たないだろ
0509デフォルトの名無しさん
2015/02/12(木) 09:44:01.87ID:R1haaHt01.モナドではコクライスリ射を表せない。
2.モナドでは扱えず、Arrowでは扱える構造がある。
0510デフォルトの名無しさん
2015/02/12(木) 13:23:40.75ID:nS1JglfS出版化の話、本当だったのかな
0511デフォルトの名無しさん
2015/02/12(木) 14:10:27.30ID:FbfONYzU具体例もお願いします。
0512デフォルトの名無しさん
2015/02/12(木) 14:42:57.47ID:un2yYeN8じゃコクライスリ射とArrowの限界もよろしく
0513デフォルトの名無しさん
2015/02/12(木) 18:16:05.24ID:euATx8Od0514デフォルトの名無しさん
2015/02/12(木) 18:49:59.46ID:IwOzVJKUHaskellの話じゃないな
0515デフォルトの名無しさん
2015/02/12(木) 19:07:53.59ID:VxBYzqAD0516デフォルトの名無しさん
2015/02/12(木) 21:20:12.59ID:/vHxcq1E0517デフォルトの名無しさん
2015/02/12(木) 21:24:03.68ID:foplnmKa0518デフォルトの名無しさん
2015/02/12(木) 21:28:18.97ID:iIxu3vyf俺もこれ
すごいH本読めば使えるようになる?
0519デフォルトの名無しさん
2015/02/12(木) 21:35:34.69ID:un2yYeN8俺もこの率直な質問への答えを是非知りたい。
よくわかってる人、よろしくお願いします
0520デフォルトの名無しさん
2015/02/12(木) 21:45:10.69ID:KWSicAie0521デフォルトの名無しさん
2015/02/12(木) 21:51:22.54ID:MUCqRjWX0522デフォルトの名無しさん
2015/02/12(木) 23:41:25.31ID:5uF1Brmxそんな主張は、まだ聞いたことがないけれども。
0523デフォルトの名無しさん
2015/02/13(金) 00:59:16.00ID:A3Gi/Piy0524デフォルトの名無しさん
2015/02/13(金) 08:06:33.21ID:AoemimAk出版化おめでとう
0525デフォルトの名無しさん
2015/02/13(金) 08:55:04.65ID:NYzmQwezdo式とモナドの関係に慣れる
fmapとjoinとモナドの関係に慣れる
コンビネータとモナドの関係に慣れる
0526デフォルトの名無しさん
2015/02/13(金) 12:29:52.54ID:xd3XbIQhもっと気の利いたこと言ってくれんかな
慣れた結果、何がどう見えたとか
0527デフォルトの名無しさん
2015/02/13(金) 12:41:48.68ID:3xGLNuZO回答も曖昧になる
0528デフォルトの名無しさん
2015/02/13(金) 14:51:48.25ID:F6tqu9mtKindleで誰か出してくれ
499円までなら買う
0529デフォルトの名無しさん
2015/02/13(金) 14:53:05.59ID:P1PmZa4b0530デフォルトの名無しさん
2015/02/13(金) 15:15:54.10ID:uTTl3Z2w慣れた結果ここでの議論は対して意味がないことがよく分かった
0531デフォルトの名無しさん
2015/02/13(金) 18:04:17.07ID:H7QLdU03こないだも話に上がってたけど、そこらへんの基本的なクラス (のメソッド) はある種の構文みたいなもんだからさ、
馴染む馴染まないとかじゃなくて「そういうもの」としか言い様がないものなんだよ。
圏論的な意味付けはあるにしても、プログラム上でどう使うかってのは感覚でしかない。
感覚で捕めないならどうしようもないと思うぞ。
0532デフォルトの名無しさん
2015/02/13(金) 19:03:21.60ID:uBgFBaOB使う側で適宜持ちあげればいい
0533デフォルトの名無しさん
2015/02/13(金) 19:14:38.14ID:mocLL0Pr0534デフォルトの名無しさん
2015/02/13(金) 19:31:37.01ID:UmC4xcKhこれ516だとしたらこんな偉そうな初心者久しぶりに見た
一周して感動した
0535デフォルトの名無しさん
2015/02/13(金) 20:47:07.31ID:xPIz8exnコンピュータに向かって偉そうにしても無意味だし
自分の能力が無意味になる危険な環境に自分で飛び込める者はほとんどいない
0536デフォルトの名無しさん
2015/02/14(土) 07:14:24.55ID:1FeZK1b6毛の壁テックライティング
http://kenokabe-techwriting.blogspot.com/
0537デフォルトの名無しさん
2015/02/14(土) 09:42:45.44ID:nmwmE6a/0538デフォルトの名無しさん
2015/02/14(土) 10:26:02.68ID:0ZlnTsnN0539デフォルトの名無しさん
2015/02/14(土) 13:22:06.02ID:DZcH80vK最初からそうやって自分のシマで大人しくしてりゃよかったんだよ、奴は。
それなら電車の中で奇声上げてる奴と同じだから、たいした実害はない。
0540デフォルトの名無しさん
2015/02/14(土) 14:34:42.82ID:+bNdvInf0541デフォルトの名無しさん
2015/02/14(土) 17:38:51.42ID:WvrbmW0cここがあの男のハウスね
0542デフォルトの名無しさん
2015/02/14(土) 18:46:40.12ID:Uq/j291/0543デフォルトの名無しさん
2015/02/14(土) 21:55:24.08ID:Qr913xpa0544デフォルトの名無しさん
2015/02/15(日) 00:31:24.02ID:0xshxCvz0545デフォルトの名無しさん
2015/02/15(日) 01:28:36.15ID:878+Ygr50546デフォルトの名無しさん
2015/02/15(日) 11:30:03.75ID:RqL4UUkJあの連載楽しみにしてたのに
0547デフォルトの名無しさん
2015/02/15(日) 12:27:19.89ID:+YnK72sf0548デフォルトの名無しさん
2015/02/15(日) 13:32:12.30ID:OItNZOt1たとえば以下のディレクトリ構造において、
MyApp
src
Main.hs
rest
Main.hs
MyApp/src/Main.hs ファイルに書かれた関数の QuickCheck によるテストを、
MyApp/teat/Main.hs ファイル内で行いたいとします。
両 hs ファイルともモジュール名は Main です。
この場合、MyApp/test/Main.hs 内で MyApp/src/Main.hs の Main モジュールをインポートしなければなりませんが、
当然 import Main とはできません。
MyApp/test/Main.hs のビルド時に -i オプションで src を指定したとしてもです。
このようなことは不可能でしょうか。
どちらかのモジュール名を変えなければならないでしょうか。
0549デフォルトの名無しさん
2015/02/15(日) 13:55:32.40ID:wBiS0f8f0550デフォルトの名無しさん
2015/02/15(日) 14:05:49.04ID:4E0eOoQ3別名でインポートしたり特定の関数だけインポートしたりできる
0551デフォルトの名無しさん
2015/02/15(日) 14:49:52.15ID:OItNZOt1別名でインポートはどのようにするのでしょうか。
インポートしたモジュールに as で別名をつけるのは分かるのですが。
ghc のオプションを import をキーワードにして検索してみましたが、それらしいものは見あたりませんでした。
0552デフォルトの名無しさん
2015/02/15(日) 20:24:26.84ID:FfuFe8/jimport "パッケージ名" Main
これでどうかな
0553デフォルトの名無しさん
2015/02/15(日) 20:27:13.04ID:FfuFe8/jGHC拡張のPackageImportsでこの構文が有効になるの忘れてた
0554デフォルトの名無しさん
2015/02/15(日) 22:43:37.52ID:OItNZOt1私の場合はパッケージではなくファイルです。
それでも PackageImports を試してみましたが、
やはりファイル名では機能しませんでした。
もちろん相対パス、絶対パスなどいろいろ試しました。
0555デフォルトの名無しさん
2015/02/15(日) 23:39:19.63ID:+UNfo90q一つのパッケージには同名モジュールは一つしか存在できない
パッケージ分けるか、モジュール名を変えてTest.Mainとかにするか
(Cabalのtestsuit機能を使うと自然にパッケージを分けられるけど、ライブラリ向け)
0556デフォルトの名無しさん
2015/02/15(日) 23:41:08.16ID:UCc7idSHモジュール宣言してimport Mainかな
>>554
ネットの情報で横着しないで入門書読みましょう
最初の言語にHaskellを選ぶのはやめましょう(JSは数に入れない)
0557デフォルトの名無しさん
2015/02/16(月) 00:13:27.53ID:XZPRSHCGいやそのモジュール名が重複してるんだよ
>ネットの情報で横着しないで入門書読みましょう
こういう処理系寄りの事情が詳しく書いてある入門書あったっけ
>最初の言語にHaskellを選ぶのはやめましょう(JSは数に入れない)
なんで?
0558デフォルトの名無しさん
2015/02/16(月) 00:45:29.13ID:eNydMXDW重複させないのは当然だしすでに書かれてるので
>ネットの情報で横着しないで入門書読みましょう
ふつけるあたりから入ればよろしいかと
>最初の言語にHaskellを選ぶのはやめましょう(JSは数に入れない)
一般的な言語共通の概念に加えて独特な構文や難解な概念がある言語を
モジュールを重複させないような共通事項もわからないうちから覚えようとしても迂遠ですから
免許取って最初に買う車にスポーツカーを選ぶようなものでしょう
実際エンスト(モジュール重複)させてますし
0559デフォルトの名無しさん
2015/02/16(月) 00:59:07.67ID:XZPRSHCG>一般的な言語共通の概念に加えて独特な構文や難解な概念がある言語を
それは大抵の言語に言えることで、Haskellを特別扱いする理由にならんだろ
例えば、クラスを使うオブジェクト指向言語だと、それ関連の言語要素が大量にあったりする
もちろんHaskellにも難しいところはあるけど、総合的に見たら、
例えばJavaと比べてそんなに習得が難しいわけではないと思う
0560デフォルトの名無しさん
2015/02/16(月) 01:06:24.51ID:fGaWs66b0561デフォルトの名無しさん
2015/02/16(月) 01:23:47.08ID:9WtMuENrすでにJavaに慣れてるならいいけどJava相当も使えないうちにHaskellは厳しい
初心者が静的型やモジュール化のような基礎を覚えるのにシンプルな言語を使わずにわざわざ
必要もないのにHaskellを使って難解にする意味なんてないでしょう
0562デフォルトの名無しさん
2015/02/16(月) 01:31:17.39ID:HZ3a9vah分かりやすいしhaskellの良い所が取り入れられててhaskellを学びやすくなる
0563デフォルトの名無しさん
2015/02/16(月) 03:27:20.60ID:eoKRu0t80564デフォルトの名無しさん
2015/02/16(月) 04:09:33.63ID:vEgulV7R単純ならわかり易いかっていうとそんなことはないし、機能が多ければ使い勝手がいいかっていうとそんなこともない。
当人の知識背景やメンタルモデルに強く強く依存する。
言語が何であっても駄目な奴もいるし、どれでも問題なく使いこなせるやつもいる。
0565デフォルトの名無しさん
2015/02/16(月) 13:04:57.92ID:Y6hvsGf9教育用にPythonの採用が進んでる現実が何より雄弁
0566デフォルトの名無しさん
2015/02/16(月) 20:01:09.04ID:2R4X9DVo>>563 も言われているように、実際はこの質問をする前から、
すでに片方のモジュール名を変えて作業を進めています。
その上であえて質問したのは、将来のためです。
今回のような状況でもビルドできる機能が提供されているのなら、
次回からはそれぼど気にしなくても良くなりますし、
機能が無いのなら気をつけなければなりません。
つまり、機能があるか無いか、という単純な質問のつもりでした。
今思えば、この一言が足りなかったです。
(言っていれば、無い、の一レスで済んだはずです)
すいませんでした。
それで結局のところ、同名でもインポートできるような機能は無い、という結論ですね。
みなさんありがとうございました。
ちなみに今回は、たまたまアプリのソースの方に Model モジュールを作るつもりで、
それのテストプログラムのモジュールも Model にしてみたところ、
そう言えば同名モジュールのインポートはどうするのだろう?
と疑問を持ったということです。
以前までは、テストプログラムの方は ***Test という名前を付けていました。
しかし、test ディレクトリ下にあるものはテスト用であることは分かりきっており、
名前に Test と付けるのは冗長だと思って今回外してみたのですが、失敗でした。
0567デフォルトの名無しさん
2015/02/16(月) 20:05:37.76ID:01EauvRn0568デフォルトの名無しさん
2015/02/16(月) 20:37:17.58ID:E3Wb5l2+本当は静的型付けが難しい
0569デフォルトの名無しさん
2015/02/16(月) 20:50:35.70ID:rA4Zqik80570デフォルトの名無しさん
2015/02/16(月) 20:55:23.16ID:3o6cJtsbジェネリックを気軽に使えて寿命の異なるインスタンスを管理できれば十分?
0571デフォルトの名無しさん
2015/02/16(月) 21:17:39.67ID:E3Wb5l2+変数が嫌いってことか
>>487
関数 f が参照透明とは任意の定数 e に対し式 f e が定数または⊥ か?
0572デフォルトの名無しさん
2015/02/17(火) 00:19:12.32ID:hDqD0gSfモダンなプログラミング言語には、「階層的な名前空間」という概念がある
大規模開発における名前の衝突という問題は、この名前空間を利用することによって回避できる
名前空間は、たとえば Java ではパッケージと呼ばれ Ruby ではモジュールと呼ばれている
今回のケース(>>548)は、たとえば Java であれば2つのパッケージ src と test を定義すれば、
たとえ2つのパッケージ内に同名のメソッドが存在しても両者を識別できる
そして結論を言えば、残念ながら:
「Haskell には(Java のパッケージに相当する)階層的な名前空間は存在しない」
となる
0573デフォルトの名無しさん
2015/02/17(火) 01:07:39.64ID:qdPyOS6qハッシュテーブルには実行時コストがあるから嫌いとか言うから複雑になるんだよな
0574デフォルトの名無しさん
2015/02/17(火) 01:32:25.24ID:S1EZRPwGテストのほうのモジュール名を Test.Model として、
MyApp/src/Model.hs
MyApp/src/Test/Model.hs
というように置けばいいことは分かってる?
>>572
何言ってるの?
0575デフォルトの名無しさん
2015/02/17(火) 07:51:13.18ID:1FfSFTEJモジュールを階層構造にする方法は知っています。
よく使います。
ただ、私はテスト用のファイルは test ディレクトリに入れるようにしています。
src には実際のアプリケーションを構築する資源(source)しか入れません。
このルールを一貫して採用しているため、Test.Model という解決方法は、
名前の冗長さという点では、***Test という名前にする方法と大して変わりません。
階層に別れて整理されるかもしれないので、その点では若干アドバンテージがあるかもしれません。
今回はもうすでに開発がかなり進んでしまっているので、モジュール階層を変えるのは困難ですが、
リファクタリングの際や次回の検討候補にはします。
0576デフォルトの名無しさん
2015/02/17(火) 08:38:34.65ID:6bJVPK1Fなるほど。それはまともな理由ですね。
cabal を使っているなら
https://www.haskell.org/cabal/users-guide/developing-packages.html
hs-source-dirs: directory list (default: “.”)
Root directories for the module hierarchy.
とのことなので、
src/Model.hs
test/Test/Model.hs
として hs-source-dirs で src と test を指定すればいけるんじゃないでしょうか。
0577デフォルトの名無しさん
2015/02/17(火) 10:41:13.63ID:jYoXJw7T0578デフォルトの名無しさん
2015/02/17(火) 17:06:56.99ID:LKq4/Itnなんで微分がどうこうとかやたら難しい言い方されてるんだ?
0579デフォルトの名無しさん
2015/02/17(火) 19:29:08.52ID:Dj056jou全くiteratorじゃないよ
0580デフォルトの名無しさん
2015/02/17(火) 23:40:52.40ID:1FfSFTEJ先ほども言いましたが、test ディレクトリ内に Test ディレクトリを置く解決方法と、
test ディレクトリ内のファイルを ***Test.hs とする解決方法とは、
冗長さという点では同程度だと私は思います。
普通はディレクトリの数よりファイルの数の方が多くなるので、
後者の方法はファイル一覧時に若干うるさくなるかも知れません。
そういう意味では、前者の方法の方が有利でしょうね。
0581デフォルトの名無しさん
2015/02/18(水) 00:45:49.04ID:MRGBBtoYZipper と Iterator とは比べるものではありません。
どちらもデータ構造に関することですが、全く違います。
Iterator は「アクセス方法」の一種で、全要素を一列に並べて順に辿ります。
たとえばツリー構造の走査(traverse)を考えてみてください。
他のアクセス方法としては、たとえばランダムアクセスなどがあります。
一方、Zipper は「データ構造」の一種で、ある要素を基準に
その前方の構造と後方の構造に分けて管理します。
他のデータ構造としては、たとえばリスト構造などがあります。
アクセス方法とデータ構造を比較する人はいませんよね。
両者は協調するものです。
微分の話は、簡単に言えば、代数的データ型に微分を使うことで、
Zipper 構造が機械的に(記号操作だけで)作れるということです。
(代数的だから微分できる!)
WikiBooks の Haskell/Zippers のページにも解説がありますが、
代数の意味や微分に関しては私は下記のサイトの方が分かりやすいと思います。
http://chris-taylor.github.io/blog/2013/02/10/the-algebra-of-algebraic-data-types/
Part3 に微分で Zipper を作る話がありますが、Part1 から順に読んでいくことを勧めます。
0582デフォルトの名無しさん
2015/02/18(水) 02:35:51.51ID:FB+byXVaリストの zipper はリストと同型です
0583デフォルトの名無しさん
2015/02/18(水) 03:37:31.00ID:qbjQSZBI0584デフォルトの名無しさん
2015/02/18(水) 06:41:55.81ID:1kElE7Pr>リストの zipper はリストと同型です
いや同型じゃないだろ
zipperは現在位置という情報を追加で持ってる
0585デフォルトの名無しさん
2015/02/18(水) 07:11:19.88ID:ZqtXntveだから最初に「「同型」(全単射がある)」と書いたのですが。
>>582のリストと並列に挙げるような書き方はどうかと思いまして。
0586デフォルトの名無しさん
2015/02/18(水) 09:14:47.60ID:Gsbbci4Dそのためだけに買うのがアレだったら,ネット上で該当の章だけ読んだらいいし
0587デフォルトの名無しさん
2015/02/18(水) 11:52:50.46ID:FN39RAK5あるデータコンストラクタの引数のうち1個を取り除き
取り除いた位置情報と残りの引数を別のデータコンストラクタで表現する
f*g*h を微分すると f'*g*h + f*g'*h + f*g*h' になるのに似ている
0588デフォルトの名無しさん
2015/02/18(水) 12:07:04.20ID:OwiSmH0Z継続のどこが純粋関数らしくないの?
0589デフォルトの名無しさん
2015/02/18(水) 15:34:06.59ID:BspphGEm0590デフォルトの名無しさん
2015/02/18(水) 18:26:58.91ID:1kElE7Prリスト[a]とリストのzipper([a],[a])の間に全単射はないだろ
0591デフォルトの名無しさん
2015/02/18(水) 18:36:53.10ID:VFL44f37日給は3千円
0592デフォルトの名無しさん
2015/02/18(水) 21:57:55.99ID:JYKOQ9/aモナドクラスには純粋なインスタンスもある
クラスは悪いインスタンスにも良いインスタンスにも機能を提供する
0593デフォルトの名無しさん
2015/02/19(木) 00:42:49.35ID:/rXoqLFu> 継続のどこが純粋関数らしくないの?
継続の概念そのものは、純粋だよ
実際、Standard ML よ呼ばれる関数型言語では、
型安全で参照透明性がある継続が一部の処理系(SML/NJ)で
実装されている
> 継続ってなぜモナドにするの?
命令型言語における逐次/分岐/反復といった、
一般には「制御構造」と呼ばれる概念を
圏論の視点で構成したのがモナド
継続は制御構造の一種だから、Haskell では
継続をモナドとして扱っているだけ
0594デフォルトの名無しさん
2015/02/19(木) 01:02:11.59ID:/ZeWNbkh一部じゃない
継続は全ての処理系で簡単に実装できる
pure x = ($ x)
fmap f = (. (. f))
join m = m . pure
0595デフォルトの名無しさん
2015/02/19(木) 01:14:45.46ID:/rXoqLFu>一部じゃない
>継続は全ての処理系で簡単に実装できる
失礼、SML/NJ で実現しているのは
(動的型付け言語である Scheme や Ruby と同じ)
一級市民としての継続(call/cc)のことね
またよく知られているように
継続渡し(CPS)はプログラミングスタイルだから、
多くの言語で実装できる
(全ての SML 処理系で実装が可能か?それは簡単か?
に関しては自分は知らないが、
自分の知る範囲で一級市民としての継続が
実装されている SML 処理系は SML/NJ だけ)
0596デフォルトの名無しさん
2015/02/19(木) 14:00:54.47ID:YjMFfHT0こいつのおかげで危うく関数型アレルギーになるところだった
Haskellで治った。にっくきSML/NJゆるすまじ
0597デフォルトの名無しさん
2015/02/19(木) 16:00:21.98ID:W9L5xQO/> 継続の概念そのものは、純粋だよ
純粋なら、小細工しないで、関数プログラミングすればいいのでは?
それとも、命令型言語における逐次のように不純なものなの?
> 一般には「制御構造」と呼ばれる概念を
> 圏論の視点で構成したのがモナド
正しくは「モナドは「制御構造」と呼ばれる概念も構成できる」?
0598デフォルトの名無しさん
2015/02/19(木) 18:00:01.16ID:HxD7CCKn0599デフォルトの名無しさん
2015/02/19(木) 19:15:49.42ID:ISm5rOHD0600デフォルトの名無しさん
2015/02/19(木) 21:45:42.87ID:6Gx+ywctscalazってscalaのライブラリにStackless Scala with Free Monads
って勝手に末尾最適化するっぽい? のがあるんだけど
haskellに似たようなのってないかな?
っていうかhaskellってあんまりスタックレスにするって事あんまり注意しないような気がする(つか末尾再帰にしないほうがいい場合がある?)
んだけどなんでなんだろうか
0601デフォルトの名無しさん
2015/02/19(木) 23:02:55.08ID:/rXoqLFuつまり Haskell であれば簡易コンパイラは書けるってことね、よかったよかった
まあ言語には相性があるみたいだから、アレルギー過敏な人がいてもおかしくはない
実際、情報工学系の学生で簡易コンパイラ作成程度の演習で苦労するようなのは、
まともに講義を受けていない僅かな落ちこぼれだけだしね
0602デフォルトの名無しさん
2015/02/19(木) 23:44:17.14ID:/rXoqLFu>> 継続の概念そのものは、純粋だよ
補足しとくと、ここで言う「純粋」とは副作用が無い(= 参照透明性が保証される)という意味ね
>純粋なら、小細工しないで、関数プログラミングすればいいのでは?
たとえば Scheme や Standard ML のように先行評価な関数型言語であれば、
(SML/NJ の callcc のように)何の小細工もせず素直に継続を関数プログラミングできる
ところが Haskell は遅延評価を採用しているから、
継続のような制御構造をプログラムとして明示的に記述したいケースに限れば、
小細工が必要になる
>正しくは「モナドは「制御構造」と呼ばれる概念も構成できる」?
だね、モナドという抽象的な概念は、制御構造という枠には限定されない
とはいえ一言で制御構造と言っても、逐次/分岐/反復という三つの基本構造だけでなく、
ジャンプ(GOTO文)、例外の発生/補足、そして全解探索で用いられるバックトラッキングなど
幅広い応用があるから、それだけでもモナドを学び活用する意義は大きい
0603デフォルトの名無しさん
2015/02/20(金) 00:42:56.42ID:QCbNSBwzなぜ落ちこぼれの話をしようと思った?
読んでもらうためではなく、読めない者を落ちこぼれさせるために長文書いてるのかな
0604デフォルトの名無しさん
2015/02/20(金) 01:03:50.60ID:4c2wlx5K0605デフォルトの名無しさん
2015/02/20(金) 10:24:25.27ID:ru8DK82J0606デフォルトの名無しさん
2015/02/20(金) 10:31:48.93ID:QCbNSBwz生きのこる人はくどくどと説明される前から必要な知識を持っている
0607デフォルトの名無しさん
2015/02/20(金) 11:12:04.13ID:kMCMx9Td> ここで言う「純粋」とは副作用が無い(= 参照透明性が保証される)という意味ね
OK
> ところが Haskell は遅延評価を採用しているから、
> 継続のような制御構造をプログラムとして明示的に記述したいケースに限れば、
> 小細工が必要になる
ここはよくわからんかった。
小細工が必要になるのは、「遅延評価を採用しているから」なの?
「継続のような制御構造をプログラムとして明示的に記述したいケース」
は純粋ではないからなんじゃないの?
継続って、>>=そのもの?
> モナドという抽象的な概念は、制御構造という枠には限定されない
それだけじゃなくて、いわゆる処理型モナドからデータ型モナドまであまりに広範囲だ。
それは逆にモナドが無意味だということを表してはいないの?
0608デフォルトの名無しさん
2015/02/20(金) 13:36:57.46ID:NRgYnesQなんで関数型なんていうものを使うのかわからないままやらされてたから
学生時代から何か開発するバイトとかしてればいろいろわかってもっと効果的に授業を受けれたんだろうなあ
0609デフォルトの名無しさん
2015/02/20(金) 14:14:13.73ID:ZHdyFWS60610デフォルトの名無しさん
2015/02/20(金) 17:35:37.51ID:4TCRV9ZI書けないのがもどかしいのですがこの点熟練の方はどうされてるのでしょうか?
0611デフォルトの名無しさん
2015/02/20(金) 18:11:56.28ID:5PeElh9m手続き型でループ使うところは末尾再帰で書くだけの事
0612デフォルトの名無しさん
2015/02/20(金) 18:29:32.18ID:4TCRV9ZIスタック溢れに訂正させてもらいます
0613デフォルトの名無しさん
2015/02/21(土) 00:19:24.05ID:KgB/c0aN>> 継続のような制御構造をプログラムとして明示的に記述したいケースに限れば、
この箇所、間違いではないが誤解しやすいと思われるので、以下のように訂正する
X: 継続のような制御構造を --> O: 継続を含む制御構造を
>>591 で書いたように「継続は制御構造の一種である」という意味
>小細工が必要になるのは、「遅延評価を採用しているから」なの?
そのとおり
たとえば副作用を伴う関数 f と g を「逐次」的に評価したい時、
先行評価であれば単に逐次関数 seq に 式 f x と g y を適用するだけで、
f x を評価した後に g y を評価するという逐次性が確実に保証できる
けれども遅延評価では(必要になるまで評価が遅延されるから)、
式 seq (f x) (g y) を評価した時における関数 f と g の評価順序は予測できない
だから遅延評価な関数型言語で(命令型言語の)制御構造を表現するには、
何らかの工夫(=小細工)が必要になる
>「継続のような制御構造をプログラムとして明示的に記述したいケース」
>は純粋ではないからなんじゃないの?
>>539 で書いたように、(継続を含む)制御構造は純粋だよ
純粋でないのは制御構造の対象要素であるI/Oや破壊的代入のような命令の部分
命令型言語の制御構造は、フローチャートを思い浮かべれば分かるように
ステートマシン(有限状態機械)としてモデル化できる
そして良く知られているようにステートマシンは純粋な関数として表現できる
(純粋な)制御構造と(純粋ではない)命令とをごっちゃにしてはいけない
0614デフォルトの名無しさん
2015/02/21(土) 01:26:37.57ID:KgB/c0aNまずは以下を嫁:
・【アンチ】関数型言語は使えない【玩具】 2
http://peace.2ch.net/test/read.cgi/tech/1330429547/413-418
Haskell も同じだよ
一般にコレクションと呼ばれるリスト/ベクタ/配列/集合/マップ/ハッシュ表といった
一次元な連続データ構造を扱う場合、それを分解したいなら foldr/foldl を、
組立てたいなら unfoldr を使えば、多くのケースで再帰を用いずコードを書ける
例外的に書けないケースに会ったなら、その時は個別に検討すればいい
まずは foldr/foldl/unfold を自在に使えるようになることから始めませう
0615デフォルトの名無しさん
2015/02/21(土) 02:45:25.62ID:XQcKoRVbmap/filter/foldのほうが手に馴染んでむしろ書きやすいのですが
関数型はアルゴリズムを数学の数式で説明されることがよくあるので
記述の明瞭さもあってこのまま使えないかと思い質問させていただきました
やはりこの種のアルゴリズムの修正は省けないようで地道にやることにします
ありがとうございました
0616デフォルトの名無しさん
2015/02/21(土) 07:29:08.00ID:oVc18//y0617デフォルトの名無しさん
2015/02/21(土) 09:25:22.70ID:GeR3Fn9o0618デフォルトの名無しさん
2015/02/21(土) 09:29:38.35ID:rkdK3xe5実装の都合で末尾最適化なんて余分な概念が混ざる
この時点で関数型言語は終わっている
もちろんたとえばCにだって同じ問題は発生するが
言語的にスタックの概念を認めているので諦めがつく
0619デフォルトの名無しさん
2015/02/21(土) 10:18:36.70ID:QRTg4MrQ関数型になるとスタックの概念を認めてない??
どんな言語だろうと最終的には機械語を機械が実行するのは変わらんのに
0620デフォルトの名無しさん
2015/02/21(土) 10:52:07.10ID:vdhVmhIc0621デフォルトの名無しさん
2015/02/21(土) 12:12:42.07ID:gIj/6admcallCC :: ((a -> (b -> c) -> c) -> (a -> c) -> c) -> (a -> c) -> c
callCC f k = f (const . k) k
ちなみにコンストラクタを使うとコードが読みにくいし使わないと型が見にくい
0622デフォルトの名無しさん
2015/02/21(土) 13:01:14.43ID:43YG5tRb> だから遅延評価な関数型言語で(命令型言語の)制御構造を表現するには、
> 何らかの工夫(=小細工)が必要になる
> >>539 で書いたように、(継続を含む)制御構造は純粋だよ
これは、継続(あるいは逐次)が評価順序にセンシティブということであり、
つまりは、継続は純粋ではないということではないの?
それとも、「継続は、>>=によって純粋でないことを明示しているので純粋である」
という変な論法?
> 純粋でないのは制御構造の対象要素であるI/Oや破壊的代入のような命令の部分
命令の部分が純粋でないのはそのとおりだが
> 命令型言語の制御構造は、フローチャートを思い浮かべれば分かるように
> ステートマシン(有限状態機械)としてモデル化できる
> そして良く知られているようにステートマシンは純粋な関数として表現できる
> (純粋な)制御構造と(純粋ではない)命令とをごっちゃにしてはいけない
よくわからん説明だな。
命令型言語の制御構造はステートマシンとしてモデル化できるが、
そのステートマシンは純粋でないものの代表だろ? Stateモナドだってあるくらい。
> 良く知られているようにステートマシンは純粋な関数として表現できる
これ何のこと言ってる?ホントか?
0623デフォルトの名無しさん
2015/02/21(土) 13:26:02.52ID:yPuvFC+H0624デフォルトの名無しさん
2015/02/21(土) 14:31:44.28ID:paijIEDQさほど遠くない将来、命令列ではなく回路にコンパイルされる時代がくると思うが。
そのとっきは、手続型(命令型)以外の言語が相対的に有利化も。
手続型言語は、命令列生成に過剰に最適化されているから。
0625デフォルトの名無しさん
2015/02/21(土) 14:40:05.32ID:s76k4WVR0626デフォルトの名無しさん
2015/02/21(土) 14:59:47.22ID:gwkDhRu50627デフォルトの名無しさん
2015/02/21(土) 15:00:28.18ID:43YG5tRb0628デフォルトの名無しさん
2015/02/21(土) 15:35:12.24ID:SegQLQC2評価順序にセンシティブだから純粋ではない、という論理がおかしい。
純粋な関数を単に逐次評価するだけなら、その間に依存関係があったとしても
全体の参照透過性は損なわれないだろう。
0629デフォルトの名無しさん
2015/02/21(土) 16:49:55.44ID:3a3I5RyIにも使えるってだけの話だろ
0630デフォルトの名無しさん
2015/02/21(土) 17:31:01.12ID:gIj/6adm仕様を一切変更することなく実装を変更するのは不可能
同様に、純粋でない道具を一切使わずに純粋な関数を作るのは不可能
ここで道具を使うというのは仕様を使ってるのか実装を使ってるのかで混乱しやすい
0631デフォルトの名無しさん
2015/02/21(土) 18:10:17.50ID:43YG5tRb純粋な関数には、そもそも、評価順序という概念すらないだろ
0632デフォルトの名無しさん
2015/02/21(土) 18:32:43.82ID:XLU71/kI回路にコンパイルしてどうやって実行するんだ?
従来型の、メモリに命令を書き込んで、CPUがそれを実行するという
パターンではなくなるとうこと?
0633デフォルトの名無しさん
2015/02/21(土) 19:09:50.14ID:SegQLQC2というかそもそも、関数がいつ評価されるかというのはその関数自身の性質じゃない。
0634デフォルトの名無しさん
2015/02/21(土) 20:01:22.24ID:oZjMervi0635デフォルトの名無しさん
2015/02/21(土) 20:07:58.97ID:oZjMervi0636デフォルトの名無しさん
2015/02/21(土) 20:22:48.86ID:qCqW+14KただGレベル高クロックならフォンノイマンアーキは現時点でまだ有効のようだね
0637デフォルトの名無しさん
2015/02/21(土) 20:47:06.80ID:KgB/c0aN>これは、継続(あるいは逐次)が評価順序にセンシティブということであり、
>つまりは、継続は純粋ではないということではないの?
「純粋」という用語の意味が「副作用が無い」ことであることは >>602 で示し、
それに対して君は >>607 で「OK」とレスしている
けれども、その認定された事実から今回の:
「継続は評価順序にセンシティブである。ゆえに継続は純粋ではない」
という推論を帰納するのは、論理的に破綻しているよ
もしかすると >>607 の OK(事実認定) を撤回して、代わりに純粋の意味を
「副作用が無く、かつ評価順序に対してインセンシティブである」
へと変更したいのかな???
>そのステートマシンは純粋でないものの代表だろ? Stateモナドだってあるくらい。
いや、StateモナドがHaskellの(純粋な)関数として定義できるように、
ステートマシンそのものの定義は純粋だよ
そしてステートマシンのインスタンス定義において:
・遷移関数が主作用(=入力と出力の写像)だけで表現できれば、そのインスタンスは純粋である
・主作用に加えて遷移関数が(I/Oや破壊的代入といった)副作用を伴うならば不純である
ということだ
ステートマシン(のクラス)とそのインスタンスとを、ごっちゃにすべきではない
>> 良く知られているようにステートマシンは純粋な関数として表現できる
>
>これ何のこと言ってる?ホントか?
おいおい、勘弁してくれ ....
まずは以下を嫁:
・関数型言語Part5
http://peace.2ch.net/test/read.cgi/tech/1252470706/484-500
スレを一通り読んだら、次はスレ#494で指示された Wikipedia のトピックを嫁
0638デフォルトの名無しさん
2015/02/21(土) 21:21:50.24ID:43YG5tRb>仕様を一切変更することなく実装を変更するのは不可能
嘘だろ
>>633
いつ評価されるべきかはその関数の仕様に依存する
>>634
言語の実装の性質
0639デフォルトの名無しさん
2015/02/21(土) 21:38:55.94ID:gIj/6adm例えば馬と自動車の仕様が同じと思うか違うと思うかは人それぞれ
だからこそ、一切変更されないなんて言ってはいけないと思う
0640デフォルトの名無しさん
2015/02/21(土) 21:48:26.24ID:43YG5tRbあなたの副作用の定義を示してくれんか?
もしかしてリアルワールドとのインタラクションだけを意味してる?
0641デフォルトの名無しさん
2015/02/21(土) 21:50:05.66ID:43YG5tRbいま言ってる仕様って書かれてるものだよん
0642デフォルトの名無しさん
2015/02/21(土) 22:49:48.44ID:KgB/c0aNすでに>>637 のステートマシンの段落で簡単に書いているけど、念の為に再度書く
まず「副」作用という言葉から分かるように、これは「主」作用の対義語であり:
・主作用とは入力から出力への写像だけで定義される対応関係のこと
(ここで、「入力から出力」を「適用する値から評価結果の値」へと、
「対応関係」を(関数型言語における)「関数」へと置き換えてもかまわない)
・副作用とは主作用では定義されないあらゆる効果であり、たとえば破壊的代入やI/Oがある
(つまり、関数の評価によって生ずる効果の中で、主作用ではないものすべてを指す)
0643デフォルトの名無しさん
2015/02/21(土) 23:28:29.54ID:43YG5tRbサンクス。それなら俺の理解とあまり違わないとまずは思うね。
俺の場合は、純粋な関数とそれ以外という区別だが。
同じことをあなたは、主作用とそれ以外と言っていると理解した。
ただ、純粋な関数にはもちろん作用なんてないから、根本的に違うのかもしれん
0644デフォルトの名無しさん
2015/02/21(土) 23:42:48.38ID:KgB/c0aNでは、スマンが「純粋な関数とそれ以外 ....」という節に含まれる
「純粋」の定義を教えてくれまいか?
もちろん循環定義は勘弁してね
循環定義の例:
「純粋とは副作用が無いという性質であり、副作用とは純粋ではない効果である」
0645デフォルトの名無しさん
2015/02/21(土) 23:50:49.84ID:rkdK3xe5副作用の説明として、ある入力の組に対して複数の出力の組の場合があり、そういう現象を起こすのがIOや破壊的代入とある
IOや破壊的代入を入力の組の一部と考えてはいけない理由を述べればこの場合十分だろうと思う
0646デフォルトの名無しさん
2015/02/22(日) 00:12:40.99ID:jAanobMmこの時点でなにか、一般的な定義とは根本的に違っているんだろうなぁ。
0647デフォルトの名無しさん
2015/02/22(日) 01:03:47.93ID:qxC/WEu2って解釈でいいのかな?
0648デフォルトの名無しさん
2015/02/22(日) 01:25:00.60ID:EMxeLusr>副作用の説明として、ある入力の組に対して複数の出力の組の場合があり、そういう現象を起こすのがIOや破壊的代入とある
この「ある入力の組に対して複数の出力の組の場合があり」という1対多の関係は、
確かに数学だと関数ではない
で、この板/スレでは(数学ではなく)プログラミング言語とその表現論を議論している訳だから、
ソフトウェア科学の中で対応する概念を考えてみると、たとえば非決定性があるね
非決定性には複数の意味があり、一つはパズルやゲームの分野で解の探索で用いられる
たとえばゲームで次の一手を計算する関数は、ゲーム盤のある局面(=入力)に対して
次の局面(=出力)が複数確定するから非決定的と呼ばれる
もう一つは評価してみなければ結果が確定しない関数のことで、代表的な例には
マッカーシーの amb やターナーの merge があり、それらは総称して非決定的関数と呼ばれる
(他には並行/並列計算の分野でも非決定性は用いられるけど、おそらく今回は無関係だろう)
さて副作用の中で、おそらく入力関数は後者の非決定性が該当すると思われる
けれども出力関数は常にある値からただ一つのユニット値が確定するから決定的に見えるし、
破壊的代入関数についてはどちらにも該当するように見え、同時に操作的意味論だと
破壊的代入という操作を代入前の値から代入後の値への関数として定義するから決定的にも見える
ということで、出力や破壊的代入はどちらに対応するのかを具体的に解説して欲しい
あるいは非決定性とは別の(ソフトウェア科学における)概念を用いた説明でもかまわない
0649デフォルトの名無しさん
2015/02/22(日) 01:36:02.13ID:EMxeLusrその解釈だと否定形だけで終わっているから、
関数型言語で副作用は扱えないという結論になってしまうよね
でも現実には先行評価はもちろん遅延評価であってさえも副作用を扱う事ができるから、
どこかが間違っている or なにかが足りていないんじゃないかな?
0650デフォルトの名無しさん
2015/02/22(日) 02:59:53.72ID:CqpSwth40651デフォルトの名無しさん
2015/02/22(日) 10:47:16.95ID:nNPYfFU0だから、IO型が副作用でそれ以外は純粋、という定義を認めない
型チェックを信じられないならPythonとかを使えばいい
副作用の有無をチェックする必要もないだろ
0652デフォルトの名無しさん
2015/02/22(日) 11:16:44.39ID:zFsBha6g特別なことはなにも言ってないw
純粋な関数とは数学的意味での関数ということ。
表現から値が一意に決まる。
>>645
わからないのか?
>>651
何を言ってるの?
0653デフォルトの名無しさん
2015/02/22(日) 12:47:55.99ID:nNPYfFU0もし弱者のふりをする強者がいたとしも考えを変えるべきではない
弱者のふりをする強者は、弱者を助ける政策を変えさせようとするテロリストだから
0654デフォルトの名無しさん
2015/02/22(日) 13:29:41.18ID:0njaRTk3xを入力するとxがそのまま帰ってくる関数(?)しか思いつかない
0655デフォルトの名無しさん
2015/02/22(日) 13:34:08.70ID:jAanobMm0656デフォルトの名無しさん
2015/02/22(日) 13:37:05.55ID:zFsBha6g出力や破壊的代入は非決定性とは関係ないだろうね
0657デフォルトの名無しさん
2015/02/22(日) 13:51:59.84ID:zFsBha6g作用なんて概念がどこで必要になるか考えてみ
0658デフォルトの名無しさん
2015/02/22(日) 13:57:27.04ID:0njaRTk3数学的意味でっていうのも含めて関数の時点で作用があるとしか思えないので
ぜひ作用のない関数の例を教えてほしい
0659デフォルトの名無しさん
2015/02/22(日) 14:01:23.55ID:0njaRTk3この言葉の定義が違うのかな?
0660デフォルトの名無しさん
2015/02/22(日) 14:33:32.11ID:nNPYfFU0入力は IO a
出力は a -> IO ()
この IO () は型引数がいらないのでMonadである必要はなくてMonoidでもよかった
0662デフォルトの名無しさん
2015/02/22(日) 16:22:49.66ID:qqnO2/LEそれ別のところでやってくんない?
haskellと関係ないし
0663デフォルトの名無しさん
2015/02/22(日) 16:33:25.93ID:PSZ9BlISとやってもインストールされないパッケージがある。
作業の流れはこう。
$ cabal sandbox init
$ cabal init
*.cabal ファイルの build-depends を埋める。
$ cabal install --dependencies-only
$ cabal configure --enable-test
最後の段階でエラーメッセージが出力される。
cabal: At least the following dependencies are missing:
test-framework-hunit ==0.3.*
*.cabal ファイルにはちゃんと
Test-Suite Something
build-depends: ・・・ test-framework-hunit >= 0.3 && < 0.4 ・・・
と書かれてるんたが。
何でだろ?
0664デフォルトの名無しさん
2015/02/22(日) 16:37:32.92ID:PSZ9BlIS書き忘れたが、*.cabal ファイルの build-depends に書いた他のパッケージ、
たとえば test-framework-quickcheck などはちゃんとインストールされた。
test-frmework-hunit だけがインストールされない。
0665デフォルトの名無しさん
2015/02/22(日) 16:51:49.20ID:PSZ9BlIS自己解決した。
cabal install の方にも --enable-tests オプションがいるのか。
流れをぶった切ってすまんかった。
議論を続けてくれ。
0666デフォルトの名無しさん
2015/02/22(日) 18:38:37.57ID:zFsBha6g純粋な関数にとって、ここの「変換する」、「作用」は余計な言葉だね
0667デフォルトの名無しさん
2015/02/22(日) 23:06:21.86ID:+tjqckF6数値は通常、1リットルあたり100ベクレル以下ですが、最高で7230ベクレルを記録。
このため、東京電力は、排水路のゲートを閉めたほか、汚染水の移送作業を停止しました。
汚染水のタンクの水位計に目立った変化などはないということですが、東京電力は、汚染水が港湾内に流出したとみて原因を調べています。
0668デフォルトの名無しさん
2015/02/23(月) 03:00:06.38ID:yHlUAJts可能な機械状態の集合Sの直積S×Sの部分集合にほかならない。
これはSからSへの純粋な関数そのものだ。
0669デフォルトの名無しさん
2015/02/23(月) 07:55:17.60ID:XYitOeCr0670デフォルトの名無しさん
2015/02/23(月) 20:41:44.57ID:l7nfI0Hl0671デフォルトの名無しさん
2015/02/23(月) 23:05:43.29ID:QYJUtpb40672デフォルトの名無しさん
2015/02/23(月) 23:33:39.87ID:8CPFjaoD世界で、あるいは日本で話題になっているものは残念ながら知らないが、
今自分の中でホットなのは Reflection。
Haskell でモックを作れないかと調べてたら、こんなのがあった。
http://blog.nonowarn.jp/post/184938189/mocking-in-haskell-with-reflection-type-class
古いネタだけどね。
0673デフォルトの名無しさん
2015/02/23(月) 23:46:23.43ID:8CPFjaoDちなみに、私はモックをきっかけに reflection を知ったが、
このライブラリ自体はかなり凄いことをやってのけてて、
応用(適用)範囲も広いと思う。
http://cx4a.org/posts/2014-06-03-solve-the-configurations-problem-for-haskell.html
0674デフォルトの名無しさん
2015/02/24(火) 00:00:19.36ID:2W8BrWDD仕組みは分からんけどおもしろいアプローチだね
0675デフォルトの名無しさん
2015/02/24(火) 00:09:48.65ID:sS4fe1naこれHaskellの仕様外なのでGHCの実装が変わったら使えなくなるということはありませんか?
0676デフォルトの名無しさん
2015/02/24(火) 03:27:43.34ID:8m2gPI9oわかってないのかもしらんが、>>668のような事情があるから
Haskellの内部で命令型言語を容易に再発明できるのだよ。
0677デフォルトの名無しさん
2015/02/24(火) 08:03:23.82ID:S2pCR91J関数型言語は命令型言語、命令型言語は関数型言語
0678デフォルトの名無しさん
2015/02/24(火) 08:28:54.89ID:UvByGB8V0679デフォルトの名無しさん
2015/02/24(火) 08:59:18.55ID:XZZcWcPm0680デフォルトの名無しさん
2015/02/24(火) 17:54:38.62ID:DnqBFQEeFunctorもApplicativeも関数→データ→返り値なのに何でMonadだけデータ→関数→返り値なの?
0681デフォルトの名無しさん
2015/02/24(火) 18:08:03.66ID:Qwy2iHqI> >>=って引数の順序逆じゃね?
なんでだろうね
逆がいいなら =<< もあるが
0682デフォルトの名無しさん
2015/02/24(火) 18:55:37.66ID:8m2gPI9o>何でMonadだけデータ→関数→返り値なの?
関数を後ろにしないとラムダ式のネストを連鎖させて書きにくいからだろう。
0683デフォルトの名無しさん
2015/02/24(火) 20:29:32.00ID:9OYj7FQ20684デフォルトの名無しさん
2015/02/24(火) 21:18:59.73ID:Egwh0d/F使えなくなるかもね。
ただ、reflection パッケージはつい最近も更新されてはいる。
命令型言語のグローバル変数のようなことがしたいのなら、
ghc の言語拡張 ImplicitParams というのもある。
0685デフォルトの名無しさん
2015/02/25(水) 11:25:52.12ID:EI9coWAt純粋な関数の作用は「値を返すこと」だよ。Haskellでは「普通の意味では値を返さない」関数も ()::()を返すことによって
形式上は値を返す。
0686デフォルトの名無しさん
2015/02/25(水) 11:30:47.69ID:EI9coWAtある値に次々と関数を適用する場面を考える。最初の値をxとしよう。
1.まず f を適用すると f x になる
2.つぎに、この結果に対して g を適用すると g ( f x) となる。
3.つぎに、この結果に対して h を適用すると h ( g ( f x ) ) となる。
こうしてみると、思考の流れである『 to x, apply f, then apply g, then apply h ...』 と左右が逆になってる。
>>= はKleisli射に対して x f g h の順番で書けるように工夫したものだと、言える。(ざっくりした説明)
0687デフォルトの名無しさん
2015/02/25(水) 13:41:55.23ID:20DVabgTこのスレの住人とて捻り鉢巻な難易度なのだろう
0688デフォルトの名無しさん
2015/02/25(水) 13:59:16.45ID:zpTHLWvM>>676
>>677
>>679
例えば、
x=1; y=2; x=x+y; print x; print y
という命令型プログラムを純粋関数で書くと
どうなるのでしょうか
0689デフォルトの名無しさん
2015/02/25(水) 17:10:15.53ID:4X+FbhYDメモリの値とターミナルの状態という機械状態を
S=<("x",Vx),("y",Vy),(T)>と表すとして
だとして、
x=1;
→ 関数(f1) --- f1 <("x",Vx),("y",Vy),(T)> = <("x",1),("y",Vy),(T)>
y=2;
→ 関数(f2) --- f2 <("x",Vx),("y",Vy),(T)> = <("x",Vx),("y",2),(T)>
x=x+y;
→ 関数f3 --- f3 <("x",Vx),("y",Vy),(T)> = <("x",Vx+Vy),("y",Vy),(T)>
print x;
→ 関数f4 --- f4 <("x",Vx),("y",Vy),(T)> = <("x",Vx),("y",Vy),(T++show Vx)>
print y;
→関数f5 --- f5 <("x",Vx),("y",Vy),(T)> = <("x",Vx),("y",Vy),(T++show Vy)>
で、これを(逐次実行は関数合成として理解できるので)関数合成すると
f5 . f4 . f3 . f2 . f1 <("x",Vx),("y",Vy),(T)> = <("x",3),("y",2),(T++ "3" ++ "2" )>
という関数になる。
0690デフォルトの名無しさん
2015/02/25(水) 17:16:52.68ID:GkGCDPjknewIORef 1 >>= \ x ->
newIORef 2 >>= \ y ->
(fmap (+) (readIORef x) <*> readIORef y) >>= writeIORef x >>= \ () ->
readIORef x >>= print >>= \ () ->
readIORef y >>= print
0691デフォルトの名無しさん
2015/02/25(水) 17:17:12.91ID:4X+FbhYDS → S なので、そのグラフはS×Sで、
つまり命令形の手続きはSの直積の部分集合と同一視できるということになる(というか数学的には同一)。
0692デフォルトの名無しさん
2015/02/25(水) 17:18:00.41ID:4X+FbhYDあ、そういう答えを要求してるんだったのか……
0693デフォルトの名無しさん
2015/02/25(水) 20:03:19.53ID:zpTHLWvM今の時点で気になっているのは、ここにある各演算毎の関数的定義は、
演算が置かれている場所や状態空間が少し変わると、同じ演算なのに
変わってしまうということはないのでしょうか?
例えば、状態空間の中にzが加わると、同じ演算の関数定義が変わってしまう
ということはないのでしょうか?
もしそうだとすると、命令型の手続きを純粋関数で書けるというのはやや
誤解を生じるのではないかと思うのですが。
0694デフォルトの名無しさん
2015/02/25(水) 20:13:44.32ID:YonVottMありがとうございます
互換性に不安を抱えたまま開発を続けるのはつらいのでReflectionを使わない方法を模索することにします
0695デフォルトの名無しさん
2015/02/25(水) 21:40:11.60ID:4X+FbhYD>演算が置かれている場所や状態空間が少し変わると、同じ演算なのに
>変わってしまうということはないのでしょうか?
というか、逐次実行が関数合成になるように状態空間を定めるので、話は逆。
手続が内部で持ってる状態を全部引数に蓄積子として突っ込んでいけば
最終的に必ず純粋な関数になるので大丈夫、というだけの話ではあり。
0696デフォルトの名無しさん
2015/02/25(水) 21:48:26.31ID:Slhdy+4b各行は定義ではなく、具体的な状態Sが関数適用でどう変化しているかを述べていて、
>>688は説明を簡単にするためにxとyとターミナルの状態のみを扱っている
例えばx=1という式はx以外の変数やターミナルの状態を変えないから、
f1 <("x", _), vars, T > = <("x", 1), vars, T>
みたいに書ける。これならzをどこに入れようが定義は変わらない。
0697デフォルトの名無しさん
2015/02/25(水) 22:52:25.07ID:zpTHLWvMできないということなのでしょうか
0698デフォルトの名無しさん
2015/02/26(木) 01:10:29.61ID:XuDII8Liしかし、それは人間的困難に過ぎないので、そこを捨象すれば
チューリングマシンとラムダ算法が等価であるというのとまったく同じ意味において、
両者は等価であり、区別することはできない。
0699デフォルトの名無しさん
2015/02/26(木) 02:12:16.21ID:D8nkDIffモナドは暗黙の状態引き渡しをやる仕組みと言えなくもないし、部分的には命令型的パラダイムを導入してるという考え方はできる。
0700デフォルトの名無しさん
2015/02/26(木) 08:46:56.43ID:y/w7Kxu/0701デフォルトの名無しさん
2015/02/26(木) 10:19:14.44ID:WaBGyhy5お前、毛の壁ナイズされ過ぎ。
0702デフォルトの名無しさん
2015/02/26(木) 10:34:39.06ID:BNBT94Ul0703デフォルトの名無しさん
2015/02/26(木) 11:05:53.08ID:QQhjsWl00704デフォルトの名無しさん
2015/02/26(木) 11:15:19.32ID:btOYc4SG0705デフォルトの名無しさん
2015/02/26(木) 11:31:19.10ID:dD65fmOlスポーツとかなら10年かかっても不思議ではないのに
0706デフォルトの名無しさん
2015/02/26(木) 11:59:30.21ID:QQhjsWl0「XはYである」と言うならYと見なした理由もちゃんと書け馬鹿。XをYと見なした時にどんだけ便利なのか書け馬鹿。
おめーは自然数を教えるのにチャーチ数を教えるのか馬鹿。
おめーは「脳はコンピュータと言える」とか言って脳の研究でコンピュータを調べるのか馬鹿。
そんな絶望的な馬鹿なら10年かかっても不思議じゃねーよ。
0707デフォルトの名無しさん
2015/02/26(木) 12:00:51.61ID:btOYc4SG早期教育が必要
0708デフォルトの名無しさん
2015/02/26(木) 14:42:26.59ID:dD65fmOl0709デフォルトの名無しさん
2015/02/26(木) 21:35:55.82ID:+ZHOz+Fzその通りだと思う。
しかしその具体的な動きはすでにあるのかな?
>>701
いや、Okabe氏は素晴らしいと思うよ。
彼にはもっともっと発信してほしい。
0710デフォルトの名無しさん
2015/02/26(木) 22:40:22.30ID:u37SJBGi他の言語書いたことないやつとかhaskell語るなよ
0711デフォルトの名無しさん
2015/02/27(金) 13:21:41.48ID:luo4R3jS俺も俺も。ああいうキチガイ芸人にはもっと発信して欲しかった。Qiitaの運営も見る目がない。
0712デフォルトの名無しさん
2015/02/27(金) 18:39:34.08ID:/mo2HZHK0713デフォルトの名無しさん
2015/02/27(金) 20:57:22.30ID:QBCyKoaphaskellやってる人で他の言語やった事ない人ってすごい少数派だと思うぞ
0714デフォルトの名無しさん
2015/02/27(金) 21:55:00.85ID:6wGrZzep0715デフォルトの名無しさん
2015/02/28(土) 07:19:37.54ID:dnl6aVQ8他言語はおろかhaskellを使っているかも怪しい。
0716デフォルトの名無しさん
2015/02/28(土) 11:31:00.53ID:/a49nmDi本当はPython使ってるだろ
0717デフォルトの名無しさん
2015/02/28(土) 12:00:03.72ID:lNsAK58t0718デフォルトの名無しさん
2015/02/28(土) 12:18:51.86ID:d9oEn1cs0719デフォルトの名無しさん
2015/02/28(土) 12:53:22.56ID:/a49nmDi0720デフォルトの名無しさん
2015/02/28(土) 14:57:14.27ID:WBmhRPKMParsecが激しく便利なのでやめられないし、グルー言語としても優秀。
後はふと思いついたことをプロトタイピングして試すのにとても便利。
モナドの中を除いてコードをどこにどういう順番で書いても大丈夫なのが地味に利く。
0721デフォルトの名無しさん
2015/02/28(土) 17:21:51.10ID:+vurDehh>後はふと思いついたことをプロトタイピングして試すのにとても便利。
ここは禿しく同意
0722デフォルトの名無しさん
2015/02/28(土) 17:34:44.86ID:ww/ZmHX+0723デフォルトの名無しさん
2015/02/28(土) 17:35:54.16ID:ww/ZmHX+あのスレID付く前は勢いすごかったのにな
0724デフォルトの名無しさん
2015/02/28(土) 17:37:41.63ID:0XiMknGfn年前から「今年盛り上がる」って言われ続けてる
0725デフォルトの名無しさん
2015/02/28(土) 20:20:30.25ID:4FBvatWb0726デフォルトの名無しさん
2015/02/28(土) 20:27:53.14ID:Ywc+frof0727デフォルトの名無しさん
2015/02/28(土) 20:51:48.98ID:0l2BG5kB急きょ引き上げられるなど、対応の不備が指摘されました。
この問題を話し合うシンポジウムが28日東京で開かれ、上限の引き上げや事前の同意の
必要性について意見が交わされました。
4年前の原発事故では、当初100ミリシーベルトとしていた緊急時の被ばく限度が収束作業に
支障が出るとして、事故の3日後、急きょ250ミリシーベルトに引き上げられました。
事故の6日後、政府はさらに国際機関が推奨している500ミリシーベルトへの引き上げを検討しましたが、
事故対応に当たった防衛省や警察庁からも反対の声が上がり、見送られました。
シンポジウムは放射線防護の専門家で作る日本保健物理学会が開き、東京電力の担当者は、
174人が100ミリシーベルトを超え、250ミリシーベルトを超えた作業員も6人いたことを報告し、
「引き上げがなければ作業はより難しかった」と話しました。
パネリストからは、「国際的な基準に合わせるべきだ」といった意見の一方、
「250ミリシーベルトも500ミリシーベルトも医学的な根拠となるデータが少なく、納得が得られるか疑問だ」
といった意見も出されました。
また、数字の議論だけでなく、事前に同意を得ることや、長期的な健康調査も重要な検討事項
だという指摘が出されていました。
作業員の被ばく限度について原子力規制委員会は、250ミリシーベルトへの引き上げを軸に、
事前の意思確認や教育などを事業者に求めていく方向で検討することにしています。
一方で、上限の引き上げについては労働者団体などが反対しているほか、
厚生労働省が慎重な姿勢を見せています。
原発事故以降、廃炉現場での被ばく対策を求めるなど、作業員の支援をしている東京労働安全衛生センターの
飯田勝泰事務局長は、「被ばくを余儀なくされる人たちが生涯背負う健康リスクに誰が責任を負うのか、
その後に生じるさまざまな問題に対してどれだけサポートや補償などがあるかを含めて、
当事者を交えて議論すべきだ」と訴えています。
0728デフォルトの名無しさん
2015/02/28(土) 22:05:28.81ID:BICS2QXMおいHaskellerを刺激するなよ
0729デフォルトの名無しさん
2015/02/28(土) 23:57:43.09ID:Nt6Wj8CT0730デフォルトの名無しさん
2015/03/01(日) 00:00:10.61ID:fa5PZpFWヘッジファンドに就職するもんだよ。
0731KenOkabe
2015/03/01(日) 00:24:52.20ID:pyXXwOct0732デフォルトの名無しさん
2015/03/01(日) 12:33:53.88ID:V/GWmw6Dclass ABC t where
abc :: t -> IO Int
data X = 何か
instnce ABC X where
abc x = 何か
アプリケーションの本番環境ではこれでいいのですが、
この型Xの値を使う環境の方をデバッグしたりテストする場合に問題が起きました。
abc関数をX型の値に適用したとき、戻り値を以前戻した値に基づいて計算したいとか、
適用する度に予め用意したリストから順に値を戻したいという場合があります。
例えば初めての適用なら5::IO Intを、2回目の適用なら13::IO Intを戻したいとか。
前回10::IO Intを戻したなら、今回はerror関数を使って例外を投げるとか。
状態を保存しないとできないことです。
このようなことが本番環境でも必要なら、ABC型クラスの定義を例えば下記のように変え、
class ABC t where
abc :: t -> IO (Int, t)
X型の値の中に状態を保存するようにします(要はMap型などと同じやり方です)。
しかし、今回はデバッグやテストのためだけです。
そのためだけに全体のアーキテクチャを変えてしまうのは如何なものかとも思うのですが、
デバッグやテスト優先で変えるべきでしょうか。
それとも、関数を使用する側は変えなくても良い、
あるいは変えるとしても些細な修正ですむ方法があるでしょうか。
0733デフォルトの名無しさん
2015/03/01(日) 12:46:43.60ID:FWNFrpmY0734デフォルトの名無しさん
2015/03/01(日) 13:21:28.34ID:OeCCJL5wunsafePerformIO使う(というかまさに使いドコロ)。
0735デフォルトの名無しさん
2015/03/01(日) 14:22:17.54ID:y+77PkOTabc x = do{(y:ys)<-readIORef global_abc; writeIORef global_abc ys; return y}
0736デフォルトの名無しさん
2015/03/01(日) 15:10:50.59ID:V/GWmw6Dデバッグやテストが目的なら躊躇せずSystem.IO.Unsfe系を使いましょうと言うことですか。
本番環境ではさすがに使いたくないですが、本番環境を汚さずにデバッグやテストするのが目的なら、
悩んで複雑な仕組みを構築するより、気をつけてUnsafe系を使う方法を考えた方が建設的てすね。
アドバイスありがとうございます。
>>733
どういうことでしょうか。
0737デフォルトの名無しさん
2015/03/01(日) 15:42:52.81ID:YT+HWRLqabct t = do
0738デフォルトの名無しさん
2015/03/01(日) 15:45:51.87ID:YT+HWRLqabct t = do
r <- abc t
return (r, t)
0739デフォルトの名無しさん
2015/03/01(日) 17:59:38.32ID:V/GWmw6D>>732でも言いましたが、本番環境でも状態を保存する必要があるのなら
私も迷わずその方法を採用したいと思います。
しかし、今回はデバッグやテストのためたけの仕組みです。
abc関数を使用する(呼ぶ)側にはあまり手を着けたくないというのが正直なところです。
多少修正する程度でしたらまだいいのですが、戻り値で状態を返し、
関数の呼び出し側でそれを保持するとなると、アプリケーションの作り方にまで影響が及びます。
できればそれはちょっと避けたいな、と。
0740デフォルトの名無しさん
2015/03/01(日) 18:02:35.56ID:DwkMIW7dWriterモナドとか
0741デフォルトの名無しさん
2015/03/01(日) 19:28:30.37ID:YT+HWRLqデバッグ用テスト用のファイル/モジュールでt -> IO (Int, t)を返す関数を定義すれば本番用のコードを汚さないよ?
0742デフォルトの名無しさん
2015/03/01(日) 19:54:14.26ID:2wRYmT3l0743デフォルトの名無しさん
2015/03/01(日) 22:48:32.59ID:V/GWmw6D後出しじゃんけんのようで本当にすいません。
結局やりたいのはこういうことです。
本番環境
ModuleA
ABCクラスのインスタンス型の値を使う
ModuleB
ABCクラスの定義(abc :: t -> IO Int)
ModuleC
ABCクラスのインスタンス型Xの定義
ModuleD
ABCクラスのインスタンス型Yの定義
テストやデバッグ用
ModuleX
ModuleAの関数のテストやデバッグのために
ABCクラスのインスタンス型Zの定義
要するにスタブとかダミーみたいなもの
ただし、状態を保ちたい
ABCクラスのインスタンス型の値の状態を保つことは、
本番環境では不要なことなんです。
状態を保たなくてもアプリケーションの処理は問題なく回ります。
本番環境に無くても良い余計な処理は入れたくないです。
ModuleAから呼ぶ関数はModuleBで定義したABCクラスのabc関数であって、
>>738のabct関数をModuleXで定義しても、ModuleAからは呼ばれません。
トンチンカンなことを言っていたらごめんなさい。
0744デフォルトの名無しさん
2015/03/01(日) 23:04:42.28ID:V/GWmw6DWriter Int型を使うということでしょうか。
今回の目的を達成するためにはどのように使えばよいか考えてみましたが、
すいません、よく分かりませんでした。
どのように使えばよいのでしょうか。
>>742
こちらも、どのように使えば目的が達成できるか、分かりませんでした。
お二人とも、簡単な例を示していただけると助かります。
0745デフォルトの名無しさん
2015/03/02(月) 00:13:52.37ID:6Ba1RdPXすいません、これがマズい言い方でした。
> アプリケーションの本番環境ではこれでいいのですが、
> この型Xの値を使う環境の方をデバッグしたりテストする場合に問題が起きました。
これでは、型Xを使う側は本番環境ではないように聞こえますね。
ここで言いたかったことは>>743の前半の状況です。
紛らわしくてごめんなさい。
0746デフォルトの名無しさん
2015/03/02(月) 01:22:46.34ID:Sw+/g9Qu例えばnewが不要な所ではstatic変数を使いたいとか
たまにそういう人いるよね
0747デフォルトの名無しさん
2015/03/02(月) 06:52:05.12ID:6Ba1RdPX良くないことでしょうか。
0748デフォルトの名無しさん
2015/03/02(月) 07:15:11.30ID:IugrOvyfdata BinTree = Empty | Node{val :: a, left :: BinTree a, right :: BinTree a} deriving Show
newtype BinSrchTree a = BinTree a deriving (Show, Eq, Ord)
main = print (Empty :: BinSrchTree Int) --BinSrchTree IntがBinTree a0に一致しない言われる
0749デフォルトの名無しさん
2015/03/02(月) 09:57:42.00ID:oxqFLeZknewtype BinSrchTree a = BS (BinTree a) deriving Show
main = print (BS Empty :: BinSrchTree Int)
ghci> main
BS Empty
0750デフォルトの名無しさん
2015/03/02(月) 10:08:38.53ID:IugrOvyfありがとうございます
0751デフォルトの名無しさん
2015/03/02(月) 11:04:53.22ID:Sw+/g9Qustatic変数というかグローバル変数は
引数や戻り値の型を無視してデータの受け渡しをするので型システムにとっては悪い
0752デフォルトの名無しさん
2015/03/02(月) 12:36:54.96ID:6Ba1RdPXそういう意味でしたか。
staticを静的の意味と勘違いしていました。
それで、意味は分かりましたが、今回の私の件に
どのように繋がってくるでしょうか。
私への教訓でしたら大事なことなのでしっかり聞いておきたいです。
0753デフォルトの名無しさん
2015/03/02(月) 13:17:22.99ID:Sw+/g9Qu型システムの目的は本番環境の処理を速くすることではないので
目的が違う人と対立する場合もあります
0754デフォルトの名無しさん
2015/03/02(月) 14:13:28.84ID:YiBmijbSこれ何か問題があるの?
その後の指摘?とのつながりが分からん
0755デフォルトの名無しさん
2015/03/03(火) 11:43:12.43ID:SAUuRVc4[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog
0756デフォルトの名無しさん
2015/03/03(火) 13:50:00.68ID:RopS8Jun0757デフォルトの名無しさん
2015/03/03(火) 16:24:30.16ID:uc5uKGLfそれは思った
0758デフォルトの名無しさん
2015/03/03(火) 18:44:42.74ID:0qnRlFIR関数型という表記でなんの問題もないのだが。
それより、一部で根強い「関数プログラミング」という表記のほうがイヤ。
0759デフォルトの名無しさん
2015/03/03(火) 18:59:03.33ID:WJJOCC/KBird & Wadler を訳した武井さんに敬意を表してるんだろうな
0760デフォルトの名無しさん
2015/03/03(火) 19:01:24.47ID:0NfvnnKp0761デフォルトの名無しさん
2015/03/03(火) 20:17:41.38ID:RopS8Junその理屈に則るなら誤解をされないように(筆者の)関数型じゃなくてHaskellって表記すればいいのにってだけ
0762デフォルトの名無しさん
2015/03/03(火) 20:25:58.13ID:0qnRlFIRあの内容なら別にOCaml使っても同じだろ。
そもそもHaskellの布教したいわけじゃなくて、
kazの定義するところの「関数型」の布教がしたいんだろうからな。
0763デフォルトの名無しさん
2015/03/03(火) 22:34:31.14ID:9fOX7cOmdata Foo = Foo {bar :: Int}
let foo = Foo 1
let baz =foo {bar = 10 + bar foo}
この bar = 10 + bar foo を bar = 10 + bar でできるようにする言語拡張ってないの?
0764デフォルトの名無しさん
2015/03/04(水) 01:10:55.55ID:OQ0tAhEv0765デフォルトの名無しさん
2015/03/04(水) 01:33:39.74ID:EScOogLy0766デフォルトの名無しさん
2015/03/04(水) 01:42:46.42ID:3Rn4etK5使える状況が限定されるけどRcordWildCards
あとは演算子がキモいlens
0767デフォルトの名無しさん
2015/03/04(水) 02:05:22.33ID:OQ0tAhEv0768デフォルトの名無しさん
2015/03/04(水) 02:34:52.77ID:EScOogLyタプルという以上のものではない、というつもりで作られてることが
わかってれば、トップレベルの名前空間にぶちまけられてることも
そういう更新の仕方ができないことも不思議でもなんでもないんだけどね。
0769デフォルトの名無しさん
2015/03/04(水) 17:54:26.26ID:77Av1QBL0770デフォルトの名無しさん
2015/03/04(水) 17:55:24.64ID:77Av1QBL0771デフォルトの名無しさん
2015/03/04(水) 18:52:46.28ID:4mY/lS/X0772デフォルトの名無しさん
2015/03/04(水) 19:22:58.77ID:Z9o39cjFデータ型あたらしく定義すれば
0773デフォルトの名無しさん
2015/03/04(水) 19:24:29.53ID:EScOogLy趣旨がわからんが
data StrIntgr = Str String | Intgr Int deriving Show
f n = if n < 0 then Str "I don't like negative numbers." else Intgr n
みたいな直和型ではなんかいかんの?
ここで聞く前になにか自分で入門書読んだ方がよさそうな気がするが。
0774デフォルトの名無しさん
2015/03/04(水) 19:41:36.42ID:4mY/lS/X言葉足らずですまん
もちろん自前で型をつければできるのは分かってるんだけど
型つけるといちいち型から取り出す関数を定義するとかFunctorクラスを実装するとかが必要になってきて
2つの異なる型を返す可能性があるだけで割と手間がかかるようになるけどHaskellだとそれが当たり前なのかなって
0775デフォルトの名無しさん
2015/03/04(水) 19:43:00.66ID:ZS6cL3ZV0776デフォルトの名無しさん
2015/03/04(水) 19:45:42.96ID:EScOogLy>2つの異なる型を返す可能性があるだけで割と手間がかかるようになるけどHaskellだとそれが当たり前なのかなって
そりゃ当たり前。そうじゃなきゃ型システムが台無しだろうが。
EitherつかってもRight/Leftのパターンマッチで取り出すのはおんなじ。
0777デフォルトの名無しさん
2015/03/04(水) 20:05:47.70ID:3Rn4etK50778デフォルトの名無しさん
2015/03/04(水) 21:43:20.18ID:P3s4t/V2OCamlならopen variantで新たなデータ型を宣言しなくてもいいが。
0779デフォルトの名無しさん
2015/03/04(水) 21:51:55.05ID:zsHu2OsZHaskellはできないけど
0780デフォルトの名無しさん
2015/03/04(水) 23:24:56.05ID:Ts02LONaわかった。
ありがと。
0781デフォルトの名無しさん
2015/03/05(木) 14:45:16.80ID:HeDoVjrI先頭からcondをチェックして、Trueの場合はtodoを実行し、以降のチェックはしたくない時は
どのように書くのがスマートですか?
手続き型だとループを回してbreak/returnで抜けるパターンです
よろしくお願いします。
0782デフォルトの名無しさん
2015/03/05(木) 16:02:01.66ID:HeDoVjrI0783デフォルトの名無しさん
2015/03/05(木) 16:40:37.70ID:A3rdoDeo0784デフォルトの名無しさん
2015/03/05(木) 17:34:45.93ID:URkoYrlqという感じに書くけど、再帰でもなんでも好きに書けばいいんじゃないか
0785デフォルトの名無しさん
2015/03/05(木) 21:42:01.23ID:ZtE0KjELWindows 上で Mac 用の実行ファイルをビルドする、
そんなことができる Haskell コンパイラはありますか?
あるいは GHC を使ってこのようなことはできるてしょうか?
0786デフォルトの名無しさん
2015/03/05(木) 21:49:04.32ID:Dzjm5JL8なんでGHC + cross compilationでググらないのか聞いてもいい??
0787デフォルトの名無しさん
2015/03/05(木) 22:33:40.71ID:1dxQhv2o0788デフォルトの名無しさん
2015/03/06(金) 07:06:47.09ID:gxbo3gJiこの呼び方は昔聞いたことがあるような気がします。
調べてみます。
ありがとうございます。
0789デフォルトの名無しさん
2015/03/06(金) 07:08:33.62ID:Fpf9iYrBクロスコンパイリングなGCCを用意する。
target=xxxxフラグでターゲットシステムを指定して
クロスコンパイリングなGHCをビルド。
ググればすぐわかるだろ。
0790デフォルトの名無しさん
2015/03/06(金) 13:02:11.81ID:YJArWnBq0791デフォルトの名無しさん
2015/03/06(金) 13:17:10.70ID:euElO0P4直和型が面倒なら高階関数にすれば楽だよ
0792デフォルトの名無しさん
2015/03/07(土) 16:02:20.48ID:lLxUVvgb0793デフォルトの名無しさん
2015/03/07(土) 16:36:05.33ID:UBHk2s1Q0794デフォルトの名無しさん
2015/03/07(土) 16:59:47.20ID:LcaLHDJhEitherはエラー処理に使う、という慣習があるんで、それに従う。
問題ないならRight xで当該の値を返してエラーならLeft yでエラー内容を返す。
そもそも普通に直和型が必要な場合ならEitherにしないほうがあとで拡張しやすい。
直和型で2つだけで済むことってあまりないだろ。
0795デフォルトの名無しさん
2015/03/08(日) 01:02:34.04ID:3ltsFKawTubeFromPC-HD
YouTubeをPCで視聴しているとき、その動画を別のモニターへ退避させて、フルスクリーンでウェブブラウジング・メールなど別の作業をしたいと思ったことはありませんか?
二枚目のサブモニターがなくても大丈夫です。iPhoneとiPadをそれに利用しましょう。
TubeFromPCは、PCで視聴していたYouTube動画をiOSデバイスで再生するためのユーティリティです。iPadではHD高画質を選択することも可能です。
ほんの数秒で、PC画面からiOS画面へと、Wifiネットワーク越しにYouTube動画を「移動」させてしまいます。
PCで何かソフトウェアをインストールする必要はありません。エスクテンション(アドオン)をブラウザ(Chrome,Firefox,Safari)にインストールして利用します。
そのため、Windows、MacOSX、Linux、Unixどのプラットフォームでも共通して動作します。
【つかいかた】
このアプリにより、iPhone/iPadとPCは、LAN(ローカルエリアネットワーク)経由で通信します。
iPhone,iPadがWi-Fi/無線LANに接続していることが必要です。PCもその同じLANに接続していることが必要です。
アプリを開いたら、青で表示されている [192.168.xx.xx:8080]という数字(ローカルアドレス)をブラウザのURL欄に入力してください。すると、ブラウザにTubeFromPCのWebアプリが表示されます。
最初にお使いのブラウザのセットアップ(エクステンションインストール)が必要です!
そのページの一番上にある「使い方 はじめての方へ」というリンクを開いてください。
Twitter: @kenokabe
」
ttp://www.advansteps.com/ipadsearch/cgi/search/search.cgi?mode=search&word=firefox%20
0796デフォルトの名無しさん
2015/03/08(日) 18:41:10.85ID:DVgHzhfaボージョレヌーボーかよ
0797デフォルトの名無しさん
2015/03/08(日) 22:35:24.46ID:Z29u4kmy>>794
ありがとうございます。もやっとしていた箇所が論理というより
慣習、使いやすさの問題であることが理解出来ました。
0798デフォルトの名無しさん
2015/03/09(月) 05:48:29.40ID:s9RXGrXOhttp://anago.2ch.net/test/read.cgi/bizplus/1425792285/
「日本史なんかより、プログラミングを教えるべき」
三木谷浩史氏と夏野剛氏が日本の技術者不足を嘆く
0799デフォルトの名無しさん
2015/03/09(月) 18:32:41.03ID:Ex/E2HEOそのためには医者みたいな免許制がいいな
国が発注するような重要な区分の案件には免許を持ったスタッフしか関われないんだよ
0800デフォルトの名無しさん
2015/03/09(月) 20:40:58.82ID:8xa3vBtzと型Xが定義されたモジュールをモジュールMにインポートしました。
モジュールMで型XをShowのインスタンスにしたいのですが、
deriving Show と定義したのと同じように定義したいです。
このような場合は、deriving Show と定義された場合の show 関数を
真似るように自作するしかないでしょうか。
それとも、後から別に deriving Show 宣言を型Xの定義に追加する方法があるのでしょうか。
ちなみに、Show なのはただの例です。
deriving で宣言可能な型クラス全てについての質問です。
0801デフォルトの名無しさん
2015/03/09(月) 21:11:00.35ID:icxJlozu0802デフォルトの名無しさん
2015/03/09(月) 23:40:14.25ID:niBaK9hSStandaloneDeriving拡張を使え
0803デフォルトの名無しさん
2015/03/10(火) 19:04:02.78ID:eDEZXqUuできました。
ありがとうございました。
0804デフォルトの名無しさん
2015/03/10(火) 20:05:05.97ID:g/a/DXRgキツキツが気持ちいいのではないでしょうか?
0805デフォルトの名無しさん
2015/03/10(火) 20:10:52.92ID:fs8coFhsラムダ式とか複雑な型とかの整合性をコード片を評価して確認したいだけなのに毎回GHCiにShowクラスのインスタンスじゃないってエラー吐かれるのは精神衛生上良くない
0806デフォルトの名無しさん
2015/03/10(火) 20:32:52.76ID:w7quuwwx0807デフォルトの名無しさん
2015/03/10(火) 21:53:45.67ID:6y+EDL2h0808デフォルトの名無しさん
2015/03/10(火) 21:59:42.54ID:cWhtU8Ivhttp://ja.stackoverflow.com/questions/2572/
0809デフォルトの名無しさん
2015/03/11(水) 07:49:05.85ID:gQycLvpo↑
こういうのが一番梯子外されそう
0810デフォルトの名無しさん
2015/03/11(水) 20:47:37.90ID:TIci70wOdata TX = DX TY
data TY = 何か
このような型定義が同じモジュールでなされています。
型コンストラクタTXや、関数f::Int -> TXなどはエクスポートされていますが、
型コンストラクタTYはエクスポートされていません。
ここで、ある範囲内の値に関数fを適用したときに
同一のTX型の値が返ってくることをテストしたいです。
ただし、実際にアプリケーションが稼動しているときには必要ないので、
TX型もTY型もEq型クラスのインスタンスにはしていません。
よって、このままでは、テストのためにこのモジュールをインポートしているファイル内で
deriving instance Eq TX としてもエラーが出ます(型コンストラクタTYが公開されていないので)。
私は下記のどちらかを諦める必要があるのでは、と思いました。
1. 型コンストラクタTYをエクスポートしないこと
2. TX型やTY型をEq型クラスのインスタンスにしないこと
(他の方法もいくつか思いつきましたが諸事情で不採用にしました)
しかし、もしかしたら、これらのことを諦めずに解決するような、
私の知らない方法があるのかも知れません。
例えば、プラグマやコンパイルオプションなどで何かしら宣言すると、
エクスポートされていないの型や関数などが限定的に使えるとか。
cabal ファイルのTest-Suiteで何か宣言すればエクスポートの範囲が変化するとか。
何かないでしょうか。
0811デフォルトの名無しさん
2015/03/11(水) 22:49:21.05ID:LvC4ZRIJ逆に、型名を非公開にする理由は、たとえ型が合っていても値が変わるだけで困るから
テストをする理由も同じ
型を諦める必要があるというか既にもう諦めてるから
0812デフォルトの名無しさん
2015/03/11(水) 23:17:50.99ID:ZHiGUb9Zなにが困るのかがさっぱり。
どうしても嫌なら#ifdefでインスタンス宣言を括ってどうぞ。
0813デフォルトの名無しさん
2015/03/12(木) 00:04:40.50ID:QEc8icgiでも別の解決策が欲しい
この設計思想がある解決策の梯子を外し別の解決策へ移行させようとする原因だった
0814デフォルトの名無しさん
2015/03/12(木) 03:26:04.17ID:XqLrTnef2つ現実的な方法がある
1. Internalモジュールを作ってテストする
2. Eqインスタンスをエクスポートする(して何が困るの?
0815デフォルトの名無しさん
2015/03/12(木) 20:13:40.54ID:5VtmxQOaアドバイスをもとに影響度合いなどいろいろ考えた結果、
型コンストラクタTYもエクスポートする方向でいくことにします。
Eqのインスタンスにして何が困るのかという話ですが、不都合は今のところ起こりません。
だから、この方法の >>810 で候補に挙げています。
ただ、アプリケーションを稼働させるには不必要なことです。
もしテスト方法を変えれば、本当に無意味な記述になります。
型コンストラクタTYもエクスポートする方法も同じです。
アーキテクチャレベルでテストしやすいよう考えるのは当然ですが、
今回のようなレベルでアプリケーションのソースがテストに依存するのは
どうも違和感あるというか、気持ち悪いです。
しかし、現実問題として言語仕様上どうしようもないので
「諦める」という表現を使いました。
0816デフォルトの名無しさん
2015/03/12(木) 20:50:39.48ID:5VtmxQOaさっそく型コンストラクタTYもエクスポートする方法でやろうとしましたが、
これだけではエラーが出てダメでした。
型を定義したモジュール外で stand-alone deriving を使うには、
そのデータコンストラクタもエクスポートする必要がありました。
これではさすがにマズいので、TX型とTY型の両方を、
定義したモジュール内でEqクラスのインスタンスにする方法でやることにしました。
こちらの方がはるかにマシでした。
0817デフォルトの名無しさん
2015/03/12(木) 21:10:17.71ID:0zpeSjHe1. 無意味なものは許す
2. 有害なものは許容範囲内なら許す
3. 有害で許容範囲を超えたら許さない
なので無意味なものをわざわざ批判するとバランスがおかしくなると思う
0818デフォルトの名無しさん
2015/03/13(金) 13:54:23.42ID:LttjjwH80819デフォルトの名無しさん
2015/03/13(金) 19:39:29.07ID:4mx0G3rL0820デフォルトの名無しさん
2015/03/13(金) 19:43:32.40ID:hUcCsH7semacsの設定て敷居高いですね
0821デフォルトの名無しさん
2015/03/13(金) 20:41:50.68ID:LttjjwH80822デフォルトの名無しさん
2015/03/13(金) 21:21:48.64ID:hUcCsH7s0823デフォルトの名無しさん
2015/03/13(金) 21:45:58.34ID:lEcXR8jN0824デフォルトの名無しさん
2015/03/13(金) 22:12:50.10ID:hUcCsH7s0825デフォルトの名無しさん
2015/03/14(土) 00:04:18.42ID:26umtMML横レスすまんが、 >>821 は言葉の用法の間違い (というかもうそっちが定着してるから間違いとも言えんレベルだが)
を揶揄したものなのに華麗にスルーされててワロス
0826デフォルトの名無しさん
2015/03/15(日) 08:08:17.22ID:7pgtsg0r0827デフォルトの名無しさん
2015/03/15(日) 14:31:07.85ID:HF4x7IBdどうするのがエレガントだと思う?
data A = A {a1 :: B, a2 :: C}
data B = B {b1 :: D, b2 :: E}
data C = C {c1 :: D, c2 :: F}
data D = D {d1 :: Int}
data E = E {e1 :: String}
data F = F {f1 :: D}
例えば x = A (B ( D 1) (E "x")) (C (D 2) (F (D 3)))
g :: A -> Int -> A
g a = 「a の ...C (D n) ... のところの n を *10 しただけのA型の値を返す」
例えば g x は A (B ( D 1) (E "x")) (C (D 20) (F (D 3))) だ。
0828デフォルトの名無しさん
2015/03/15(日) 14:32:56.30ID:HF4x7IBdごめん、ミスった。
g :: A -> Int -> A の第2引数は無しで。
0829デフォルトの名無しさん
2015/03/15(日) 14:58:59.46ID:q9l2n6dJ0830デフォルトの名無しさん
2015/03/15(日) 15:30:36.85ID:A1oM2KXe賭は俺の勝ち
http://kenokabe-techwriting.blogspot.jp/
0831デフォルトの名無しさん
2015/03/15(日) 16:12:33.97ID:wei4B/2R0832デフォルトの名無しさん
2015/03/15(日) 22:41:18.42ID:kXbqULDTという環境でghciを使ってるのですが
ghci中のカーソルキーの入力がたまにおかしくなります
具体的には、↑がAやOA、↓がBやOB、→がCやOC、左がDやODという文字の入力になってしまいます
たまにというのは、ずっと→を押していると、不定期に数秒に一回DやODが入力されるような間隔です
こうなってしまう原因と解決方法に心当たりはありませんでしょうか?
ちなみに、ghciを起動していないubuntuのシェル(bash)では上記のようにはならず(ずっと→を押しても余計な文字は入力されず)正しく使えています
0833デフォルトの名無しさん
2015/03/15(日) 22:42:40.17ID:kXbqULDTaptから入れたもので、GHCi, version 7.6.3:です
0834デフォルトの名無しさん
2015/03/15(日) 23:10:44.25ID:HF4x7IBdありがとう。
おかげで楽にはなったが、data B はいろんなところで使える型として
値構築子やフィールドも公開しているんだよなぁ。
これのフィールドは他のところでは普通にアクセスしたいんだが、
Lens使うと前置詞としてのアンダーバーは強制なんだね。
幸い、深くアクセスするのはこれらの型を定義しているモジュール内でだけだから、
フィールド名の前後にアンダーバーを付けて、data B だけは
そのフィールド名のアンダーバーを取っ払った名前のアクセス関数を
改めて作って公開することにしたよ。
0835デフォルトの名無しさん
2015/03/16(月) 05:01:14.76ID:5XnXSgrq岡部健のネタはもうやめろ
0836デフォルトの名無しさん
2015/03/16(月) 09:21:16.09ID:IRjKOJtG0837デフォルトの名無しさん
2015/03/16(月) 12:07:52.37ID:Neeu70ky0838デフォルトの名無しさん
2015/03/16(月) 17:17:22.31ID:jh0egios0839デフォルトの名無しさん
2015/03/16(月) 20:19:53.52ID:OhH2Zqatcabal ファイルを作って cabal configure したとき、下記の警告が出ます(改行は私が入れた)。
Warning: This package indirectly depends on multiple versions of the same package.
This is highly likely to cause a comple failure.
この後ろに、パッケージの依存関係が列挙されています。
例えば regex-base-0.93.2 は mtl-2.1.3.1 に依存していますが、
exceptions-0.8.0.2 は mtl-2.2.1 に依存しているようです。
この警告はこちらの努力で解消できる(すべき)ものなのでしょうか。
それとも、コンパイルが通るならとりあえず無視して良い(それ以外に無い)のでしょうか。
0840デフォルトの名無しさん
2015/03/16(月) 20:33:56.85ID:E+TaWzS7Regex-baseに特別な事情がない限りパッケージングのミスだろ。
なんとでも好きなようにしたらいい。
0841デフォルトの名無しさん
2015/03/16(月) 20:45:42.28ID:OhH2Zqat> 2.1.3.1「以上」に依存してるはずだが、
Hackage で regex-base の Package description を見てみましたが、
Build-Depends にある mtl にはバージョン範囲の指定はありませんでした。
(というより、base 以外は範囲指定はないです)
これが、パッケージングのミスというものでしょうか。
0842デフォルトの名無しさん
2015/03/16(月) 21:04:55.89ID:E+TaWzS7ウォーニング放置しても無害なんだし、解決したきゃ努力せよ。
0843デフォルトの名無しさん
2015/03/16(月) 21:07:03.64ID:OhH2Zqatわかりました。
ありがとうございました。
0844デフォルトの名無しさん
2015/03/17(火) 20:27:35.71ID:FrSWu1Dj調べてみました。
cabal ファイルの build-depends にあるパッケージに、バージョンの制限が書かれていないと、
どのバージョンでも認めることを表明していることになる、
ということが分かりました。
exceptions の方には build-depends にちゃんとバージョンの制限が書かれていることも分かりました。
以下は私の推測です。
regex-base の後に exceptions がインストールされ、
その間に別のパッケージのインストール時に必要性から mtl がアップデートされていた。
regex-base のインストール時の mtl のバージョンは 2.1.3.1 だったが、
exceptions のインストール時には 2.2.1 だった。
しかし、この推測だと、警告される理由がまだ分かりません。
regex-base はどのバージョンの mtl でも問題ないと言っている。
少なくとも cabal configure はそう捉えるはず。
(でなければ、何のための build-depends の記述か分からない)
それなら、なぜ高い可能性で compile failure を起こすと警告するのか。
問題ないのに。
私の環境では mtl に依存しているパッケージで 2.1.3.1 に依存しているのは regex-base のみで、
他のパッケージは全て 2.2.1 に依存しています。
なので、余計に警告の意味が分かりません。
0845岡部 健
2015/03/18(水) 16:11:13.47ID:WIL/PpJs0846デフォルトの名無しさん
2015/03/18(水) 23:25:07.18ID:FNOxTMt1なりすまし氏ね!
0847デフォルトの名無しさん
2015/03/19(木) 13:07:40.79ID:Mi/YioFJエンジニアの確保が容易で
安定した信頼性の高いプログラムが作れる
高い生産性が期待できる言語です
みたいな感じでjavaみたいな売り込みかたしようよ
0848デフォルトの名無しさん
2015/03/19(木) 13:22:53.73ID:u8piOzKi0849デフォルトの名無しさん
2015/03/19(木) 20:09:10.86ID:ghSRX08t製品に組み込んだ途端にスペースリークしまくるのがオチ
結局、旧来の言語・パラダイムに精通した熟練者が必要になる
0850デフォルトの名無しさん
2015/03/19(木) 22:33:33.17ID:W/Yj+6+X計算理論をチューリングマシーンじゃなくて、λ計算や帰納関数をメインに教えるように大学がカリキュラムを組めばなんとか…
0851デフォルトの名無しさん
2015/03/19(木) 22:49:52.83ID:IhfgyQoX人によっては Haskellでスペースリークをよく起こす。
たとえば下記の2番目のコードを得意げに書いて、それが本当に最適化になっているのか、
指摘されるまで一度も考えようとしない人を何度も見てきた。
課題 : length を自作せよ f :: [a] -> a
改善前
f [] = 0
f (x:xs) = 1 + f xs
本人にとっては処理速度やメモリスペースを改善したつもり
f xs = g 0 xs
where g n [] = n
g n (x:xs) = (n + 1) xs
指摘しても、また同じことを繰り返す。
0852デフォルトの名無しさん
2015/03/19(木) 23:09:15.27ID:W/Yj+6+X0853デフォルトの名無しさん
2015/03/19(木) 23:35:35.95ID:IhfgyQoX私もそう思うが、>>851 で私が問題にしたのは、
評価の仕組みを自分の頭で考えようとせず、
これでいいだろうと思い込んでいること。
自称熟練者はいろんな本を読んで方法には精通しているが、
背景や理論には背を向けてきたからね。
初心者か、旧来言語の熟練者かに関係なく、
自分が組んだプラグラムが動く仕組みに常に関心を持って、
面倒くさがらずに深く考えられる人が、
安定した信頼性の高いものを作るんだと思う。
初心者は初心者なりの規模で、熟練者は熟練者なりの規模でね。
0854デフォルトの名無しさん
2015/03/20(金) 01:11:37.73ID:kRGTPNvL0855デフォルトの名無しさん
2015/03/20(金) 01:47:43.09ID:GPN1Pmpt長文演説を続けていた。あの頃の岡部、俺は大好きだ。
俺は粘着軍なんかとは違う。純粋に岡部のファンなんだよ。
0856デフォルトの名無しさん
2015/03/20(金) 15:14:15.92ID:kIK8wyTb0857デフォルトの名無しさん
2015/03/20(金) 18:42:25.65ID:+SAQAguo上の例なら「末尾再帰にすればスタック領域使わなくなるからオススメよ」と言うだけで良いのでストレスにもなりません。
そういう意味では.を駆使したポイントフリースタイルは読みづらいです。右から左に読むので普段と逆になってしまいます。
0858デフォルトの名無しさん
2015/03/20(金) 18:51:50.40ID:kRGTPNvL>そういう意味では.を駆使したポイントフリースタイルは読みづらいです。右から左に読むので普段と逆になってしまいます。
ポイントフリースタイルが読み辛いのは事実だが、これは意味不明。
関数の連鎖はどうやったって右から左に読むだろ。
普段コードを右から左に書いていくのに慣れてれば、別にそれで読みにくくはない。
0859デフォルトの名無しさん
2015/03/20(金) 20:35:44.50ID:kIK8wyTb0860デフォルトの名無しさん
2015/03/20(金) 20:52:37.64ID:oneN4TcSこだわるにはそれだけの理由がある
0861デフォルトの名無しさん
2015/03/20(金) 22:11:18.10ID:+SAQAguoOCamlのf1 x |> f2 |> f3 とするのが自分には合っていただけだった。
例えばテキスト読み込んで行ごとに分けてーって考えながらタイプしてると|>が便利でな…
今書いてて思ったのだけど、>>=より=<<の方が読み方向の一貫性が出ないでしょうか
0862デフォルトの名無しさん
2015/03/20(金) 22:38:22.21ID:kIK8wyTb課題 : length を自作せよ f :: [a] -> a
おかしいと思わなかったんだろうか、この型。もう少し考えてコード書こうよ。
0863デフォルトの名無しさん
2015/03/20(金) 23:25:25.12ID:oneN4TcSあくまで俺個人の感覚だけど
関数合成(・)や関数結合($)は引数への関数の適用だから、
書く方向と適用の順番が逆なのはなんの違和感もない。
数学で関数の式を書いていて違和感ないのと同じ。
一方、モナドのバインドは意味的には何かを適用してるのではなく、
計算の流れを表しているから、書く方向がそのまま流れと一致してほしい。
だから、>>= の方がきもちいい。
俺としては、むしろアロー表記の方向が気持ち悪い。
アローの説明でよく回路図みたいなのが出てくるが、
あれはみんな左から右へ流れるように描くのに。
0864デフォルトの名無しさん
2015/03/21(土) 00:30:01.27ID:rS60ZlVdlengthを自作せよ、で"f"に型を付けてるのも笑いどころ。
しかも、蓄積子使ってる方のコードは再帰になってない&当然型が合ってないというお笑いぶり。
この人、Haskell書いたことないんだろうな、と。
0865デフォルトの名無しさん
2015/03/21(土) 12:12:38.77ID:vO/f2A+C0866デフォルトの名無しさん
2015/03/21(土) 12:37:55.98ID:iwfo5L6eわりと下から上になるな
0867デフォルトの名無しさん
2015/03/21(土) 21:27:50.79ID:+UFWZYTkThink different? by 2ch.net/bbspink.com
0868デフォルトの名無しさん
2015/03/23(月) 02:36:09.56ID:ed0qti8j0869デフォルトの名無しさん
2015/03/23(月) 23:24:20.34ID:bdXDdAXWどこがだよw
0870デフォルトの名無しさん
2015/03/24(火) 11:53:09.11ID:n7Lq3ZiO計算理論むき出しの感じがいい
0871デフォルトの名無しさん
2015/03/24(火) 19:25:08.43ID:+bpB/1qX適当に書くとお前はわかってないと
言語とコミュニティからダメだしされるイメージ
0872デフォルトの名無しさん
2015/03/25(水) 00:06:23.08ID:Trr74Hk30873デフォルトの名無しさん
2015/03/25(水) 03:44:11.08ID:vS24XCcsサイト名とか具体的に挙げてもらえませんか?
0874デフォルトの名無しさん
2015/03/25(水) 04:20:31.37ID:Trr74Hk30875デフォルトの名無しさん
2015/03/25(水) 08:17:46.15ID:TFTiCugB0876デフォルトの名無しさん
2015/03/25(水) 09:53:03.83ID:57C2efn30877デフォルトの名無しさん
2015/03/25(水) 09:58:56.49ID:z1y3EjAR立ち位置的な意味で
0878デフォルトの名無しさん
2015/03/25(水) 12:27:54.98ID:02y6cbqk0879デフォルトの名無しさん
2015/03/25(水) 13:30:58.36ID:MLqzq6nP0880デフォルトの名無しさん
2015/03/25(水) 15:09:50.36ID:B13xpX6A0881デフォルトの名無しさん
2015/03/25(水) 18:07:16.13ID:AUDsLf9R0882デフォルトの名無しさん
2015/03/25(水) 22:21:50.58ID:PsNUsr4x自由なテキストが多かったり haskell wiki が充実してたりするためかもしれない
0883デフォルトの名無しさん
2015/03/25(水) 22:30:38.72ID:7CQuP5AA生成物の実効速度○○%Upとかいう話はないね。
リリースノートにも書かれてないと思う。
スピードはあまり気にしていないのかな。
0884デフォルトの名無しさん
2015/03/26(木) 09:38:50.60ID:lJQgNJuEC/C++に勝てると思うな
それでもHaskellは健闘している
大抵のことはスピードよりも持続可能な開発が尊重される
お前の計算機科学的特性も世界保全戦略に同化される。抵抗は無意味だ
0885デフォルトの名無しさん
2015/03/26(木) 20:20:47.85ID:6b6jz8AL実行効率でCに勝とうとか、そんな無謀なことは思ってないよ。
ただ、これだけ処理速度が上がりました、これだけ使用メモリがへりました、
というレポートはなんで無いんだろうと単純に思っただけ。
(持続可能な開発がこのように改善されました、という報告も無いけどね)
最後の行は理解できませんでした。
0886デフォルトの名無しさん
2015/03/27(金) 03:25:57.58ID:9yTIqLKdhttp://kenokabe-techwriting.blogspot.com/2015/03/qiita.html?showComment=1427367112199&m=1#c8379287369018080353
0887デフォルトの名無しさん
2015/03/27(金) 10:01:50.26ID:HpVN79Nq0888デフォルトの名無しさん
2015/03/27(金) 16:18:48.97ID:2D781VI+http://stackoverflow.com/users/1028880/ken-okabe
0889デフォルトの名無しさん
2015/03/28(土) 12:51:17.88ID:am8aByMw今のていたらくは何だ
0890デフォルトの名無しさん
2015/03/28(土) 20:53:55.86ID:4WENvZ8mあいつらのうちどれだけがIO型をIOモナドと呼ぶことの弊害を理解していたのか。
0891デフォルトの名無しさん
2015/03/28(土) 21:52:47.32ID:V1hOllOl0892デフォルトの名無しさん
2015/03/28(土) 22:55:26.85ID:1qDJ7oSy0893デフォルトの名無しさん
2015/03/28(土) 23:26:05.51ID:eJyl6Yy2具体的にどんな弊害があったの?
0894デフォルトの名無しさん
2015/03/29(日) 00:32:58.82ID:B+lgx0sXttp://blog.jle.im/entry/io-monad-considered-harmful
を読みなさい、と言おうと思ったが読めないな今。自分が言えることは
1. IO型で副作用を扱えるのはモナドだからではない。
2. ブラックボックス化されたコンテナの中身に安全にアクセスする方法を作ったら数学で言うモナドと呼べるものになった。
学ぶ順序を逆にして惑わせるのが先人のすることか?あいつマクレーン読みだしたぞ。
3. 数学的構造であるモナドの定義を理解しても、各種型をどうモナドとみなしているのかは分からない。
型に帯するモナドは一意に決まるというわけではない。
4. だからインスタンスを1つずつ理解しないといけない。
モナドはCのポインタやOOPのデザインパターンのような、それが分かれば具体例も簡単に理解できるという類のものではない。
あたかも「モナドを理解すればIOが分かる」かのような印象を与えるような、IO型をIOモナドとわざわざ言うのは害悪。
「純粋関数型で副作用を扱うにはモナドが要る」とか言っちゃう人がいる。
「モナドを勉強しなきゃ」とか思ってしまう初心者がいる。そんなドロ舟に乗せたい奴がIOモナドとスノッブ丸出しの用語を使う。弊害じゃきゃ何なんだ。
0895デフォルトの名無しさん
2015/03/29(日) 02:37:49.08ID:jcoheZvF(整数を知らない人が)整数を理解しようとして
環論を勉強し始めるようなものだ
ってことか
0896デフォルトの名無しさん
2015/03/29(日) 04:21:36.17ID:jJf5qR8c型クラスとしてのアプリカティヴやモナドの挙動は理解しないと
いずれにせよ現状のHaskellでIOはまともに扱えないだろ。
裏で状態を受渡してるのを隠蔽するという
よくあるタイプのモナドの使い方のひとつ
(そしてそれは一意型ほどclumsyでない)、
という事情はむしろ強調してしかるべき。
0897デフォルトの名無しさん
2015/03/29(日) 04:52:21.52ID:+wVq29XI0898デフォルトの名無しさん
2015/03/29(日) 09:31:34.21ID:B+lgx0sX整数の定理を勉強したい人に「整数はzipper構造を使ったチャーチ数の亜種である」と言えることを教えたって無意味。
モナド自体に勉強する価値をもたせたいなら、例えば関数をベクトルとみなすことでフーリエ変換やz変換が上手に説明できる、というくらいには、その抽象化でどうして便利になるのかというメリットを説明できないといけない。
>>896 ある物の挙動を理解させるのに定義を教えず、挙動だけ教えろって?
義務教育なら(頭を対象に慣れさせるためにも)そのアプローチは理に適っているが、
モナドに関して定義->定理->実例という学習プロセスが何故迂遠なのかをどう教える?
如何に遠回りかの説明に骨を砕かないと初学者がマクレーン読み出すぞ。
そもそも「状態を隠蔽する」のに最も寄与しているのは型コンストラクタの隠蔽であって、
問題の根幹は、状態が隠蔽されている型に対し如何にしてアクセスすればいいのか、どのような操作を認めるべきでどのような操作を認めてはいけないのか、という部分にある。
最後に「それをまとめたらモナドと呼べるものになった」とか付け加えたらやっぱりマクレーンを読ませようと誘惑していることになる。
0899デフォルトの名無しさん
2015/03/29(日) 09:48:42.09ID:RiJnnk6J圏論の教科書がMacLaneぐらいしかなかった時代と違って今は色々
わかりやすい読み物があるので、圏論的なモナドの話は別に難しくなく、
むしろ普通のOOPには現れない「振る舞いによる法則」レベルの抽象化
であることがよく理解できるので、IO「モナド」というのが有害というのは
納得いかんなあ。
「振る舞いによる法則」を理解しても個々のモナドの振る舞いは個別に
学ばねばならないことは同意。
0900デフォルトの名無しさん
2015/03/29(日) 10:42:24.05ID:PO6Lt1kKEvernote からノートの文字列を取得する程度の小粒アプリから、
シンプルな格ゲー程度の中型アプリまで、まずは十数個ほど作らせて、
胸張って中級者と言えるようにする。
上級者向けのモナドの意味や理論などのトピックはその後でしょ。
あくまでプログラミング言語なんだから、コンピューターを制御してなんぼ。
アプリが作れなければ、理論を学んでも使えない。
入門書にはこの順番を間違えないでほしいといつも思う。
0901デフォルトの名無しさん
2015/03/29(日) 11:27:33.84ID:B+lgx0sXあと「振る舞いの法則」ってのも具体的には何なのか教えて下さい。
0902デフォルトの名無しさん
2015/03/30(月) 00:02:31.08ID:odnzVWCgttp://haskell-distributed.github.io/
今どき、ゲームなんて費用対効果の悪いもの作るマヌケ居るわけ?
0903デフォルトの名無しさん
2015/03/30(月) 06:51:05.89ID:pIvnNKWO費用対効果の高さを学んでもらうのが狙いじゃないから
0904デフォルトの名無しさん
2015/03/30(月) 10:43:49.86ID:kVQ7S1yd0905デフォルトの名無しさん
2015/03/30(月) 11:27:03.19ID:YgdRSR6f0906デフォルトの名無しさん
2015/03/30(月) 14:44:06.44ID:odnzVWCgオマエ、格ゲーなんて作ったことないだろw
少しでもプログラミングを齧った連中は、
今もう書籍なんか読まずにOSSのコード取ってきてプリントアウトするから
0907デフォルトの名無しさん
2015/03/30(月) 15:56:12.59ID:TUvaAE9z0908デフォルトの名無しさん
2015/03/30(月) 17:27:11.14ID:461j1ZwJ0909デフォルトの名無しさん
2015/03/30(月) 19:02:16.70ID:s2KoJfya0910デフォルトの名無しさん
2015/03/30(月) 20:53:33.08ID:pIvnNKWO残念ながら、今はまだHaskellでそれができる状況にはないと俺は思ってる。
CやJavaやPythonなど、いくつかの他言語ならいいけど。
0911デフォルトの名無しさん
2015/03/30(月) 22:28:08.40ID:odnzVWCgオマエに出来ないだけで、既にグラディウスやマリオのcloneを作ったプログラマなら幾らでもいるからね
0912デフォルトの名無しさん
2015/03/30(月) 23:03:53.92ID:pIvnNKWOそれらは、Haskellによるアプリ作りとはこういうものなんだ、
と言えるような、「初心者が学ぶ」のに良い題材なのか?
グラディウスのクローンってモナディウスのことだよね。
あれ、作者自身があまり参考にしてほしくないようなことを言ってなかったか?
ソースを読んだことあるが、全体的にHaskellに翻訳しました的なものだったと記憶してる。
(作者や作品を貶しているわけではない。あくまで初心者が真似して良いかという観点)
その点、darcs なんかは比較的宣言的で綺麗なんだが、いかんせん、規模が大きい。
初心者に適した題材の実例がないような気がする。
もちろん、俺が知らないだけだろうから、何かかあるのなら挙げるといい。
それを見て真似る初心者がたくさん現れれば素晴らしいことだから。
0913デフォルトの名無しさん
2015/03/30(月) 23:47:26.03ID:odnzVWCg>>900
>上級者向けのモナドの意味や理論などのトピックはその後でしょ。
0914デフォルトの名無しさん
2015/03/30(月) 23:56:03.68ID:pIvnNKWOちょっと誤解を与えそうな表現だったから訂正させてほしい。
> 「初心者が学ぶ」のに良い題材なのか?
題材じゃないな。
「初心者が学ぶ」のに良い資料なのか?
>>913
宣言的に書かれた良いソースを「真似て書く」のと、
その美しさを支えるモナドなどの「理論を学ぶ」のは別だよ。
初心者は真似まくってスタイルを体出覚えた方がいいと私は思う。
理屈はその後。
ちなみに、私はHaskellでは理論や小手先のテクニックばかり追いかけて、
初心者のうちにアプリをほとんど作ってこなかった事を非常に後悔している。
理論が邪魔して、実力に見合った規模のアプリを実力に見合った作り方でなかなか作れないでいる。
0915デフォルトの名無しさん
2015/03/31(火) 00:42:54.95ID:tAAH49rk>理論が邪魔して、実力に見合った規模のアプリを実力に見合った作り方でなかなか作れないでいる。
それは実力がないだけ。
まさにそれがあなたの実力。
0916デフォルトの名無しさん
2015/03/31(火) 00:46:22.39ID:UgHipcgW0917デフォルトの名無しさん
2015/03/31(火) 01:56:07.61ID:xBEas+F+>理論が邪魔して、実力に見合った規模のアプリを実力に見合った作り方でなかなか作れないでいる。
ああ居るよね。そういう人。c++の本を書くために家を売ってドワンゴに就職したヤツとか
perlやjavascriptの瑣末を追っかけてた人とか。だから、結局は皆、PHPとcを選ぶんだ
0918デフォルトの名無しさん
2015/03/31(火) 06:16:20.74ID:PitBeDzAそれ平均値じゃなくて中央値な
0919デフォルトの名無しさん
2015/03/31(火) 07:07:10.53ID:UgHipcgWちゃんと「平均以下」とあいまいに言ってるよ。
0920デフォルトの名無しさん
2015/03/31(火) 07:48:29.02ID:lJu1LRNc各自が持っている曖昧なイメージを理論なんて呼んでいるのか?
それとも俺が知らない素敵な圏論の定理があってそれを使うとびっくりするような機能を実現できるのか?
数学ではギリシャ文字がよく出てくるからギリシャ語を学びましょうってか?頭がお詳しいなこの野郎。
0921デフォルトの名無しさん
2015/03/31(火) 08:50:13.03ID:tAAH49rk>それとも俺が知らない素敵な圏論の定理があってそれを使うとびっくりするような機能を実現できるのか?
せいぜいのところ型遊びするときに米田の補題が役に立つときがある、くらいだよなあ。
0922デフォルトの名無しさん
2015/03/31(火) 08:54:40.14ID:tAAH49rk>ちゃんと「平均以下」とあいまいに言ってるよ。
ほんとになんもわかってねーのか?
0点1人と100点99人がいる場合に平均=99点以下なのは1人だけだろうがw
0923デフォルトの名無しさん
2015/03/31(火) 09:48:18.38ID:+3W0JsEP>c++の本を書くために家を売ってドワンゴに就職
なにそれこわい
0924デフォルトの名無しさん
2015/03/31(火) 10:29:13.67ID:qMwd6CaFhttps://plus.google.com/102413788769460359022/posts/44Urws3T7je
0925デフォルトの名無しさん
2015/03/31(火) 12:35:15.03ID:V49MH64n個人的には、言語ランタイム(mainの呼び出し元)からずりずりケーブル引きずって制御パネルを
持ち歩いているイメージ。
そして、それ(ケーブルを引きずる)を可能にしているのがモナドの代数的性質。
純粋な関数で入出力ができないのはそういうことだと理解している。
0926デフォルトの名無しさん
2015/03/31(火) 14:20:13.95ID:8nbXovb7Cのトランスレータで使うときに爆発的に役立つ
0927デフォルトの名無しさん
2015/03/31(火) 14:25:28.69ID:G4CzsdzS俺もそれと同じ
その理解で全く問題なくプログラミングできてる
それ以上の理解なんていらんよ
あっても害はないけど、不必要だし、余計な手間
0928デフォルトの名無しさん
2015/03/31(火) 14:42:18.73ID:meXl7bV+さすがに「それ以上の理解」がない人が
不要とか手間とか言っても全く説得力がない
0929デフォルトの名無しさん
2015/03/31(火) 15:46:49.29ID:vkwjJNkOまぁ、確かにそりゃそうだが
でも実際プログラミングできてるし、
簡単な家計簿ソフトとか倉庫番ゲームとか問題なく作れるし
これ以上IOモナドの何を理解する必要があるって言うのさ
0930デフォルトの名無しさん
2015/03/31(火) 16:02:00.60ID:HBUStIw10931デフォルトの名無しさん
2015/03/31(火) 16:17:11.48ID:vkwjJNkO0932デフォルトの名無しさん
2015/03/31(火) 17:39:02.38ID:1d6g1tI60933デフォルトの名無しさん
2015/03/31(火) 18:40:00.15ID:meXl7bV+アセンブラでプログラムが書ける人が「これ以上何を理解する必要があるって言うのさ」と言ってるのと同じ
0934デフォルトの名無しさん
2015/03/31(火) 19:06:19.12ID:TsIo80blじゃあIOモナドについて、どんなソフトを作るのに、
>>925 以上のどんな理解が必要になるの?
0935デフォルトの名無しさん
2015/03/31(火) 19:28:50.39ID:tAAH49rk0936デフォルトの名無しさん
2015/03/31(火) 20:01:44.46ID:hBYt1SAS0937デフォルトの名無しさん
2015/03/31(火) 20:10:16.88ID:TsIo80bl>>925 の理解では >>935 や >>936 をプログラムできない、あるいは非効率な理由を
0938デフォルトの名無しさん
2015/03/31(火) 20:31:38.01ID:xBEas+F+本の虫。Larryだって、リバースモゲージで生きてたんだよ
僕は素敵なHaskell入門書が世に出版されるのを、じっと見守ろうと思う
0939デフォルトの名無しさん
2015/03/31(火) 20:38:33.87ID:tAAH49rk具体的にもなにも、まさに件の程度の理解でCPS変換やって
計算量のオーダー下げられるか試してみりゃいいじゃないの。
0940デフォルトの名無しさん
2015/03/31(火) 21:28:57.81ID:TsIo80blさっきから微妙に話が噛み合ってないような気がするんだが
もしかしてきみはモナドそのものに関わる理解の話をしていないか?
俺はIOモナドの理解の話をしているんだが
IOモナドを使ってプログラミングすることにおいて、
IOモナドの理解の深さとして >>925 では足りない例なのか >>935 は
0941デフォルトの名無しさん
2015/03/31(火) 21:48:48.01ID:O1cF667I遅延評価のせいで実際の IO のタイミングやパフォーマンス向上の際に
独特の問題があるのは、 IO モナドの問題と言っていいのかな?
0942デフォルトの名無しさん
2015/03/31(火) 21:54:55.41ID:TsIo80blそれは遅延評価の理解の問題だよ
IO特有の問題ではない
0943デフォルトの名無しさん
2015/03/31(火) 23:05:53.41ID:2kdyJZbM遅延評価をいつどんな理由でぶった切ればいいかを教えてくれるのが並列並行Haskellだと思ってる
0944デフォルトの名無しさん
2015/04/01(水) 02:18:54.75ID:zLa3MADx0945デフォルトの名無しさん
2015/04/01(水) 21:07:27.62ID:ZBGUyXKP0946デフォルトの名無しさん
2015/04/02(木) 12:43:50.32ID:INFrUse2バイナリ1つにできると思い込んでた
結構手間かかんだね
0947デフォルトの名無しさん
2015/04/02(木) 16:40:51.14ID:XQ7U1MLO0948デフォルトの名無しさん
2015/04/02(木) 23:40:28.76ID:+/mwTHcAlazy ioとかよりiterateeがうんたらって言ってるけど全然理解できない
0949デフォルトの名無しさん
2015/04/03(金) 05:14:35.55ID:1wzyyH4T0950デフォルトの名無しさん
2015/04/03(金) 11:34:20.31ID:haP2HuDT0951デフォルトの名無しさん
2015/04/03(金) 21:05:10.93ID:6jSxnujl0952デフォルトの名無しさん
2015/04/04(土) 17:46:47.54ID:8tbUo2zR真のモナドは引き継がないと永遠に失われる
http://i.imgur.com/uoOXcy4.png
0953デフォルトの名無しさん
2015/04/04(土) 20:24:26.19ID:apqAsPxvなりすまし氏ね!
0954デフォルトの名無しさん
2015/04/05(日) 10:28:14.89ID:6kmP5T9ehamlet 準クォートと違い shamlet 準クォートは Type-safe URLs を扱え、
準クォートの記述の後にレンダラ関数を受け取ります。
この、レンダラ関数を受け取ることやレンダラ関数の型は
ライブラリドキュメントのどこを見れば分かるのでしょうか。
今回の件に限れば、入門書やWebの情報を見て分かったので問題ないのですが、
今後の学習のことを考えると、公式のドキュメントでも把握できる、
裏をとる能力が必要だと思い、質問しました。
0955デフォルトの名無しさん
2015/04/05(日) 17:03:09.12ID:/p4ZvisLData.Arrayだと動くのにData.Array.UnboxedのUArrayにしてアクセスするとa.exe: <<loop>>になる
Arrayの方で全要素にアクセスしても正しく結果を返す
どういう原因が考えられるだろうか
0956デフォルトの名無しさん
2015/04/05(日) 21:00:54.28ID:6kmP5T9e一番良いのは、その問題のソースをどこかに公開することです。
大きすぎて難しいのならば、同じ問題が起きるより小さなソースを公開してはどうでしょうか。
例えばフィボナッチ数列(の動的計画法版)の出力でもその現象は起きますか。
実行時に <<loop>> と出力される現象をWebで検索して調べてみますと、
どうもごく単純な無限ループに陥っている場合に限るようです。
f = f + 1 などの引数のない再帰的な参照です(相互再帰も含む)。
話を聞く限りでは、array パッケージの方に問題があるようにしか思えませんが、
本当に「型を UArray から Array に変えただけ」で現象が治まるのでしょうか。
0957デフォルトの名無しさん
2015/04/05(日) 21:37:06.88ID:/p4ZvisLideoneにてフィボナッチ数で試してみたところ、同様の現象が起きました
Array:http://ideone.com/hM6dzT
UArray:http://ideone.com/Yp01Xb
ソース上の差分は型名に"U"があるかないかの1byteの差ですが
実行するとUArrayの方は<<loop>>のランタイムエラーになってしまいます
ソースに問題がありそうでしょうか、見ていただきたいです
0958デフォルトの名無しさん
2015/04/05(日) 22:45:55.70ID:6kmP5T9eUArray の構築途中に自己参照すると無限ループに陥ります。
a :: UArray Int Int
a = listArray (0, 1) [0, a ! 0]
理由は・・・ base と array のパッケージをDLしてソースを見てみましたが、
決定的なこと(単純な自己参照になっている証拠)は分かりませんでした。
おそらく、非ボックスなので配列全体が確定しないと参照できないから、
という辺りだろうとは思いますが。
0959デフォルトの名無しさん
2015/04/05(日) 23:24:00.02ID:/p4ZvisLありがとうございます
なるほどboxだと自己参照しても式を保持してるだけだから順にたどって評価できるけど
Unboxだと要素参照時に一気に全体を構築しようとするから構築中に参照すると再度全体を構築しようとして無限ループするってことですね
そういわれるとそうだなあとなんとなく想像できました
自分でもパッケージのソースを理解できるようになるよう勉強します。。
0960デフォルトの名無しさん
2015/04/05(日) 23:28:49.66ID:/p4ZvisLということは動的計画法のメモもUArrayで高速化!と単純に使うことはできなさそうですね
0961デフォルトの名無しさん
2015/04/06(月) 10:07:06.75ID:z61IB+9E0962デフォルトの名無しさん
2015/04/06(月) 21:52:51.93ID:G/X3auvA適当なパッケージも入れてみたんだが、
これ、ドキュメントのリンクが壊れてないか?
.cabal/share/doc/x86_64-linux-ghc-7.10.1/index.html
ここから辿れるはずのリンクが全て壊れてる。
たとえば Data.List のリンクは相対パス Data-List.html になってる。
つまり、.cabal/share/doc/x86_64-linux-ghc-7.10.1/Data-List.html になってしまっている。
.cabal/share/doc/x86_64-linux-ghc-7.10.1/doc-index.html
このインデックス(索引)ページから個々の関数へは何も問題なく辿れるが、
全然別の場所だ。
たとえば、Data.List.head 関数は
/usr/share/doc/ghc/html/libraries/base-4.8.0.0/Data-List.html#v:head
になっている。
これはどう言うことだろう。
.cabal/config の install-dirs user のセクションの項目は何も弄っていないんだが。
0963デフォルトの名無しさん
2015/04/07(火) 21:21:56.30ID:Dr0ZnCU/0964デフォルトの名無しさん
2015/04/07(火) 22:12:38.31ID:5+CxwFaHそれならあっちで訊いてみようかと思ったが、もしやと思って以下のことを試したら、
問題なくドキュメントが見れるようになったから、もういいや。
/usr/share/doc/ghc/html/libraries にある各パッケージ内のファイルを
~/.cabal/share/doc/x86_64-linux-ghc-7.10.1 にコピー
.cabal/config の install-dirs user セクションの docdir の末尾 /$pkgid を削除
同セクションの htmldir の末尾 /html を削除
もちろん、両者ともコメントアウトを解除
適当なパッケージをインストール
0965デフォルトの名無しさん
2015/04/08(水) 06:40:38.53ID:lUVNN4o/0966デフォルトの名無しさん
2015/04/08(水) 12:14:11.41ID:cDkL0Wby悔しかったらおまえらも本を出してみな?
http://www.amazon.co.jp/dp/4798043761
0967デフォルトの名無しさん
2015/04/08(水) 14:18:25.17ID:teBP6D430968デフォルトの名無しさん
2015/04/08(水) 14:56:31.55ID:z4/H7LA90969デフォルトの名無しさん
2015/04/08(水) 15:16:10.18ID:2BNKspCq0970デフォルトの名無しさん
2015/04/08(水) 15:45:29.02ID:tGwp3RJc0971デフォルトの名無しさん
2015/04/08(水) 16:40:32.61ID:YQenyVPnスレチなのに
0972デフォルトの名無しさん
2015/04/08(水) 16:51:12.44ID:wxj4ghaM0973デフォルトの名無しさん
2015/04/08(水) 18:43:33.29ID:TrrKWYIM0974デフォルトの名無しさん
2015/04/08(水) 19:19:20.20ID:mlk25XLU0975デフォルトの名無しさん
2015/04/08(水) 20:09:43.19ID:8XU2VIBhでも、誹謗中傷は良くないよー
今年の目標は、誤字脱字を無くすことかな?
0976デフォルトの名無しさん
2015/04/08(水) 20:22:02.04ID:2PDo66DT0977デフォルトの名無しさん
2015/04/08(水) 20:51:44.99ID:LkUjDtd80978デフォルトの名無しさん
2015/04/08(水) 21:17:15.22ID:teBP6D430979デフォルトの名無しさん
2015/04/08(水) 21:33:36.08ID:5ufJn9r/カイマイさんか?
ttps://twitter.com/_kenron_
0980デフォルトの名無しさん
2015/04/08(水) 23:55:32.38ID:myz0YUCE0981デフォルトの名無しさん
2015/04/09(木) 03:23:41.65ID:Ix9YNMr3http://d.hatena.ne.jp/hirono2011/touch/20140404/1397908870
0982デフォルトの名無しさん
2015/04/09(木) 03:25:26.77ID:Ix9YNMr3https://twitter.com/motoken_tw/status/452009450313097216
0983デフォルトの名無しさん
2015/04/09(木) 03:29:53.42ID:a98Ue6sT/::::::::::::.::::::::::::::::::::::::::::`::、、
/::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
ヽ:::: ´、ひ> ;: l .<ひ>' 、::::::::/
ヽ:::::  ̄ .)::; l  ̄ l::::/ < 次のスレではもう岡部の話は禁止な
、:::::.. /:::; .,-、 l:::/、
,―:::::::: ゝヽ- ー' 、 l::/,、ヽ
l,、,、,,:、:: / ,--、,-.、_ l /::::::,、,、l
l,、,、,、,、,、::、 `ー ̄-' /:::::::::::,、,、l
l,、,、,、,、,、,、::ヽ /::::::::、,、,、,、,ノ:\
0984デフォルトの名無しさん
2015/04/09(木) 05:07:06.30ID:QTbR1h7B下劣で品性の欠片も無いんだよ、下痢糞以下のゲロボケ野郎
0985デフォルトの名無しさん
2015/04/09(木) 05:08:21.11ID:QTbR1h7B0986デフォルトの名無しさん
2015/04/09(木) 08:29:01.75ID:4yjREsCN0987デフォルトの名無しさん
2015/04/09(木) 12:28:33.03ID:SXMrA4Vi要するに現実の問題に対処できねーんだろ?
0988デフォルトの名無しさん
2015/04/09(木) 12:31:34.64ID:SXMrA4Vi典型的な意識高い系のクズじゃん
0989デフォルトの名無しさん
2015/04/09(木) 12:35:27.62ID:SXMrA4Vi同じ芸風でやるの?w
0990デフォルトの名無しさん
2015/04/09(木) 17:34:56.45ID:hKndZDCY裁判費用は IQ145で美少女JKな先輩で稼ぐのか
0991デフォルトの名無しさん
2015/04/09(木) 17:38:20.52ID:hKndZDCY0992デフォルトの名無しさん
2015/04/09(木) 19:45:58.73ID:4yjREsCN誰かこれ教えてやれよ
0993デフォルトの名無しさん
2015/04/09(木) 19:54:35.43ID:SXMrA4Viレガシーシステムをなんとか救済してほしい
0994デフォルトの名無しさん
2015/04/09(木) 22:38:50.14ID:dWjcstD4っていう認識であってる?
0995デフォルトの名無しさん
2015/04/09(木) 23:01:23.83ID:G0037DPx0996デフォルトの名無しさん
2015/04/09(木) 23:18:03.23ID:nCfbCjTAどちらかが正しいと考えるのではなく、
様々な見方・考え方があることを受け入れることが大事だ。
片方しかないと思っていると、そちらの考え方で得られたかもしれないアイデア、
切り開かれたかもしれない新たな世界をみすみす逃すことになる。
あなたは、誰かからそれは計算の構造化の方が正しいと言われたら、
やっぱり思ってたとおりだ、と合点するのだろうか。
状態の構造化という考え方を捨て去るのだろうか。
0997デフォルトの名無しさん
2015/04/09(木) 23:24:57.75ID:G0037DPx0998デフォルトの名無しさん
2015/04/09(木) 23:29:36.04ID:dWjcstD4状態=変更可能なデータ構造の一種
で読み替えて貰えると
0999デフォルトの名無しさん
2015/04/09(木) 23:34:38.52ID:HP7+XEL91000デフォルトの名無しさん
2015/04/09(木) 23:40:47.32ID:c5VDj6mjGun = Kata
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。