Haskell 访问多个数据结构
在阅读了LYAH之后,我正在用Haskell编写一个基于文本的冒险游戏,以获取经验,但我需要帮助编写一个函数,其中访问两个数据结构(在本例中为两个玩家),并返回另一个结构(另一个[受攻击的]玩家)。谢谢Haskell 访问多个数据结构,haskell,data-structures,functional-programming,Haskell,Data Structures,Functional Programming,在阅读了LYAH之后,我正在用Haskell编写一个基于文本的冒险游戏,以获取经验,但我需要帮助编写一个函数,其中访问两个数据结构(在本例中为两个玩家),并返回另一个结构(另一个[受攻击的]玩家)。谢谢 data Player = Player { name :: String , hp :: Int , atk :: Int , def :: Int , sp
data Player = Player { name :: String
, hp :: Int
, atk :: Int
, def :: Int
, spd :: Int
} deriving (Show, Eq)
data Qstat = Qstat Int Int Int Int
lv :: Qstat
lv = Qstat 1 1 1 1
describe :: Player -> String
describe (Player {name = n, hp = h, atk = a, def = d, spd = s})
= "Name: " ++ n
++ ", HP: " ++ (show h)
++ ", ATK: " ++ (show a)
++ ", DEF: " ++ (show d)
++ ", SPD: " ++ (show s)
promote :: Qstat -> Player -> Player
promote (Qstat w x y z) (Player {name = n, hp = h, atk = a, def = d, spd = s})
= Player n (h + w) (a + x) (d + y) (s + z)
gets :: Player -> Qstat
gets (Player {name = n, hp = h, atk = a, def = d, spd = s})
= Qstat n h a d s
attack :: Player -> Player -> Player
attack = --how can I access the stats of both players (preferably without do notation)
模式匹配还是(许多)其他编写双参数函数的方法?此外,您还有各种仅对记录类型可用的语法
attack :: Player -> Player -> Player
attack aggressor defender = victim { hp = max 0 $ hp victim - dmg }
where
aQual = atk aggressor + spd aggressor
dQual = def defender + spd defender
(victor, victim) = case compare aQual dQual of
LT -> (defender, aggressor)
_ -> (aggressor, defendor)
dmg = max 1 $ atk victor - def victim
请在发布前进行研究。3个“标准”的初学者文本已经解释了这一点。模式匹配还是编写双参数函数的任何(许多)其他方法?此外,您还有各种仅对记录类型可用的语法
attack :: Player -> Player -> Player
attack aggressor defender = victim { hp = max 0 $ hp victim - dmg }
where
aQual = atk aggressor + spd aggressor
dQual = def defender + spd defender
(victor, victim) = case compare aQual dQual of
LT -> (defender, aggressor)
_ -> (aggressor, defendor)
dmg = max 1 $ atk victor - def victim
请在发布前进行研究。3个“标准”的初学者文本已经解释了这一点。模式匹配还是编写双参数函数的任何(许多)其他方法?此外,您还有各种仅对记录类型可用的语法
attack :: Player -> Player -> Player
attack aggressor defender = victim { hp = max 0 $ hp victim - dmg }
where
aQual = atk aggressor + spd aggressor
dQual = def defender + spd defender
(victor, victim) = case compare aQual dQual of
LT -> (defender, aggressor)
_ -> (aggressor, defendor)
dmg = max 1 $ atk victor - def victim
请在发布前进行研究。3个“标准”的初学者文本已经解释了这一点。模式匹配还是编写双参数函数的任何(许多)其他方法?此外,您还有各种仅对记录类型可用的语法
attack :: Player -> Player -> Player
attack aggressor defender = victim { hp = max 0 $ hp victim - dmg }
where
aQual = atk aggressor + spd aggressor
dQual = def defender + spd defender
(victor, victim) = case compare aQual dQual of
LT -> (defender, aggressor)
_ -> (aggressor, defendor)
dmg = max 1 $ atk victor - def victim
请在发布前进行研究。3篇“标准”初学者文章已经解释了这一点。与您之前的解释完全相同吗<代码>攻击(玩家{name=n,hp=h,atk=a,def=d,spd=s}).大多数Haskell教程和书籍都不是完全完整的。你应该至少从两个来源学习。和你以前学习的方法一样<代码>攻击(玩家{name=n,hp=h,atk=a,def=d,spd=s}).大多数Haskell教程和书籍都不是完全完整的。你应该至少从两个来源学习。和你以前学习的方法一样<代码>攻击(玩家{name=n,hp=h,atk=a,def=d,spd=s}).大多数Haskell教程和书籍都不是完全完整的。你应该至少从两个来源学习。和你以前学习的方法一样<代码>攻击(玩家{name=n,hp=h,atk=a,def=d,spd=s}).大多数Haskell教程和书籍都不是完全完整的。你应该至少从两个方面学习。