fn main() {
    
    fn no_args() {}
    
    no_args();

    
    
    fn adds_one(num: i32) -> i32 {
        
        num + 1
    }
    adds_one(1);

    
    
    
    fn prints_argument(maybe: Option<i32>) {
        match maybe {
            Some(num) => println!(, num),
            None => println!(),
        };
    }
    prints_argument(Some(3));
    prints_argument(None);

    
    fn prints_argument_into<I>(maybe: I)
        where I: Into<Option<i32>>
    {
        match maybe.into() {
            Some(num) => println!(, num),
            None => println!(),
        };
    }
    prints_argument_into(3);
    prints_argument_into(None);

    
    

    

    

    
    adds_one(1) + adds_one(5); 

    
    let two = adds_one(1);

    
    

    

    
    
    

    let mut v = vec![1, 2, 3, 4, 5, 6];

    
    fn add_one_to_first_element(vector: &mut Vec<i32>) {
        vector[0] += 1;
    }
    add_one_to_first_element(&mut v);
    
    fn print_first_element(vector: &Vec<i32>) {
        println!(, vector[0]);
    }
    print_first_element(&v);

    
    fn consume_vector(vector: Vec<i32>) {
        
    }
    consume_vector(v);
    
    

    
    
    fn average(x: f64, y: f64) -> f64 {
        (x + y) / 2.0
    }
    let average_with_four = |y| average(4.0, y);
    average_with_four(2.0);


}