AmateurB

Embedding formal methods in Clojure since 2016.

Records

B => struct(foo:NAT, bar:NAT)
#{{:bar 0, :foo 2} {:bar 3, :foo 2} {:bar 3, :foo 3} {:bar 3, :foo 0} {:bar 2, :foo 1} {:bar 1, :foo 3} {:bar 2, :foo 0} {:bar 1, :foo 0} {:bar 1, :foo 2} {:bar 1, :foo 1} {:bar 2, :foo 2} {:bar 0, :foo 0} {:bar 3, :foo 1} {:bar 0, :foo 1} {:bar 2, :foo 3} {:bar 0, :foo 3}}
B => rec(foo:1, bar:2)
{:bar 2, :foo 1}
B => rec(foo:1, bar:2)'foo
1
lisb=> (struct :foo nat-set :bar nat-set)   ;; B: struct(foo: NAT, bar: NAT)
#{{:bar 0, :foo 2} {:bar 3, :foo 2} {:bar 3, :foo 3} {:bar 3, :foo 0} {:bar 2, :foo 1} {:bar 1, :foo 3} {:bar 2, :foo 0} {:bar 1, :foo 0} {:bar 1, :foo 2} {:bar 1, :foo 1} {:bar 2, :foo 2} {:bar 0, :foo 0} {:bar 3, :foo 1} {:bar 0, :foo 1} {:bar 2, :foo 3} {:bar 0, :foo 3}}
lisb=> (record :foo 1 :bar 2)   ;; B: rec(foo: 1, bar: 2)
{:bar 2, :foo 1}
lisb=> (record-get (record :foo 1 :bar 2) :foo)   ;; B: rec(foo: 1, bar: 2)'foo
1