##再帰で本当に大丈夫?
Haskellは、ループ処理を「言語構文としては」サポートしていません。
「ループは再帰で書くのが関数型言語」とか良く言われます。
でも、手続き型言語の世界から来た人にとっては「再帰って、スタック膨れるんじゃね?」って、不安に思いますよね?
あなたの心配は正しい!
#超簡易ドラクエ戦闘シミュレータ
##内容 勇者(Warrior)は、属性値として「攻撃力(attack)」を持ちます。 モンスター(Monster)は、属性値として「HP(hitPoint)」「守備力(defence)」を持ちます。
勇者の攻撃(Attack)の種類として「攻撃(Normal)」「会心の一撃(Critical)」「ギラ(Gira)」「ベギラマ(Begirama)」があります。 各攻撃について、モンスターに与えるダメージ(damage)は下記の通りです。
data Warrior = Warrior {attack :: Int} | |
data Monster = Monster {hitPoint :: Int, defence :: Int} | |
data Attack = Normal | Critical | Gira | Begirama | |
battle :: Warrior -> Monster -> [Attack] -> Int | |
battle w m as = (hitPoint m) - (sum $ map damage as) | |
where | |
damage Normal |
Version 1.2.0, Git revision 123819b7d65df2ad7fe63fb5eb39a98536acb5f3 (4055 commits) x86_64 hpack-0.14.0 | |
2016-11-17 22:07:54.840949: [debug] Checking for project config at: C:\Users\foo\Documents\Files\Haskell\gtktest\stack.yaml | |
@(Stack\Config.hs:792:9) | |
2016-11-17 22:07:54.841949: [debug] Loading project config file stack.yaml | |
@(Stack\Config.hs:810:13) | |
2016-11-17 22:07:54.856950: [debug] Trying to decode C:\sr\build-plan-cache\x86_64-windows\lts-7.9.cache | |
@(Data\Store\VersionTagged.hs:68:5) | |
2016-11-17 22:07:54.874951: [debug] Success decoding C:\sr\build-plan-cache\x86_64-windows\lts-7.9.cache | |
@(Data\Store\VersionTagged.hs:72:13) | |
2016-11-17 22:07:54.880951: [debug] Getting system compiler version |