1 haskell
如果蜥蜴的尾巴被切断,再说两个再生长.如果我有下面的数据类型,我将如何编写一个函数来复制多少尾巴?
data Lizard = Tail
deriving (Eq, Show)
duplicate :: Lizard -> Lizard
duplicate Tail?? = ???
Run Code Online (Sandbox Code Playgroud)
所以输入
> duplicate Tail
Run Code Online (Sandbox Code Playgroud)
应该给
> Tail Tail
Run Code Online (Sandbox Code Playgroud)
你想要的结果Tail Tail不再是蜥蜴了.实际上Tail Tail根本不是一个有效的价值.你的功能duplicate也不能做太多,因为它需要一个蜥蜴并返回一个蜥蜴和唯一可能的蜥蜴Tail.
如果你想要Lizards有多个Tails,你需要在你的Lizard数据类型中反映这一点,例如as
data Tail = Tail deriving (Eq, Show)
data Lizard = Lizard [Tail] deriving (Eq, Show)
duplicate :: Lizard -> Lizard
duplicate (Lizard ts) = Lizard (ts++ts)
result = duplicate (Lizard [Tail])
Run Code Online (Sandbox Code Playgroud)
这给了你
*Main> result
Lizard [Tail,Tail]
Run Code Online (Sandbox Code Playgroud)
或应用两次
*Main> duplicate result
Lizard [Tail,Tail,Tail,Tail]
Run Code Online (Sandbox Code Playgroud)