// Rust's `&[T]` is a borrow, not a copy. Nim's view types model that, // including returning one: writing through the view reaches the original. fn head(xs: &[i32], n: usize) -> &[i32] { &xs[..n] } fn middle(xs: &[i32]) -> &[i32] { &xs[1..3] } fn sum(xs: &[i32]) -> i32 { let mut t: i32 = 0; for x in xs.iter() { t += x; } t } fn main() { let v: Vec = vec![1, 2, 3, 4, 5]; println!("{}", sum(head(&v, 3))); println!("{}", sum(middle(&v))); println!("{}", head(&v, 2).len()); println!("{}", head(&v, 5)[4]); }