私はここに私はこれまでのところ(ポルトガル語の単語のxDのため申し訳ありませんが)持っているものだ、まだ系図ツリーに取り組んで、疑問を持っている:Haskellのカスタムショーインスタンス
data Familia = Node String [Familia]
instance Show Familia where
show (Node a b) = show a ++ "\n\t" ++ show b
raiz :: String -> Familia
raiz n = (Node n [])
juntar :: String -> String -> Familia -> Familia
juntar a b (Node c l)
| b == c = (Node c (l ++ [raiz a]))
| otherwise = (Node c (juntarAux a b l))
juntarAux :: String -> String -> [Familia] -> [Familia]
juntarAux a b [] = []
juntarAux a b [(Node x l)]
| x == b = [(juntar a b (Node x l))]
| otherwise = [(Node x (juntarAux a b l))]
juntarAux a b ((Node x l):xs)
| x == b = (juntar a b (Node x l)):xs
| otherwise = (Node x l):(juntarAux a b xs)
これが道を働いていますだから
Bob
John
Ruth
Hank
:
*Main> let f = raiz "Bob"
*Main> let g = juntar "John" "Bob" f
*Main> g
"Bob"
["John"
[]]
そして、何私が欲しいので、同じようにそれを印刷するには、次のとおりです。私はそれが、事は、これは私の現在の出力がされたいです家族の根はボブ、ボブの息子はジョンとハンク、ジョンはルースと呼ばれる娘がいる。
私はそれを私は他の記事で見たもので、いくつかの方法をやってみたが、これは最新の試みです:
t4.hs:14:77:
Couldn't match type ‘Familia’ with ‘[a0]’
Expected type: [[a0]]
Actual type: [Familia]
In the second argument of ‘map’, namely ‘b’
In the second argument of ‘($)’, namely
‘map (unwords . map show) b’
任意のアイデア:
instance Show Familia where
show (Node a b) = show a ++ "\n\t" ++ (unlines $ map (unwords . map show) b)
これは私に次のエラーを与えます?前もって感謝します! :
これは、構造的にはhttps://stackoverflow.com/questions/47423268/instance-show-haskell – Alec
と同じ質問であると私は思っています(私はdup-hammerを使用することを躊躇しますが)。 :/stackoverflow.com/questions/47370551/haskell-show-instance-on-list)投稿した質問のコメントにリンクした –
@AdamSmith良い点xDこれらの投稿を見逃していますか?うまくいけばそれから何かを得る:Dありがとう – Wireless