================================================================================
Simple functions
================================================================================

let fahrenheit_to_celsius temp -> (temp - 32) / 1.8

from cities
derive temp_c = (fahrenheit_to_celsius temp_f)

--------------------------------------------------------------------------------

(program
  (function_definition
    (keyword_let)
    (identifier)
    (parameter
      (identifier))
    (binary_expression
      (binary_expression
        (field
          (identifier))
        (literal
          (integer)))
      (literal
        (decimal_number
          (integer)))))
  (pipeline
    (from
      (keyword_from)
      (identifier))
    (transforms
      (derives
        (keyword_derive)
        (term
          (assignment
            (field
              (identifier))
            (function_call
              (identifier)
              (parameter
                (identifier)))))))))

================================================================================
Functions with default parameters
================================================================================

let interp lower:0 higher x -> (x - lower) / (higher - lower)

from students
derive {
  sat_proportion_1 = (interp 1600 sat_score),
  sat_proportion_2 = (interp lower:0 1600 sat_score),
}

--------------------------------------------------------------------------------

(program
  (function_definition
    (keyword_let)
    (identifier)
    (parameter
      (identifier)
      (literal
        (integer)))
    (parameter
      (identifier))
    (parameter
      (identifier))
    (binary_expression
      (binary_expression
        (field
          (identifier))
        (field
          (identifier)))
      (binary_expression
        (field
          (identifier))
        (field
          (identifier)))))
  (pipeline
    (from
      (keyword_from)
      (identifier))
    (transforms
      (derives
        (keyword_derive)
        (term
          (assignment
            (field
              (identifier))
            (function_call
              (identifier)
              (parameter
                (literal
                  (integer)))
              (parameter
                (identifier)))))
        (term
          (assignment
            (field
              (identifier))
            (function_call
              (identifier)
              (parameter
                (identifier)
                (literal
                  (integer)))
              (parameter
                (literal
                  (integer)))
              (parameter
                (identifier)))))))))
