!7 cmodule IWantYouToBePrelude > DynPrintLog { // the spaces sS objectiveSpace = 'objective, computerSpace = 'computery, userSpace = 'usery; transient S userName = "usery", computerName = "computery"; transient WordTokRule rule_iWantYouToBe = wordTokReplacerRule( "I want you to be my assistant", "assistant", "I want that {you are my assistant}"); transient MultiMap rulesForSpace = litmultimap( userSpace, ll(rule_iWantYouToBe) ); Collection applyRules(L rules, S s) { ret concatListsToCISet(map(rules, rule -> rule.matches(s) ? getStringEmits(rule) : null ); } Set rewriteInSpace(S space, S input) { Set out = linkedCISet(); L rules = rulesForSpace.get(space); functionReturningList_transitiveHull_ciSet(func(S s) -> Collection { applyRules(rules, s) }, input, seen := out); ret out; } S spaceToSpace(S space1, S space2, S input) { if (eq(space1, userSpace) && eq(space2, objectiveSpace)) ret switcheroo_youToName(computerName, switcheroo_iToName(userName, input)); if (eq(space1, objectiveSpace) && eq(space2, computerSpace)) ret switcheroo_nameToYou(userName, switcheroo_nameToI(computerName, input)); ret input; } start-thread { S input = "I want you to be my mother"; Set outputs = rewriteInSpace(userSpace, input); pnl(outputs); printDone(); } }