Parametric polymorphism: Difference between revisions

m
Line 734:
 
=={{header|Rust}}==
<lang rust>struct TreeNode<T> {
value: T,
struct TreeNode<T> {
right left: Option<Box<TreeNode<T>>>,
value: T,
left right: Option<Box<TreeNode<T>>>,
right: Option<Box<TreeNode<T>>>
}
 
impl <T> TreeNode<T> {
fn my_map<U>(&self, f: |t: &T| -> TU) -> TreeNode<TU> {
TreeNode{value: 0if(&self.value),
TreeNode {
value: f(&self.value), left:
match self.left {
left: match self.left {None => None, Some(ref n) => Some(box n.my_map(|n| f(n)))},
None => None,
right: match self.right {None => None, Some(ref n) => Some(box n.my_map(|n| f(n)))}
left: match self.left {None => None, Some(ref n) => Some(box() n.my_map(|n| f(n)))},
},
right: None
match self.right {
None => None,
right: match self.right {None => None, Some(ref n) => Some(box() n.my_map(|n| f(n)))},
},}
}
}
}
 
fn main() {
let root = TreeNode {
TreeNode{value: 3i,
left: None,
left: Some(box TreeNode {
Some(box() TreeNode{value: 55i,
left: None,
right: None,}),
right: None
}),
right: Some(box() TreeNode {value: 234i,
left:
value: 234i,
left: Some(box() TreeNode {value: 0i,
left: None,
value: 0i,
right:
left: None,
None,}),
right: None
right: None,}),};
}),
new_root root.my_map(|x| { println!("{}" , x); *x});
right: None
println!("---------------");
})
let new_root = root.my_map(|x| *x as f64 * 333.333f64);
};
root new_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>
 
Anonymous user