Я немного сбит с толку из-за clojure doc
.
. Вывод - это спецификация аргументов, использующая традиционную базовую разметку регулярного выражения , которая:
*
: 0..n экземпляров размеченного предшествующего элемента («много») ?
: 0..1 экземпляров размеченного предшествующего элемента (»необязательный ") +
: 1..n экземпляры размеченного предыдущего элемента (" хотя бы один ")
круглые скобки ()
и квадратные скобки []
однако должны использоваться «как дано» для формирования правильного выражения или формы и не используются для группировки любых элементов регулярного выражения.
И если есть несколько допустимых комбинаций аргументов, они перечислены в нескольких строках.
Но обратите внимание, например, на вывод для (doc fn)
:
clojure.core/fn
(fn name? [params*] exprs*)
(fn name? ([params*] exprs*) +)
([& sigs])
Special Form
params => positional-params* , or positional-params* & next-param
positional-param => binding-form
next-param => binding-form
name => symbol
Defines a function
Please see http://clojure.org/special_forms#fn
params => positional-params* , or positional-params* & next-param
positional-param => binding-form
next-param => binding-form
name => symbol
Defines a function
Spec
args: (cat :fn-name (? simple-symbol?) :fn-tail (alt :arity-1 :clojure.core.specs.alpha/params+body :arity-n (+ (spec :clojure.core.specs.alpha/params+body))))
ret: any?
nil
Первые три строки имеют смысл как:
- Пакет и имя var или специальной формы
- Действительное выражение Structure
(fn name? [params*] exprs*)
- Другая возможная структура выражений
(fn name? ([params*] exprs*) +)
Но тогда есть неотступенчатый ([& sigs])
.О чем это?
Последующий вывод также нуждается в очистке.А что за "Spec"?
Для (doc doc)
:
clojure.repl/doc
([name])
Macro
Prints documentation for a var or special form given its name,
or for a spec if given a keyword
nil
Я не понимаю, не отступая ([name])
.
Или давайте попробуем (doc letfn)
:
clojure.core/letfn
(letfn [fnspecs*] exprs*)
([fnspecs & body])
Special Form
fnspec ==> (fname [params*] exprs) or (fname ([params*] exprs)+)
Takes a vector of function specs and a body, and generates a set of
bindings of functions to their names. All of the names are available
in all of the definitions of the functions, as well as the body.
fnspec ==> (fname [params*] exprs) or (fname ([params*] exprs)+)
Takes a vector of function specs and a body, and generates a set of
bindings of functions to their names. All of the names are available
in all of the definitions of the functions, as well as the body.
nil
Снова значение ([fnspecs & body])
мне неясно.