Queries written by humans typically are a list, and the various keyword arguments are inferred by position. For example, in the query
[:find ?e :in $ ?fname ?lname :where [?e :user/firstName ?fname] [?e :user/lastName ?lname]]
there is one :find
argument, three :in
arguments, and two :where
arguments.
While most people find the positional syntax easy to read, it makes extra work for programmatic readers and writers, which have to keep track of what keyword is currently "active" and interpret tokens accordingly. For such cases, queries can be specified more simply as maps. The query above becomes:
{:find [?e] :in [$ ?fname ?lname] :where [[?e :user/firstName ?fname] [?e :user/lastName ?lname]]}
0 Comments