数据类型 Person mother from mother (grandmother)
Datatype Person mother from mother (grandmother)
假设我有一个数据类型 Person
。
data Person = Person String Person
2.人应该是妈妈
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ mother) = Just mother
只会显示x人的母亲。
怎么给奶奶看?
首先,您的数据定义缺少基本情况。假设这代表 matrilineality,我将从 Eve
作为基本情况
data Person = Eve | Person String Person deriving (Show)
定义mother
函数
mother Eve = Nothing
mother (Person _ m) = Just m
现在奶奶正在涂两次
grandmother = \x -> mother x >>= mother
使用 Control.Monad Kleiski 运算符,这可以写得很好
grandmother = mother >=> mother
使用模式匹配,您不限于一级构造函数,您可以嵌套它们以进一步发展"in":
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ (Person _ grandmother)) = Just grandmother
作为旁注,我不是 Haskell 专家,但对于家谱模型而言,数据类型似乎有点循环。如果不引用另一个人,您实际上无法创建一个人。也许更好的是...
data Person = Person String (Maybe Person)
...这样的话,找奶奶就可以...
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ Just (Person _ (Just grandmother)))) = Just grandmother
showGrandmother _ = Nothing
...确保在某人没有祖母时处理基本情况。你原来的类型不需要处理这种情况,因为每个人都必须有一个祖母。
从 中汲取灵感,找到一个人的母亲是可能的...
showMother :: Person -> Maybe Person
showMother (Person _ (Just mother)) = Just mother
showMother _ = Nothing
... 并利用 Maybe
是 monad 的事实,可以如下使用它。
showGrandmother :: Person -> Maybe Person
showGrandmother x = showMother x >>= showMother
我怀疑理解上述单子代码超出了这个特定问题的范围。
假设我有一个数据类型 Person
。
data Person = Person String Person
2.人应该是妈妈
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ mother) = Just mother
只会显示x人的母亲。 怎么给奶奶看?
首先,您的数据定义缺少基本情况。假设这代表 matrilineality,我将从 Eve
作为基本情况
data Person = Eve | Person String Person deriving (Show)
定义mother
函数
mother Eve = Nothing
mother (Person _ m) = Just m
现在奶奶正在涂两次
grandmother = \x -> mother x >>= mother
使用 Control.Monad Kleiski 运算符,这可以写得很好
grandmother = mother >=> mother
使用模式匹配,您不限于一级构造函数,您可以嵌套它们以进一步发展"in":
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ (Person _ grandmother)) = Just grandmother
作为旁注,我不是 Haskell 专家,但对于家谱模型而言,数据类型似乎有点循环。如果不引用另一个人,您实际上无法创建一个人。也许更好的是...
data Person = Person String (Maybe Person)
...这样的话,找奶奶就可以...
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ Just (Person _ (Just grandmother)))) = Just grandmother
showGrandmother _ = Nothing
...确保在某人没有祖母时处理基本情况。你原来的类型不需要处理这种情况,因为每个人都必须有一个祖母。
从
showMother :: Person -> Maybe Person
showMother (Person _ (Just mother)) = Just mother
showMother _ = Nothing
... 并利用 Maybe
是 monad 的事实,可以如下使用它。
showGrandmother :: Person -> Maybe Person
showGrandmother x = showMother x >>= showMother
我怀疑理解上述单子代码超出了这个特定问题的范围。