(array *ArrayNode)
| 20 | } |
| 21 | |
| 22 | func sumArrayFold(array *ArrayNode) *BinaryNode { |
| 23 | if len(array.Nodes) > 2 { |
| 24 | return &BinaryNode{ |
| 25 | Operator: "+", |
| 26 | Left: array.Nodes[0], |
| 27 | Right: sumArrayFold(&ArrayNode{Nodes: array.Nodes[1:]}), |
| 28 | } |
| 29 | } else if len(array.Nodes) == 2 { |
| 30 | return &BinaryNode{ |
| 31 | Operator: "+", |
| 32 | Left: array.Nodes[0], |
| 33 | Right: array.Nodes[1], |
| 34 | } |
| 35 | } |
| 36 | panic(fmt.Errorf("sumArrayFold: invalid array length %d", len(array.Nodes))) |
| 37 | } |