私はデータ型がPerson
であるとします。データ型母親から母親(祖母)
data Person = Person String Person
2.人は母親でなければなりません。
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ mother) = Just mother
人物xの母親のみを表示します。 祖母を見せてもらえますか?
私はデータ型がPerson
であるとします。データ型母親から母親(祖母)
data Person = Person String Person
2.人は母親でなければなりません。
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ mother) = Just mother
人物xの母親のみを表示します。 祖母を見せてもらえますか?
最初に、データ定義に基本ケースがありません。これはmatrilinealityを表し仮定すると、私は今、祖母がパターンマッチングではこの二回
grandmother = \x -> mother x >>= mother
を適用しているmother
機能
mother Eve = Nothing
mother (Person _ m) = Just m
を定義Eve
data Person = Eve | Person String Person deriving (Show)
を開始すると、あなたが上がりませんあるレベルのコンストラクタに限定されていれば、それらをさらに "in"にネストすることができます:
追記としてshowGrandmother :: Person -> Maybe Person
showGrandmother (Person _ (Person _ grandmother)) = Just grandmother
、私はHaskellの専門家ではないんだけど、データ型は家系図のモデルであることを意味している何のために少し円形であるように思えます。他の人を参照することなく実際に人を作成することはできません。たぶん、より良い何かが、祖母を見つけるときのベースケースを扱うことを確認して...
showGrandmother :: Person -> Maybe Person
showGrandmother (Person _ Just (Person _ (Just grandmother)))) = Just grandmother
showGrandmother _ = Nothing
...として行うことができ、その場合には...
data Person = Person String (Maybe Person)
...だろう誰かに祖母はいません。元のタイプは、誰もがそれに応じて祖母を持っている必要があるので、このケースを処理する必要はありませんでした。
そして@Karafka's answerからインスピレーションを取って、それは人の母を見つけて考慮することが可能です...
showMother :: Person -> Maybe Person
showMother (Person _ (Just mother)) = Just mother
showMother _ = Nothing
...とMaybe
がモナドであるという事実を使用して、使用することができますそれは以下の通りです。
showGrandmother :: Person -> Maybe Person
showGrandmother x = showMother x >>= showMother
私は、上記のモナドコードがこの特定の質問の対象外であると理解していると思われます。
正に、私はそのコードを理解していません。 私の機能(showGrandmother)を変更する必要がありますか? –
@ R.Mayer「私はそのコードを理解できません」を回答できる質問に変換してください。 (あなたが理解するのが難しいのはどこですか?コードを読んでいないところはどこですか?)「私の機能を変更するにはどうすればよいですか」というのは、ちょうどその答えが、答えはここに書かれています。 –
'showGrandmother = grandmother' – karakfa