(any-form? x)
true if x is a symbol beginning with _.
true if x is a symbol beginning with _.
(any-node? x)
true if x is an :any node, false otherwise.
true if x is an :any node, false otherwise.
(children node)
Return a sequential? of all children of node.
Return a sequential? of all children of node.
(consolidate-with node)
Collapse all :wth nodes into a single :wth node.
Collapse all :wth nodes into a single :wth node.
(defsyntax name docstring? meta? arglist & body)
(defsyntax & args)
EXPERIMENTAL Like defn but for defining new pattern syntax by extending the parser. When parsing, if a seq is encountered starting with a symbol which can be resolved to the created var then the tail of the seq is applied to the var and the result is parsed.
Example
(defsyntax re [regex] `(~'pred (fn [s#] (and (string? s#) (re-matches ~regex s#)))))
(require '[meander.match.delta :as r.match])
(r.match/match "elf" (re #"[a-z]+") :okay!) ;; => :okay
EXPERIMENTAL Like defn but for defining new pattern syntax by extending the parser. When parsing, if a seq is encountered starting with a symbol which can be resolved to the created var then the tail of the seq is applied to the var and the result is parsed. Example (defsyntax re [regex] `(~'pred (fn [s#] (and (string? s#) (re-matches ~regex s#))))) (require '[meander.match.delta :as r.match]) (r.match/match "elf" (re #"[a-z]+") :okay!) ;; => :okay
(fold f value node)
Same as clojure.core/reduce but specifically for ASTs. f must be a binary (arity 2) function and will receive as arguments the current accumulated value and an AST node. fold is eager and will visit each subnode in node.
Same as clojure.core/reduce but specifically for ASTs. f must be a binary (arity 2) function and will receive as arguments the current accumulated value and an AST node. fold is eager and will visit each subnode in node.
(ground? node)
true if node is ground i.e. it contains no variables or is not a match operator.
true if node is ground i.e. it contains no variables or is not a match operator.
(literal? node)
true if node is ground and does not contain :map or :set subnodes, false otherwise.
The constraint that node may not contain :map or :set subnodes is due to the semantics of map and set patterns: they express submap and subsets respectively. Compiling these patterns to literals as part of an equality check would result in false negative matches.
See also: compile-ground
true if node is ground and does not contain :map or :set subnodes, false otherwise. The constraint that node may not contain :map or :set subnodes is due to the semantics of map and set patterns: they express submap and subsets respectively. Compiling these patterns to literals as part of an equality check would result in false negative matches. See also: compile-ground
(logic-variable-form? x)
true if x is in the form of a logic variable i.e. a simple symbol with a name beginning with ?.
true if x is in the form of a logic variable i.e. a simple symbol with a name beginning with \?.
(logic-variables node)
Return all :lvr nodes in node.
Return all :lvr nodes in node.
(make-ref-map node)
If node is a node repesenting a with pattern, return a map from reference to pattern node derived from it's bindings, otherwise return an empty map.
If node is a node repesenting a with pattern, return a map from reference to pattern node derived from it's bindings, otherwise return an empty map.
(match-bindings node)
Returns a set of variables which would be bound by a successful pattern match.
(match-bindings (parse '(not [?x]))) ;; => #{}
(match-bindings (parse '(not (not [?x])))) ;; => #{{:tag :lvr, :symbol ?x}}
Returns a set of variables which would be bound by a successful pattern match. (match-bindings (parse '(not [?x]))) ;; => #{} (match-bindings (parse '(not (not [?x])))) ;; => #{{:tag :lvr, :symbol ?x}}
(max-length node)
The maximum possible length the pattern described by node can be. Note, this mutlimethod will throw an error wheneven node does not have a method to handle it. This behavior is intentional as the implementations should only exist for things which have can have length.
The maximum possible length the pattern described by node can be. Note, this mutlimethod will throw an error wheneven node does not have a method to handle it. This behavior is intentional as the implementations should only exist for things which have can have length.
(memory-variable-form? x)
true if x is in the form of a memory variable i.e. a simple symbol with a name beginning with !.
true if x is in the form of a memory variable i.e. a simple symbol with a name beginning with \!.
(memory-variables node)
Return all :mvr nodes in node.
Return all :mvr nodes in node.
(min-length node)
The maximum possible length the pattern described by node can be. Note, this mutlimethod will throw an error wheneven node does not have a method to handle it. This behavior is intentional as the implementations should only exist for things which have can have length.
The maximum possible length the pattern described by node can be. Note, this mutlimethod will throw an error wheneven node does not have a method to handle it. This behavior is intentional as the implementations should only exist for things which have can have length.
(parse x)
(parse x env)
Parse x
into an abstract syntax tree (AST) optionally with
respect to the environment env
.
(parse '(?x1 ?x2 :as ?xs)) ;; => {:tag :seq :as {:tag :lvr :symbol ?xs} :prt {:tag :prt :left {:tag :cat :elements ({:tag :lvr :symbol ?x1} {:tag :lvr :symbol ?x2})} :right {:tag :cat :elements []}}}
Parse `x` into an abstract syntax tree (AST) optionally with respect to the environment `env`. (parse '(?x1 ?x2 :as ?xs)) ;; => {:tag :seq :as {:tag :lvr :symbol ?xs} :prt {:tag :prt :left {:tag :cat :elements ({:tag :lvr :symbol ?x1} {:tag :lvr :symbol ?x2})} :right {:tag :cat :elements []}}}
(postwalk-replace smap form)
Same as clojure.walk/postwal-replace but for AST nodes.
Same as clojure.walk/postwal-replace but for AST nodes.
(prewalk-replace smap form)
Same as clojure.walk/prewalk-replace but for AST nodes.
Same as clojure.walk/prewalk-replace but for AST nodes.
(proper-subnodes node)
Return the all subnodes in node excluding node.
Return the all subnodes in node excluding node.
(ref-node? x)
true if x is a :ref node, false otherwise.
true if x is a :ref node, false otherwise.
(references node)
Return all :ref nodes in node.
Return all :ref nodes in node.
(rename-refs node)
Give all distinct :ref nodes a unique :symbol.
Give all distinct :ref nodes a unique :symbol.
(scan-cat node)
If node
is a :prt
node resembling the pattern
_ ... <p_1 ,,, p_n> . _ ...
then scan-cat
will return the :cat
node representing
<p_1 ,,, p_n>
Example:
(scan-cat '{:tag :prt, :left {:tag :drp, :symbol _}, :right {:tag :prt, :left {:tag :cat, :elements [{:tag :lvr, :symbol ?x} {:tag :lvr, :symbol ?y}]}, :right {:tag :prt, :left {:tag :drp, :symbol _}, :right {:tag :cat, :elements []}}}}) ;; => {:tag :cat, :elements [{:tag :lvr, :symbol ?x} {:tag :lvr, :symbol ?y}]}
If `node` is a `:prt` node resembling the pattern _ ... <p_1 ,,, p_n> . _ ... then `scan-cat` will return the `:cat` node representing <p_1 ,,, p_n> Example: (scan-cat '{:tag :prt, :left {:tag :drp, :symbol _}, :right {:tag :prt, :left {:tag :cat, :elements [{:tag :lvr, :symbol ?x} {:tag :lvr, :symbol ?y}]}, :right {:tag :prt, :left {:tag :drp, :symbol _}, :right {:tag :cat, :elements []}}}}) ;; => {:tag :cat, :elements [{:tag :lvr, :symbol ?x} {:tag :lvr, :symbol ?y}]}
(search? node)
true if node represents a search, false otherwise.
true if node represents a search, false otherwise.
(subnodes node)
Return a sequence of all subnodes of node.
Return a sequence of all subnodes of node.
(substitute-refs node)
(substitute-refs node ref-map)
Given node and an optional ref-map
Given node and an optional ref-map
(unparse node)
In pre-order fashion rewrite a node into a Clojure form.
In pre-order fashion rewrite a node into a Clojure form.
(variable-length? node)
true if node may have a variable length, false otherwise. Note this function will throw an error if node does not implement methods for both min-length and max-length.
true if node may have a variable length, false otherwise. Note this function will throw an error if node does not implement methods for both min-length and max-length.
(variables node)
Return all :lvr and :mvr nodes in node.
Return all :lvr and :mvr nodes in node.
(walk inner outer node)
Same as clojure.walk/walk but for AST nodes.
Same as clojure.walk/walk but for AST nodes.
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close