Traverse a tree with an arbitrary number of branches
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I want to calculate the maximum degree in a Tree
which has an arbitrary number of branches.
data Tree a = Node a [Tree a]
deriving (Eq, Show)
{-
2
/ |
7 3 1
| /
0 3 2
For this case: Answer will be 3.
-}
tree1 :: Tree Int
tree1 = Node 2 [Node 7 , Node 3 [Node 0 ], Node 1 [Node 3 , Node 2 ]]
--I am doing something like this:
maxBranching :: Tree Int -> Int
maxBranching Node n = 1
maxBranching Node n xs = max (length xs) maxBranching xs
Now, I am getting an error. How can I write the correct pattern to solve this problem?
haskell
add a comment |
I want to calculate the maximum degree in a Tree
which has an arbitrary number of branches.
data Tree a = Node a [Tree a]
deriving (Eq, Show)
{-
2
/ |
7 3 1
| /
0 3 2
For this case: Answer will be 3.
-}
tree1 :: Tree Int
tree1 = Node 2 [Node 7 , Node 3 [Node 0 ], Node 1 [Node 3 , Node 2 ]]
--I am doing something like this:
maxBranching :: Tree Int -> Int
maxBranching Node n = 1
maxBranching Node n xs = max (length xs) maxBranching xs
Now, I am getting an error. How can I write the correct pattern to solve this problem?
haskell
What error are you getting? I suppose you simply need to put brackets aroundNode n *
, ie(Node n )
and(Node n xs)
– ShamPooSham
Nov 16 '18 at 15:56
• The constructor ‘Node’ should have 2 arguments, but has been given none • In the pattern: Node In an equation for ‘maxBranching’: maxBranching Node n = 1 The equation(s) for ‘maxBranching’ have three arguments, but its type ‘Tree Int -> Int’ has only one | 22 | maxBranching Node n = 1
– RajibTheKing
Nov 16 '18 at 15:58
Sounds like my suggestion would fix that. Without parentheses aroundNode n xs
, it thinksn
andxs
are second and third arguments tomaxBranching
instead ofNode
– ShamPooSham
Nov 16 '18 at 16:02
Sounds like a job for Foldable?
– Anthony Raimondo
Nov 16 '18 at 16:34
@AnthonyRaimondo,Foldable
isn't actually powerful enough for this job.Foldable
effectively flattens out the very tree structure that needs to be examined.
– dfeuer
Nov 16 '18 at 16:55
add a comment |
I want to calculate the maximum degree in a Tree
which has an arbitrary number of branches.
data Tree a = Node a [Tree a]
deriving (Eq, Show)
{-
2
/ |
7 3 1
| /
0 3 2
For this case: Answer will be 3.
-}
tree1 :: Tree Int
tree1 = Node 2 [Node 7 , Node 3 [Node 0 ], Node 1 [Node 3 , Node 2 ]]
--I am doing something like this:
maxBranching :: Tree Int -> Int
maxBranching Node n = 1
maxBranching Node n xs = max (length xs) maxBranching xs
Now, I am getting an error. How can I write the correct pattern to solve this problem?
haskell
I want to calculate the maximum degree in a Tree
which has an arbitrary number of branches.
data Tree a = Node a [Tree a]
deriving (Eq, Show)
{-
2
/ |
7 3 1
| /
0 3 2
For this case: Answer will be 3.
-}
tree1 :: Tree Int
tree1 = Node 2 [Node 7 , Node 3 [Node 0 ], Node 1 [Node 3 , Node 2 ]]
--I am doing something like this:
maxBranching :: Tree Int -> Int
maxBranching Node n = 1
maxBranching Node n xs = max (length xs) maxBranching xs
Now, I am getting an error. How can I write the correct pattern to solve this problem?
haskell
haskell
edited Nov 16 '18 at 16:30
dfeuer
33.8k349133
33.8k349133
asked Nov 16 '18 at 15:47
RajibTheKingRajibTheKing
628527
628527
What error are you getting? I suppose you simply need to put brackets aroundNode n *
, ie(Node n )
and(Node n xs)
– ShamPooSham
Nov 16 '18 at 15:56
• The constructor ‘Node’ should have 2 arguments, but has been given none • In the pattern: Node In an equation for ‘maxBranching’: maxBranching Node n = 1 The equation(s) for ‘maxBranching’ have three arguments, but its type ‘Tree Int -> Int’ has only one | 22 | maxBranching Node n = 1
– RajibTheKing
Nov 16 '18 at 15:58
Sounds like my suggestion would fix that. Without parentheses aroundNode n xs
, it thinksn
andxs
are second and third arguments tomaxBranching
instead ofNode
– ShamPooSham
Nov 16 '18 at 16:02
Sounds like a job for Foldable?
– Anthony Raimondo
Nov 16 '18 at 16:34
@AnthonyRaimondo,Foldable
isn't actually powerful enough for this job.Foldable
effectively flattens out the very tree structure that needs to be examined.
– dfeuer
Nov 16 '18 at 16:55
add a comment |
What error are you getting? I suppose you simply need to put brackets aroundNode n *
, ie(Node n )
and(Node n xs)
– ShamPooSham
Nov 16 '18 at 15:56
• The constructor ‘Node’ should have 2 arguments, but has been given none • In the pattern: Node In an equation for ‘maxBranching’: maxBranching Node n = 1 The equation(s) for ‘maxBranching’ have three arguments, but its type ‘Tree Int -> Int’ has only one | 22 | maxBranching Node n = 1
– RajibTheKing
Nov 16 '18 at 15:58
Sounds like my suggestion would fix that. Without parentheses aroundNode n xs
, it thinksn
andxs
are second and third arguments tomaxBranching
instead ofNode
– ShamPooSham
Nov 16 '18 at 16:02
Sounds like a job for Foldable?
– Anthony Raimondo
Nov 16 '18 at 16:34
@AnthonyRaimondo,Foldable
isn't actually powerful enough for this job.Foldable
effectively flattens out the very tree structure that needs to be examined.
– dfeuer
Nov 16 '18 at 16:55
What error are you getting? I suppose you simply need to put brackets around
Node n *
, ie (Node n )
and (Node n xs)
– ShamPooSham
Nov 16 '18 at 15:56
What error are you getting? I suppose you simply need to put brackets around
Node n *
, ie (Node n )
and (Node n xs)
– ShamPooSham
Nov 16 '18 at 15:56
• The constructor ‘Node’ should have 2 arguments, but has been given none • In the pattern: Node In an equation for ‘maxBranching’: maxBranching Node n = 1 The equation(s) for ‘maxBranching’ have three arguments, but its type ‘Tree Int -> Int’ has only one | 22 | maxBranching Node n = 1
– RajibTheKing
Nov 16 '18 at 15:58
• The constructor ‘Node’ should have 2 arguments, but has been given none • In the pattern: Node In an equation for ‘maxBranching’: maxBranching Node n = 1 The equation(s) for ‘maxBranching’ have three arguments, but its type ‘Tree Int -> Int’ has only one | 22 | maxBranching Node n = 1
– RajibTheKing
Nov 16 '18 at 15:58
Sounds like my suggestion would fix that. Without parentheses around
Node n xs
, it thinks n
and xs
are second and third arguments to maxBranching
instead of Node
– ShamPooSham
Nov 16 '18 at 16:02
Sounds like my suggestion would fix that. Without parentheses around
Node n xs
, it thinks n
and xs
are second and third arguments to maxBranching
instead of Node
– ShamPooSham
Nov 16 '18 at 16:02
Sounds like a job for Foldable?
– Anthony Raimondo
Nov 16 '18 at 16:34
Sounds like a job for Foldable?
– Anthony Raimondo
Nov 16 '18 at 16:34
@AnthonyRaimondo,
Foldable
isn't actually powerful enough for this job. Foldable
effectively flattens out the very tree structure that needs to be examined.– dfeuer
Nov 16 '18 at 16:55
@AnthonyRaimondo,
Foldable
isn't actually powerful enough for this job. Foldable
effectively flattens out the very tree structure that needs to be examined.– dfeuer
Nov 16 '18 at 16:55
add a comment |
3 Answers
3
active
oldest
votes
Firstly, the type of parameter of maxBranching
is Tree Int
and not [Tree Int]
and you want to map all Children Nodes to its maximum degrees, so it should be:
map maxBranching xs
Not
maxBranching xs
Secondly, parameter need in parentheses, otherwise, the function maxBranching
become accept 3 parameters.
put them all as:
maxBranching :: Tree Int -> Int
maxBranching (Node _ ) = 1
maxBranching (Node _ xs) = maximum $ (length xs) : (map maxBranching xs)
Yes, it's working.
– RajibTheKing
Nov 16 '18 at 16:41
add a comment |
You want to traverse a tree generating a sort of "summary value". This is a classic example of a catamorphism or fold. The general fold for trees looks like this:
foldTree :: (a -> [b] -> b) -> Tree a -> b
foldTree f (Node a bs) = f a (map (foldTree f) bs)
The idea here is that at each tree node,
Node r [t1,t2,t3]
we first reduce each child recursively to a summary value, then apply the given function and the root value and the summaries of the children to produce a summary for the tree.
Now
maxBranching :: Tree a -> Int
maxBranching = foldTree $
_ bs -> maximum (length bs : bs)
That is, at each node, we take the maximum of the number of branches of that node and each of its children.
add a comment |
First of all, you need to put parentheses around your argument, like this:
maxBranching (Node n xs) = ...
If you don't put parentheses around your arguments, the compiler can't know if n
and xs
/ belongs to
Node
or maxBranching
.
Next issue you have is that your recursive call is done on a list of Tree Int
instead of just a Tree Int
. What you need to do is to get the maxBranching of each subtree and then compare the result to each other. So a first, naive approach, would be the following:
maxBranching (Node n xs) = max (length xs) (maximum (map maxBranching xs))
map
will run maxBranching
on every element of the list xs
, returning an array of Int
. maximum
will then take the max in the list. The difference between max
and maximum
is that max
only takes two arguments and compare them, while maximum
takes a list which is arbitrarily long.
We could get rid of max
by adding length xs
into the list we created, and running maximum
on everything, like this:
maxBranching (Node n xs) = maximum $ (length xs):(map maxBranching xs)
And if you don't know, $
is equvivalent with putting parantheses around the rest of the line (more or less).
You could also use smart methods as folding and the like, but I just wanted you to understand the errors you did and how to fix them without changing the core idea of your solution.
I tried your solution, but still I am getting error.
– RajibTheKing
Nov 16 '18 at 16:41
xs
is of type[Tree Int]
not aTree Int
– karakfa
Nov 16 '18 at 20:00
Ah yes, that's an issue too. Let me edit my answer
– ShamPooSham
Nov 17 '18 at 9:02
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53341188%2ftraverse-a-tree-with-an-arbitrary-number-of-branches%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Firstly, the type of parameter of maxBranching
is Tree Int
and not [Tree Int]
and you want to map all Children Nodes to its maximum degrees, so it should be:
map maxBranching xs
Not
maxBranching xs
Secondly, parameter need in parentheses, otherwise, the function maxBranching
become accept 3 parameters.
put them all as:
maxBranching :: Tree Int -> Int
maxBranching (Node _ ) = 1
maxBranching (Node _ xs) = maximum $ (length xs) : (map maxBranching xs)
Yes, it's working.
– RajibTheKing
Nov 16 '18 at 16:41
add a comment |
Firstly, the type of parameter of maxBranching
is Tree Int
and not [Tree Int]
and you want to map all Children Nodes to its maximum degrees, so it should be:
map maxBranching xs
Not
maxBranching xs
Secondly, parameter need in parentheses, otherwise, the function maxBranching
become accept 3 parameters.
put them all as:
maxBranching :: Tree Int -> Int
maxBranching (Node _ ) = 1
maxBranching (Node _ xs) = maximum $ (length xs) : (map maxBranching xs)
Yes, it's working.
– RajibTheKing
Nov 16 '18 at 16:41
add a comment |
Firstly, the type of parameter of maxBranching
is Tree Int
and not [Tree Int]
and you want to map all Children Nodes to its maximum degrees, so it should be:
map maxBranching xs
Not
maxBranching xs
Secondly, parameter need in parentheses, otherwise, the function maxBranching
become accept 3 parameters.
put them all as:
maxBranching :: Tree Int -> Int
maxBranching (Node _ ) = 1
maxBranching (Node _ xs) = maximum $ (length xs) : (map maxBranching xs)
Firstly, the type of parameter of maxBranching
is Tree Int
and not [Tree Int]
and you want to map all Children Nodes to its maximum degrees, so it should be:
map maxBranching xs
Not
maxBranching xs
Secondly, parameter need in parentheses, otherwise, the function maxBranching
become accept 3 parameters.
put them all as:
maxBranching :: Tree Int -> Int
maxBranching (Node _ ) = 1
maxBranching (Node _ xs) = maximum $ (length xs) : (map maxBranching xs)
answered Nov 16 '18 at 16:26
assembly.jcassembly.jc
2,1041215
2,1041215
Yes, it's working.
– RajibTheKing
Nov 16 '18 at 16:41
add a comment |
Yes, it's working.
– RajibTheKing
Nov 16 '18 at 16:41
Yes, it's working.
– RajibTheKing
Nov 16 '18 at 16:41
Yes, it's working.
– RajibTheKing
Nov 16 '18 at 16:41
add a comment |
You want to traverse a tree generating a sort of "summary value". This is a classic example of a catamorphism or fold. The general fold for trees looks like this:
foldTree :: (a -> [b] -> b) -> Tree a -> b
foldTree f (Node a bs) = f a (map (foldTree f) bs)
The idea here is that at each tree node,
Node r [t1,t2,t3]
we first reduce each child recursively to a summary value, then apply the given function and the root value and the summaries of the children to produce a summary for the tree.
Now
maxBranching :: Tree a -> Int
maxBranching = foldTree $
_ bs -> maximum (length bs : bs)
That is, at each node, we take the maximum of the number of branches of that node and each of its children.
add a comment |
You want to traverse a tree generating a sort of "summary value". This is a classic example of a catamorphism or fold. The general fold for trees looks like this:
foldTree :: (a -> [b] -> b) -> Tree a -> b
foldTree f (Node a bs) = f a (map (foldTree f) bs)
The idea here is that at each tree node,
Node r [t1,t2,t3]
we first reduce each child recursively to a summary value, then apply the given function and the root value and the summaries of the children to produce a summary for the tree.
Now
maxBranching :: Tree a -> Int
maxBranching = foldTree $
_ bs -> maximum (length bs : bs)
That is, at each node, we take the maximum of the number of branches of that node and each of its children.
add a comment |
You want to traverse a tree generating a sort of "summary value". This is a classic example of a catamorphism or fold. The general fold for trees looks like this:
foldTree :: (a -> [b] -> b) -> Tree a -> b
foldTree f (Node a bs) = f a (map (foldTree f) bs)
The idea here is that at each tree node,
Node r [t1,t2,t3]
we first reduce each child recursively to a summary value, then apply the given function and the root value and the summaries of the children to produce a summary for the tree.
Now
maxBranching :: Tree a -> Int
maxBranching = foldTree $
_ bs -> maximum (length bs : bs)
That is, at each node, we take the maximum of the number of branches of that node and each of its children.
You want to traverse a tree generating a sort of "summary value". This is a classic example of a catamorphism or fold. The general fold for trees looks like this:
foldTree :: (a -> [b] -> b) -> Tree a -> b
foldTree f (Node a bs) = f a (map (foldTree f) bs)
The idea here is that at each tree node,
Node r [t1,t2,t3]
we first reduce each child recursively to a summary value, then apply the given function and the root value and the summaries of the children to produce a summary for the tree.
Now
maxBranching :: Tree a -> Int
maxBranching = foldTree $
_ bs -> maximum (length bs : bs)
That is, at each node, we take the maximum of the number of branches of that node and each of its children.
edited Nov 16 '18 at 16:52
answered Nov 16 '18 at 16:46
dfeuerdfeuer
33.8k349133
33.8k349133
add a comment |
add a comment |
First of all, you need to put parentheses around your argument, like this:
maxBranching (Node n xs) = ...
If you don't put parentheses around your arguments, the compiler can't know if n
and xs
/ belongs to
Node
or maxBranching
.
Next issue you have is that your recursive call is done on a list of Tree Int
instead of just a Tree Int
. What you need to do is to get the maxBranching of each subtree and then compare the result to each other. So a first, naive approach, would be the following:
maxBranching (Node n xs) = max (length xs) (maximum (map maxBranching xs))
map
will run maxBranching
on every element of the list xs
, returning an array of Int
. maximum
will then take the max in the list. The difference between max
and maximum
is that max
only takes two arguments and compare them, while maximum
takes a list which is arbitrarily long.
We could get rid of max
by adding length xs
into the list we created, and running maximum
on everything, like this:
maxBranching (Node n xs) = maximum $ (length xs):(map maxBranching xs)
And if you don't know, $
is equvivalent with putting parantheses around the rest of the line (more or less).
You could also use smart methods as folding and the like, but I just wanted you to understand the errors you did and how to fix them without changing the core idea of your solution.
I tried your solution, but still I am getting error.
– RajibTheKing
Nov 16 '18 at 16:41
xs
is of type[Tree Int]
not aTree Int
– karakfa
Nov 16 '18 at 20:00
Ah yes, that's an issue too. Let me edit my answer
– ShamPooSham
Nov 17 '18 at 9:02
add a comment |
First of all, you need to put parentheses around your argument, like this:
maxBranching (Node n xs) = ...
If you don't put parentheses around your arguments, the compiler can't know if n
and xs
/ belongs to
Node
or maxBranching
.
Next issue you have is that your recursive call is done on a list of Tree Int
instead of just a Tree Int
. What you need to do is to get the maxBranching of each subtree and then compare the result to each other. So a first, naive approach, would be the following:
maxBranching (Node n xs) = max (length xs) (maximum (map maxBranching xs))
map
will run maxBranching
on every element of the list xs
, returning an array of Int
. maximum
will then take the max in the list. The difference between max
and maximum
is that max
only takes two arguments and compare them, while maximum
takes a list which is arbitrarily long.
We could get rid of max
by adding length xs
into the list we created, and running maximum
on everything, like this:
maxBranching (Node n xs) = maximum $ (length xs):(map maxBranching xs)
And if you don't know, $
is equvivalent with putting parantheses around the rest of the line (more or less).
You could also use smart methods as folding and the like, but I just wanted you to understand the errors you did and how to fix them without changing the core idea of your solution.
I tried your solution, but still I am getting error.
– RajibTheKing
Nov 16 '18 at 16:41
xs
is of type[Tree Int]
not aTree Int
– karakfa
Nov 16 '18 at 20:00
Ah yes, that's an issue too. Let me edit my answer
– ShamPooSham
Nov 17 '18 at 9:02
add a comment |
First of all, you need to put parentheses around your argument, like this:
maxBranching (Node n xs) = ...
If you don't put parentheses around your arguments, the compiler can't know if n
and xs
/ belongs to
Node
or maxBranching
.
Next issue you have is that your recursive call is done on a list of Tree Int
instead of just a Tree Int
. What you need to do is to get the maxBranching of each subtree and then compare the result to each other. So a first, naive approach, would be the following:
maxBranching (Node n xs) = max (length xs) (maximum (map maxBranching xs))
map
will run maxBranching
on every element of the list xs
, returning an array of Int
. maximum
will then take the max in the list. The difference between max
and maximum
is that max
only takes two arguments and compare them, while maximum
takes a list which is arbitrarily long.
We could get rid of max
by adding length xs
into the list we created, and running maximum
on everything, like this:
maxBranching (Node n xs) = maximum $ (length xs):(map maxBranching xs)
And if you don't know, $
is equvivalent with putting parantheses around the rest of the line (more or less).
You could also use smart methods as folding and the like, but I just wanted you to understand the errors you did and how to fix them without changing the core idea of your solution.
First of all, you need to put parentheses around your argument, like this:
maxBranching (Node n xs) = ...
If you don't put parentheses around your arguments, the compiler can't know if n
and xs
/ belongs to
Node
or maxBranching
.
Next issue you have is that your recursive call is done on a list of Tree Int
instead of just a Tree Int
. What you need to do is to get the maxBranching of each subtree and then compare the result to each other. So a first, naive approach, would be the following:
maxBranching (Node n xs) = max (length xs) (maximum (map maxBranching xs))
map
will run maxBranching
on every element of the list xs
, returning an array of Int
. maximum
will then take the max in the list. The difference between max
and maximum
is that max
only takes two arguments and compare them, while maximum
takes a list which is arbitrarily long.
We could get rid of max
by adding length xs
into the list we created, and running maximum
on everything, like this:
maxBranching (Node n xs) = maximum $ (length xs):(map maxBranching xs)
And if you don't know, $
is equvivalent with putting parantheses around the rest of the line (more or less).
You could also use smart methods as folding and the like, but I just wanted you to understand the errors you did and how to fix them without changing the core idea of your solution.
edited Nov 17 '18 at 9:31
answered Nov 16 '18 at 16:09
ShamPooShamShamPooSham
546518
546518
I tried your solution, but still I am getting error.
– RajibTheKing
Nov 16 '18 at 16:41
xs
is of type[Tree Int]
not aTree Int
– karakfa
Nov 16 '18 at 20:00
Ah yes, that's an issue too. Let me edit my answer
– ShamPooSham
Nov 17 '18 at 9:02
add a comment |
I tried your solution, but still I am getting error.
– RajibTheKing
Nov 16 '18 at 16:41
xs
is of type[Tree Int]
not aTree Int
– karakfa
Nov 16 '18 at 20:00
Ah yes, that's an issue too. Let me edit my answer
– ShamPooSham
Nov 17 '18 at 9:02
I tried your solution, but still I am getting error.
– RajibTheKing
Nov 16 '18 at 16:41
I tried your solution, but still I am getting error.
– RajibTheKing
Nov 16 '18 at 16:41
xs
is of type [Tree Int]
not a Tree Int
– karakfa
Nov 16 '18 at 20:00
xs
is of type [Tree Int]
not a Tree Int
– karakfa
Nov 16 '18 at 20:00
Ah yes, that's an issue too. Let me edit my answer
– ShamPooSham
Nov 17 '18 at 9:02
Ah yes, that's an issue too. Let me edit my answer
– ShamPooSham
Nov 17 '18 at 9:02
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53341188%2ftraverse-a-tree-with-an-arbitrary-number-of-branches%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What error are you getting? I suppose you simply need to put brackets around
Node n *
, ie(Node n )
and(Node n xs)
– ShamPooSham
Nov 16 '18 at 15:56
• The constructor ‘Node’ should have 2 arguments, but has been given none • In the pattern: Node In an equation for ‘maxBranching’: maxBranching Node n = 1 The equation(s) for ‘maxBranching’ have three arguments, but its type ‘Tree Int -> Int’ has only one | 22 | maxBranching Node n = 1
– RajibTheKing
Nov 16 '18 at 15:58
Sounds like my suggestion would fix that. Without parentheses around
Node n xs
, it thinksn
andxs
are second and third arguments tomaxBranching
instead ofNode
– ShamPooSham
Nov 16 '18 at 16:02
Sounds like a job for Foldable?
– Anthony Raimondo
Nov 16 '18 at 16:34
@AnthonyRaimondo,
Foldable
isn't actually powerful enough for this job.Foldable
effectively flattens out the very tree structure that needs to be examined.– dfeuer
Nov 16 '18 at 16:55