sclass MultiSpaceReasoning1 { // spaces & names sS objectiveSpace = 'objective, computerSpace = 'computer, userSpace = 'user; S userName = "usery", computerName = "computery"; int stepLimit = 1000; new MultiMap rulesForSpace; bool debug; Set rewriteInSpace(S space, Collection inputs) { ret applyAttractors_es(rulesForSpace.get(space), inputs, max := stepLimit); } Collection reason_inputToAnswer(S input) { ret reason_inputToAnswer(ll(ext(input))); } Collection reason_inputToAnswer(Collection inputs) { // first, rewrite in user space Set outputs = rewriteInSpace(userSpace, inputs); if (debug) pnlIndent("User space > ", outputs); // translate to objective space Collection outputs2 = ai_spaceToSpace_es(userSpace, objectiveSpace, outputs, +computerName, +userName); if (debug) pnlIndent("Translated to objective space > ", outputs2); // rewrite in objective space Collection outputs3 = rewriteInSpace(objectiveSpace, outputs2); if (debug) pnlIndent("Objective space > ", outputs3); // translate to computer space Collection outputs4 = ai_spaceToSpace_es(objectiveSpace, computerSpace, outputs3, +computerName, +userName); if (debug) pnlIndent("Bot space > ", outputs4); ret outputs4; } void addRules(MultiMap mm) { rulesForSpace.putAll((MultiMap) mm); } }