「第2回 スタートHaskell2」行ってきた
by @dekokun on 2012/07/22 07:28
初技術ブログ。スタイリングがイケてない部分はおいおい変えていきましょう。あれ、「つっこみいただけたらと」って書いたけどコメント欄ないんじゃね?
イベント概要
- PARTAKE 第2回 スタートHaskell2
- 月に1度くらいのペースですごいHaskell楽しく学ぼうをテキストに、セミナーと演習で進んでいく
内容
- 詳細については以下ブログに詳しいのでそちらにお任せします makopi23のブログ 「第2回 スタートHaskell2」に参加しました
- ちなみに私もSKIコンビネータの話にはついていけませんでした…切ない…
演習問題発表補足
- 演習問題にて、myAndやmyOrなどの実装(論理演算子(&&)や(||)を自分で実装する)について発表しました
私の回答は以下
myNot :: Bool -> Bool
myNot True = False
myNot False = True
myAnd :: Bool -> Bool -> Bool
myAnd True True = True
myAnd _ _ = False
myOr :: Bool -> Bool -> Bool
myOr False False = False
myOr _ _ = True
myXor :: Bool -> Bool -> Bool
myXor True False = True
myXor False True = True
myXor _ _ = False
で、Twitterを見ていたらツッコミをいただいていたのです。
このmyAndは右の引数に対して正格になるから myAnd False _ = False myAnd _ b = b のほうがいい思うのだけど、これはどうなんじゃろ #start_haskell @tanakh
確かに、私のmyAndだと最初に両引数を評価してしまいますので遅延評価を行うHaskellの論理演算子とは挙動が違います(よね…?)
再回答
というわけで、myAndとmyOrについて私が正しいと思うように作りなおしました。
こんな感じでいいのでしょうか。ツッコミいただけたらと。
myAnd :: Bool -> Bool -> Bool
myAnd False _ = False
myAnd _ b = b
myOr :: Bool -> Bool -> Bool
myOr True _ = True
myOr _ b = b
xorはどうあっても両引数を評価しないとダメという認識
以上。
注
この日記は以前書いた別のブログの日記を移設したものです(2012/08/05)
comments powered by Disqus