【数学者】Haskellはクソ言語【オナニー】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/09/30(金) 01:34:050655デフォルトの名無しさん
2008/01/05(土) 16:44:47×Smalltall
0656デフォルトの名無しさん
2008/01/05(土) 17:12:45「型クラス」と「型構築子クラス」でオブジェクト指向っぽく使えて、副作用がないようにモナドやその一般化のアローが使える。
オブジェクト指向と関数型が共存出来ないと言いながらHaskellを使っている人は分裂気味なんじゃないでしょうかね。
0657デフォルトの名無しさん
2008/01/05(土) 17:23:030658デフォルトの名無しさん
2008/01/05(土) 17:26:07だから『準』と言っている訳だが
0659デフォルトの名無しさん
2008/01/05(土) 17:30:37ばか
0660デフォルトの名無しさん
2008/01/05(土) 17:38:26ご高説を是非御拝聴いたしましょう。
0661デフォルトの名無しさん
2008/01/05(土) 17:44:34関数型とオブジェクトなんざ共存出来ねんだよ。
無意味、無意味。無駄無駄無駄wwwwww
0662デフォルトの名無しさん
2008/01/05(土) 17:47:280663デフォルトの名無しさん
2008/01/05(土) 17:49:370664デフォルトの名無しさん
2008/01/05(土) 17:57:51arrow使いにくい
まるでbrainf*ckみたいに見える
結局は普通に書いたほうがきれいだ
0665デフォルトの名無しさん
2008/01/05(土) 18:13:14ばか
やっぱHaskellerってのは池沼だね。
0666デフォルトの名無しさん
2008/01/05(土) 18:20:23import System.Environment
-- Parser
data Command = Inc | Dec | Next | Prev | Put | Get | While [Command]
deriving (Show, Eq)
type Program = [Command]
parse :: String -> Program
parse s = program where (program, "") = parse1 s
parse1 :: String -> (Program, String)
parse1 "" = ([], "")
parse1 (']':xs) = ([], xs)
parse1 ('[':xs) = (While cmds1 : cmds2, rest2)
where (cmds1, rest1) = parse1 xs
(cmds2, rest2) = parse1 rest1
parse1 (x:xs) = (parse2 x, rest)
where (cmds, rest) = parse1 xs
parse2 :: Char -> Program
parse2 '>' = Next : cmds
parse2 '<' = Prev : cmds
parse2 '+' = Inc : cmds
parse2 '-' = Dec : cmds
parse2 '.' = Put : cmds
parse2 ',' = Get : cmds
parse2 _ = cmds
0667デフォルトの名無しさん
2008/01/05(土) 18:22:21tape0 = (['\NUL', '\NUL'..], 0) :: Tape
getCell :: Tape -> Char -- Get value of current position
getCell (cs, i) = cs !! i
setCell :: Tape -> Char -> Tape
setCell (cs, i) c = (take i cs ++ (c : drop (i + 1) cs), i)
inc, dec, next, prev :: Tape -> Tape
inc t = setCell t (succ $ getCell t)
dec t = setCell t (pred $ getCell t)
next (cs, i) = (cs, i + 1)
prev (cs, i) = (cs, i - 1)
0668デフォルトの名無しさん
2008/01/05(土) 18:23:18step :: (Tape -> Tape) -> Status -> Status
step f (c:cs, tape, inp, outp) = eval (cs, f tape, inp, outp)
eval :: Status -> Status
eval (Get : cmds, tape, (i:inp), outp) = eval (cmds, setCell tape i, inp, outp)
eval (Get : _, _, "", _) = error "EOF"
eval s @ (Put : _, tape, _, _) = (cmds, tape1, inp, getCell tape : outp)
where (cmds, tape1, inp, outp) = step id s
eval s @ (Inc : _, _, _, _) = step inc s
eval s @ (Dec : _, _, _, _) = step dec s
eval s @ (Next : _, _, _, _) = step next s
eval s @ (Prev : _, _, _, _) = step prev s
eval s @ (While cmds : cmds1, tape, inp, outp) = while (getCell tape)
where while '\NUL' = step id s
while _ = (cmds2, tape2, inp2, outp1 ++ outp2)
where (_ , tape1, inp1, outp1)
= eval (cmds, tape, inp, outp)
(cmds2, tape2, inp2, outp2)
= eval (While cmds : cmds1, tape1, inp1, outp1)
eval ([], t, i, _) = ([], t, i, "")
0669デフォルトの名無しさん
2008/01/05(土) 18:24:49run cmds inp = outp where (_,_,_, outp) = eval (cmds, tape0, inp, "")
main :: IO ()
main = do cs <- getContents
args <- getArgs
source <- readFile (head args)
putStr $ run (parse source) cs
-- brainf*ckなんてたったこれだけ。
0670デフォルトの名無しさん
2008/01/05(土) 18:35:01お前は日常会話もできなそうだな
0671デフォルトの名無しさん
2008/01/05(土) 18:35:35それをarrowでどうぞ
0672デフォルトの名無しさん
2008/01/05(土) 18:45:58状態を持たないステートレスオブジェクトはそのまま純粋関数型言語に取り込めますよね。
「純粋関数型」を標榜するHaskellは状態がないのではなくモナドに閉じ込めています。
ステートフルオブジェクトの状態も同様にモナドに閉じ込める事で「純粋関数型」を
維持したままオブジェクトを利用できると考えますが何か問題があるのでしょうか?
0673デフォルトの名無しさん
2008/01/05(土) 18:56:27>>664>>671でも書いたがarrowが使いにくいんだよ。brainf*ckみたいだろ。
brainf*ckを書き込んだ池沼にはわからねぇんだろうが
0674デフォルトの名無しさん
2008/01/05(土) 18:59:06うんうん。Monadiusとかそうだよね。
0675デフォルトの名無しさん
2008/01/05(土) 19:14:19で、「普通」の説明はマダァ?
0676デフォルトの名無しさん
2008/01/05(土) 20:14:22__,ィ ヽ. `ヽ.
, '⌒Y / 、ヽ ヽ ヽ.
/ / i /l/|_ハ li l i li ハ
. // 〃 /l i|j_,.//‐'/ lTト l、l j N i |
{イ l / l li //___ リ_lノ lル' lハ. ソ ___◎_r‐ロユ
i| /レ/l l l v'´ ̄ , ´ ̄`イ !| ll,ハ └─‐┐ナ┐┌┘ _ ヘ____
ハ| ll∧ハヽ ト、 '''' r==┐ '''' /l jハ| ll ll /./┌┘└┬┘└┼────┘ロコ┌i
〃 ‖ レ'¨´ヽiへ. _ 、__,ノ ,.イ/|/ ノ ll l| </  ̄L.l ̄ ̄L.lL.! ┌┘|
ll ll { ⌒ヽ_/ } ー‐<.__ ′ l| ‖
‖ ‖ ヽ, /、 〈 |:::::::| `ヽ ‖
‖ {. ハ ヽ Y`‐┴、::::v l ‖
‖ |iヽ{ ヽ_ゾノ‐一’::::ヽ. | ‖
‖ |i:::::`¨´-- :::......:...:.:.::.}| ‖
‖ |i::::::ヽ._:::_:::::::::::::::::::_ノ | ‖
‖ |i::::::::::::i___:::::::::::/ |
jj::::::::r┴-- `ー‐ '⌒ |
〃:::::::マ二 _,ノ
//::::::::::::i ー 一 '´ ̄::.
,','::::::::::::::i::::::::::::::::::::::i::::::ヽ
0677デフォルトの名無しさん
2008/01/05(土) 20:14:38それは658が一番詳しいから658に聞いてくれ
0678デフォルトの名無しさん
2008/01/05(土) 20:25:090679デフォルトの名無しさん
2008/01/05(土) 20:28:470680デフォルトの名無しさん
2008/01/05(土) 20:34:270681デフォルトの名無しさん
2008/01/05(土) 20:37:07少なくとも>>676はアラシだろw
0682デフォルトの名無しさん
2008/01/05(土) 21:28:20ぐぐれYO!ばか
ttp://d.hatena.ne.jp/r-west/20070720/1184946510
ttp://d.hatena.ne.jp/propella/20070807/p1
0683デフォルトの名無しさん
2008/01/05(土) 22:10:09普通?
社会通念だよ。
0684デフォルトの名無しさん
2008/01/05(土) 22:10:54揚げ足取りなんかやってるから単位も危なくなるんだぞ?
0685デフォルトの名無しさん
2008/01/05(土) 22:25:42せっかくぐぐって終息させてやろうとしてるのに馬鹿だねおまえはw
黙ってれば終わったのに。
晒しage
0686デフォルトの名無しさん
2008/01/05(土) 22:27:36ばか
0687デフォルトの名無しさん
2008/01/05(土) 22:30:06Haskell使いキモスwwwwww
0688デフォルトの名無しさん
2008/01/05(土) 22:34:130689デフォルトの名無しさん
2008/01/05(土) 22:37:080690デフォルトの名無しさん
2008/01/05(土) 22:39:26Haskellはプログラム板の恥だな。
0691デフォルトの名無しさん
2008/01/05(土) 22:43:340692デフォルトの名無しさん
2008/01/05(土) 22:46:010693デフォルトの名無しさん
2008/01/05(土) 22:57:220694デフォルトの名無しさん
2008/01/05(土) 22:59:010695デフォルトの名無しさん
2008/01/05(土) 23:01:320696デフォルトの名無しさん
2008/01/05(土) 23:18:120697デフォルトの名無しさん
2008/01/05(土) 23:20:35「プログラム」=「データ構造」+「アルゴリズム」
ってWirth先生が言ってたぞ。
0698デフォルトの名無しさん
2008/01/05(土) 23:21:56先生のゆーとーり世代
0699デフォルトの名無しさん
2008/01/05(土) 23:21:570700デフォルトの名無しさん
2008/01/05(土) 23:23:220701デフォルトの名無しさん
2008/01/05(土) 23:24:320702デフォルトの名無しさん
2008/01/05(土) 23:25:43むしろ教えろゴルァ!
0703デフォルトの名無しさん
2008/01/05(土) 23:28:270704デフォルトの名無しさん
2008/01/05(土) 23:35:36Introduction to Functional Programming Using Haskell
Richard Bird
こっちには載ってるのか。
0705デフォルトの名無しさん
2008/01/05(土) 23:39:060706デフォルトの名無しさん
2008/01/05(土) 23:40:250707デフォルトの名無しさん
2008/01/05(土) 23:46:49ふ・つ・う wwwww
お頭が弱いとアローがbrainf*ckみたいに見えるらしいけど、可換図式みたいで判りやすいよ。
ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
0708デフォルトの名無しさん
2008/01/05(土) 23:48:02> ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
どうやら、arrowでプログラミングしたこともないことがよくわかった。
0709デフォルトの名無しさん
2008/01/05(土) 23:55:34でも翻訳はMirandaについてでモナドとか載ってなさげだねぇ。
0710デフォルトの名無しさん
2008/01/06(日) 00:10:550711デフォルトの名無しさん
2008/01/06(日) 00:16:47はいはい。あーarrowはむずかしいいや。brainf*ckみたいにみえるなあw
0712デフォルトの名無しさん
2008/01/06(日) 00:21:36・ オブジェクト指向と関数型は共存出来ない。
・ 「Haskell」=「Arrow」+「普通」 (ただしArrowはbrainf*ckである)
0713デフォルトの名無しさん
2008/01/06(日) 00:29:02なにそれ?Haskell全否定じゃん。
0714デフォルトの名無しさん
2008/01/06(日) 00:31:520715デフォルトの名無しさん
2008/01/06(日) 00:51:13要するに計算の合成を定義すればいいだけ。
フリーダムすぎて使い方を迷うところはあるけど……圏論の知識とかいるか?
0716デフォルトの名無しさん
2008/01/06(日) 00:59:29いらない。
0717デフォルトの名無しさん
2008/01/06(日) 01:00:540718デフォルトの名無しさん
2008/01/06(日) 01:01:02あれば簡単ってことなんじゃないの?おれ圏論知らないけどさw
0719デフォルトの名無しさん
2008/01/06(日) 01:03:26アローってモナドの一般化したやつじゃん。ほとんど同じだろ。
アローが関数を受け持って、モナドが値を受け持つ箱みたいなイメージ。
違ったっけ?
0720デフォルトの名無しさん
2008/01/06(日) 01:07:59それは極論だろ。SコンビネータとかBコンビネータとかYコンビネータを適用するとき副作用があるのか分からなくてドキドキする。
数学知ってたらこういうことがさらっと出来ていいんだろうなと思う。
0721デフォルトの名無しさん
2008/01/06(日) 01:10:190722デフォルトの名無しさん
2008/01/06(日) 01:13:480723デフォルトの名無しさん
2008/01/06(日) 01:21:500724デフォルトの名無しさん
2008/01/06(日) 01:28:420725デフォルトの名無しさん
2008/01/06(日) 04:40:350726デフォルトの名無しさん
2008/01/06(日) 13:30:28値を受け持つ箱と考えるより、monadic function(a->m b)の形式で計算を纏めていく戦略と考えたほうが
理解しやすいかもしれん。monadic valueそのものをモナドだと思ってしまうとよくわからんなるんじゃない?
0727デフォルトの名無しさん
2008/01/06(日) 15:41:27ならこのスレに来るな。ここはクマーが圏論を説明してくれた偉大なスレだ。
0728デフォルトの名無しさん
2008/01/06(日) 15:44:29数学の知識がなくてもSコンビネータとかBコンビネータとかYコンビネータが
何を意味しているのかだけ知っていればどきどきすることはありません。
0729デフォルトの名無しさん
2008/01/06(日) 15:54:07意味が良くわからない。AAで説明してくれ。たのむわ。
0730デフォルトの名無しさん
2008/01/06(日) 16:07:19/ '''-,,,: : : : : : : :i
/、 /: : : : : : : : i ________
r-、 ,,,,,,,,,,、 /: : : : : : : : : :i /
L_, , 、 \: : : : : : : : :i / 圏論持ち出したら
/●) (●> |: :__,=-、: / < 負けかなと思ってる
l イ '- |:/ tbノノ \ ニート(24・男性)
l ,`-=-'\ `l ι';/ \
ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヾ=-' /
0731デフォルトの名無しさん
2008/01/06(日) 16:26:09博士課程のニーとですがなにか
0732デフォルトの名無しさん
2008/01/06(日) 16:39:00しったかかw クマーktkr
0733デフォルトの名無しさん
2008/01/06(日) 17:23:29水を差すようで申し訳ないんだが
ちょっと質問
>>720
にある「(対称)前モノイダル圏」って
よく意味が解らない
対称モノイダル圏の条件を弱めたものらしけど
対称モノイダル圏だとなにか不味い事でもあるのですか
0735デフォルトの名無しさん
2008/01/06(日) 17:38:01ほれ、これがアローだ
→
0736デフォルトの名無しさん
2008/01/06(日) 17:51:02/⌒ヽ⌒ヽ
Y
八 ヽ
( __//. ヽ,, ,)
丶1 八. !/
ζ, 八. j
i 丿 、 j
| 八 |
| ! i 、 |
| i し " i '|
|ノ ( i i|
( '~ヽ ! ‖
│ i ‖
| ! ||
| │ |
| | | |
| | | |
| ! | |
| | ‖
/ ヾ
0737デフォルトの名無しさん
2008/01/06(日) 17:53:240738デフォルトの名無しさん
2008/01/06(日) 17:54:470739デフォルトの名無しさん
2008/01/06(日) 17:57:340740デフォルトの名無しさん
2008/01/06(日) 17:58:380741デフォルトの名無しさん
2008/01/06(日) 17:59:420742デフォルトの名無しさん
2008/01/06(日) 18:00:42新しいネタ探して来い
0743デフォルトの名無しさん
2008/01/06(日) 18:14:58こら!みんなが矢印とかちんぽを無視したからって怒るでないw
0744デフォルトの名無しさん
2008/01/06(日) 18:17:280745デフォルトの名無しさん
2008/01/06(日) 18:19:22↑とアローの説明が出来ないクズが取り乱しております
0746デフォルトの名無しさん
2008/01/06(日) 21:27:48コンビネータ理論を知っていれば十分で数学の知識を前提としないって?おいおい。
支離滅裂だぞ。
0747デフォルトの名無しさん
2008/01/06(日) 21:44:24数学の基礎的な知識はそれほど必要ないだろ。
「それだけ」知ってればいいんだから。
0748デフォルトの名無しさん
2008/01/06(日) 21:55:31基礎の意味が違うでしょ。コンビネータ理論は数学基礎論であって、数学の基礎知識じゃない。
しかも副作用についての知識は、いくつかのコンビネータを知ってるではすまない。
他にも山のようにある関数について、一つ一つ個別に知ってるよりも理屈を知ったほうが当然良い。
0749デフォルトの名無しさん
2008/01/06(日) 23:51:52↑アロー・モナド・コンビネータ理論について行けず、肩を落として帰るプログラマの群れ
0750デフォルトの名無しさん
2008/01/07(月) 00:08:05それよりhere documentを入れてくれ
0751デフォルトの名無しさん
2008/01/07(月) 00:29:30ttp://cvs.haskell.org/Hugs/pages/users_guide/here-documents.html
0752デフォルトの名無しさん
2008/01/07(月) 20:07:34くわしくはこのページが参考になる。
ttp://d.hatena.ne.jp/m-hiyama-memo/searchdiary?word=*%5B%A5%E2%A5%CA%A5%C9%5D
John Power & Edmund Robinsonによれば:
* TのKleisli圏C_Tがプレモノイド圏となる ⇔ Tは強度を持つ
* TのKleisli圏C_Tがモノイド圏となる ⇔ Tは可換強度を持つ
これはKleisli圏のプレモノイド構造と強度が1対1に対応しているということで、モノイド圏では都合が良くない。つまり、
プレモノイド圏となる⇒・・・⇒モナドの作用乗法
というのがwell-definedになるということを狙ってる。たしかにモナドって数学的な基礎知識無しでも使えると確信しましたか?
0753デフォルトの名無しさん
2008/01/07(月) 20:44:580754デフォルトの名無しさん
2008/01/07(月) 22:52:18■ このスレッドは過去ログ倉庫に格納されています