Advanced Call Signatures
So far, we have been declaring functions with one arity (with only a fixed number of arguments), and simply binding the arguments passed to a function to some parameter names. However, Clojure has a few techniques to allow more flexibility when calling functions.
Destructuring Function Parameters
First, everything we have just learned about destructuring applies to function parameters. Yes, you read that correctly – we can use destructuring techniques right in the function parameter declaration! As promised, here's our first stab at refactoring the print-flight
functions from the previous exercise. Observe, in the following example, how sequential destructuring is used directly in the function parameters:
user=> (defn print-flight   [[[lat1 lon1] [lat2 lon2]]]     (println (str "Flying from: Lat " lat1 " Lon " lon1 " Flying to: Lat " lat2 " Lon " lon2))) #'user...