Parametric polymorphism: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 251: | Line 251: | ||
11.21 11.21 11.21 |
11.21 11.21 11.21 |
||
11.22 11.22 11.22</pre> |
11.22 11.22 11.22</pre> |
||
=={{header|Dart}}== |
|||
<lang dart>class TreeNode<T> { |
|||
T value; |
|||
TreeNode<T> left; |
|||
TreeNode<T> right; |
|||
TreeNode(this.value); |
|||
TreeNode map(T f(T t)) { |
|||
var node = new TreeNode(f(value)); |
|||
if(left != null) { |
|||
node.left = left.map(f); |
|||
} |
|||
if(right != null) { |
|||
node.right = right.map(f); |
|||
} |
|||
return node; |
|||
} |
|||
void forEach(void f(T t)) { |
|||
f(value); |
|||
if(left != null) { |
|||
left.forEach(f); |
|||
} |
|||
if(right != null) { |
|||
right.forEach(f); |
|||
} |
|||
} |
|||
} |
|||
void main() { |
|||
TreeNode root = new TreeNode(1); |
|||
root.left = new TreeNode(2); |
|||
root.right = new TreeNode(3); |
|||
root.left.right = new TreeNode(4); |
|||
print('first tree'); |
|||
root.forEach(print); |
|||
var newRoot = root.map((t) => t * 222); |
|||
print('second tree'); |
|||
newRoot.forEach(print); |
|||
}</lang> |
|||
{{out}} |
|||
<pre>first tree |
|||
1 |
|||
2 |
|||
4 |
|||
3 |
|||
second tree |
|||
222 |
|||
444 |
|||
888 |
|||
666</pre> |
|||
=={{header|E}}== |
=={{header|E}}== |