f(x, y, z) // traditional function call notation (f x y z) // Lisp function call notation f / | \ x y z f() // traditional function call with no arguments (f) // Lisp notation for a function call with no arguments, S-expression f // but as a tree expression, it looks like a variable, not a function (apply f) // Language_7 function call with no arguments notation (appply f x y z) // Language_7 function call notation f(x) = x*x g(x) = x*x*x y = if b then f(x) else g(x) h = if b then f else g // h is a function, either f or g y = h(x) // call function h y = (if b then f else g)(x) // call either f or g y = (b ? f : g)(x) // call either f or g (var y ((if b f g) x)) // Lisp, S-expression (this is not a tree!) (var y (apply (if b f g) x) // Language_7 tree expression (a b c) // S-expression (which is a tree), call a with arguments b and c (apply a b c) // tree expression, call a with arguments b and c ((a b) c)) // S-expression (not a tree!) (apply (apply a b) c) // Language_7 tree expression (((a b) c) d e) // S-expression (not a tree!) (apply (apply (apply a b) c) d e) // Language_7 tree expression f(x) = x*x*x f = \x -> x*x*x f(z) = z*z*z f = \z -> z*z*z f(3) (\z -> z*z*z)(3) // calling an anonymous lambda expression ((lambda x x*x*x) 3) // Lisp, S-expression (apply (lambda x x*x*x) 3) // Languge_8 tree