2
\$\begingroup\$

I'm trying to learn scala. It's hard.

I currently have a tree in the form

class Node(children:List[Node], value:Int){

}

I want to calculate a total cost defined by value + the sum of the totalcost of the children. My java background made me do this:

def totalCost() {
  var total = value
  for (child <- children){
    total = total+child.totalCost
  }
  return total
}

now I know I should be folding or reducing, but it's not coming out. Could some of you frendly helpers give me a hand here?

\$\endgroup\$
  • \$\begingroup\$ I don't quite understand how this question is not within scope. @Michael K: Could you review your closure, and if it is in fact out of scope, explain how, so I won't be asking out of scope questions on this site again? \$\endgroup\$ – Martijn Jul 23 '11 at 19:27
  • \$\begingroup\$ I would second that. The question was to review the given totalCost method, which works fine, but isn't very idiomatic. \$\endgroup\$ – Landei Jul 23 '11 at 19:33
  • \$\begingroup\$ Probably it should be in stack overflow, it should be moved instead of getting closed. \$\endgroup\$ – Cem Kalyoncu Jul 24 '11 at 9:50
  • \$\begingroup\$ I apologize; this was flagged as OT and I didn't read the post closely enough. This does have working code and is on topic here. \$\endgroup\$ – Michael K Jul 25 '11 at 3:07
7
\$\begingroup\$

There is already a sum function:

def totalCost = value + children.map(_.totalCost).sum
\$\endgroup\$
1
\$\begingroup\$

A left-fold is an elegant solution too:

class Node (children:List[Node], value:Int) {
  def totalCost : Int = (value /: children) (_ + _.totalCost)
}
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.