Defining Functions and Variables

Lisp-1 vs Lisp-2: Scheme and Clojure are Lisp-1 (functions and variables share one namespace). Common Lisp and Emacs Lisp are Lisp-2 (separate namespaces), so you write (funcall f x) and #'square to refer to a function as a value.

;; Scheme
(define pi-approx 3.14159)                ; variable
(define (square x) (* x x))               ; function
(define (hypot a b) (sqrt (+ (square a) (square b))))
(hypot 3 4)                               ; 5
(define (greet name . rest)               ; variadic (rest args)
  (string-append "Hello, " name))
(define (power base (exp 2)) (expt base exp))   ; Racket: optional argument with a default
;; Common Lisp
(defparameter *pi-approx* 3.14159)
(defun square (x) (* x x))
(defun greet (name &optional (greeting "Hello") &key (punct "!"))
  (format nil "~a, ~a~a" greeting name punct))
(greet "Ana" "Hi" :punct "?")             ; "Hi, Ana?"
;; Clojure
(def pi-approx 3.14159)
(defn square [x] (* x x))
(defn greet
  ([name] (greet name "Hello"))           ; multi-arity
  ([name greeting] (str greeting ", " name "!")))
(defn sum-all [& nums] (apply + nums))    ; variadic
;; Emacs Lisp
(defvar my-pi 3.14159 "An approximation of pi.")
(defun square (x) "Return X squared." (* x x))