diff options
Diffstat (limited to 'starts/meaning-vm/main.cpp')
-rw-r--r-- | starts/meaning-vm/main.cpp | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/starts/meaning-vm/main.cpp b/starts/meaning-vm/main.cpp index 1392957..f9f8118 100644 --- a/starts/meaning-vm/main.cpp +++ b/starts/meaning-vm/main.cpp @@ -5,10 +5,47 @@ using namespace std; #include <iostream> +void dumpconcept(ref r) +{ + declrefs(dumped); + + for (auto & l : r->links) { + cout << r << " " << l.first << " " << l.second << endl; + } + if (!r->linked(dumped)) { + r[dumped = true]; + } + for (auto & l : r->links) { + if (!l.second->linked(dumped)) { + dumpconcept(l.second); + } + } +} + int main() { - decl(fruit, banana, is); + declrefs(is, link, type); + is->link(is, link-type); + + declrefs(source, target); + declrefs(linked, A, B, C, abc, variable); + declrefs(trueness, truth, what, not); + + declrefs(add, unique, habit, needs, assumes, makes); + A[is = variable]; + B[is = variable]; + C[is = variable]; + + // add a new unique link to a concept + // given A, B, C + // and assuming A is not linked by B to C, + // makes A be linked by B to C. + (add-link-unique)[ + is = habit, + needs = A, needs = B, needs = C, + makes = (abc-linked)[is = link, link-source = A, link-type = B, link-target = C], + assumes = (abc-not-linked)[is = trueness, what = abc-linked, truth = false] + ]; - banana->link(is, fruit); - cout << banana << "-" << is << "-" << fruit << endl; + dumpconcept(add-link-unique); } |