diff options
author | olpc user <olpc@xo-5d-f7-86.localdomain> | 2019-11-26 02:48:08 -0800 |
---|---|---|
committer | olpc user <olpc@xo-5d-f7-86.localdomain> | 2019-11-26 02:48:08 -0800 |
commit | d5e8c913a0c3b63ef7eadea41ec1818548f5f4cf (patch) | |
tree | f307d47cdb24a19390f6b79f7fede8facfff2d51 /starts/meaning-vm/level-2-wip-stmtexprs/meaning.hpp | |
parent | d4976b3e6fddec7a8ee010a6278e5cbe005542b4 (diff) | |
download | standingwithresilience-d5e8c913a0c3b63ef7eadea41ec1818548f5f4cf.tar.gz standingwithresilience-d5e8c913a0c3b63ef7eadea41ec1818548f5f4cf.zip |
this approach to level 2 is just taking too long to plan, may abandon
Diffstat (limited to 'starts/meaning-vm/level-2-wip-stmtexprs/meaning.hpp')
-rw-r--r-- | starts/meaning-vm/level-2-wip-stmtexprs/meaning.hpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/starts/meaning-vm/level-2-wip-stmtexprs/meaning.hpp b/starts/meaning-vm/level-2-wip-stmtexprs/meaning.hpp new file mode 100644 index 0000000..049e7f9 --- /dev/null +++ b/starts/meaning-vm/level-2-wip-stmtexprs/meaning.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include "ref.hpp" +#include "../level-1/helpers.hpp" + +namespace intellect { +namespace level2 { + +// get a named variable +ref avariable(ref name); + +template <typename... T> +ref and(T... refs) +{ + std::initializer_list<ref> rs = { refs... }; + decl(and, topic); + ref ret = a(and); + ref name; int count = 0; + for (auto r : rs) { + ret.link(topic, r); + if (count == 0) { + name.ptr() = r.ptr(); + } else { + name.ptr() = (name-and-r).ptr(); + } + ++ count; + } + if (count == 1) { + throw std::invalid_argument("and needs at least two subjects"); + } + // in level-1, we'll want to name anonymous objects after defining them + return name = ret; +} + +// make a reference to a link +ref link(ref sourceref, ref typeref, ref targetref); + +// invert a meaning +ref not(ref whatref); + +} +} |