logic programming in clojuredependency graph nodes (def doe (ref {:name “doe”:last-update...
TRANSCRIPT
![Page 1: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/1.jpg)
Logic Programmingin Clojure
![Page 2: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/2.jpg)
8 “things”
![Page 3: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/3.jpg)
8 “named things”
song
doe me ti
sew larae
fa
![Page 4: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/4.jpg)
8 “connected things”
song
doe me ti
sew larae
fa
![Page 5: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/5.jpg)
Dependency Graph
song
doe me ti
sew larae
fa
![Page 6: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/6.jpg)
Dependency Graph Nodes
(def doe(ref {:name “doe”
:last-update (Date.):deps [rae fa sew]}))
(def rae(ref {:name “rae”
:last-update (Date.):deps [fa]}))
![Page 7: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/7.jpg)
Dependency Graph
What is the root?
How long are the paths from the root to each leaf?
What are the leaves?
![Page 8: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/8.jpg)
Dependency Graph
song
doe me ti
sew larae
fa
![Page 9: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/9.jpg)
Logic Programming is aboutsearching graphs
![Page 10: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/10.jpg)
Logic Programming is aboutsearching graphs
* Social Media * Web search * Turn-by-turn navigation * Recommendation engines * Dependency relationships * Variable type analysis * Natural language parsing * Protein folding * Business rules engines
![Page 11: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/11.jpg)
Mini-Kanren (in Clojure)
Subset of Kanren
Described in “The Reasoned Schemer”
![Page 12: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/12.jpg)
Mini-Kanren (in Clojure)
run:Logic functions cannot be executed like 'normal' Clojure functions.
'run' queries a logic function forresults.
May return none, one or manyresults.
![Page 13: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/13.jpg)
Mini-Kanren (in Clojure)
(run q ; some logic functions )
'q' is a logic variable
![Page 14: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/14.jpg)
Mini-Kanren (in Clojure)
Binding:Logic variables are not like normal,mutable variables.
Logic variables are 'bound' to valuesor other logic variables with the logic function '&'.
![Page 15: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/15.jpg)
Mini-Kanren (in Clojure)
(run q (& 7 q))
(run q (& q 7))
Both return (7) as a result.
![Page 16: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/16.jpg)
Mini-Kanren (in Clojure)
(run q (& 9 7))
(run q (& 9 q) (& q 7))
Both return the empty list () as the result.
![Page 17: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/17.jpg)
Mini-Kanren (in Clojure)
Alternatives:When a variable needs to be boundto more than one value, use 'cond-e'
(run q (cond-e [(& q 4)] [(& q “not”)]))
Returns the list (4 “not”) as the result.
![Page 18: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/18.jpg)
Mini-Kanren (in Clojure)
New logic variables:
(run q(exist [a b c]
(& q b)(& a 9)(& b “string”)))
Returns a result of (“string”)
![Page 19: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/19.jpg)
Zebra
9. Milk is drunk in the middle house.
(& [ _ _ [ _ _ :milk _ _ ] _ _ ] h)
![Page 20: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/20.jpg)
Zebra
10. The Norwegian lives in the firsthouse on the left.
(& h [[:norwegian _ _ _ _ ] | _ ])
![Page 21: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/21.jpg)
Zebra
15. The Norwegian lives next to theblue house.
(next-to [ _ _ _ _ :blue] [:norwegian _ _ _ _ ] h)
![Page 22: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/22.jpg)
Zebra
2.The Englishman lives in the red house.
(member-o [:englishman _ _ _ :red] h)
![Page 23: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/23.jpg)
Dependency Graph
song
doe me ti
sew larae
fa
![Page 24: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/24.jpg)
Dependency Graph
(def rae(ref {:name “rae”
:last-update (Date.):deps [fa]}))
(defn dependency [a b](cond-e
[(& a rae) (& b fa)]))
![Page 25: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/25.jpg)
Dependency Graph
(defn dependency [a b](cond-e
[(& a rae) (& b fa)][(& a doe) (& b fa)][(& a doe) (& b rae)][(& a doe) (& b sew)][(& a me) (& b sew)][(& a me) (& b la)][(& a ti) (& b la)][(& a song) (& b doe)][(& a song) (& b me)][(& a song) (& b ti)]))
![Page 26: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/26.jpg)
Dependency Graph Nodes
(def doe(ref {:name “doe”
:last-update (Date.)}))
(def rae(ref {:name “rae”
:last-update (Date.)}))
![Page 27: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/27.jpg)
Dependency Graph
(defn dependency [a b](cond-e
[(& a rae) (& b fa)][(& a doe) (& b fa)][(& a doe) (& b rae)][(& a doe) (& b sew)][(& a me) (& b sew)][(& a me) (& b la)][(& a ti) (& b la)][(& a song) (& b doe)][(& a song) (& b me)][(& a song) (& b ti)]))
![Page 28: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/28.jpg)
Dependency Graph
(run q(dependency doe q))
![Page 29: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/29.jpg)
Dependency Graph
(run q(dependency doe q))
Result: (fa rae sew)
![Page 30: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/30.jpg)
Dependency Graph
(defn dependency [a b](cond-e
[(& a rae) (& b fa)][(& a doe) (& b fa)][(& a doe) (& b rae)][(& a doe) (& b sew)][(& a me) (& b sew)][(& a me) (& b la)][(& a ti) (& b la)][(& a song) (& b doe)][(& a song) (& b me)][(& a song) (& b ti)]))
![Page 31: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/31.jpg)
Dependency Graph
(run q(dependency q doe))
![Page 32: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/32.jpg)
Dependency Graph
(run q(dependency q doe))
Result: (song)
![Page 33: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/33.jpg)
Dependency Graph
(defn dependency [a b](cond-e
[(& a rae) (& b fa)][(& a doe) (& b fa)][(& a doe) (& b rae)][(& a doe) (& b sew)][(& a me) (& b sew)][(& a me) (& b la)][(& a ti) (& b la)][(& a song) (& b doe)][(& a song) (& b me)][(& a song) (& b ti)]))
![Page 34: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/34.jpg)
Dependency Graph
(run q(dependency q _))
![Page 35: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/35.jpg)
Dependency Graph
(run q(dependency q _))
Result: (rae doe doe doe me me tisong song song)
![Page 36: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/36.jpg)
Dependency Graph
(defn dependency [a b](cond-e
[(& a rae) (& b fa)][(& a doe) (& b fa)][(& a doe) (& b rae)][(& a doe) (& b sew)][(& a me) (& b sew)][(& a me) (& b la)][(& a ti) (& b la)][(& a song) (& b doe)][(& a song) (& b me)][(& a song) (& b ti)]))
![Page 37: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/37.jpg)
Dependency Graph
(set(run q
(dependency q _)))
Result: #{rae doe me ti song}
![Page 38: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/38.jpg)
Dependency Graph
song
doe me ti
sew larae
fa
![Page 39: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/39.jpg)
Dependency Graph
(defn make [a q](exist [ dep ]
(cond-e[(dependency a dep) (make dep q)]
[(dependency a dep) (newer-than dep a) (& a q)])))
![Page 40: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/40.jpg)
Dependency Graph
(def nodes(run q
(make song q)))
(map update nodes)
![Page 41: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/41.jpg)
Dependency Graph
song
doe me ti
sew larae
fa
![Page 42: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/42.jpg)
Dependency Graph
(defn make [a q](exist [ dep ]
(cond-e[(dependency a dep) (make dep q)]
[(dependency a dep) (newer-than dep a) (& a q)])))
![Page 43: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/43.jpg)
Dependency Graph
song
doe me ti
sew larae
fa
![Page 44: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/44.jpg)
Dependency Graph
song
doe me ti
sew larae
fa
![Page 45: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/45.jpg)
Dependency Graph
(defn make [a q](exist [ dep ]
(cond-e[(dependency a dep) (make dep q)]
[(dependency a dep) (newer-than dep a) (& a q)])))
![Page 46: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/46.jpg)
Logic Programming
Hides the complexity of graph searches.
![Page 47: Logic Programming in ClojureDependency Graph Nodes (def doe (ref {:name “doe”:last-update (Date.):deps [rae fa sew]})) (def rae (ref {:name “rae”:last-update (Date.):deps [fa]}))](https://reader033.vdocuments.mx/reader033/viewer/2022050315/5f775adacd82e475b70c7c10/html5/thumbnails/47.jpg)
Logic Programming
Hides the complexity of graph searches.
Leaving you to focus on the problem you'retrying to solve.