Haskell函数重复

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)

Mar*_*urg 7

你想要的结果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)