Minor corrections and a useful function in caesar.

This commit is contained in:
Simon Brooke 2020-05-17 15:11:26 +01:00
parent 4eedd2ae14
commit fefa218298
No known key found for this signature in database
GPG key ID: A7A4F18D1D4DF987

View file

@ -115,21 +115,21 @@
:longus [{:verb :kill :subject :longus :object :caesar :location :forum :date ides-of-march :nth-hand 1}] :longus [{:verb :kill :subject :longus :object :caesar :location :forum :date ides-of-march :nth-hand 1}]
:forum [{:verb :kill :subject :longus :object :caesar :location :forum :date ides-of-march :nth-hand 1}]}) :forum [{:verb :kill :subject :longus :object :caesar :location :forum :date ides-of-march :nth-hand 1}]})
(def drusila-kb (def drusilla-kb
"Drusila has heard that Brutus killed Caesar in the forum. She keys it on all three, for efficiency "Drusilla has heard that Brutus killed Caesar in the forum. She keys it on all three, for efficiency
of retrieval." of retrieval."
{:caesar [{:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :nth-hand 2} {:caesar [{:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :nth-hand 2}
{:verb :bury :subject :calpurnia :object :caesar :date eighteenth-march :nth-hand 1}] {:verb :bury :subject :calpurnia :object :caesar :date eighteenth-march :nth-hand 1}]
:brutus [{:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :nth-hand 2}] :brutus [{:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :nth-hand 2}]
:forum [{:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :nth-hand 2}]}) :forum [{:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :nth-hand 2}]})
(def faldo-db (def falco-kb
"Falco believes that Caesar has been killed, but doesn't know by whom or when." "Falco believes that Caesar has been killed, but doesn't know by whom or when."
{:caesar [{:verb :kill :object :caesar :location :forum}] {:caesar [{:verb :kill :object :caesar :location :forum}]
:brutus [{:verb :kill :object :caesar :location :forum}] :brutus [{:verb :kill :object :caesar :location :forum}]
:forum [{:verb :kill :object :caesar :location :forum}]}) :forum [{:verb :kill :object :caesar :location :forum}]})
(def gaius-db (def gaius-kb
"Gaius has heard that Brutus killed Caesar, but believes it happened in April." "Gaius has heard that Brutus killed Caesar, but believes it happened in April."
{:caesar [{:verb :kill :subject :brutus :object :caesar :location :forum :date april :nth-hand 2}] {:caesar [{:verb :kill :subject :brutus :object :caesar :location :forum :date april :nth-hand 2}]
:brutus [{:verb :kill :subject :brutus :object :caesar :location :forum :date april :nth-hand 2}] :brutus [{:verb :kill :subject :brutus :object :caesar :location :forum :date april :nth-hand 2}]
@ -142,3 +142,33 @@
:cassius [{:verb :kill :subject :cassius :object :caesar :location :forum :date ides-of-march :nth-hand 1}] :cassius [{:verb :kill :subject :cassius :object :caesar :location :forum :date ides-of-march :nth-hand 1}]
:forum [{:verb :kill :subject :cassius :object :caesar :location :forum :date ides-of-march :nth-hand 1}]}) :forum [{:verb :kill :subject :cassius :object :caesar :location :forum :date ides-of-march :nth-hand 1}]})
(defn knowledge
"The way I've encoded propositions in the sample `wildwood.caesar` namespace
is experimental and probably clumsy. This function, given such knowledge
bases, returns a single set of distinct propositions. It also makes it easier
to keep this namespace working if (as is likely) the underlying encoding
changes. Argument: `kbs`: knowledge bases, taken from `wildwood.caesar`."
[& kbs]
(set
(reduce
concat
(map
(fn [kb]
(reduce
concat
(map
#(kb %)
(keys kb))))
kbs))))
;; (knowledge k/brutus-kb k/cassius-kb)
(def all-knowledge
(knowledge
k/anthony-kb
k/brutus-kb
k/cassius-kb
k/drusilla-kb
k/falco-kb
k/gaius-kb
k/longus-kb))