My impression is that there are two reasons. 1) In doing so, you are likely to avoid any name conflicts and / or accidental shadowing. 2) This practice provides greater transparency regarding the final source of functions and variables used in the code. The first one is pretty practical, and Chiron's answer gives an excellent demonstration.
, , . , :
(ns your-namespace
(:use [library-one]
[library-two]
[library-three]
[library-four]
[library-five]))
-, , :
(important-function some-arg some-other-arg)
important-function , , library-three, ( , ) , , - , , ! , , REPL, :
your-namespace> `important-function
> library-three/important-function
, , ( ), . , :require d . :
(ns your-namespace
(:require [library-one]
[library-two]
[library-three]
[library-four]
[library-five]))
...
(library-three/important-function some arg some-other-arg)
, important-function . , :refer :all. :refer :all , , , .
, ... , , , . , vars, :use :only. :
(ns your-namespace
(:use [library-one :only []]
[library-two :only []]
[library-three :only [important-function]]
[library-four :only []]
[library-five :only []]))
...
(important-function some arg some-other-arg)
, :use :only , , :use , . :require , :as. :
(ns your-namespace
(:require [library-three :as L3]))
(L3/important-function some-arg some-other-arg)
. , Clojure.