(applym macro & args)
Allow macros to be applied to arguments just like functions
(applym const '((+ 1 2))) => 3
(macroexpand '(applym const '((+ 1 2)))) => 3
Allow macros to be applied to arguments just like functions (applym const '((+ 1 2))) => 3 (macroexpand '(applym const '((+ 1 2)))) => 3
(arg-check f num)
(arg-check f num message)
counts the number of non-varidic argument types
(arg-check (fn [x]) 1) => true
(arg-check (fn [x & xs]) 1) => true
(arg-check (fn [x & xs]) 0) => (throws Exception "Function must accomodate 0 arguments")
counts the number of non-varidic argument types (arg-check (fn [x]) 1) => true (arg-check (fn [x & xs]) 1) => true (arg-check (fn [x & xs]) 0) => (throws Exception "Function must accomodate 0 arguments")
(arg-count f)
counts the number of non-varidic argument types
(arg-count (fn [x])) => [1]
(arg-count (fn [x & xs])) => []
(arg-count (fn ([x]) ([x y]))) => [1 2]
counts the number of non-varidic argument types (arg-count (fn [x])) => [1] (arg-count (fn [x & xs])) => [] (arg-count (fn ([x]) ([x y]))) => [1 2]
(call obj)
(call obj f)
(call obj f v1)
(call obj f v1 v2)
(call obj f v1 v2 v3)
(call obj f v1 v2 v3 v4)
(call obj f v1 v2 v3 v4 & vs)
like invoke
but reverses the function and first argument
(call 2) => 2
(call 2 + 1 2 3) => 8
like `invoke` but reverses the function and first argument (call 2) => 2 (call 2 + 1 2 3) => 8
(const body)
converts an expression into a constant at compile time
(const (+ 1 2)) => 3
(macroexpand '(const (+ 1 2))) => 3
converts an expression into a constant at compile time (const (+ 1 2)) => 3 (macroexpand '(const (+ 1 2))) => 3
(create-args [doc? attr? & more :as arglist])
caches the result of a function
(create-args '[[x] (inc x) nil nil]) => '("" {} [x] (inc x))
caches the result of a function (create-args '[[x] (inc x) nil nil]) => '("" {} [x] (inc x))
(create-def-form name attrs body)
(create-def-form name doc attrs arglist body)
removes a cached result
(create-def-form 'hello "doc" {:added "1.3"} '[x] '(inc x)) '(do (def hello (inc x)) (clojure.core/doto (var hello) (clojure.core/alter-meta! clojure.core/merge {:added "1.3"} {:arglists (quote ([x])), :doc "doc"})))
removes a cached result (create-def-form 'hello "doc" {:added "1.3"} '[x] '(inc x)) '(do (def hello (inc x)) (clojure.core/doto (var hello) (clojure.core/alter-meta! clojure.core/merge {:added "1.3"} {:arglists (quote ([x])), :doc "doc"})))
(defcompose name doc? attrs? & [arglist body])
used instead of def
for functional composition
(defcompose -add-10- [x & more] (partial + 10))
(-add-10- 10) => 20
used instead of `def` for functional composition (defcompose -add-10- [x & more] (partial + 10)) (-add-10- 10) => 20
(defexecutive name doc? attrs? & [fields settings & body])
creates an executable data type
(declare hello-display hello-print)
(def hello-invoke (fn [this & args] (str (.name this) " " (apply + args))))
(defexecutive -Hello- [name place date] {:tag "hello" :invoke hello-invoke :display hello-display :print hello-print})
((-Hello-. "hello" nil nil) 1 2 3 4 5) => "hello 15"
creates an executable data type (declare hello-display hello-print) (def hello-invoke (fn [this & args] (str (.name this) " " (apply + args)))) (defexecutive -Hello- [name place date] {:tag "hello" :invoke hello-invoke :display hello-display :print hello-print}) ((-Hello-. "hello" nil nil) 1 2 3 4 5) => "hello 15"
(definvoke name doc? & [attrs? & [params & body :as more]])
customisable invocation forms
(definvoke -another- [:compose {:val (partial + 10) :arglists '([& more])}])
customisable invocation forms (definvoke -another- [:compose {:val (partial + 10) :arglists '([& more])}])
(deflookup name doc? attrs? & [arglist lookup transfer?])
defines a map based lookup
(deflookup -country- [city] {:kunming :china :melbourne :australia})
(-country- :kunming) => :china
defines a map based lookup (deflookup -country- [city] {:kunming :china :melbourne :australia}) (-country- :kunming) => :china
(defmemoize name doc? attrs? & body)
defines a cached function
(defmemoize -dec- "decrements" {:added "1.0"} ([x] (dec x)))
(-dec- 1) => 0 @+-dec- => '{(1) 0}
defines a cached function (defmemoize -dec- "decrements" {:added "1.0"} ([x] (dec x))) (-dec- 1) => 0 @+-dec- => '{(1) 0}
(fn & body)
macro for an extensible fn
form
(fn [x] x) => fn?
^{:type :function} (fn [x] x) => java.util.function.Function
^{:type :predicate} (fn [x] true) => java.util.function.Predicate
macro for an extensible `fn` form (fn [x] x) => fn? ^{:type :function} (fn [x] x) => java.util.function.Function ^{:type :predicate} (fn [x] true) => java.util.function.Predicate
(form-apply form args)
Applies a list as a function to an argument vector
(form-apply '(+ 1 %1 %2) [2 3]) => 6
Applies a list as a function to an argument vector (form-apply '(+ 1 %1 %2) [2 3]) => 6
(form-arglists body)
returns the arglists of a form
(form-arglists '([x] x)) => '(quote ([x]))
(form-arglists '(([x] x) ([x y] (+ x y)))) => '(quote ([x] [x y]))
returns the arglists of a form (form-arglists '([x] x)) => '(quote ([x])) (form-arglists '(([x] x) ([x y] (+ x y)))) => '(quote ([x] [x y]))
(form-eval form & args)
Evaluates a list as a functions and to a set of arguments.
(form-eval '(+ 1 %1 %2) 2 3) => 6
Evaluates a list as a functions and to a set of arguments. (form-eval '(+ 1 %1 %2) 2 3) => 6
(form-fn form)
Creates a function out of a list (def my-inc (form-fn '(+ 1 %)))
(my-inc 1) => 2 (meta my-inc) => {:source "#(+ 1 %)\n"}
Creates a function out of a list (def my-inc (form-fn '(+ 1 %))) (my-inc 1) => 2 (meta my-inc) => {:source "#(+ 1 %)\n"}
(invoke f)
(invoke f v1)
(invoke f v1 v2)
(invoke f v1 v2 v3)
(invoke f v1 v2 v3 v4)
(invoke f v1 v2 v3 v4 & vs)
Executes (f v1 ... vn)
if f
is not nil
(invoke nil 1 2 3) => nil
(invoke + 1 2 3) => 6
Executes `(f v1 ... vn)` if `f` is not nil (invoke nil 1 2 3) => nil (invoke + 1 2 3) => 6
(list-patched)
returns all functions that have been patched
(patch #'hara.core.base.check/double? hara.core.base.check/double?)
(-> (list-patched) (get #'hara.core.base.check/double?) boolean) => true
returns all functions that have been patched (patch #'hara.core.base.check/double? hara.core.base.check/double?) (-> (list-patched) (get #'hara.core.base.check/double?) boolean) => true
(lookup m)
(lookup m {:keys [in out not-found] :as transfer})
creates a lookup function based on a map lookup
(def -opts- {:in (fn [s] (-> s (.toLowerCase) keyword)) :out name :not-found :no-reference})
(def -lookup- (lookup {:kunming :china :melbourne :australia} -opts-))
(-lookup- "MeLBoURne") => "australia"
creates a lookup function based on a map lookup (def -opts- {:in (fn [s] (-> s (.toLowerCase) keyword)) :out name :not-found :no-reference}) (def -lookup- (lookup {:kunming :china :melbourne :australia} -opts-)) (-lookup- "MeLBoURne") => "australia"
(memoize function cache var)
(memoize function cache var registry status)
caches the result of a function (ns-unmap ns '+-inc-) (ns-unmap ns '-inc-) (def +-inc- (atom {})) (declare -inc-) (def -inc- (memoize inc +-inc- #'-inc-))
(-inc- 1) => 2 (-inc- 2) => 3
caches the result of a function (ns-unmap *ns* '+-inc-) (ns-unmap *ns* '-inc-) (def +-inc- (atom {})) (declare -inc-) (def -inc- (memoize inc +-inc- #'-inc-)) (-inc- 1) => 2 (-inc- 2) => 3
(memoize-clear mem)
clears all results
(memoize-clear -inc-) => '{(2) 3}
clears all results (memoize-clear -inc-) => '{(2) 3}
(memoize-remove mem & args)
removes a cached result
(memoize-remove -inc- 1) => 2
removes a cached result (memoize-remove -inc- 1) => 2
(message obj kw)
(message obj kw v1)
(message obj kw v1 v2)
(message obj kw v1 v2 v3)
(message obj kw v1 v2 v3 v4)
(message obj kw v1 v2 v3 v4 & vs)
Message dispatch for object orientated type calling convention.
(def obj {:a 10 :b 20 :get-sum (fn [this] (+ (:b this) (:a this)))})
(message obj :get-sum) => 30
Message dispatch for object orientated type calling convention. (def obj {:a 10 :b 20 :get-sum (fn [this] (+ (:b this) (:a this)))}) (message obj :get-sum) => 30
(multi-add multi dispatch-val method)
adds an entry to the multimethod
(multi-add world :c (fn [m] (assoc m :c 3))) => world
adds an entry to the multimethod (multi-add world :c (fn [m] (assoc m :c 3))) => world
(multi-clone source name)
creates a multimethod from an existing one
(defmulti hello :type)
(defmethod hello :a [m] (assoc m :a 1))
(def world (multi-clone hello "world"))
(defmethod world :b [m] (assoc m :b 2))
(world {:type :b}) => {:type :b :b 2}
;; original method should not be changed (hello {:type :b}) => (throws)
creates a multimethod from an existing one (defmulti hello :type) (defmethod hello :a [m] (assoc m :a 1)) (def world (multi-clone hello "world")) (defmethod world :b [m] (assoc m :b 2)) (world {:type :b}) => {:type :b :b 2} ;; original method should not be changed (hello {:type :b}) => (throws)
(multi-get multi dispatch)
returns all entries in the multimethod
(multi-get world :b) => fn?
returns all entries in the multimethod (multi-get world :b) => fn?
(multi-has? multi val)
returns true
if the multimethod contains a value for dispatch
(multi-has? print-method Class) => true
returns `true` if the multimethod contains a value for dispatch (multi-has? print-method Class) => true
(multi-keys multi)
returns all keys for a given multimethod
(multi-keys world) => #{:a :b}
returns all keys for a given multimethod (multi-keys world) => #{:a :b}
(multi-list multi)
returns all entries in the multimethod
(multi-list world) => (satisfies [:a :b] (comp vec sort keys))
returns all entries in the multimethod (multi-list world) => (satisfies [:a :b] (comp vec sort keys))
(multi-match? multi method)
(multi-match? multi method throw?)
checks if the multi dispatch matches the arguments
(multi-match? (.dispatchFn string/-from-string) (fn [_ _ _])) => true
(multi-match? (.dispatchFn string/-from-string) (fn [_]) true) => (throws)
checks if the multi dispatch matches the arguments (multi-match? (.dispatchFn string/-from-string) (fn [_ _ _])) => true (multi-match? (.dispatchFn string/-from-string) (fn [_]) true) => (throws)
(multi-remove multi dispatch)
removes an entry
(multi-remove world :b) => fn?
removes an entry (multi-remove world :b) => fn?
(multi? obj)
returns true
if obj
is a multimethod
(multi? print-method) => true
(multi? println) => false
returns `true` if `obj` is a multimethod (multi? print-method) => true (multi? println) => false
(op f & args)
loose version of apply. Will adjust the arguments to put into a function
(op + 1 2 3 4 5 6) => 21
(op (fn [x] x) 1 2 3) => 1
(op (fn [_ y] y) 1 2 3) => 2
(op (fn [_] nil)) => (throws Exception)
loose version of apply. Will adjust the arguments to put into a function (op + 1 2 3 4 5 6) => 21 (op (fn [x] x) 1 2 3) => 1 (op (fn [_ y] y) 1 2 3) => 2 (op (fn [_] nil)) => (throws Exception)
(patch var f)
patches the existing function with a given one
(patch #'hara.core.base.check/double? (fn [x] (instance? Float x)))
(hara.core.base.check/double? (float 1.0)) => true
patches the existing function with a given one (patch #'hara.core.base.check/double? (fn [x] (instance? Float x))) (hara.core.base.check/double? (float 1.0)) => true
(patched? var)
checks if an existing function has been patched
(patched? #'hara.core.base.check/double?) => true
checks if an existing function has been patched (patched? #'hara.core.base.check/double?) => true
(unpatch var)
removes the patch creates for the var
(unpatch #'hara.core.base.check/double?)
(hara.core.base.check/double? (float 1.0)) => false
removes the patch creates for the var (unpatch #'hara.core.base.check/double?) (hara.core.base.check/double? (float 1.0)) => false
(varg-count f)
counts the number of arguments types before variable arguments
(varg-count (fn [x y & xs])) => 2
(varg-count (fn [x])) => nil
counts the number of arguments types before variable arguments (varg-count (fn [x y & xs])) => 2 (varg-count (fn [x])) => nil
(vargs? f)
checks that function contain variable arguments
(vargs? (fn [x])) => false
(vargs? (fn [x & xs])) => true
checks that function contain variable arguments (vargs? (fn [x])) => false (vargs? (fn [x & xs])) => true
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close