!7 // English: // x is contained in a mech list whose name contains "noun" => x is a noun concept Result { int count; S output; MapSO vars; S result; // yes or no } cmodule FindingNouns > DynCRUD { S freeText; transient new LPair suggestionsAndVars; transient JButton btnYes, btnNo; transient Pair current; // proposal and variables used start-thread { db(); LS emits = getEmits_tee(r { javaxSimple(); }); MapSO lastVars = null; for (S s : emits) { MapSO vars = parseLineFromEmitVariables(s); if (vars != null) lastVars = vars; else suggestionsAndVars.add(pair(s, lastVars)); } runByUser(); } visual jtabs("Dialog" := centerAndSouthWithMargins(dm_printLogView(), westAndCenterWithMargin( jline( btnYes = jbutton("Yes", rThread yes), btnNo = jbutton("No", rThread no), jlabel("or free text:")), onEnter(dm_textField freeText(), rThread { storeResult(freeText) }))), "Results" := super); void runByUser { current = random(suggestionsAndVars); if (current == null) ret; printWithPrecedingNL(current.a); print("Correct?"); enableButtons(btnYes, btnNo); } void yes { storeResult("yes"); } void no { storeResult("no"); } void storeResult(S result) enter { if (current == null) ret; print("Storing result: " + result); Result r = uniq(Result, output := current.a, vars := current.b, +result); cset(r, count := r.count+1); disableButtons(btnYes, btnNo); //sleepSeconds(1); runByUser(); } void javaxSimple() { for (S listName : mechListNames()) if (cic(listName, "noun")) for (S s : mL(listName)) { emitVariables(+listName, +s); emit(quote(s) + " is a noun"); } } }