Haskell 数据类型从母亲(祖母)到母亲
假设我有一个数据类型Haskell 数据类型从母亲(祖母)到母亲,haskell,types,maybe,Haskell,Types,Maybe,假设我有一个数据类型Person data Person = Person String Person 二,。人应该是母亲 showGrandmother :: Person -> Maybe Person showGrandmother (Person _ mother) = Just mother 将只显示x人的母亲。 如何显示祖母?首先,您的数据定义缺少基本大小写。假设这表示,我将以Eve作为基本情况 data Person = Eve | Person String Perso
Person
data Person = Person String Person
二,。人应该是母亲
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ mother) = Just mother
将只显示x人的母亲。
如何显示祖母?首先,您的数据定义缺少基本大小写。假设这表示,我将以
Eve
作为基本情况
data Person = Eve | Person String Person deriving (Show)
定义母函数
mother Eve = Nothing
mother (Person _ m) = Just m
现在祖母用了两次
grandmother = \x -> mother x >>= mother
使用Control.Monad-Kleiski操作符,可以很好地编写这篇文章
grandmother = mother >=> mother
首先,您的数据定义缺少基本情况。假设这表示,我将以
Eve
作为基本情况
data Person = Eve | Person String Person deriving (Show)
定义母函数
mother Eve = Nothing
mother (Person _ m) = Just m
现在祖母用了两次
grandmother = \x -> mother x >>= mother
使用Control.Monad-Kleiski操作符,可以很好地编写这篇文章
grandmother = mother >=> mother
通过模式匹配,您不局限于一个级别的构造函数,您可以嵌套它们以进一步“在”:
顺便说一句,我不是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
。。。使用可能是一个单子的事实,可以如下使用它
showGrandmother :: Person -> Maybe Person
showGrandmother x = showMother x >>= showMother
我怀疑理解上面的一元代码将超出这个特定问题的范围。通过模式匹配,您不局限于一个级别的构造函数,您可以将它们嵌套到“in”中:
顺便说一句,我不是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
。。。使用可能是一个单子的事实,可以如下使用它
showGrandmother :: Person -> Maybe Person
showGrandmother x = showMother x >>= showMother
我怀疑理解上述一元代码超出了这个问题的范围。老实说,我不理解那个代码。我需要如何修改我的函数(showGrander)才能正常工作?@R.Mayer请尝试将“我不理解该代码”转换为可以回答的问题。(什么是你很难理解的?你在阅读代码的过程中遇到了什么困难?)至于“我需要如何修改我的函数”,那么,让我们说,在理解这里写的答案之后,答案会非常快。命名约定的补充说明。您的方法不是show
方法。返回值不是String
表示,而是实际的Person
值,因此将其命名为showX
有误导性……老实说,我不理解该代码。我需要如何修改我的函数(showGrander)才能正常工作?@R.Mayer请尝试将“我不理解该代码”转换为可以回答的问题。(什么是你很难理解的?你在阅读代码的过程中遇到了什么困难?)至于“我需要如何修改我的函数”,那么,让我们说,在理解这里写的答案之后,答案会非常快。命名约定的补充说明。您的方法不是show
方法。返回值不是String
表示,而是实际的Person
值,因此将其命名为showX
会产生误导。。。