summaryrefslogtreecommitdiff
path: root/starts/meaning-vm/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'starts/meaning-vm/main.cpp')
-rw-r--r--starts/meaning-vm/main.cpp43
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);
}