「第2回 スタートHaskell2」行ってきた

by @dekokun on 2012/07/22 07:28

Tagged as: Haskell, 勉強会.

初技術ブログ。スタイリングがイケてない部分はおいおい変えていきましょう。あれ、「つっこみいただけたらと」って書いたけどコメント欄ないんじゃね?

イベント概要

内容

演習問題発表補足

  • 演習問題にて、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