Namespaces are the means by which you divide your Clojure code into logical groups, similar to packages in Java or modules in other languages. Almost every Clojure source file begins with a namespace declaration using the
ns macro. The following code is an example of a namespace declaration:
(ns clojure.contrib.gen-html-docs (:require [clojure.contrib.duck-streams :as duck-streams]) (:use (clojure.contrib seq-utils str-utils repl-utils def prxml)) (:import (java.lang Exception) (java.util.regex Pattern)))
Fundamentally, a namespace is just a Clojure map. The keys of the map are Clojure symbols and the values are either Clojure Vars or Java classes. The Clojure compiler uses that map to figure ...