(Scicloj Online Meetup 2019 October 14th)
Created: 2019-10-14 Mo 16:35
SQL
SELECT id
FROM members
WHERE
name = 'Alice'
Prolog
name(X, "Alice")
Datalog
[:find ?id
:where
[?id :name "Alice"]]
;; => #{[22]}
[[1 :name "Alice"]
[2 :name "Bob"]
[3 :name "Charlie"]
[1 :age 45]
[2 :age 35]
[3 :age 25]]
[:find ?e
:where
[?e :age 45]]
;; => #{[1]}
[:find ?n
:where
[?e :age 45]
[?e :name ?n]]
;; => #{["Alice"]}
[:find ?n
:where
[_ :name ?n]]
;; => #{["Alice" "Bob" "Charlie"]}
[:find ?a
:in $ ?n
:where
[?e :name ?n]
[?e :age ?a]]
;; <= db "Alice"
;; => #{[45]}
[:find ?e .
:where [?e :name "Alice"]]
;; => 1
[:find [?n ...]
:where [_ :name ?n]]
;; => ["Alice" "Bob" "Charlie"]
[:find [?e ?a]
:in $ ?n
:where [?e :name ?n]
[?e :age ?a]]
;; <= db, "Alice"
;; => [1 45]
Syntax
[*]
[:name :age]
[:name :age {:car [*]}]
[:name :age
{:car [* {:vendor}]}]
Within queries
[:find (pull ?e [:name :age])
:where [?e :name _]]
;; => #{{:name "Alice" :age 45}
;; {:name "Bob" :age 35}
;; {:name "Charlie" :age 25}}