Parametric polymorphism: Difference between revisions

(Add Nimrod)
Line 732:
(7 nodes)
</pre>
 
=={{header|Rust}}==
<lang rust>
struct TreeNode<T> {
value: T,
left: Option<Box<TreeNode<T>>>,
right: Option<Box<TreeNode<T>>>
}
 
impl <T> TreeNode<T> {
fn my_map(&self, f: |t: &T| -> T) -> TreeNode<T> {
TreeNode {
value: f(&self.value),
left: match self.left {None => None, Some(ref n) => Some(box n.my_map(|n| f(n)))},
right: match self.right {None => None, Some(ref n) => Some(box n.my_map(|n| f(n)))}
}
}
}
 
fn main() {
let root = TreeNode {
value: 3i,
left: Some(box TreeNode {
value: 55i,
left: None,
right: None
}),
right: Some(box TreeNode {
value: 234i,
left: Some(box TreeNode {
value: 0i,
left: None,
right: None
}),
right: None
})
};
root.my_map(|x| {println!("{}", x); *x});
println!("---------------");
let new_root = root.my_map(|x| x * 333);
new_root.my_map(|x| {println!("{}", x); *x});
}</lang>
 
=={{header|Scala}}==
Anonymous user