diff options
author | olpc user <olpc@xo-5d-f7-86.localdomain> | 2019-11-23 09:11:28 -0800 |
---|---|---|
committer | olpc user <olpc@xo-5d-f7-86.localdomain> | 2019-11-23 09:11:28 -0800 |
commit | fed2ac694bd028d119581ea05a3376e791aee97d (patch) | |
tree | 726785b677c3109a16a9b0b1b27ade16b2cfea51 /starts/meaning-vm/meaning.hpp | |
parent | c0fdff872ca2c48939bacfefce020878ef92b44c (diff) | |
download | standingwithresilience-fed2ac694bd028d119581ea05a3376e791aee97d.tar.gz standingwithresilience-fed2ac694bd028d119581ea05a3376e791aee97d.zip |
more syntax sugar, building meaning
Diffstat (limited to 'starts/meaning-vm/meaning.hpp')
-rw-r--r-- | starts/meaning-vm/meaning.hpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/starts/meaning-vm/meaning.hpp b/starts/meaning-vm/meaning.hpp new file mode 100644 index 0000000..c358d69 --- /dev/null +++ b/starts/meaning-vm/meaning.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "concept.hpp" +#include "helpers.hpp" + +// get a named variable +ref avariable(ref name); + +template <typename... T> +ref and(T... refs) +{ + std::initializer_list<ref> rs = { refs... }; + declrefs(and); + decllnks(what); + ref ret = a(and); + ref name; int count = 0; + for (auto r : rs) { + ret[what] = r; + if (count == 0) { + name.ptr = r.ptr; + } else { + name.ptr = (name-and-r).ptr; + } + ++ count; + } + if (count == 1) { + throw std::logic_error("and needs at least two subjects"); + } + return name = ret; +} + +// make a reference to a link +ref link(ref sourceref, ref typeref, ref targetref); + +// invert a meaning +ref not(ref whatref); |