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))