[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:27 / Filesize : 244 KB / Number-of Response : 901
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 01:34:05 ]
C/C++>>>>(越えられない壁)>>>Haskell

413 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 19:26:12 ]
Ctrl-Dを押すまで結果が出力されないんだが・・・。
mapMを使ってるせいだろうか。

main = do cs <- getContents
     r <- mapM hoge $ lines cs
     putStr $ head r

hoge :: String -> IO String
hoge x = return x

414 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 21:26:50 ]
>>413
その通り。
csの終端を見つけるまでmapM_が終わらないから、
putStrが実行されることもない。

415 名前:414 mailto:sage [2006/12/03(日) 21:27:23 ]
ごめん。mapM_じゃなくてmapMね。

416 名前:413 mailto:sage [2006/12/03(日) 23:45:53 ]
>>414,415
なるほど。ありがとう。
一行入力するごとに結果を返してほしいのだが、いい方法はないのかな。
mapMはsequence . mapらしいので、いろいろ組み合わせて書き直してみた。

main = do cs <- getContents
     mapM_ (putStr . unlines =<<) $ map sequence $ map (:[]) $ map hoge $ lines cs

hoge :: String -> IO String
hoge x = return x

こうすれば望みの結果が得られるようなのだが、ちょっとめんどくさすぎるな・・・(・∀・;)

417 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 00:29:46 ]
>>416
IOは上から順に実行されるのが原則(getContentsは例外)で、
評価と違って「値の要求があって初めて」実行したりはしない。
だから
r <- mapM hoge $ lines cs
とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。
これは、そうでないと動作の順序を予測するのが難しくなって不便だからだ。
どうしてもその挙動が必要なら、unsafeInterleaveIOという関数を使えば実現できる。

ちなみにそのコードは行ごとにputStrしているだけで、
mapM_ putStrLn $ lines cs
と書いているのとかわらない。
何がしたいかをもう少し詳しく教えてくれたら、もうちょっとまともな助言ができると思う。

418 名前:413 mailto:sage [2006/12/04(月) 01:51:46 ]
>>417
>評価と違って「値の要求があって初めて」実行したりはしない。
>だから
>r <- mapM hoge $ lines cs
>とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。

あぁ、なるほど。なんでうまくいかなかったのか、やっとすっきりした。
結果が必要かどうか関係ないのね・・・。
自分が作りたかったのは、ハッシュテーブルに入力されたものを入れて、そのときのハッシュテーブルの中身を返すという関数。
↓こんな感じなのを作ったのだが、入力が終わらないと処理が先に進まなくて困ってる次第。

import Data.HashTable as HashTable

main = do cs <- getContents
     hash <- new (==) hashString
     r <- mapM (hoge hash) $ lines cs
     putStr $ unlines r

hoge :: (HashTable String Int) -> String -> IO String
hoge _ [] = return []
hoge hash key = do insert hash key 1
          h <- toList hash
          return $ show h

419 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 03:03:58 ]
>>418
それと同じことをするだけなら、mapMでハッシュ表の操作と同時に出力もすれば良い。
mapM_ (\line -> hoge hash line >>= putStrLn) $ line cs

元のコードのように、値を生成する部分(mapM hoge)と利用する部分(putStrLn)をプログラム上で分離したい場合は
多少の工夫がいる。例えば、入出力をしながらa型の値を生み出すジェネレータを次のように定義して、
newtype Generator a = Gen (IO (Maybe (a, Generator a)))
mapMで[String]を生み出す代わりにGenerator Stringとして記述するとか。
ただし、標準のリストと違って操作関数が用意されていないので面倒ではある。

420 名前:413 mailto:sage [2006/12/04(月) 14:08:07 ]
>>419
そうか、なるほど、mapM_の中で完結させれば良かったのか・・・。
mapMの返り値を受け取って処理しないといけない、って思いこんでた。
なんて頭が固いんだ、俺はorz
ジェネレータを使って云々かんぬんってのはまだ理解できないので、もっと勉強してみるよ。
ほんとにありがと!

421 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 11:29:31 ]
417を読むまで、doの中に列挙されているものは上から下へ遅延評価されるものだと思ってたorz
getContentsは例外なのね・・・。GHCのソースを見たらunsafeInterleaveIOを使ってたよ。




422 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 17:55:53 ]
本スレを見たあとこっちに来るとなんかほっとする

423 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:16:27 ]
んじゃ、そろそろ圏論勉強会をここではじめるか

424 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:36:06 ]
AAで頼むわ

425 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 18:42:03 ]
>>423
仕切ってくれるの?
ちょっと期待

426 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 19:18:52 ]
AAじゃなくてもたのむわ
この間友達に訊かれて、Haskell使いでないけど興味持った。

427 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 20:28:19 ]
2ちゃんっぽい解説をわくてかしながら待ってますよ


428 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 21:32:19 ]
おまいら、なんで本スレに行かないんだよw

429 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:00:51 ]
だって本スレ2chのノリじゃねーんだもん

430 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:12:22 ]
あそこは2chじゃねーよなw

431 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 00:21:23 ]
あそこはプログラミングする気が無い奴らに犯されてしまった
今からここが本スレになります



432 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 15:01:43 ]
早く家に帰ってHaskellを犯りたい(*´д`)

433 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 18:34:26 ]
www.haskell.org/ghc/docs/latest/html/users_guide/primitives.html

ここ見てUnboxed typeを使ってみようとしたんだが、Top-level bindings for unlifted types aren't allowed と出てコンパイルできん。
まあ、使い方を全然理解してないせいだと思うのだが(top-level bindingsとかunliftの意味もわからんし)、どこか解説ページないかな。
つか、あのページの説明だけでみんなは理解できるのだろうか(・∀・;)


434 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:00:25 ]
>どこか解説ページないかな。
なさそう。

>top-level bindings
モジュールレベルの束縛のこと。
module Foo where
f x = let y = x + 1 in y * 2
なら、fはトップレベルの束縛で、yはそうではない。

>unlifted types
unboxed typesとほとんど同義だと思う。

というか本スレに書けyo

435 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:02:43 ]
見てみたら>>433のリンク先にlifted typeの説明あるじゃん。
>Primitive types are always unlifted; that is, a value of a primitive type cannot be bottom.

436 名前:433 mailto:sage [2006/12/11(月) 21:43:56 ]
>>434

詳しい説明をありがとう。

>>top-level bindings
>モジュールレベルの束縛のこと。

さんくす!さっきのエラーは出なくなった!
今度は#がはずせないという問題にぶち当たったけど、こっちはI#の存在に気づいて解決した。

>というか本スレに書けyo
あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。

>>435
>見てみたら>>433のリンク先にlifted typeの説明あるじゃん。
すまん。読んでたけどそっちも全く意味わからんかった。

437 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 22:57:29 ]
>>436
>すまん。読んでたけどそっちも全く意味わからんかった。
ボトムっていうのは、停止しない/エラーになる計算の結果を表す概念上の値のこと。
(この辺厳密じゃないかも。間違ってたら分かってる人が突っ込んでくれることを期待)
例えば
b :: Int
b = b
と定義したとする。bを評価しようとすると止まらないから、bにはふつうの意味での値はない。しかし、
f :: Int -> Int
f x = 4
という関数があったとして、f bは4を返す。つまりfは問題なく呼ばれている。
では呼ばれたときの引数は何か、というのが問題になるが、これを「fはボトムを引数にして呼ばれた」
ということにする。つまり、bは評価しても止まらないけど、ボトムという仮想的な値を持っていることにする。
こうすると議論が単純になる。ちなみに、こう考えると、BoolにはTrue、False、ボトムの三値があることに
なるし、32ビットマシン上のGHCではIntに2^32+1個の値があることになる。

一方、実装を考えると、fに渡されるのは未評価のbで、これの実体はクロージャ、
あるいは関数ポインタ。bを評価することは、この関数ポインタを呼び出すことに相当する。
この場合はbを評価しようとすると止まらないわけだけど、こういう挙動がありえるためにはそもそも
bが関数ポインタでなきゃならない。

unboxed typeはただの計算器上の整数で、関数ポインタを隠し持つ余地はない。
Int#は厳密に2^32個の値しかとれない。つまり、ボトムになれない。よってunlifted type。

>あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。
たまたま圏論の話題で盛り上がっていただけで、気にすることはないと思う。
もともとそういうスレじゃないし。むしろ俺にも分かる話題は歓迎w

438 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 23:39:10 ]
haskellはプログラムを書く以外にも楽しみ方がある言語だから、棲み分けが起きてもいいんじゃないかな。次スレはちゃんとしたタイトルにしようぜ


439 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 23:44:58 ]
たとえ住みわけが必要だとしても、板の趣旨からして、
本スレはプログラムの話題、
理論的な話は情報学板、のほうがいいんじゃないだろうか。

440 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 15:37:04 ]
モナドから値を取り出す関数ってないんでしょうか?
hoge :: m a -> a
みたいな.


441 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 15:53:12 ]
>>440
個々のモナドごとにある。
head :: [a] -> a
fromJust :: Maybe a -> a
fromMaybe :: a -> Maybe a -> a
evalState :: State s a -> s -> a
runST :: (forall s. ST s a) -> a
unsafePerformIO :: IO a -> a -- 副作用があるので取扱い注意

ちなみにIOモナドだけは値を取り出す必要がない。
取り出さずに全部まとめてそれにmainを束縛すれば良いので。



442 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 20:07:25 ]
>>440
>>=関数を使ってください

443 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 21:50:17 ]
計算の途中でIOがつくと、その後ずっとついて回るからなんか気持ち悪い

444 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 22:35:08 ]
>>443
それによって参照透明性を保ってるんじゃないの?
詳しい人教えて!

445 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 16:00:42 ]
インストールに7時間かかりました。なにこの敷居の高さ

446 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 18:03:20 ]
>>4457時間もあきらめずにインストールした喪前が大好きだよ!

447 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 22:40:42 ]
敷居が高いけど、なれてくるとかなり楽しい。
ひょっとして、haskellはツンデレ美少女なんではなかろうか。

haskell「ごめんね素直じゃなくて」
俺「いや、しょうがないって」
haskell「・・・。お兄ちゃん、IOモナドの仕組みが知りたい、って言ってたよね」
俺「ん? まーな」
haskell「でも、そのためには私の中身を見ないとだめだよね・・・」
俺「い、いや、無理しなくていいよ」
haskell「・・・。見てもいいよ」
俺「え?」
haskell「見てもいいよ! お兄ちゃんだったらいいよ!」

448 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 23:12:10 ]
↓Haskell Brooks Curryの肖像

449 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 02:44:08 ]
www.haskell.org/bio.html
( ・∀・) <呼んだ?


450 名前:デフォルトの名無しさん mailto:dage [2006/12/14(木) 12:04:41 ]
今日はUnsafe IOの日だから中に出しちゃだめー!!!


451 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 17:34:55 ]
>>443
データ構造書くのはIOを入れずにやれという暗黙のメッセージだと思う
プログラムのしくみ本体とIOの部分を分けるということ
その方が実際動作が速いみたいだし



452 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 21:30:35 ]
もう、中に出すからforkIOしちゃったじゃないo(*`ε´*)o

453 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 21:49:49 ]
HashTableがIOを返すのがにんともかんとも・・・。

454 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 20:27:21 ]
本スレは活気があっていいなぁ・・・

455 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 23:32:22 ]
また俺がAA書いてやろうか?

456 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 10:19:52 ]
haskell中級者になったクマきぼん


457 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 23:04:25 ]
>>456
俺が初心者な以上、それは無理ってもんだ

458 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 00:06:46 ]
今でも遅延ストリーム萌な人いませんか?

459 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 01:35:34 ]
みなさんハスケルのどこが萌えですか。
僕は似たような記号を多用するその文体のとっつきにくさに萌えです。

460 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 01:42:02 ]
やっぱ>>447じゃね?

461 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 03:06:45 ]
俺はモナドという不思議な雰囲気を持ったツンデレ美少女なところに萌えてる。
haskellたんを知ってから仕事に全く集中できなくなってしまったよ・・・



462 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 06:46:57 ]
あの、質問しても良いです?
「ふつうのHaskellプログラミング」からなんですが、
length [""] -> 1
length [] -> 0
の""というのは文字が一文字も無い文字列を表しているのでしょうか?
もう一つ。
a
b
c
みたいに一行ずつ保存されているファイルは、エディタからはそうみえるだけで
実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
そうじゃないとlines関数でリストに出来ないですもんね?

463 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 17:38:31 ]
>の""というのは文字が一文字も無い文字列を表しているのでしょうか?
その通り。
>実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
その通り。

464 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 16:06:05 ]
>>463
回答有り難うございます!

465 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 07:23:21 ]
こういう関数をHaskellで書くとしたら
どう書くのがベターでしょうか?

# Rubyですが
def hoge(ary)
ary.each_index do |i|
j = rand(i+1)
ary[i], ary[j] = ary[j], ary[i]
end
end


466 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:09:05 ]
>>465
こんな感じになった。やたらと面倒だったので改善案募集。

{-# OPTIONS_GHC -fglawgow-exts #-}
module Test where
import System.Random
import Data.Array.IArray
import Data.Array.ST
import Control.Monad.ST

hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen)
hoge ia gi = runST act
  where
    act :: forall s. ST s (a i e, StdGen)
    act = do
      ma <- thaw ia
      let _ = ma :: STArray s i e
      g' <- shuffle ma gi first
      ra <- unsafeFreeze ma
      return (ra, g')
    (first, last) = bounds ia
    shuffle a g i = case ran of
      [] -> return g
      _:next:_ -> do
        let (j, g') = randomR (i, last) g
        x <- readArray a i
        y <- readArray a j
        writeArray a i y
        writeArray a j x
        shuffle a g' next
      where
        ran = range (i, last)

467 名前:466 mailto:sage [2007/01/11(木) 23:19:28 ]
まちがってた。

{-# OPTIONS_GHC -fglasgow-exts #-}
module Test where

import System.Random
import Data.Array.IArray
import Data.Array.ST
import Control.Monad.ST

hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen)
hoge ia gi = runST act
  where
    act :: forall s. ST s (a i e, StdGen)
    act = do
      ma <- thaw ia
      let _ = ma :: STArray s i e
      g' <- shuffle ma gi (range bo)
      ra <- unsafeFreeze ma
      return (ra, g')
    bo@(_, last) = bounds ia
    shuffle a g [] = return g
    shuffle a g (i:is) = do
        let (j, g') = randomR (i, last) g
        x <- readArray a i
        y <- readArray a j
        writeArray a i y
        writeArray a j x
        shuffle a g' is

468 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 17:10:31 ]
>>465
>>467の人のようにこういう操作はArrayの方が得意だけど無理矢理やってみた
手抜きして右からまわしてる

import Random

-- main = print [1,2,3] >> hogeIO [1,2,3] >>= print

hogeIO :: [a] -> IO [a]
hogeIO xs = getStdRandom (hoge xs)

hoge :: (RandomGen g) => [a] -> g -> ([a], g)
hoge xs g = foldr iter ([],g) xs
  where
  iter x (xs,g) = (x':xs', g')
    where
    ((x', _:xs'), g') = replaceR x (x:xs) g

replaceR :: (RandomGen g) => a -> [a] -> g -> ((a, [a]), g)
replaceR x xs g = (replace i x xs, g')
  where
  (i,g') = randomR (0, length xs - 1) g

replace :: Int -> a -> [a] -> (a,[a])
replace n x xs = (z, ys ++ x:zs)
  where
  (ys, z:zs) = splitAt n xs

469 名前:468 mailto:sage [2007/01/13(土) 21:04:49 ]
Stateで書き換えてみたけど相変わらず長い (replaceやmainの定義は同じ)

import Control.Monad.State
type Rand a = State StdGen a

hogeIO :: [a] -> IO [a]
hogeIO xs = do
  g <- newStdGen
  return $ evalState (hoge xs) g

hoge :: [a] -> Rand [a]
hoge xs = foldr ((=<<).iter) (return []) xs
  where
  iter x xs = do
    (x', _:xs') <- replaceR x (x:xs)
    return (x':xs')

replaceR :: a -> [a] -> Rand (a,[a])
replaceR x xs = do
  i <- State $ randomR (0, length xs - 1)
  return $ replace i x xs

470 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:20:57 ]
runSTとかunsafeFreezeとかさっぱりわからん。
なんかくやしい。

471 名前:デフォルトの名無しさん [2007/02/14(水) 00:17:05 ]
良スレ 保守



472 名前:380 mailto:sage [2007/02/14(水) 23:30:00 ]

【第一部】 AAでHaskellのお勉強(超初心者用)
>>380-410

【第二部】 AAで圏論のお勉強(入門編)
Coming soon!


473 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:00:34 ]

  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;
  ヾ;;;ハ    ノ       .::!lリ;;r゙  圏論は難しい・・・
   `Z;i   〈.,_..,.      ノ;;;;;;;;>
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f    そんなふうに考えていた時期が
   ~''戈ヽ   `二´    r'´:::. `!   俺にもありました



474 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:01:18 ]
       /                    .\
     /                       .\
 \ /                          \ /
   \      ___________     . /
    \   ./                \   /
     | \/                   \/...|
     |  |                       |  |
     |  |                       |  |
  .._ |_|                       |_|_..
     |  |     さあ‥ 逝こうか‥‥     |  |
     |  |                       |  |
     |  |                       |  |
     |  |                       |  |
     |  |/                   ..\|  |
     |  |                       |  |
   .._|/|      _ _ _ _ _ _ _ _     ...|\|_
  / ..|  |   _−_−_−_−_− _   |  |  \
     |  |/_/━ ━ ━ ━ ━ ━\_\|  |
   .._| /_/━ ━ ━ ━ ━ ━ ━ \_\.|_
     /_/━  ━  ━  ━  ━  ━  ━ \_\
   /  /━  ━  ━  ━  ━  ━  ━\  \

475 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:54:57 ]

   ∩___∩
   | ノ      ヽ
  /  ●   ● |   たった一つの命を捨てて
  |◎) ̄  ̄|| ̄ ̄ ) ミ 生まれ変わった不死身の体
 彡、___||_/`\ 鉄の圏論を叩いて砕く
/ __     /´>  ) クマーンがやらねば誰がやる
(___)   / (_/
 |       /
 |  /\ \
 | /    )  )
 ∪    (  \
       \_)


476 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 23:04:19 ]

 _i^i__i^i_                  i^i ._i^i_ __, -―- 、___
 |*||*| ∩___∩    i^i _i^i_  | | |@ll|(_/,,,,   ,,,,   ヽ_)
 |≡||≡|| ノ       ヽ  ([])|;□;|.(≡)|_| |●  ●   | どうすれば圏論をわかりやすく
 . 二二/       ● |二二( (二二二二 彡(_●_ )   ミ  説明できますかね?
     |          ミ    ) )       / ` ''∪''  / ヽ
    彡、      _ノ Gノ'フ=  ___  / /i  ` ー '"  iヽ |
     /        ヽ / /     | ! / / |       | | .l. i
 ..──|ヽ         ヽ/─==i─Y-(_ノ──i二i───(⌒)
 ___ヽ       /ヽノ   └-┘ ┴     ..└┘    . ̄
      | ___ i


477 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:59:18 ]

             ∩___∩
             |ノ⌒  ⌒ ヽ
             / ●)  ●) |
        Let's  |   ( _●_)  ミ  Haskell♪
            彡、  |∪| 、`
              /  ヽノ  ヽ
             / 人    \\   彡
           ⊂´_/  )    ヽ__`⊃
                / 人 (
               (_ノ (_)

478 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:00:25 ]

            A    B


    ∩___∩   /)
    | ノ      ヽ  ( i )))
   /  ●   ● | / /
   |    ( _●_)  |ノ /
  彡、   |∪|    ,/
  /    ヽノ   /´    ここにオブジェクトAとオブジェクトBがあるクマ


479 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:02:12 ]

           A  →  B


   ∩___∩    
   | ノ      ヽ  
  /  >   < | じつはAさんはBさんを好きなんだクマ
  | //// ( _●_)  ミ
 彡、     l⌒l  ノ
 / __  \ \ヽ
. (___)   \__)


480 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:07:27 ]

   ∩___∩
   | ノ      ヽ
  /  ●   ● |   と、いうように
  |    ( _●_)  ミ   ある対象とある対象がなんらかの関係をもっていることを
 彡、   |∪|  、`\   圏論では「射」と言うクマ
/ __  ヽノ /´>  )
(___)   / (_/
 |       /
 |  /\ \
 | /    )  )
 ∪    (  \
       \_)


481 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:09:55 ]

   ∩___∩
   | ノ      ヽ      A → B
  /  ●   ● |
  |    ( _●_)  ミ  この場合、Aさんを「ドメイン」、Bさんを「コドメイン」と言うクマ    
 彡、   |∪|  、`\




482 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:15:49 ]

      ∩___∩    
      | ノ  _,  ,_ ヽ  
     /  ●   ● |     別にBさんを好きじゃなくてもいいんだクマ
     |    ( _●_)  ミ     Bさんを嫌いでもいいし
    彡、   |∪|  ノ       BさんはAさんの嫁でもいいし
⊂⌒ヽ /    ヽノ  ヽ /⌒つ    AさんがBさんをレイ-プする、という関係でもなんでもいいクマ
  \ ヽ  /         ヽ /
   \_,,ノ      |、_ノ


483 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:19:20 ]

   ∩___∩
   | ノ      ヽ
  /  ●   ● |     A → B
  |    ( _●_)  ミ      ココ!! 
 彡、   |∪|  、`\
/ __  ヽノ /´>  )   この図では「→」がAさんとBさんの関係を表してるクマ
(___)   / (_/    関係というものには方向性が付き物なんだクマ
 |       /         
 |  /\ \        この「関係を表した矢印」こそが「射」クマー!
 | /    )  )
 ∪    (  \
       \_)


484 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:20:05 ]
てらわかりやす

485 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:21:35 ]


    まだまだ続クマ?
\   ̄∨ ̄ ̄ ̄ ̄ ̄ ̄    (´´
  \(⌒-⌒)   o       (´⌒(´
   (・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡
          ̄ ̄     (´⌒(´⌒;;
      ズザーーーーーッ



486 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:40:43 ]

              / ̄)
     ∩____∩. |  |   AさんからBさんへの「射」は1つとは限らないクマー!
     | ノ        ヽ.|  |
    /  ●   ● ||  |      くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「好き好き射」
    |    ( _●_) .ミ  |
    彡、.     |∪|     |
くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「エロエロ射」」
     /  ,へ        ̄ ̄`ヽ
      /  /  \    t──┐  |
    (__/     >   ).   |  |_
             /  /   (___)
           (  \
            \__)


487 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:56:02 ]

 、   l   _,                 
  ヽ/⌒ヘ~                 
  ., 't,_,ノ丶   ∩、     ∩   
 /  !   '`  |   '──-' '\    
        ,/ ●       'i,
       /    ( _●_) ●   i,  
       彡     しノ     ミ    あたまをやわらか〜くするクマ〜
      |`:、\     'ii   __,/    
      'i、 ̄~~     ij  乙__ノi       
       ^-ァ        __,ノ      
     r^~"i'        'l
     !、 !         l       
      ~^''!,   ,_    ,!_       
         \ l,~^''‐--::,,⊃ ) ) ) )   
            `'‐’              


488 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:02:26 ]

            X  Y  Z       


    ∩___∩   /)
    | ノ      ヽ  ( i )))
   /  ●   ● | / /
   |    ( _●_)  |ノ /
  彡、   |∪|    ,/
  /    ヽノ   /´    ここにオブジェクトXとオブジェクトYとオブジェクトZがあるクマ


489 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:06:57 ]

      ∩____∩    
      /         ヽ    X → Y  YさんはXさんのいとこクマ
     /  ●   ●  |    Y → Z  ZさんとYさんのいとこクマ
     |   ( _●_ )   ミ   
    彡、,,   |∪|   /  
    /__  ヽノ   l\   
   (___u)    (uニ ).  
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


490 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:09:49 ]

|:::::::::::::::::::::::::::::::
|" ̄ ゙゙̄`∩::::::::::::::::
|,ノ  ヽ, ヽ:::::::::::::::::::::::::       X  →  Y
|●   ● i'゙ ゙゙゙̄`''、::::::::::::::::          
| (_●_)  ミノ  ヽ ヾつ::::::::::          ↓
| ヽノ  ノ●   ● i::::::::::      
{ヽ,__   )´(_●_) `,ミ:::::::             Z
| ヽ   /  ヽノ  ,ノ::::::
あれ?XさんとZさんは・・・いとこ?


491 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:17:59 ]

                   ∩─ー、
                 / ● 、_ `ヽ
                /  ( ●  ● |つ
                |  /(入__ノ   ミ 所詮、XとZが
                 、 (_/   ノ    いとこだろーと、はとこだろーと
                 \___ノ゙      関係ないのさ・・・
                 / 丶' ⌒ヽ:::
                / ヽ    / /:::   ただひとつ言えることは
               / /へ ヘ/ /:::    XからZへのなんらかの関係があるかもしれない
               / \ ヾミ  /|:::     ってことだ
              (__/| \___ノ/:::
                 /    /:::     これを圏論では射の「合成」と呼ぶ
                 / y   ):::
                / /  /:::
               /  /::::         X  →  Y
              /  /:::::                
             (  く::::::::                  ↓
              |\  ヽ:::::   
                |  .|\ \ :::::               Z
          \    .|  .i::: \ ⌒i::
          \   | /::::   ヽ 〈::     [XからZへの矢印が考えられる]
              \ | i::::::   (__ノ:
              __ノ  ):::::
            (_,,/\




492 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:19:52 ]

|
|.-──-、
| : : : : : : : : \
|: : : : : : : : : : : ヽ
|-…-…-ミ: : : : :',
| '⌒'  '⌒' i: : : : :}
| ェェ  ェェ |: : : : :}
|   ,.、   |:: : : :;!    どこで出ていこうかな・・・・・
| r‐-ニ-┐| : : :ノ
|! ヽ 二゙ノ イゞ‐′
| ` ー一'´丿 \
| \___/   /`丶、
| /~ト、   /    l \


493 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:50:43 ]

                        ,..-──- 、
                     /. : : : : : : : : : \
関数Xは               /.: : : : : : : : : : : : : : ヽ
クラスYを引数にする       ,!::: : : :,-…-…-ミ: : : : :', 
X(Y)                 {:: : : : :i  \ / i: : : : :}
ちなみにYは            {:: : : : | ェェ  ェェ |: : : : :}  合成のほかの例え!!
Zという属性を.    , 、  .   { : : : :|   ,.、  .. |:: : : :;! 
持っている      ヽ ヽ.  _ .ヾ: :: :i r‐-ニ-┐ .| : : :ノ 
              }  >'´.-!、ゞイ! ヽ二゙ノ イゞ‐′
              |    −!   \` ー一'´丿 \ 
             ノ    ,二!\   \___/   /`丶、
            /\  /    \   /~ト、   /    l \
           / 、 `ソ!      \/l::::|ハ/     l-7 _ヽ


494 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 03:52:45 ]

                      _ /- イ、_
           __        /: : : : : : : : : : : (
          〈〈〈〈 ヽ     /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
          〈⊃  }     {:: : : :ノ --‐' 、_\: : ::}
   ∩___∩  |   |      {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  
   | ノ      ヽ !   !   、  l: :ノ /二―-、 |: ::ノ
  /  ●   ● |  /   ,,・_  | //   ̄7/ /::ノ
  |    ( _●_)  ミ/ , ’,∴ ・ ¨  〉(_二─-┘{/
 彡、   |∪|  /  、・∵ ’  /、//|  ̄ ̄ヽ
/ __  ヽノ /         /   // |//\ 〉
(___)   /         /    //   /\ /
 わかりづらいクマ


495 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:10:53 ]

     _ /- イ、_     
  /: : : : : : : : : : : (   
 /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ;  関数X  →  クラスY
.{:: : : :ノ --‐' 、_\: : ::}         
.{:: : :ノ ,_;:;:;ノ、 ェェ ヾ:                ↓
.l: :ノ /二―-、 |: ::ノ..       
 | //   ̄7/ /::ノ               属性Z
. 〉(_二─-┘{/
/、//|  ̄ ̄ヽ
わかんないかなコレ・・・


496 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:14:39 ]

class X {
 method( Y ) {}
}

class Y {
 Z z;
}

class Z {}


497 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:38:27 ]
 
                                     \  i /
                                    ─── ・ ──  ← ヌッケ
                       ̄ 二─ _          // | \
                          ̄ 、  - 、      / / |
                           -、\   \  /  /
                             \\   \
                  /         \ヾ ヽ     ヽ
                 /         \ ヾ、 |       i
  クマソッ          //          |! `i        |
             ///           |         |
            / (              |         |
           <_,へ 丶-、           |         |
        __●_ rm \   \         |! リ        |
      / ヽ-'⊇) ̄`ヾ    │         /    |    |
    ⊂/ ●           /\_,.-、     / /  /    /
     │            /\  /   _/ / /  //
    ⊂丿     ミ   (⌒)   ̄      /  / /
      \__ミ  / /         //_ /
           \_/        _二─


498 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:39:35 ]

  A → B → C    H

  ↓   ↑   ↑   ↓
    
   D   E → F → J

  ↑        ↑
 
  G   H → I       くまー
                r -、,, - 、
            __    ヽ/    ヽ__
  くまー     ,"- `ヽ, / ●     l )
         /  ● \__ (● ● i"
        __/   ●)      ̄ )"__ "`;
      .(_i  ●    ' __, '"  ̄`'(___/.i⌒i
        丶_ ,i⌒i,,_(_/    ● i ̄ ̄ )_|__
      __, '"   ̄ ヽ! ● ●)  ミ~ ̄_● ヽ)
くまー   (_/     ● i    ∪  / ⊂{●  | くまー
       l ●( _●) (  ̄)-    /   -'  i
     /ヽ、   |∪l   T      i     ● '")
               くまー

499 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:43:17 ]

    i⌒i⌒i
    |    ヽ
   /   人__ヽ∩
  /  /       ヽ    >>498のように人間は人間同士いろんな関係をもってるクマ
 /  /  ●   ● |      物事だってそうだクマ
 (   |    ( _●_)  ミ      コレとかアレのいろんな関係で成り立っているクマ     
  \  彡、  |∪|   (            
   \    ヽノ   `ー´⌒\     
     \          /\  \、     
      \       /   (     ̄)  
        \     |   ( ̄ ̄ ̄ ̄) 
          \   ヽ/  / ̄ ̄
            \__/  
                   
       

500 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 04:48:31 ]
       
             ∩___∩
            /  ノ   \  ヽ
         | ●    ● |     
           彡  (_●_)    ミ
            /、  |∪|    ,\    複数の「対象」と複数の「射」の集まり
      , -‐- くJ( ヽノ   ゝ-rr- 、、      ~~~~~~      ~~~~~
     /Y  ,r 、 `ー r'"^〃 、  つヒヽ   これこそが「圏」 = 「カテゴリー」
    ,ノ '^` i! =テミ i' 天ニ  ミ、 ='"^ヾ }
   ,/ ''=''" ノ-‐'ヾ-人,,__ノnm、''::;;,,  イ  
  i!   ,∠-―-、、     `ー'フヾ、  j  圏論(カテゴリー論)の基礎となるものだクマ
  f'´    ノし   `丶、 ー=ミ-JE=-  /
  ヾ=ニ- 彡^ 〃   ,,>、、`''ー-::,,_,,ノ
    ``ー--┬:, ''"~´フ ソ´`7'' ''"´
         ,に (`゙゙´ノ   f^ヽ
        ,ハ    ,ィ'   ,;-ゝ、
        /ミ`ーt!,_,ィ-‐彡''"^ヽ
        /  ヾ::::::::::::::::r''"  ぃ ;}
       l   t:::::::::::/    ノ /
       l!   `'T7′   / /


501 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 05:06:35 ]

  圏(カテゴリー)
┏━━━━━━━━━━━━━━━━━━━━━┓
┃クマー        クマー      クマー     ┃
┃~~~~~~        ~~~~~~      ~~~~~~     ┃
┃ ↑[神]       ↑[神]        ↑[神]   ┃
┃      [好き]         [好き]        . ┃
┃ A君   →   Bちゃん   → .  C君     ┃
┃ ~~~~       ~~~~~~~~       ~~~~~ . .  ┃
┃            ↑[好き]       ↓[爆破] ┃
┃     .     .       [保有]         ┃
┃    .  .      D君    →   フェラーリ ┃
┃            ~~~~        ~~~~~~~~~~  ┃
┃            ↓[ペット]  .          .┃
┃      [同類]              .       .┃
┃ヌッケ   ←    犬                 .┃
┃~~~~~~        ~~~               .  ┃
┗━━━━━━━━━━━━━━━━━━━━━┛




502 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 05:16:08 ]

【まとめ】

┏━┓ 射 ┏━┓
┃.A.┃ → ┃.B.┃
┗━┛    ┗━┛
 対象     対象
(ドメイン)  (コドメイン)


上の図が基本要素
これが複数あつまり関係しあったものを圏という


503 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 05:20:23 ]

           ふぅ、つかれたクマー

            ∩___∩
            | ノ      ヽ        (   )
           /  ●   ● |     (  )
        __|    ( _●_)  ミ__   ( )
        (_. 彡、   |∪|  、`__ )─┛
      /  / ヽ   ヽノ  /_/:::::/    
      |::::::::::| / ( ̄ ̄ ̄ヽ  |:::::::| ̄
      |::::::::::| |   ̄ ̄ヽ .ノ |:::::::| /
    / ̄ ̄旦 ̄ ̄ ̄ ̄ ̄ ̄ ̄/|/
  /__________/ | |
  | |-------------------| |


504 名前:デフォルトの名無しさん [2007/02/25(日) 09:49:35 ]
これは分かりやすいw

505 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 12:04:29 ]
GJ!!


506 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 08:23:38 ]
>>502
それがちょっと違う。
たとえば
A → B → C という2つの射があったときに
ここでA → Cという上の2つの射の*合成*が定義されてなかったら圏にならない。
すべてのコドメインとドメインが一致する射の組について合成が定義される
場合について、その全体を圏と呼ぶことが出来る。

↑のAAもがんばってくれw

507 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 19:20:21 ]
オーム社から「クマでわかる圏論」マダー?

508 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:59:49 ]
>>506
あー、なるほどね。そういう条件が必要だったのか。
Wikipediaのこの文章をみてちょっと理解しきれなかったんだな。

>圏 C についてその射(と射の合成可能性)だけでも全部わかっていれば、
>そのうちで恒等射になっているものが対象を示しているので著者によっては
>上の公理を満たす射の集まりを持って圏と定義することもある。

恒等射ってのがなんなのかわからん。ググっても出てこないし!

>>507
クマーとかを本に使って金もらうと炎上しそうだなw

509 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 02:24:05 ]
クマーはGPLってことで

510 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 03:06:50 ]
>>508
恒等射っていうのはドメインとコドメインが等しくて、
何回合成してもそれ自身と等しくなるような射。
圏のすべての対象について、一個ずつ恒等射があること
が必要。逆に言うと、恒等射があるとそれに対応する
対象がちょうどひとつあるので、恒等射と対象は
1対1に対応している。(したがって、人によっては、恒等射を
対象そのものとみなすって言うのが↑の記事、、

511 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 03:15:03 ]
>>510
冪等射と恒等射は別じゃないか?



512 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 04:11:06 ]
あ、そうだわ、・・・集合の圏とかだと冪等射がたくさん・・・orz...

だから、上の条件にプラスして、他の任意の合成可能な射
と合成して相手を変化させないという条件も必要。

ちゃんと書くと、
1:A→Aという射で他の任意の射
f:A→Bと合成して、f1=f
g:C→Aと合成して、1g=g
となるようなもの、・・・

513 名前:デフォルトの名無しさん [2007/03/18(日) 18:43:55 ]
臨時あげ

514 名前:デフォルトの名無しさん [2007/03/18(日) 18:46:41 ]
ここで、Stringableの是非を議論すればいいのか?

515 名前:デフォルトの名無しさん [2007/03/18(日) 18:47:12 ]
馬鹿が本スレ埋めやがったな

516 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 18:47:46 ]
止めれw
次スレが立つまでの避難所ということで

517 名前:デフォルトの名無しさん [2007/03/18(日) 18:54:27 ]
よく読むとアンチスレなのにまともな議論されてるなw

518 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 19:01:05 ]
pc11.2ch.net/test/read.cgi/tech/1174211797/
立てた。

519 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 19:07:59 ]
>518
乙!

520 名前:デフォルトの名無しさん [2007/03/25(日) 15:03:44 ]
型が充実してるって言うから、ちょっと勉強してみたけど、
簡単に実行時例外が発生するじゃん。なんだよこれ。

コンパイルが通れば論理的な誤り以外、
ほとんどバグが取れてるのかと思ったのに。 

実行時に読み込むデータとかの誤りなら仕方ないにしても、
そんなのない静的にすべて決まってるプログラムでも
実行時例外が起きえるなんて、全然だめじゃんwww

521 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 19:04:34 ]
>>520
ボトムのことかな?



522 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:12:50 ]
>>520
例外を起こす可能性のある関数を使わなきゃいいんじゃない?
あるいは、もっと型の強い言語を使ったらどうよ。

523 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:53:28 ]
暗黙でも何でも良いから
関数毎の定義域に合ったサブタイプを作るとか、
なんとかならんのかね。

もっと型の強い言語ってどんなの?

524 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 01:54:12 ]
Cじゃね。

525 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 10:33:01 ]
Cほど型の緩い言語もないだろ。

526 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 10:43:07 ]
Cは緩いけど硬直的

527 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 16:44:20 ]
Dじゃね。

528 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 17:44:47 ]
void*

529 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 23:35:13 ]
日本拳法が一番厳格だと思うよ

530 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 20:05:02 ]
あんまり深く使い込んだわけじゃないけど
俺が出会ったランタイムエラーは
パターンマッチの場合分けの漏ればかりだった。

型がらみで実行時エラーってでる可能性はあるの?

531 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 20:40:55 ]
>>523
>もっと型の強い言語ってどんなの?
依存型のある言語とかじゃないか?実用化されてるのか知らんけど。

>>530
head []とかdiv 1 0とか。



532 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 20:45:02 ]
計算停止性を決定可能にした天才の>>520がいると聞いて飛んできましたよ。


533 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 21:19:17 ]
依存型って型に普通の値を突っ込めるようなもの?
とすると類に普通の型が混ざるわけ?

534 名前:530 mailto:sage [2007/03/27(火) 21:26:28 ]
>head []とかdiv 1 0とか。

div 1 0は型エラーじゃないじゃん。
head []も型システムの責任なのかい?

そうか
型に値域を限定する機能があればいいのか?

div :: (Num a) (Num b:ただし0を除く) => a -> b -> a
head :: [a] ただし[]を除く

みたいな。

でもどうやっても静的にはチェックできそうにない orz

535 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 21:59:15 ]
{-# OPTIONS_GHC -fglasgow-exts #-}

data ZeroT = ZeroT
data SuccT a = SuccT

data Nat n where
  Zero :: Nat ZeroT
  Succ :: Nat n -> Nat (SuccT n)

data List a n where
  Nil :: List a ZeroT
  Cons :: a -> List a n -> List a (SuccT n)

myhead :: List a (SuccT n) -> a
myhead (Cons x xs) = x

mydiv :: Nat n -> Nat (Succ m) -> {- ...型が書けねえ -}

536 名前:保守 mailto:sage [2007/05/26(土) 18:36:56 ]
破壊的代入を使ったら負けかなと思う

537 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 20:43:18 ]
勝ち負けを意識した時点で既にアンタ負けてるよ

538 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 23:19:22 ]
>…負けてるよ
って言ってるアンタも勝ち負けを意識してるんだから、負けてるよ。


539 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 23:32:17 ]
俺みたいな奴は勝つ必要なんてねえんだよ

540 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 21:02:25 ]
勝とうよ。haskellがあれば勝てるよ

541 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:08:21 ]
けどHaskellって正直なところ負け組だよ



542 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 02:59:58 ]
関数型言語パスカル

543 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 03:24:30 ]
>>543

544 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 03:25:27 ]
            >>544

545 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:16:38 ]
ふつケル読んだけど、後半が理解できなかった。マジで難しい。
言語の設計の根っこがCPUの挙動にぜんぜん当てはめられていないからか、
俺には宇宙語だよこりゃ…。

546 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:36:33 ]
当てはめられないかもしれないが
C言語もCPUの挙動に当てはめられるかというとそうでもない
そもそもソフトウェア設計用だからな

547 名前:偉そうに語ってみる mailto:sage [2007/08/23(木) 01:19:28 ]
>545
後半、モナドやWikiエンジンの開発のところは急に難易度が上がっているので、
それより前の部分を何度も読んで動かしていると感じがつかめてくると思います。

あとは、メモリとかスタックとか、効率のことを考えるのをひとまずやめて
プログラムでどういうことをやりたいかを考えてみるのはどうでしょうか。


548 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:46:56 ]
おまえ偉そうだぞ

549 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:14:22 ]
えっへん

550 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 09:02:27 ]
つ[龍角散]

551 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 13:01:13 ]
>>550
龍角散は「ゴホン!」だろ
エヘン虫にはヴィックスドロップ。



552 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 09:39:44 ]
高度すぎてわからなかった^^;;

553 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 23:11:49 ]
クマーが圏論を語ってる、、、。

554 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 23:12:36 ]
MLと比べてどうなの?

555 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:16:41 ]
クマー落ち防止保守

556 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 02:30:14 ]
ttp://2ch.bluesvirus.com/reserve/view/172

557 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:25:03 ]
>>10
頭の中に同型対応になるものがたくさんあるってことだから
少なくともアホじゃないだろう

558 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:27:08 ]
>>557
あの手の輩は「これは非直感的だからウンコ」て台詞の方が圧倒的に多いよ


559 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 00:28:42 ]
何この良スレ
スレタイでスルーしてて後悔した

560 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 21:30:08 ]
もっと活用できたらいいんだがなぁ・・・

561 名前:560 mailto:sage [2007/11/20(火) 21:31:14 ]
>>560
560はスレのことね



562 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 07:32:07 ]
sage

563 名前:デフォルトの名無しさん mailto:hage [2007/12/23(日) 03:41:42 ]


564 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 11:22:42 ]
クマさんのArrow講義マダ?

565 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 13:33:30 ]
arrow って命令型言語的なフローを書くための機構なんだよね?重要なの?

566 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:23:36 ]
ぶっちゃけ>>8が理解できなくて劣等感にさいなまれた。
でもHaskellをかじったら理解できた。
その経験からつまずいた点を書いてみる。

qsort [] =
qsort (x:xs) =
とqsortの定義が2つ並んでいるのが理解できなかった。

これはHaskellの階乗を見て場合分けだと理解した。
fact 0 = 1
fact n = n * fact (n - 1)

int fact(int n) {
if (n == 0) return 1;
else return n * fact(n - 1);
}

567 名前:566 mailto:sage [2007/12/29(土) 12:45:46 ]
[]が意味不明だった。
配列を[1, 2, 3]と書くと知って初めて空配列だと理解できた。

(x:xs)が意味不明だった。
他の部分で配列はすべて[]なのにここだけ()なのに違和感があった。
()はfact(n-1)のn-1と同じでx:xsが一つの要素だとくくっていると解釈した。
この辺はC言語だとコンマで区切るような所が空白で区切られているため
意識しないといけない部分だというように感じた。
そして++が配列の結合だと覚えた上で、
x:xs とはxが要素でxsが配列で [x] ++ xs という意味だと解釈した。

qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
の構文木が初見でイメージできなかった。
演算子++の優先度が高いため A ++ B ++ C と3つの配列が結合していると解釈した。
C言語風にqsort(elts_lt_x) ++ [x] ++ qsort(elts_greq_x)と書いてあれば
初見でも自力で解釈できたかもしれない。

>>10のいうように自分の知っているC言語に近いかどうかというバカの壁がある。
だからと言ってC言語を知らない人の方が先入観がなく理解しやすいとは思えないが。

568 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:55:10 ]
>>567
[1,2,3]は配列じゃなくてリスト
配列とリストの違いはググレ

569 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:57:10 ]
文法を知らなきゃ理解できんのは当然だろ

それから、細かいが、
>演算子++の優先度が高い
低い、の間違いだよな?

570 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:58:12 ]
>>10
「自分が知ってるものと似てる」=メタファ
「見たら使い方がわかる」=アフォーダンス

571 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:58:27 ]
配列とリストなんて計算量が違うだけじゃん。
初心者は気にしなくていいよ。



572 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:00:14 ]
>>571
だったらお前はmalloc,freeひたすら繰り返してろ

573 名前:566 mailto:sage [2007/12/29(土) 13:01:50 ]
>>569
小学校で1+2*3のとき+より*の優先度が高いと習ったと記憶していますが
これはひょっとして大間違いですか?

574 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:03:26 ]
>>573
どこに+と*が出てきてるんだ?

575 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:05:15 ]
>>573
もし(++)の優先度が関数適用より高いなら、
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
は、
qsort (elts_lt_x ++ [x] ++ qsort) elts_greq_x
と解釈されるはずだよ。

576 名前:566 mailto:sage [2007/12/29(土) 13:07:20 ]
>>574
Haskellとは関係なくて「優先度が高い」という言葉の定義の確認で、
+と*を比較すると*が優先度が高いという言い回しが正しいかどうかです。

>>575
すみません、それ以前のレベルで、
優先度という言葉の定義があやふやでした。

よく考えたら++の優先度が低いという意味が理解できました。
1+2*3で+は後で計算していますがqsortでの++もそれと同じですね。

混乱してしまってごめんなさい。

577 名前:566 mailto:sage [2007/12/29(土) 13:14:41 ]
>>568
ご指摘ありがとうございます。
日本語のHaskell本を2冊とも買ったのでよく勉強します。

>>569
それはそうなんですが、自信たっぷりな>>8の書き方を見て、
普通の知能の人間なら文法も含めて推測できるはず
それができない俺はアホだ。
という劣等感を感じたんです。

色々とつまずきましたが、読み方が分かるようになると、
Haskellのインデントの文法はとても美しいと感じられるようになりました。
今まで好きだったPythonが糞に思えてきました。

578 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:18:42 ]
>>577
haskellのインデント(レイアウトのことかな)が美しいと思うのは自由ですが、
ちょっと偉い人の間では嫌っている人もかなりいます

579 名前:566 mailto:sage [2007/12/29(土) 13:26:18 ]
>>578
はい、レイアウトのことです。
もしお手数でなければ参考までに嫌われている理由をお聞きしたいです。

Pythonのインデントだとコピペの際にずれを直すのが鬱陶しいと思いました。
C言語だとずれていても無視できて、後で自動整形できますからね。

580 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 14:24:52 ]
>>579
たとえばcaseの中にcaseがあって、それがレイアウトで書かれていると、
インデントが少しずれただけで全く意味が異なる式になってしまうことがあったりするから。
だからhaskellにはブロックで書くこともできるからレイアウトを使わなくても良い。
でもレイアウトが崩れても一つの解釈しかできないところならレイアウトで書いたほうがきれいかもしれないね。

581 名前:566 mailto:sage [2007/12/29(土) 20:28:26 ]
>>580
なるほど。
レイアウトはExcelで書くのに向いているかもしれないと思いました。
そういえば副作用がない関数型のイメージをワークシートに例えた解説を
どこかで読んだのを思い出しました。

ところでqsort elts_lt_x ++ [x] ++ qsort elts_greq_xの演算子の件ですが、
単純に左から右にパースして優先度は関係ないのではないかと気付きました。
静的に型付けされているため、qsortの引数は1つしかないと決められるからです。



582 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 21:35:33 ]
>>581
ヒント: カリー化

583 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 21:38:18 ]
関数型言語初心者はマジでMLかOCamlから始めろよ
いきなりHaskellやったってわからねーだろ。

584 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 22:04:56 ]
つ「Haskell The Craf tOf Functional Programming」

↑大学の教科書になってるHaskell使ったプログラミング自体の入門書だから
いきなりやってもわかるようにできてる

この本だとモナドが最後のほうになるまででてこないから
ふつうのHaskellプログラミングと併読してもいいやも

585 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 22:16:31 ]
SML とか OCaml は(頑張れば宣言的に書く事も可能な)手続き型言語だからね
「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」
という世界。

586 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 23:51:39 ]
>>585
というか、CAML開発の時点で「妥協の産物」と開発者自らが語っている。
その後継のOCAMLでレッテル貼る貼らないとか以前の問題。
その点、SMLはHaskellと同じで純粋培養した関数型っていう感じがする。
NewJergyとかいいな。

でもあえてGauchを薦めてみるw
Lisp/Scheme Familyは楽しいぞ。古きを尋ねて新きを知るという感じかな。

587 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:13:17 ]
SchemeならMonaがアツい
OS開発も一緒に楽しめて一石二鳥

588 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:24:56 ]
>>586
×Gauch
○Gauche

589 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:27:19 ]
>>587
Reading Gaucheなんてのをやってるな
ttp://wiki.monaos.org/pukiwiki.php?Reading%20Gauche

590 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:29:24 ]
Scheme は R6RS が好きになれん...

591 名前:566 mailto:sage [2007/12/30(日) 00:45:12 ]
>>582
qsortが単独で切り出されてC言語でいう関数ポインタみたいなものとして
扱われないという事実をどう解釈するかということでしょうか?
確認実験をしてみました。
inc n = n + 1
add a b = a + b
inc 2 + inc 5 → 9 (+がincより低い)
add inc 2 inc 5 → エラー (addとincが同列のため)
add (inc 2) (inc 5) → 9 (明示的に差をつける)

もし++が同列なら以下の記述を強制されそうですね。
(qsort elts_lt_x) ++ [x] ++ (qsort elts_greq_x)
括弧なしのポーランド表記とは違うのだと理解しました。

>>583
はい、しょっぱなのクイックソートからつまずきました。
実はHaskellの前に英語の本を買ってF#をやっていたんですが、
C#とパラダイムが違うという実感が湧きませんでした。
C# 3.0でラムダ式を使えばF#いらないなー、みたいな。
そんなとき、Haskellのレイアウトが美しいと気付いたんです。



592 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:53:15 ]
関数型を使うならcurryingとmonadぐらいは理解してないと使いこなせないんじゃないかな。

593 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:02:58 ]
式が二つ並んでいたら関数適用になるってことはわかってるかな
C っぽく書くと

inc 2 + inc 5 → +(inc(2))(inc(5))
add inc 2 inc 5 → add(inc)(2)(inc)(5)
add (inc 2) (inc 5) → add(inc(2))(inc(5))

594 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:38:25 ]
>>591
あなた、一度でもリファレンスに目を通しましたか?
最初から最後まで一読してから、わからないことがあれば質問してください。

595 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:39:04 ]
幸運なことに、リファレンスは日本語化されています。

596 名前:566 mailto:sage [2007/12/30(日) 01:41:46 ]
お騒がせしてすみません。
自分にHaskellは無理のようです。
色々と教えていただいてありがとうございました。

597 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:48:44 ]
アンチを増やしてどうするw

598 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:51:30 ]
この程度で挫折するようなカスのことなぞ知らん

599 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:52:27 ]
rubyコミュの二の舞はごめんだからな。

600 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:05:39 ]
Haskellユーザが増える→Haskellコミュの質低下→Haskellユーザ全体の技術力低下→オブジェクト指向化→Haskellはオブジェクト指向と親和性が低い→Haskellはダメ言語→Haskellコミュ衰退→乙

601 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:07:20 ]
Haskell衰退の他のシミュレーションよろ



602 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:10:02 ]
>>601
お前566だろ?
さっそく門前払いを逆恨みか

603 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:15:32 ]
>>600
オブジェクト指向化したのがConcurrent Cleanじゃね?

604 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:24:04 ]
関数型初心者はカリー化・モナド・遅延処理ぐらいまで理解してから始めてホスイ。
Cみたいなeager evaluationとHaskellみたいなLazy evaluationでは違うのだよ。

605 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:24:39 ]
>>603
それは勘違い

606 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:24:46 ]
>>603
いやOZだ。

607 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:33:52 ]
急にスレが伸びてると思ったら基地外が暴れてたのか

608 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:52:45 ]
冬だな

609 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 09:30:40 ]
スレタイどおりの糞オナニー言語ですな

610 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 10:47:28 ]
rubyは原理主義者がウザい

611 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:03:29 ]
>>610
原理主義って・・・もともとrubyは学者でもない一プログラマが実用主義の下に作った言語だろ?
rubyの原理主義とはなんだ?



612 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:04:34 ]
自分の胸に手を当ててみ

613 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:05:09 ]
貧乳がありました

614 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:06:55 ]
ツルペタょぅι゛ょキタ━━━━(゚∀゚)━━━━!!!!

615 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:00:47 ]
>>585
>「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
>主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」

非正格性=non-Strictness=Lazyness

わざわざ非正格性なんて判りにくい言い方をするのモナーw

616 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:06:28 ]
専門用語使うのがかっこいいと思ってる初心者さんなので許してあげてください。

617 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:15:22 ]
「正格性」の反対語なんだぜ!って感を表現したかったんじゃないの
怠惰性とか遅延性って表現はなんか違和感が

618 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:26:53 ]
そんなどうでも良い所を突っ込まれるとは思わなかった…

619 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:27:19 ]
電子工学から入った俺にしてみれば、副作用なしの関数の方がはるかに直感的だったよ。
習い始めのころでもC言語は別に難しくはなかったが、新しいことを学ぶ気持ちだった。
関数型言語で初めて今まで培った勘が役に立った感じがする。
本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。
なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。
いや、歴史的経緯は知ってるけど、納得できない。

620 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:39:19 ]
>>618
研究者の端くれなら尚更判りやすい表現を心がけるべきかと

621 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:41:16 ]
>>620
なんで研究者だと思うんですか?



622 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:52:21 ]
>>619
>なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。

関数型ではファンクターで抽象化できるからオブジェクト化が必要とされることがあまりなかったから。
手続き型では抽象化の方法がオブジェクト化に求められたが、これを関数型にポートする際にオブジェクト指向の関数型が必要とされた。
手続き型で蓄積された資産がすごい勢いでオブジェクト指向の関数型OCAMLにポートされつつあるからM$もF#を出す気になった。
こういった資産のひとつがOCAMLのocsigen。OCAML版Ruby on Railsのパクリ。
他にも、GaucheのKahuaもそれ系。
これらが関数型の世界でどんな進化をするのか興味深い。

623 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:58:15 ]
F#はファンクターが無い訳だがw

624 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:01:39 ]
Apple=>Ruby/Objective-C
Micro$oft=>F#/Visual-???
Unix=>Gauche/Haskell/etc

625 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:03:43 ]
>>624
いいえ、
Unixは終焉までずっとC言語です。

626 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:09:22 ]
>>625
Cはどのプラットフォームでも使うアセンブラ的なポジションになってると思う。

627 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:16:40 ]
妥協の産物=>Perl/Ruby/OCaml
理想主義者=>Squeak/Haskell
現代の化石=>C/Lisp/Fortran/COBOL

628 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:21:59 ]
COBOL?まだ使ってるところあるの?もう全部Javaになったかと思った。
Fortranは物理の世界では現役バリバリです。
Lisp・・・うーん

629 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:29:20 ]
市役所勤務の知り合いがいうには
優秀なやつはシステム課に回されてコボルやらされるらしいですよw

630 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:30:36 ]
Perl<=Larry Wall
Ruby<=Matz
OCaml<=INRIA
Squeak/Smalltalk<=Xerox Park(Allan Kay)
Haskell<=Bastiaan Heeren、Daan Leijen、Arjan van IJzendoorn
C<=K&R
Scheme<=Guy Lewis Steele Jr.、Gerald Jay Sussman
Fortran<=John Warner Backus
COBOL<=CODASYL

631 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:33:05 ]
つ「お題  プログラミング言語の父と呼ばれるのは誰?」



632 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:57:01 ]
チャールズ・バベッジ

633 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:19:25 ]
階差機関(difference engine)は世界初のプログラム可能な計算機と云われています。
では、どのようにプログラムしたのでしょう?

634 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:34:42 ]
>>631
まつもとゆきひろ

635 名前:デフォルトの名無しさん [2007/12/30(日) 21:54:11 ]
超良スレ保守

636 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:14:14 ]
プログラミング言語の父といえばシェーンフィンケルとHaskellだろう。1920年代のコンビネータ論理(Combinatory Logic)だ。
シェーンフィンケルが考案し、Haskellが開発した。
その仕事が1930年代のチャーチとクリーネによるメタ言語としてのλ算法の業績につながった。
そしてその後1954年にIBMのバッカスが最初の高級言語FORTRANを作る。

こういう歴史の直系だから、言語としてのHaskellが研究志向が強いというのもうなづける。

637 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:22:30 ]
カリー・ハワード同型対応なくしてプログラミング言語など存在し得ない。

638 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:40:29 ]
>>619
そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが
「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。
本質的に「状態」を持たない関数型の世界にオブジェクト指向が入り込む余地はそもそも無い。

あと、細かいことだが
>本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。
コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい?
微分方程式ばかり相手にしてると忘れがちになりかねないけれども、コンデンサは確かに「状態」を持つよ。
抵抗のことはよく分からんが。

>>622
>これらが関数型の世界でどんな進化をするのか興味深い。
「純粋関数型」を標榜するHaskellとはオブジェクトは相容れないし、
OCAMLでもコード中、オブジェクト機能を使ってる部分は、「関数型っぽく」はならないだろ?
オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。
オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。


639 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:59:13 ]
>>638
オブジェクト指向と関数型が共存することでこういったことが出来ればいいなぁという要求は出てくると思う。
これまでの言語の発展だってそういうことから出てきてる。
この部分は相容れないけどこれは一緒にするとこんなことが出来るというのが実装上の工夫のポイントだと思う。
君には無意味かもしらんが。

640 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 00:35:57 ]
Y コンビネータ (fixpoint のことを Y コンビネータと呼びます。)

data X = PsiInv (X -> (Int -> Int))

psi :: X -> (X -> (Int -> Int))
psi (PsiInv f) = f

fixpoint :: ((Int -> Int) -> (Int -> Int)) -> (Int -> Int)
fixpoint g = let h y = g (\x -> psi y y x) in
h (PsiInv h)

f :: (Int -> Int) -> (Int -> Int)
f g n = if n==0 then 1
else n * g(n-1)

factorial :: Int -> Int
factorial = fixpoint f
-- factorial 10 == 3628800

641 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 01:48:19 ]
>>638
>そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが
>「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。

ハァ?www



642 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 01:51:09 ]
>>638
>「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。
どーでもいいがデータ構造とアルゴリズムを纏めるんじゃなかったかな?
状態云々は結果的にそういうプログラミング手法が出てきただけで本質的にはあんまり関係ないと思う。

まあHaskellの代数的データ型は型とデータ構造を対応付けて
型についてアルゴリズムを書くから、データ構造とアルゴリズムはほぼ完全に分離してるといえるかもしれない。
これはこれで結構分かりやすくていいシステムだとい思うんだけど、
たとえば型クラス便利だけどインターフェイスみたいにガンガン作る気にならないっていうか、
そういう細かいあたりがめんどくさくなってる気がする。
そういうのをオブジェクト指向で何とかできないものかとか思ったり。これは俺の浅知恵だけどね。

あと、細かいことだが
>コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい?
それは「副値」的なパラメータが存在するだけで実際にそれを「副作用」として実装するかはプログラマ次第では?
というかHaskellだったら普通にモナドで表現できるもんだと思う。

実世界での対応で考えると、ある力を外力と考えることも出来るし、より大きな系の内力と考えることも出来る程度の違い。
状態が存在するかどうかはどういう切り口で物事を見るかに依存している、と思う。

643 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 23:00:40 ]
オブジェクト指向と関数型が共存できないという風評は日本だけ。
どこが発信源かは知らないがこういうことが普通に受け容れられるようになったんだなぁ。
ゆとり世代が言ってるんだろうか?

644 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:04:56 ]
プログラミングに関する珍発言がまかり通るのは、日本では昔からの伝統です。
C言語が関数型言語であるとか、インタプリタはちょっとずつコード生成して実行する
処理系であるとか。

645 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:23:29 ]
後者は国の問題じゃなくマーケティングの問題でそ

646 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:47:14 ]
関数型のCAMLがオブジェクト指向を取り入れてObjective CAMLになったように、VBがλ算法を手始めに関数型を取り入れても不思議はないと思う。
VBの互換性を問題にしてる人は参照透過性とか副次作用とかを気にしてるんだろうか。OCAMLだってあまり考えずに代入とか使えば問題があるのは同じだと思うけど。
むしろOCAMLerがVBを使うときに便利だと思うけどなぁ。

647 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:49:18 ]
それとも、OCAMLとHaskellでは全く違うということを問題にしてるんだろうか。

648 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:55:06 ]
日本以外ではマルチパラダイムでお祭なのに

>オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。
>オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。

こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。

649 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:43:07 ]
プログラミングする人はいっぱいいても言語を考える人が少ないんだよ

650 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:00:40 ]
まるちぱらだいむだうゎあい、って日本で竹内先生とかが頑張ったのは
世界の先を行ってたと思うんだけどな。

旧帝大-早慶-電電&電機メーカ研究所レベルの研究の浸透拡散がうまく
いかんのはどこかに構造的な問題があるんかね?

651 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:07:41 ]
>>648
別にお祭りというほどでもありませんが。
単に研究ネタがなくなったから今主流のオブジェクト指向と組み合わせてみよう、
って思ってるだけじゃないの。



652 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:11:25 ]
>>648
> こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。

特定の環境にこり固まって極めちゃった悪い意味での職人型なプログラマとかにありそう。
そういう先輩が職場にいて、適切なフォローを入れる人がいなかったりすると、新人は悲惨だね。

653 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:23:02 ]
>>640
SKIコンビネータのことをまとめてるHPを発見したので報告。
ttp://ls-al.jp/blog2/item_343.html

ソースコードはこっち。
ls-al.jp/blogarchives/CompileToCombinators.hs

なぜかYコンビネータはないけどY=SLLだからすぐに作れるね。

654 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:43:45 ]
>>638みたいなMythに対しては古くからこういう有名な言葉があるんだが、

"Doing encapsulation right is a commitment not justto abstraction of state,

but to eliminate state oriented metaphors from programming."

Alan Kay, Early History of Smalltall

655 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:44:47 ]
○Smalltalk
×Smalltall

656 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:12:45 ]
Haskellはオブジェクト指向じゃないけど型クラスを使えるから準オブジェクト指向関数型言語とでも言えるのかな。
「型クラス」と「型構築子クラス」でオブジェクト指向っぽく使えて、副作用がないようにモナドやその一般化のアローが使える。
オブジェクト指向と関数型が共存出来ないと言いながらHaskellを使っている人は分裂気味なんじゃないでしょうかね。

657 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:23:03 ]
いや、Type Class と、オブジェクト指向の「クラス」は別物な訳だが

658 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:26:07 ]
>>657
だから『準』と言っている訳だが

659 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:30:37 ]
「準」とかで片付けるとかどんだけwwwwwww

ばか

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

661 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:44:34 ]
どんだけwwwwwばか

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

無意味、無意味。無駄無駄無駄wwwwww



662 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:47:28 ]
Haskellerはオブジェクト指向もわからないばかということですか。ああそうですか。


663 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:49:37 ]
残念な展開だね。

664 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:57:51 ]
>>656
arrow使いにくい
まるでbrainf*ckみたいに見える
結局は普通に書いたほうがきれいだ

665 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:13:14 ]
「普通」とかで片付けるとかどんだけwwwwwww

ばか

やっぱHaskellerってのは池沼だね。

666 名前:デフォルトの名無しさん mailto:sage [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

667 名前:デフォルトの名無しさん mailto:sage [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)

668 名前:デフォルトの名無しさん mailto:sage [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, "")

669 名前:デフォルトの名無しさん mailto:sage [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なんてたったこれだけ。

670 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:35:01 ]
>>665
お前は日常会話もできなそうだな

671 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:35:35 ]
>>669
それをarrowでどうぞ



672 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:45:58 ]
>>638
状態を持たないステートレスオブジェクトはそのまま純粋関数型言語に取り込めますよね。
「純粋関数型」を標榜するHaskellは状態がないのではなくモナドに閉じ込めています。
ステートフルオブジェクトの状態も同様にモナドに閉じ込める事で「純粋関数型」を
維持したままオブジェクトを利用できると考えますが何か問題があるのでしょうか?

673 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:56:27 ]
>>672
>>664>>671でも書いたがarrowが使いにくいんだよ。brainf*ckみたいだろ。

brainf*ckを書き込んだ池沼にはわからねぇんだろうが

674 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:59:06 ]
>>672
うんうん。Monadiusとかそうだよね。

675 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:14:19 ]
>>670
で、「普通」の説明はマダァ?

676 名前:デフォルトの名無しさん mailto:sage [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::::::ヽ

677 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:14:38 ]
>>675
それは658が一番詳しいから658に聞いてくれ

678 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:25:09 ]
さんざ荒らして説明拒否かよw

679 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:28:47 ]
えっ、だれが荒らし?

680 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:34:27 ]
池沼の「普通」なんて誰も興味ねえってよw

681 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:37:07 ]
>>679
少なくとも>>676はアラシだろw



682 名前:デフォルトの名無しさん mailto:sage [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

683 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:10:09 ]
>>665
普通?
社会通念だよ。

684 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:10:54 ]
論文じゃあるまいし。
揚げ足取りなんかやってるから単位も危なくなるんだぞ?

685 名前:デフォルトの名無しさん [2008/01/05(土) 22:25:42 ]
>>683-684
せっかくぐぐって終息させてやろうとしてるのに馬鹿だねおまえはw
黙ってれば終わったのに。
晒しage

686 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:27:36 ]
これが関数型使って気取ってる池沼の実態ですwwwwww

ばか

687 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:30:06 ]
使えもしないのに関数型に憧れてんなYO!
Haskell使いキモスwwwwww

688 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:34:13 ]
スレタイ通りのオナスレageんな

689 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:37:08 ]
クソ言語が普通とか言ってんなよ。所詮、脳内オナニー。

690 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:39:26 ]
恥ずかしいスレ名をアゲんな、変体どもがぁ。
Haskellはプログラム板の恥だな。

691 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:43:34 ]
スレの削除依頼出せ.キモイんだよお前等



692 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:46:01 ]
まあ、重複スレなのでこちらを削除しても問題ありませんね。

693 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:57:22 ]
↑さんざん恥をかいたのでスレ削除して欲しい張本人がこう申しておりますw

694 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:59:01 ]
Haskell使ってる人って頭が良いイメージだったけどw

695 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:01:32 ]
なかなか笑わせてもらった

696 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:18:12 ]
「Haskell」=「Arrow」+「普通」

697 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:20:35 ]
普通ってwwww

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

ってWirth先生が言ってたぞ。


698 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:21:56 ]
>>697
先生のゆーとーり世代

699 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:21:57 ]
アローだってデータ構造だろうに。

700 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:23:22 ]
普通のアルゴリズムなんて定義できんだろ。

701 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:24:32 ]
普通のどこが気に入らないんだろう



702 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:25:43 ]
アローに付随したアルゴリズムに定石でもあるのか?そんな本見たことねーぞ。
むしろ教えろゴルァ!

703 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:28:27 ]
アローの定石と言えるかわからないけどバード先生の本には載ってる

704 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:35:36 ]
Rahbi & Lapalme にはモナドの説明が無いけど、

Introduction to Functional Programming Using Haskell
Richard Bird

こっちには載ってるのか。

705 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:39:06 ]
アロー程度がちょちょいと説明できないようじゃHaskell使いこなせてると言えないよね。

706 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:40:25 ]
アローって簡単?

707 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:46:49 ]
>>706
ふ・つ・う wwwww
お頭が弱いとアローがbrainf*ckみたいに見えるらしいけど、可換図式みたいで判りやすいよ。
ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。

708 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:48:02 ]
>>707
> ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
どうやら、arrowでプログラミングしたこともないことがよくわかった。

709 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:55:34 ]
アマゾンみたらバードの本にはモナドとかアローについて書いてあるらしい。
でも翻訳はMirandaについてでモナドとか載ってなさげだねぇ。

710 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:10:55 ]
Arrowって、Kleisli 圏とか Premonoidal 圏みたいなもんか。たしかに図を描けばなんてことなさげ。

711 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:16:47 ]
>>708
はいはい。あーarrowはむずかしいいや。brainf*ckみたいにみえるなあw



712 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:21:36 ]
教訓

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

・ 「Haskell」=「Arrow」+「普通」 (ただしArrowはbrainf*ckである)

713 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:29:02 ]
>>712
なにそれ?Haskell全否定じゃん。

714 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:31:52 ]
708は口調ですぐわかるな。アンチなら使わなきゃイイジャン。

715 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:51:13 ]
アローって意味的にはモナドなんかよかよっぽど理解できるだろ。
要するに計算の合成を定義すればいいだけ。
フリーダムすぎて使い方を迷うところはあるけど……圏論の知識とかいるか?

716 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:59:29 ]
>>715
いらない。

717 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:00:54 ]
arrowでプログラミングするのに数学も圏論の知識も微塵も必要ない。

718 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:01:02 ]
>>715
あれば簡単ってことなんじゃないの?おれ圏論知らないけどさw

719 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:03:26 ]
>>715
アローってモナドの一般化したやつじゃん。ほとんど同じだろ。
アローが関数を受け持って、モナドが値を受け持つ箱みたいなイメージ。
違ったっけ?

720 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:07:59 ]
>>717
それは極論だろ。SコンビネータとかBコンビネータとかYコンビネータを適用するとき副作用があるのか分からなくてドキドキする。
数学知ってたらこういうことがさらっと出来ていいんだろうなと思う。

721 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:10:19 ]
Haskellじゃなくてもいいようなプログラムなら数学の知識はいらないとは言えるw



722 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:13:48 ]
結局、Haskellを何に利用しているかでアローの難易度も違って見えるんだろうね。

723 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:21:50 ]
いらない・無意味・微塵も必要ない

724 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:28:42 ]
普通

725 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 04:40:35 ]
arrow関連で卒論書きたいんですが、受けはいいでしょうか?

726 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 13:30:28 ]
>>719
値を受け持つ箱と考えるより、monadic function(a->m b)の形式で計算を纏めていく戦略と考えたほうが
理解しやすいかもしれん。monadic valueそのものをモナドだと思ってしまうとよくわからんなるんじゃない?

727 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:41:27 ]
>>717
ならこのスレに来るな。ここはクマーが圏論を説明してくれた偉大なスレだ。

728 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:44:29 ]
>>720
数学の知識がなくてもSコンビネータとかBコンビネータとかYコンビネータが
何を意味しているのかだけ知っていればどきどきすることはありません。

729 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:54:07 ]
>>728
意味が良くわからない。AAで説明してくれ。たのむわ。

730 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:07:19 ]
           /-─-,,,_: : : : : : : : :\
          /     '''-,,,: : : : : : : :i
          /、      /: : : : : : : : i     ________
         r-、 ,,,,,,,,,,、 /: : : : : : : : : :i    /
         L_, ,   、 \: : : : : : : : :i   /  圏論持ち出したら
         /●) (●>   |: :__,=-、: / <   負けかなと思ってる
        l イ  '-     |:/ tbノノ    \  ニート(24・男性) 
        l ,`-=-'\     `l ι';/      \ 
        ヽトェ-ェェ-:)     -r'          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         ヾ=-'     /

731 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:26:09 ]
>>730
博士課程のニーとですがなにか



732 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:39:00 ]
数学の知識無しでアローをAAで説明出来んじゃなかったの?
しったかかw クマーktkr

733 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:23:29 ]
スレの流れに
水を差すようで申し訳ないんだが
ちょっと質問
>>720
にある「(対称)前モノイダル圏」って
よく意味が解らない
対称モノイダル圏の条件を弱めたものらしけど
対称モノイダル圏だとなにか不味い事でもあるのですか


734 名前:733 [2008/01/06(日) 17:25:08 ]
>>720
でなく
>>710だた

735 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:38:01 ]
アローなんて簡単だろ
ほれ、これがアローだ


736 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:51:02 ]
これの事でしょうか?ハァハァ

        /⌒ヽ⌒ヽ
               Y
            八  ヽ
     (   __//. ヽ,, ,)
      丶1    八.  !/
       ζ,    八.  j
        i    丿 、 j
        |     八   |
        | !    i 、 |
       | i し " i   '|
      |ノ (   i    i|
      ( '~ヽ   !  ‖
        │     i   ‖
      |      !   ||
      |    │    |
      |       |    | |
     |       |   | |
     |        !    | |
    |           | ‖
   /          ヾ

737 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:53:24 ]
AA職人がいなくなってつまんなくなったね。

738 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:54:47 ]
AA職人というか、コピペで説明してただけだろ?

739 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:57:34 ]
その「説明してただけ」すら出来ないコピペ厨w

740 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:58:38 ]
たしかに1年でレベルが落ちたのは否定できんなw

741 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:59:42 ]
単にスレが捨てられただけでは?



742 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:00:42 ]
いまどきarrowなんてみんな知ってて、いまさら説明の余地もない。
新しいネタ探して来い

743 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:14:58 ]
>>742
こら!みんなが矢印とかちんぽを無視したからって怒るでないw

744 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:17:28 ]
クマーってもう一年前の話か。上のほう見たら2つもあるね。

745 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:19:22 ]
>>742
↑とアローの説明が出来ないクズが取り乱しております

746 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:27:48 ]
>>728
コンビネータ理論を知っていれば十分で数学の知識を前提としないって?おいおい。
支離滅裂だぞ。

747 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:44:24 ]
>>746
数学の基礎的な知識はそれほど必要ないだろ。
「それだけ」知ってればいいんだから。

748 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:55:31 ]
>>747
基礎の意味が違うでしょ。コンビネータ理論は数学基礎論であって、数学の基礎知識じゃない。
しかも副作用についての知識は、いくつかのコンビネータを知ってるではすまない。
他にも山のようにある関数について、一つ一つ個別に知ってるよりも理屈を知ったほうが当然良い。

749 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:51:52 ]
λλλλλ...

↑アロー・モナド・コンビネータ理論について行けず、肩を落として帰るプログラマの群れ

750 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:08:05 ]
正直arrowとかどうでもいい
それよりhere documentを入れてくれ

751 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:29:30 ]
>>750
ttp://cvs.haskell.org/Hugs/pages/users_guide/here-documents.html



752 名前:デフォルトの名無しさん mailto:sage [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になるということを狙ってる。たしかにモナドって数学的な基礎知識無しでも使えると確信しましたか?

753 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:44:58 ]
当然だけど、アローについても同様の議論が展開できる訳です。まあ、アローなんかどうでも良いんでしたね。

754 名前:デフォルトの名無しさん [2008/01/07(月) 22:52:18 ]
モノイド圏とモノイダル圏て何が違うの?

755 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:07:53 ]
>>752
乙。>>710あたりが言ってた図を書くって「ペースティング図、スタック図(Santiago graphical notation)、ストリング図で描く・・・」てことか。
おれも>>735みたいなのをアローと思ってたw

756 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:13:13 ]
>>754
Monoidal Category = モノイド圏
>>733しかモノイダル圏という日本語は使っていないと思う。普通、モノイド圏と呼ぶ。

757 名前:デフォルトの名無しさん [2008/01/07(月) 23:44:59 ]
>756 thx

ところで、圏でのモナドは分かるんですが、
プログラム言語のモナドって何なんですか?


758 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:30:05 ]
検索しましたら次の資料が見つかり自己解決しました。
www.ipsj.or.jp/07editj/promenade/4703.pdf

759 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:33:47 ]
>>757
ほい
ttp://www.sampou.org/haskell/tutorial-j/monads.html

HaskellのモナドはMonadという型クラスのインスタンスれす。
Monadクラスは2つのクラスメソッドを持っていて、その2つがモナド則(3ホーソクありゅ)を満たしてマース。
よく使うモナドはIO, Maybe, Listあたりでしょう。どれも「演算」を繋ぐという感じに使いマース。

この3行を見たらリンク先にJUMP!

2つのクラスメソッドは、最初のうちは『>>=』が『|』(パイプ)に対応、『return』が『cat』に対応すると覚えておけば良いかもネ!
(Jonesはわざとパイプっぽくしたらしいネ)
モナドの構文は3つ。doとletとifだけ。

演算をモナド的に定義して繋ぐと、新しい特徴を参照透過的にモナドに結びつけることが出来ちゃう。
しかもモナド則3が保証するように「組み立て順序が自由」で、長くつながったモナドの鎖のどこを切ってもモナドになるョ。
これがモナドがもたらすモジュール化という効能だよーん。

760 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 01:11:34 ]
>759 おおDankeです
プログラムにはなかなか深い数学が隠れているんですね。
いまふと思ったんですが、物理に出てくる量子化という
概念も、もしかするとモナドに関係あるかも知れません。
モジュラリティが何を意味するのかよく考えてみます。





761 名前:デフォルトの名無しさん [2008/01/08(火) 21:02:22 ]
ここの説明もなかなかおもしろいよ。
blogs.dion.ne.jp/keis/



762 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:15:53 ]
>>761
宣伝乙

763 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:40:15 ]
>>759
doとletは分かるけど、ifってモナドと関係あったっけ?

764 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:36:51 ]
>>761
説明が間違ってるところ大杉。
自分でモナドを作る時、どうするつもりかと思った。

765 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:45:48 ]
>>763
do と if を一緒に使う話じゃないかな。有名な「一行で書け」ってやつ。

766 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:55:16 ]
>>761
パクったはいいが、意味を理解してなかった、ってところか。

767 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 09:22:24 ]
>>761ってそんなに間違いが多いのか〜
どこからパクったのか分かりますか?

768 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 07:49:24 ]
この年末年始のプログラマの休暇に
ここのスレが結構盛り上がっていたな

769 名前:デフォルトの名無しさん [2008/01/13(日) 08:07:15 ]
プログラマは休暇にHaskellの勉強か
みんな偉いな

770 名前:デフォルトの名無しさん [2008/01/13(日) 10:35:26 ]
どのへんがまちがってるの?

771 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:53:03 ]
勘違いしてるだけなんじゃない?



772 名前:デフォルトの名無しさん [2008/01/18(金) 04:18:25 ]
なんだかんだ言って、本当はぜんぜん分かってない奴がほとんどだろw

773 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 09:45:24 ]
まぁ仲間は多いと思っておきたいところだよな。

774 名前:デフォルトの名無しさん [2008/01/18(金) 15:35:54 ]
>>761の間違いを早く指摘して欲しいもんだなw

775 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 15:37:06 ]
>>774
そういってPV稼ぐ魂胆だろ
自演乙

776 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 15:18:10 ]
こんなとこで宣伝したところで何PV増えるというのか

777 名前:デフォルトの名無しさん [2008/01/19(土) 18:53:04 ]
>>775
そうやって自分が理解できてないのを誤魔化そうって魂胆だろ。
まずは>>761の間違いを指摘してみろよ。話はそれからだなw

778 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:02:10 ]
ひとり暴れているのがいるみたいだね。誰も話したくないからって理解できないんだろうか。

779 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:31:52 ]
いったいどこからパクったのか教えてくれよ。

780 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:54:12 ]
>>779
どうでもいい

781 名前:デフォルトの名無しさん [2008/01/20(日) 18:21:29 ]
どうでもよくないな。それによって>>761が間違いかどうか判断できるだろ。



782 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:01:14 ]
その判断がどうでもいいと言っているんだよ

783 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:35:14 ]
1/8を最後にパッタリ流れが止まったのはなぜかな?

784 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:41:46 ]
ヒント 自演

785 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 04:24:11 ]
結局Haskellって遅いの?

786 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:55:28 ]
>>785
perlよかハエーよ  スクリプトに使うなら無問題
組込系にはちょっと  シビアなタイミングが求められるとダメポ

787 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 05:51:47 ]
>>786
>組込系にはちょっと  シビアなタイミングが求められるとダメポ
組み込みはどんな感じのアセンブリコードが生成されるのか予測しやすいほうがいいと思うんだが、
Haskell使いが慣れてくるとどういうasm吐くか割と簡単に把握できるようになるの?


788 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:33:33 ]
>>786
Perlよかはやいとか到底考えられないのだけど、その根拠は?

789 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:35:05 ]
>>788
ttp://shootout.alioth.debian.org/sandbox/benchmark.php?test=all&lang=ghc&lang2=perl
だと 14 対 1 で Haskell が速い

790 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:53:31 ]
動的型でバイトコンパイルのPerlと、静的型でネイティブコンパイルのHaskellを比較して
Perlの方が速いと思うなら、そっちこそ説明が要るだろw

791 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:00:36 ]
え〜Haskellって、ネイティブコンパイルしてるのか。それすら知らなかったわw
インタプリタだとばかり思ってた。



792 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:10:08 ]
両方可能だがね

793 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:34:52 ]
インタプリタあるんだ、知らんかった
コンパイルしなくてもCGIとして使えるのかな 調べてみるか

794 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:39:19 ]
あるかどうかは知らんが、可能ではあるだろう

795 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:44:38 ]
runghcとかrunhugsとかあるけど、インタプリタをサーバに導入するほうが返って面倒な気もする

796 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:15:57 ]
>>793
可能だよ

797 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:00:27 ]
Haskellまだかじった程度だけど、参照透明性がなにかハッピーにしてくれるの?
やろうと思えば、既存の言語でも出来るわけで。言語的に制約がかかっているか
どうかでしょ。「言語的に制約がかかる」というのは、入門者にとってしかメリット
はないよ。

遅延評価も*ほぼ*使わない。無限計算なんてやらんよ?

こんなんで、なんで既存言語から乗り換えるの?俺が、まだHaskellよくわかっていない
だけ?

798 名前:デフォルトの名無しさん [2008/02/16(土) 23:01:19 ]
あげ

799 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:07:18 ]
俺も初心者だけど、参照透明性の重用性がよくわからない。

つか、結局はunsafeなんとかで参照透明性をくずしてんでしょ?


800 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:08:04 ]
ちなみにクソリストなんて採用するのはやめてくれ

801 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:08:40 ]
>>797
C++ が参照透明な言語だって知ってた?



802 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:10:00 ]
>>801
信じられない。あふぉかw

俺が、無知なら教えてくださいw

803 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:10:31 ]
>>797
お前、今日のRuby勉強会に行ったやつだろ?

なぜ関数プログラミングは重要か
www.sampou.org/haskell/article/whyfp.html

804 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:11:05 ]
参照透明性って、再代入できないってことだよな(間違ったら訂正してくれ)
C++は再代入できる、とおれは思ってるがw

805 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:01 ]
>>803
Rubyはすきだが、そいつじゃない。というか、今日一日ひきこもってたしなw

806 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:04 ]
>>799
unsafeを使うときは注意が必要である
いつ実行されてもプログラムに矛盾が発生しないことがはっきりしない限り使うべきではない

807 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:29 ]
式と値が一対一に対応していること

808 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:16:09 ]
Haskellのメリットを説きたいなら>>803のリンク教えるだけで十分じゃねーの?

809 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:16:48 ]
>>802,804
まずはこれを読んでみてくれ。
d.hatena.ne.jp/w_o/20061008#p1

これが面白いのは、参照透明は程度問題に過ぎないという
視点を得られる所なんだと思っている。

810 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:18:09 ]
参照透明性なんて飾りだよ
Haskellの魅力は、副作用が禁じられていることじゃなくて、
副作用なんていう扱いにくいものに頼らなくても自然にプログラムを書けることだ

遅延評価は大いに使う
「ほぼ使わない」なんて思えるのはHaskellに慣れてないだけだ
例えば、C言語の典型的なfor文の使い方
for(T i = init; cont(i); i = next(i)) use(i);
を、Haskellで自然に書き直すと
mapM_ use $ takeWhile cont $ iterate next init
になるけど、これは無限リストを使っている

811 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:19:34 ]
>>809
あなたはネタを理解できない人なんですね



812 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:23:05 ]
遅延評価便利だよ。
MLが不便に思えるぐらいだ。

813 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:23:13 ]
>>811
ドッキリとかを真に受けるタイプの人でしょ?
>>809 がネタなんだけどね

814 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:26:29 ]
>>799
unsafeなんとかは、本当は参照透明なのに、コンパイラが参照透明だと見なしてくれない式を書くときに使う
そうじゃない使い方もできるけど、それは邪悪な使い方だ

815 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:28:06 ]
ffi使えばunsafe使わなくてもいくらでも邪悪なプログラムが書けるぜ。

816 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:28:41 ]
HaskellのFFIはめちゃくちゃ楽だからな。
組み込みプログラムもなんのその。

817 名前:799 mailto:sage [2008/02/16(土) 23:41:48 ]
>>803 >>808

803のリンクは、
「参照透明は関数型言語の魅力としては不適当」と言っているのでは?


818 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:47:33 ]
>>816
オーバーヘッドもあるしメモリも食いまくるから組み込みには全く向かないだろ

819 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:54:08 ]
>>818
関係ない。
組み込み=低リソースという時代は終わったんだよ。
それよりも、たとえばロケットや自動車のような用途では安全性が求められる。

820 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:57:18 ]
>>817
参照透明でなければ遅延評価は役に立たないよ

821 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:00:21 ]
D 言語に遅延評価もどきはあるけどな。



822 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:02:57 ]
遅延評価はテクニックに近いものもあるしな

823 名前:799 mailto:sage [2008/02/17(日) 00:06:23 ]
>>820
なるほど…。

でも、遅延評価も必ず使うわけではないし、
(IOの時など遅延評価されては困る場合もあるわけですよね?)

なんというか、参照透明そのものの優位性がわからない…。

・コンパイラが作りやすい?
・数学的にみて美しい?

…、いずれも一般ユーザには関係ないですよね…。

824 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:07:34 ]
参照透明性ってデバッグの容易さの点で重要と聞いてるけど。

825 名前:799 mailto:sage [2008/02/17(日) 00:08:33 ]
>>814
う〜ん…。これは正しいのでしょうか?

あくまでも、Haskellは参照透明であって、
そうでないプログラムは邪悪という事ですよね。

826 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:11:43 ]
>>823
参照透明だったら関数の返値をキャッシュできるよ

827 名前:799 mailto:sage [2008/02/17(日) 00:14:55 ]
>>826
コンパイラの話ですよね…。

828 名前:799 mailto:sage [2008/02/17(日) 00:16:41 ]
>>824
Haskellのデバッグってむしろ大変そうですけど…。

829 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:18:15 ]
>>827
完全にキャッシュできればプログラマはわざわざメモ化とかのテクニックを使ってプログラミングする必要がなくなる。
・・・とは言うものの、GHCでは完全にキャッシュしているわけではない。

830 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:19:45 ]
>>828
Cのデバッグで一番骨が折れるのが型によるバグ。
Haskellはコンパイルさえ通れば型に関しては完全に矛盾がない。

831 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:20:48 ]
>>823
だから、参照透明性はそんなに重大な特徴じゃないんだって
(利点が無いわけじゃない。コンパイラによる最適化がやりやすい。コードが読みやすい。リファクタリングしやすいetc)
逆に、「参照透明でないこと」(破壊的代入や副作用を認める)にも大して優位性は無いんだ

Haskellにはもっと重要な特徴がたくさんある
動作オブジェクトを利用した入出力とか、代数的データ型+パターン照合とか、型クラスとか、遅延評価とか



832 名前:797 mailto:sage [2008/02/17(日) 00:25:59 ]
>>830
Haskell の型はステキだと思いますよw

でも、traceとか「デバッグ」は大変そう…。


833 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:29:07 ]
>>831
>参照透明性はそんなに重大な特徴じゃない

そうですよね…。
でも、なんか、かたくなに参照透明性を守ろうとして
余計わかり難くなってる気がするんですよね。

全面的な参照透明性を捨てた方が、
すっきりするのではないでしょうか…?

834 名前:799 mailto:sage [2008/02/17(日) 00:29:52 ]
>>833 は 799です

835 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:30:17 ]
第15回 Haskellでのデバッグのコツをつかむ
itpro.nikkeibp.co.jp/article/COLUMN/20071204/288630/

836 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:30:34 ]
traceってどういうのを指してるか分からんけど、printfデバッグの類は普通にできる

ただ、HaskellがCよりデバッグしにくいのは事実だと思う
gdbに匹敵する使いやすさのデバッガがまだ無いからだが

>>833
>でも、なんか、かたくなに参照透明性を守ろうとして
>余計わかり難くなってる気がするんですよね。
どの辺でそう感じた?

837 名前:799 mailto:sage [2008/02/17(日) 00:31:00 ]
ああっ!
>>832 も799です。


838 名前:799 mailto:sage [2008/02/17(日) 00:35:00 ]
>>836
> printfデバッグの類は普通にできる

そうなんですか?
なんかprintfいれるとバグが再現しないとか多そうですが…。


> どの辺でそう感じた?

IOモナドww
参照透明性を捨てれば
もっとステキな実装がありそうじゃないですか?

839 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:38:46 ]
参照透明性を確保するために導入したんだから
本末転倒だじょ

840 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:41:05 ]
俺はIOモナド大好きなのでその気持ちは良く分からん
例え参照透明性を捨ててもIOモナドは使いたい

841 名前:799 mailto:sage [2008/02/17(日) 00:41:50 ]
>>839
ん?
いや、だから、参照透明性に固執するから、
IOモナドなんて理解しにくい方法で実装してるんでしょ?



842 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:43:33 ]
参照透明性を実現する完全に純粋な関数型言語を作るのが
Haskell の1つの目標だったんじゃないのか?

843 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:50:41 ]
IOモナド、というかIO動作の考え方は多少とっつきにくいけど、分かってしまえば簡単なことだし、
副作用を使った入出力よりずっとまともだと思う
それから、遅延評価の言語で素朴に副作用を使うと実行順が制御困難になるけど、
IO動作ならこの問題がない

>>842
だろうな
でも言語のユーザーにとってはそんな目標はどうでも良い

844 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:51:38 ]
参照透明性が要らないというなら OCaml とか他の言語使えばいい。
それだけだと思うぜ。

845 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:00:20 ]
>>844
その議論はおかしい
Haskellの特徴は参照透明性だけじゃない
デフォルトの遅延評価も型クラスもIOモナドも$演算子もOCamlには無い
参照透明性なんてどうでも良いという奴にでも、Haskellを使う理由はいくらでもある

846 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:09:14 ]
じゃあ、参照透明性の無いHaskell に相当する言語を作ったらいいんじゃね。

847 名前:799 mailto:sage [2008/02/17(日) 01:12:57 ]
>>840
そうなんですか…。
結局、慣れの問題なんでしょうかねぇ…。

848 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:15:01 ]
Haskell では参照透明性をくずすものは trace のみなんだっけ?

849 名前:799 mailto:sage [2008/02/17(日) 01:15:23 ]
>>846
まさに、そう、思うんですよw

そんな言語があれば、
確実にブレイクするのではないでしょうか?

誰か作って!私はもちろん……ムリ!

850 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:26:25 ]
>>848
unsafePerformIOってのがある

>>849
単に参照透明性のないHaskellならunsafePerformIOを言語の一部として認めれば良いんだけど、
IOモナドを排除するのは難しいと思う
>>843で書いたけど、普通の言語にあるような副作用による入出力は、遅延評価と相性が悪い
実行順を分かり易く制御するには、結局、IOモナドか、Cleanの一意型か、
それに代わる何か新しいメカニズムが必要になる

851 名前:799 mailto:sage [2008/02/17(日) 01:39:54 ]
>>850

な〜るほど!
ひょっとしてunsafePerformIOを使いまくって
>>814 の言う邪悪なIOライブラリを作れば、
Haskellのままでもいいかもしれませんねw






852 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:41:59 ]
もう屁みたいな例をたくさんあげられるのはウンザリだよ。

こうしよう、C(ほかの言語でもいい)からHaskellに乗り換えるために十分な
説得力を持つ実務的な例を1つだけあげてくれ。

853 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:55:30 ]
darcs

854 名前:799 mailto:sage [2008/02/17(日) 01:55:42 ]
>>852
「実務的」というかどうかはしらないけど、
コンパイラ的な処理には向いてるらしい…。


再帰下降構文解析
ttp://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0%E4%B8%8B%E9%99%8D%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90
HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

855 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:00:39 ]
> HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。
っていうのはウソっていうのはどっかでみたなw

856 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:06:37 ]
>>854
実際、言語処理系には向いてる。
構文解析だけじゃなく、コンパイル過程での構文木の操作とかに
代数的データ型とパターンマッチがぴったりハマってかなり綺麗に書ける
(MLも同様。代数的データ型じゃなくてバリアントという名前だけど)。

言語処理系は、基本的にツリーの変形みたいな
I/Oを伴わない数学的な処理が多いから、という理由づけもできるかな。

857 名前:799 mailto:sage [2008/02/17(日) 02:08:10 ]
Haskellというか、関数型言語の魅力としては、
>>803 のリンク先を読めばかなり納得できると思う。

858 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:16:57 ]
>>848
いいえ

859 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:23:46 ]
Haskellの言語仕様にunsafeとかFFIとかってあったっけ?
GHCの仕様じゃないの

860 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:27:47 ]
>>859
FFIはHaskell 98への追補
www.cse.unsw.edu.au/~chak/haskell/ffi/
unsafePerformIOも入ってる

861 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:29:45 ]
じゃあ、Haskellは純潔を失ったというわけだ



862 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:36:34 ]
ハードリアルタイムアプリはHaskellでは無理

863 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:30:28 ]
実時間要求とメモリを直接利用するアプリケーション以外はHaskellでおk

864 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:58:51 ]
>>863
できるだろ
www.haskell.org/ghc/docs/latest/html/libraries/Win32/System-Win32-DebugApi.html#v%3Ac_ReadProcessMemory

865 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:01:27 ]
仮想メモリとかOS必須じゃn

866 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:47:44 ]
Haskell (International Computer Science Series) (ペーパーバック)
Simon Thompson (著)
# ペーパーバック: 528ページ
# 出版社: Addison Wesley; 3Rev Ed版 (2008/9/15)
# 言語 英語, 英語, 英語
# ISBN-10: 0201882957
# ISBN-13: 978-0201882957
# 発売日: 2008/9/15

今度こそ発売?

867 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:08:34 ]
参照透明性を保証しないと、グラフ簡約が使えなくね?

868 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:18:32 ]
使えなくはないと思うが、何で?

869 名前:デフォルトの名無しさん [2008/02/18(月) 20:15:31 ]
>>642
データ構造とアルゴリズムをまとめるだけなら、それこそ関数型言語の得意分野だし、
手続き型の世界でも、メッセージメタファって何それ、なgeneric programmingが幅を利かせている。
その分なおさら、状態と手続きをまとめるSmalltalk的なオブジェクト指向が
影響力を増しているように思う。
>>654のAlan Kayの言葉は、実行順序への依存性が下がること
(これはメッセージメタファ、イベント駆動から自然に出てくる)と、
参照透明という意味で状態を全く持たないことを(故意に?)混同している。

870 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:47:18 ]
ハードウェアリアルタイム処理って言葉にすれば
Haskellはかなりいけそうな感触なんだけどなぁ

871 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:02:24 ]
>>868
形式的な表現が同じでも、値が同じことの保証がなくなるから。



872 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:36:55 ]
>>871
副作用を入れるなら当然それは覚悟の上じゃないのか

873 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 12:45:42 ]
>>872
副作用を入れてもいいのは、値がユニット型の関数だけにしないと破綻するだろ。

874 名前:デフォルトの名無しさん [2008/03/09(日) 07:06:26 ]
↓この暗号が解けたら初心者卒業と言えるでしょうか?
main = getArgs >>= putStr . flip id "\n" . foldr (.) id . map (showHex . read)

ttp://haskell.g.hatena.ne.jp/nobsun/20060819/ShowS を少し改変

875 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:02:11 ]
>>874
暗号に見えていたのが、何の変哲もないプログラムとして認識できるようになったら卒業だな。

876 名前:874 mailto:sage [2008/03/09(日) 19:04:29 ]
>>875
そうですか…
1日がかりで解けたので初心者卒業かと思ったのですが…orz

何の変哲もないプログラムに見えるように精進しますw

877 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:43:38 ]
何の変哲もないように見える必要はないと思うが解くのに1日がかりはまだ初級者の域か。

878 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:20:39 ]
悩むところが見当たらん

おれはもうだめだ

879 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:26:04 ]
flip id "\n"が悩むところじゃないか?
なぜ($"\n")と書かないんだろう

880 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:47:26 ]
Prelude> ($ "789") $ ($ (($ "456") $ ($ "123") $ (++))) $ (++)
"123456789"

スタックマシンみたいだ(w

881 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 18:48:31 ]
便利だなこれ
\a -> hoge a 4 ()
flip (flip hoge 4) ()
($ ()) . ($ 4) . hoge



882 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 16:27:19 ]
>>881
ああ、そうやってカリー化できるんだ。目から鱗が落ちたよ。


883 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:48:42 ]
引く手あまたのプログラミング言語は?
slashdot.jp/developers/article.pl?sid=08/04/06/2313251
---
Java(16479件)、C++(8080件)、C#(7780件)、JavaScript(6749件)、
Perl(5710件)、PHP(2641件)、Python(1408件)、COBOL(1207件)、
Ruby(769件)、Lisp(33件)といった感じらしい。

とりあえずJavaとC/C++/C#、あとJavaScriptを覚えれば、
当分仕事には困らないようである。COBOLのしぶとさも目立つ。

ちなみにHaskellやOCamlの求人は10以下だったそうだ。
---

884 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:45:19 ]
仕事でプログラムやってるやつなんて
この板にいるの?

885 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:39:26 ]
ええっ?ほとんどプログラム関連の人じゃないの?


886 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:41:22 ]
プログラム関連の研究を仕事でやってる人はいるかもしれないが

887 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:13:42 ]
この「板」にはいくらでもいるだろう>仕事でプログラムやってるやつ
このスレに限れば、仕事と直で結びつきにくい言語かもしらんけど

でも仕事でプログラムやる傍ら、趣味や素養のためにHaskell弄ってる奴も珍しくはないんじゃなかろうか

888 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 18:08:15 ]
俺は研究職だが仕事でHaskell使ってる。

889 名前:デフォルトの名無しさん [2008/05/25(日) 22:21:03 ]
はじめましてAranskファンクラブです。
皆さんはAranskをご存知でしょうか?
最近ネット社会において急速に発言力を増しつつある
集団です。
本家:homepage3.nifty.com/Aransk/
ミラーサイト:www.geocities.jp/aransk88/
日本語Blog:aransk.cocolog-nifty.com/whypro/
英語もどきBlog:d.hatena.ne.jp/Aransk/ここまでがAransk Officialsです。
(上記以外にも2ちゃんねるのプログラム板にAransk専用スレが
立っていますが、これはAranskとは何のつながりもありません。)
上記の2ちゃんねる、yahoo掲示板に精力的に意見を
書き込むと同時に自らのサイトの更新も頻繁に
行っています。
驚いたことに、あらゆる場所で人気が「ありません。」
その人気の無さをこのBlogで究明してみるつもりです。
ご興味ある方は是非ご参加下さい。

890 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 22:30:18 ]
\yってyを含まないって意味だっけ?

891 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 23:10:13 ]
Haskellの\はlambda
\y -> e で、yからeへの関数



892 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 18:49:53 ]
逆ポーランド記法で日本人に優しいとか言ってみるRPHaskellとか作って

893 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 10:56:30 ]
「初心者のためのプログラミング言語ガイド」スレに
Haskellを狂信的に勧めるやつが現れてスレがめちゃくちゃに。

894 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 19:56:00 ]
>>893
信者と信者っぽく振る舞ってネタにしてる奴と2種類いるようだな。

895 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 21:26:02 ]
Haskellの入門書は、ふつうのHaskellプログラミングでおk?

896 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 21:30:22 ]
>>895
WEBが一番

ここが一番わかりやすいぞ
www.sampou.org/cgi-bin/haskell.cgi

897 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 23:45:22 ]
>>896
マジか。本買おうかずっと迷ってたんだ。サンクス。これでやってみるよ。
LL Futureで見たんだけどHaskellって並列プログラミングの強さはどんなもんでしょう?

ttp://www.nicovideo.jp/watch/sm4505381

898 名前:36 ◆K0BqlCB3.k mailto:sage [2008/09/13(土) 00:50:59 ]
>>897
現在開発中で一部は使用可能
hackage.haskell.org/trac/ghc/wiki/DataParallel/WorkPlan

899 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 02:18:36 ]
Erlangにすればいいんでない?

900 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 01:21:22 ]
>>897
本の方がわかりやすいと思うがWebの方を読んで理解できるレベルなら
それでいいと思う。お金かかんないし。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef