トップページtech
981コメント333KB

【数学者】Haskellはクソ言語【オナニー】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/09/30(金) 01:34:05
C/C++>>>>(越えられない壁)>>>Haskell
0655デフォルトの名無しさん2008/01/05(土) 16:44:47
○Smalltalk
×Smalltall
0656デフォルトの名無しさん2008/01/05(土) 17:12:45
Haskellはオブジェクト指向じゃないけど型クラスを使えるから準オブジェクト指向関数型言語とでも言えるのかな。
「型クラス」と「型構築子クラス」でオブジェクト指向っぽく使えて、副作用がないようにモナドやその一般化のアローが使える。
オブジェクト指向と関数型が共存出来ないと言いながらHaskellを使っている人は分裂気味なんじゃないでしょうかね。
0657デフォルトの名無しさん2008/01/05(土) 17:23:03
いや、Type Class と、オブジェクト指向の「クラス」は別物な訳だが
0658デフォルトの名無しさん2008/01/05(土) 17:26:07
>>657
だから『準』と言っている訳だが
0659デフォルトの名無しさん2008/01/05(土) 17:30:37
「準」とかで片付けるとかどんだけwwwwwww

ばか
0660デフォルトの名無しさん2008/01/05(土) 17:38:26
>>659さんは別物のクラスだとどういうことが言えると言いたい訳かな?
ご高説を是非御拝聴いたしましょう。
0661デフォルトの名無しさん2008/01/05(土) 17:44:34
どんだけwwwwwばか

関数型とオブジェクトなんざ共存出来ねんだよ。

無意味、無意味。無駄無駄無駄wwwwww
0662デフォルトの名無しさん2008/01/05(土) 17:47:28
Haskellerはオブジェクト指向もわからないばかということですか。ああそうですか。
0663デフォルトの名無しさん2008/01/05(土) 17:49:37
残念な展開だね。
0664デフォルトの名無しさん2008/01/05(土) 17:57:51
>>656
arrow使いにくい
まるでbrainf*ckみたいに見える
結局は普通に書いたほうがきれいだ
0665デフォルトの名無しさん2008/01/05(土) 18:13:14
「普通」とかで片付けるとかどんだけwwwwwww

ばか

やっぱHaskellerってのは池沼だね。
0666デフォルトの名無しさん2008/01/05(土) 18:20:23
-- A Simple Brainfuck Interpreter

import 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:21
type Tape = ([Char], Int)
tape0 = (['\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:18
type Status = (Program, Tape, [Char], [Char])
step :: (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:49
run :: Program -> [Char] -> [Char]
run 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
>>665
お前は日常会話もできなそうだな
0671デフォルトの名無しさん2008/01/05(土) 18:35:35
>>669
それをarrowでどうぞ
0672デフォルトの名無しさん2008/01/05(土) 18:45:58
>>638
状態を持たないステートレスオブジェクトはそのまま純粋関数型言語に取り込めますよね。
「純粋関数型」を標榜するHaskellは状態がないのではなくモナドに閉じ込めています。
ステートフルオブジェクトの状態も同様にモナドに閉じ込める事で「純粋関数型」を
維持したままオブジェクトを利用できると考えますが何か問題があるのでしょうか?
0673デフォルトの名無しさん2008/01/05(土) 18:56:27
>>672
>>664>>671でも書いたがarrowが使いにくいんだよ。brainf*ckみたいだろ。

brainf*ckを書き込んだ池沼にはわからねぇんだろうが
0674デフォルトの名無しさん2008/01/05(土) 18:59:06
>>672
うんうん。Monadiusとかそうだよね。
0675デフォルトの名無しさん2008/01/05(土) 19:14:19
>>670
で、「普通」の説明はマダァ?
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
>>675
それは658が一番詳しいから658に聞いてくれ
0678デフォルトの名無しさん2008/01/05(土) 20:25:09
さんざ荒らして説明拒否かよw
0679デフォルトの名無しさん2008/01/05(土) 20:28:47
えっ、だれが荒らし?
0680デフォルトの名無しさん2008/01/05(土) 20:34:27
池沼の「普通」なんて誰も興味ねえってよw
0681デフォルトの名無しさん2008/01/05(土) 20:37:07
>>679
少なくとも>>676はアラシだろw
0682デフォルトの名無しさん2008/01/05(土) 21:28:20
>>677
ぐぐれ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
>>665
普通?
社会通念だよ。
0684デフォルトの名無しさん2008/01/05(土) 22:10:54
論文じゃあるまいし。
揚げ足取りなんかやってるから単位も危なくなるんだぞ?
0685デフォルトの名無しさん2008/01/05(土) 22:25:42
>>683-684
せっかくぐぐって終息させてやろうとしてるのに馬鹿だねおまえはw
黙ってれば終わったのに。
晒しage
0686デフォルトの名無しさん2008/01/05(土) 22:27:36
これが関数型使って気取ってる池沼の実態ですwwwwww

ばか
0687デフォルトの名無しさん2008/01/05(土) 22:30:06
使えもしないのに関数型に憧れてんなYO!
Haskell使いキモスwwwwww
0688デフォルトの名無しさん2008/01/05(土) 22:34:13
スレタイ通りのオナスレageんな
0689デフォルトの名無しさん2008/01/05(土) 22:37:08
クソ言語が普通とか言ってんなよ。所詮、脳内オナニー。
0690デフォルトの名無しさん2008/01/05(土) 22:39:26
恥ずかしいスレ名をアゲんな、変体どもがぁ。
Haskellはプログラム板の恥だな。
0691デフォルトの名無しさん2008/01/05(土) 22:43:34
スレの削除依頼出せ.キモイんだよお前等
0692デフォルトの名無しさん2008/01/05(土) 22:46:01
まあ、重複スレなのでこちらを削除しても問題ありませんね。
0693デフォルトの名無しさん2008/01/05(土) 22:57:22
↑さんざん恥をかいたのでスレ削除して欲しい張本人がこう申しておりますw
0694デフォルトの名無しさん2008/01/05(土) 22:59:01
Haskell使ってる人って頭が良いイメージだったけどw
0695デフォルトの名無しさん2008/01/05(土) 23:01:32
なかなか笑わせてもらった
0696デフォルトの名無しさん2008/01/05(土) 23:18:12
「Haskell」=「Arrow」+「普通」
0697デフォルトの名無しさん2008/01/05(土) 23:20:35
普通ってwwww

「プログラム」=「データ構造」+「アルゴリズム」

ってWirth先生が言ってたぞ。
0698デフォルトの名無しさん2008/01/05(土) 23:21:56
>>697
先生のゆーとーり世代
0699デフォルトの名無しさん2008/01/05(土) 23:21:57
アローだってデータ構造だろうに。
0700デフォルトの名無しさん2008/01/05(土) 23:23:22
普通のアルゴリズムなんて定義できんだろ。
0701デフォルトの名無しさん2008/01/05(土) 23:24:32
普通のどこが気に入らないんだろう
0702デフォルトの名無しさん2008/01/05(土) 23:25:43
アローに付随したアルゴリズムに定石でもあるのか?そんな本見たことねーぞ。
むしろ教えろゴルァ!
0703デフォルトの名無しさん2008/01/05(土) 23:28:27
アローの定石と言えるかわからないけどバード先生の本には載ってる
0704デフォルトの名無しさん2008/01/05(土) 23:35:36
Rahbi & Lapalme にはモナドの説明が無いけど、

Introduction to Functional Programming Using Haskell
Richard Bird

こっちには載ってるのか。
0705デフォルトの名無しさん2008/01/05(土) 23:39:06
アロー程度がちょちょいと説明できないようじゃHaskell使いこなせてると言えないよね。
0706デフォルトの名無しさん2008/01/05(土) 23:40:25
アローって簡単?
0707デフォルトの名無しさん2008/01/05(土) 23:46:49
>>706
ふ・つ・う wwwww
お頭が弱いとアローがbrainf*ckみたいに見えるらしいけど、可換図式みたいで判りやすいよ。
ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
0708デフォルトの名無しさん2008/01/05(土) 23:48:02
>>707
> ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
どうやら、arrowでプログラミングしたこともないことがよくわかった。
0709デフォルトの名無しさん2008/01/05(土) 23:55:34
アマゾンみたらバードの本にはモナドとかアローについて書いてあるらしい。
でも翻訳はMirandaについてでモナドとか載ってなさげだねぇ。
0710デフォルトの名無しさん2008/01/06(日) 00:10:55
Arrowって、Kleisli 圏とか Premonoidal 圏みたいなもんか。たしかに図を描けばなんてことなさげ。
0711デフォルトの名無しさん2008/01/06(日) 00:16:47
>>708
はいはい。あーarrowはむずかしいいや。brainf*ckみたいにみえるなあw
0712デフォルトの名無しさん2008/01/06(日) 00:21:36
教訓

・ オブジェクト指向と関数型は共存出来ない。

・ 「Haskell」=「Arrow」+「普通」 (ただしArrowはbrainf*ckである)
0713デフォルトの名無しさん2008/01/06(日) 00:29:02
>>712
なにそれ?Haskell全否定じゃん。
0714デフォルトの名無しさん2008/01/06(日) 00:31:52
708は口調ですぐわかるな。アンチなら使わなきゃイイジャン。
0715デフォルトの名無しさん2008/01/06(日) 00:51:13
アローって意味的にはモナドなんかよかよっぽど理解できるだろ。
要するに計算の合成を定義すればいいだけ。
フリーダムすぎて使い方を迷うところはあるけど……圏論の知識とかいるか?
0716デフォルトの名無しさん2008/01/06(日) 00:59:29
>>715
いらない。
0717デフォルトの名無しさん2008/01/06(日) 01:00:54
arrowでプログラミングするのに数学も圏論の知識も微塵も必要ない。
0718デフォルトの名無しさん2008/01/06(日) 01:01:02
>>715
あれば簡単ってことなんじゃないの?おれ圏論知らないけどさw
0719デフォルトの名無しさん2008/01/06(日) 01:03:26
>>715
アローってモナドの一般化したやつじゃん。ほとんど同じだろ。
アローが関数を受け持って、モナドが値を受け持つ箱みたいなイメージ。
違ったっけ?
0720デフォルトの名無しさん2008/01/06(日) 01:07:59
>>717
それは極論だろ。SコンビネータとかBコンビネータとかYコンビネータを適用するとき副作用があるのか分からなくてドキドキする。
数学知ってたらこういうことがさらっと出来ていいんだろうなと思う。
0721デフォルトの名無しさん2008/01/06(日) 01:10:19
Haskellじゃなくてもいいようなプログラムなら数学の知識はいらないとは言えるw
0722デフォルトの名無しさん2008/01/06(日) 01:13:48
結局、Haskellを何に利用しているかでアローの難易度も違って見えるんだろうね。
0723デフォルトの名無しさん2008/01/06(日) 01:21:50
いらない・無意味・微塵も必要ない
0724デフォルトの名無しさん2008/01/06(日) 01:28:42
普通
0725デフォルトの名無しさん2008/01/06(日) 04:40:35
arrow関連で卒論書きたいんですが、受けはいいでしょうか?
0726デフォルトの名無しさん2008/01/06(日) 13:30:28
>>719
値を受け持つ箱と考えるより、monadic function(a->m b)の形式で計算を纏めていく戦略と考えたほうが
理解しやすいかもしれん。monadic valueそのものをモナドだと思ってしまうとよくわからんなるんじゃない?
0727デフォルトの名無しさん2008/01/06(日) 15:41:27
>>717
ならこのスレに来るな。ここはクマーが圏論を説明してくれた偉大なスレだ。
0728デフォルトの名無しさん2008/01/06(日) 15:44:29
>>720
数学の知識がなくてもSコンビネータとかBコンビネータとかYコンビネータが
何を意味しているのかだけ知っていればどきどきすることはありません。
0729デフォルトの名無しさん2008/01/06(日) 15:54:07
>>728
意味が良くわからない。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
>>730
博士課程のニーとですがなにか
0732デフォルトの名無しさん2008/01/06(日) 16:39:00
数学の知識無しでアローをAAで説明出来んじゃなかったの?
しったかかw クマーktkr
0733デフォルトの名無しさん2008/01/06(日) 17:23:29
スレの流れに
水を差すようで申し訳ないんだが
ちょっと質問
>>720
にある「(対称)前モノイダル圏」って
よく意味が解らない
対称モノイダル圏の条件を弱めたものらしけど
対称モノイダル圏だとなにか不味い事でもあるのですか
07347332008/01/06(日) 17:25:08
>>720
でなく
>>710だた
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:24
AA職人がいなくなってつまんなくなったね。
0738デフォルトの名無しさん2008/01/06(日) 17:54:47
AA職人というか、コピペで説明してただけだろ?
0739デフォルトの名無しさん2008/01/06(日) 17:57:34
その「説明してただけ」すら出来ないコピペ厨w
0740デフォルトの名無しさん2008/01/06(日) 17:58:38
たしかに1年でレベルが落ちたのは否定できんなw
0741デフォルトの名無しさん2008/01/06(日) 17:59:42
単にスレが捨てられただけでは?
0742デフォルトの名無しさん2008/01/06(日) 18:00:42
いまどきarrowなんてみんな知ってて、いまさら説明の余地もない。
新しいネタ探して来い
0743デフォルトの名無しさん2008/01/06(日) 18:14:58
>>742
こら!みんなが矢印とかちんぽを無視したからって怒るでないw
0744デフォルトの名無しさん2008/01/06(日) 18:17:28
クマーってもう一年前の話か。上のほう見たら2つもあるね。
0745デフォルトの名無しさん2008/01/06(日) 18:19:22
>>742
↑とアローの説明が出来ないクズが取り乱しております
0746デフォルトの名無しさん2008/01/06(日) 21:27:48
>>728
コンビネータ理論を知っていれば十分で数学の知識を前提としないって?おいおい。
支離滅裂だぞ。
0747デフォルトの名無しさん2008/01/06(日) 21:44:24
>>746
数学の基礎的な知識はそれほど必要ないだろ。
「それだけ」知ってればいいんだから。
0748デフォルトの名無しさん2008/01/06(日) 21:55:31
>>747
基礎の意味が違うでしょ。コンビネータ理論は数学基礎論であって、数学の基礎知識じゃない。
しかも副作用についての知識は、いくつかのコンビネータを知ってるではすまない。
他にも山のようにある関数について、一つ一つ個別に知ってるよりも理屈を知ったほうが当然良い。
0749デフォルトの名無しさん2008/01/06(日) 23:51:52
λλλλλ...

↑アロー・モナド・コンビネータ理論について行けず、肩を落として帰るプログラマの群れ
0750デフォルトの名無しさん2008/01/07(月) 00:08:05
正直arrowとかどうでもいい
それよりhere documentを入れてくれ
0751デフォルトの名無しさん2008/01/07(月) 00:29:30
>>750
ttp://cvs.haskell.org/Hugs/pages/users_guide/here-documents.html
0752デフォルトの名無しさん2008/01/07(月) 20:07:34
>>733
くわしくはこのページが参考になる。
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:58
当然だけど、アローについても同様の議論が展開できる訳です。まあ、アローなんかどうでも良いんでしたね。
0754デフォルトの名無しさん2008/01/07(月) 22:52:18
モノイド圏とモノイダル圏て何が違うの?
■ このスレッドは過去ログ倉庫に格納されています