haskell-ja > Archives > 2009/07/24

2009/07/24 01:57:49 UTCcut-sea
#
関数型言語における計算とは?
2009/07/24 02:08:09 UTCnobsun
#
○○言語における計算とは、とは?
2009/07/24 02:21:10 UTCnobsun
#
どんな答を想定してるの?
#
たとえば、手続き型言語における計算とは?という問いなら、どう答えるのだろう?
#
そもそも計算とは?
2009/07/24 03:15:29 UTCnwn
#
computation っていう*言葉*に関してはなんか議論があったなーと思って探してみたけどこれだったっけ(誰に聞いてるんだ): http://www.haskell.org/pipermail/beginners/2009-April/001530.html
#
もちろんこれは "計算" と "computation" が同じ物をさしてるだろうということを期待した発言なのでそうじゃなかったらスルーしてくらはい
2009/07/24 03:22:54 UTCikegami
#
ふつうに typed (with or without polymorphism) or untyped lambda calculus じゃだめなの?
2009/07/24 03:37:19 UTCnobsun
#
たぶん、通常の手続き型になれたプログラマの直感に判りやすく、関数型言語でプログラムするときの感覚を説明するにはどうすればよいか?というところがか発生している疑問だと思う。と思うんだけど、勝手読みしすぎ? > cut-sea
2009/07/24 03:44:39 UTCikegami
#
do expression
2009/07/24 03:56:56 UTCnobsun
#
本人でないと意図はわからないけど、evaluation、computation、calculation を区別するような話ではないような気がする。。。
2009/07/24 04:01:16 UTCikegami
#
quote> 問うものはすべからく問い返される -- ソクラテス Σωκράτης
2009/07/24 04:18:17 UTCikegami
#
「さあ、謂え、謂え」とは、禅の老師が弟子に対していう言葉
#
考えずに瞬時で心に浮かんだ問いを問わねば、禅の奥義にはたどりつけない
#
奥義でなければ、禅を識るのは簡単、Haskell より簡単
2009/07/24 05:26:59 UTC[1..100]>>=pen
#
考えるな、感じるんだ。
2009/07/24 05:31:49 UTC[1..100]>>=pen
#
すべからく【▼須く】(副)
#
〔漢文訓読に由来する語。「すべくあらく(すべきであることの意)」の約。下に「べし」が来ることが多い〕当然。
2009/07/24 06:40:07 UTCcut-sea
#
#
モナド則の3番目が破綻するケースでいろいろ考えていて
#
モナドについてぐぐると
#
「計算を構成する戦略・・・」だとか
#
「複雑な計算を構成するのに・・・」とか
#
そういうtermが踊っているのが気になって
#
関数型言語における計算とは?と思ったのですよ
2009/07/24 07:24:13 UTCnobsun
#
computationのことかな?
#
computation に 「計算」という訳を与えることがおおいのだけど。。。
2009/07/24 07:33:20 UTCnobsun
#
「xxxせよ」= 計算
2009/07/24 17:48:51 UTC[1..100]>>=pen
#
モナド則2(右単位元)のみ満たさない偽モナド修正版。
#
data MyList a = Nil | My [a] deriving (Show,Eq)

unMy Nil     = []
unMy (My xs) = xs

nil Nil = True
nil _   = False

instance Monad MyList where
  return x  = My [x]
  Nil >>= _ = My []
  My xs >>= k
    | null ys    = My []
    | all nil ys = Nil
    | otherwise  = My $ concatMap unMy ys
    where ys = map k xs
#
今度は大丈夫だと思う。
#
当然もっとシンプルな例を希望。
2009/07/24 23:45:39 UTCnwn
#
import Test.QuickCheck
import Test.QuickCheck.Checkers
import Test.QuickCheck.Classes

instance (Arbitrary a) => Arbitrary (MyList a) where
    arbitrary = fmap My (listOf arbitrary)

instance (Eq a) => EqProp (MyList a) where
    (=-=) = eq

main = checkBatch stdArgs { maxSuccess = 300 }
     $ monad (undefined :: MyList (Int, Int, Int))
#
↑のコードを追加して走らせてみたけどモナドになっちゃってるっぽい。
#
こっちのミスかもしれないので、右単位元を満たさない具体例があったら教えてほしい
#
ちなみに maxSuccess=300 してるのは結合則のテストが非常に遅いから