Warning: session_start(): open(/var/lib/php/sessions/sess_hr90o3t5esdkfa76kguk7ktrkl, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
sbool killDB = false;
static int defaultMax = 1000; // steps to run
sS facts = [[
We want to find out what is more correct than what.
"not correct" is a candidate.
"maybe quite correct" is a candidate.
"really really correct" is a candidate.
"buggy" is a candidate.
"total garbage" is a candidate.
"incorrect" is a candidate.
"almost correct" is a candidate.
"absolutely correct" is a candidate.
"very correct" is a candidate.
[nfhwfngqkgoqtngs] (no question) and (X is a candidate.) and (Y is a candidate.) and (X <> Y) and (There is no answer to (Is X # more correct than Y?).) => (Ask (Is X # more correct than Y?))
// Note: The # is just a filler for parsing, we'll get rid of that in time. Also, you will be able to write stuff without brackets of course.
Always apply rule nfhwfngqkgoqtngs.
// Interpret answers
[iprphzfmwithvdfb] (The answer to (Is X # Y than Z?) is (yes).) => (X is Y than Z.)
Always apply rule iprphzfmwithvdfb.
[udsmtmbiedmxtxci] (The answer to (Is X # Y than Z?) is (no).) => (Z is Y than X.)
Always apply rule udsmtmbiedmxtxci.
// Transitivity!
[pglcuchrtxdmlfvh] (X is AA than Y.) and (Y is AA than Z.) => (X is AA than Z.)
Always apply rule pglcuchrtxdmlfvh.
[ijziyiplzanfwvqx] (Ask (X)) and (The answer to (X) is (Y).) => (Remove (Ask (X)))
Always apply rule ijziyiplzanfwvqx.
no question :- There is no statement with operator fxxathfdlfzgmaov.
// Just a pretty-printing statement
omrvwjslbkffaxoj hszwyiyetuuhcfwz acwmbrxqrlaplyqu
]];
sS concepts = [[
ufzlismnlhvbjqoj - (X) and (Y) and (Z) and (AA) and (AB) => (AC)
phkdhqkhzytkwdpb - (X) and (Y) and (Z) and (AA) => (AB)
txsysipmstxmjhmi - (X) and (Y) => (Z)
wziyypnyayfphdxs - (X) => (Y)
xikyminwmeahxiws - There is no answer to (X).
pxavyqesoqyqbipb - The answer to (X) is (Y).
cdzttdbxadjreorm - We want to find out what is X than what.
ogqdgzepqbunuuht - X is a candidate.
hszwyiyetuuhcfwz - Is X # Y than Z?
acwmbrxqrlaplyqu - Is "X" Y than "Z"?
qgxjwufpfzkqvmxb - X is Y than Z.
ylvaoplzguvhegka - X is not Y than Z.
zxucpbfzmexohoiv - It is not true that (X).
buahjsodljsaxvaq - X <> Y
fxxathfdlfzgmaov - Ask (X)
chjllkocfhtwcgoj - Remove (X)
mzdvauejerzefagk - I don't know if (X)
omrvwjslbkffaxoj - Format operator X as template Y.
houyieutcmfdvgmz - Execute (X)
hzmtabxcmkrtffgh - Apply X
zvknqzxlrmuobnzx - Always apply rule X.
plprefzezbluijrw - no question
jexyjrtbtilmsmfw - setQuestion(X)
cuutddpitkuswthu - While (X) => (Y)
sicrogpdrtkiptun - X :- Y
zhoulgsatpswstfa - There is no statement with operator X.
ltyqczktgtjxrtlf - more correct
zveeggveflecjwvr - total garbage
wolealpbqkkqkvqq - not correct
tomkbzlqlpeiekvu - maybe quite correct
dnxyynujqydgcxcd - really really correct
trajdgvqepyhsumb - buggy
lwikikhkydtewtjc - incorrect
muxjpepnjiyjghwj - almost correct
wtnpjovqqiswlyay - absolutely correct
bmliokweerblfxco - very correct
]];
concept MyTruth {
S globalID;
Lisp term;
S madeByRule;
*() {}
*(S *globalID, Lisp *term, S *madeByRule) { change(); }
}
static Map> evaluators = new HashMap;
static Lisp currentQuestion;
p-tt {
centerHigherConsole();
substance();
// customize parsing and printing
set hygienicParse1_unquote;
set hygienicParse1_debug;
set englishToConceptLanguage_simple_noXYZ;
set formatXYZ_quotedVars;
// load predefined & learned statements
useConceptsAndStatements(concepts, facts);
if (killDB) deleteDB();
db();
for (MyTruth t)
lispAddLocalTruth(t.globalID, t.term);
printLispStatements();
// create evaluators
// X <> Y
evaluators.put("buahjsodljsaxvaq", new F1() {
Bool get(Lisp l) {
ret l.size() == 2 && neq(l.get(0), l.get(1));
}
});
// I don't know if (X)
evaluators.put("mzdvauejerzefagk", new F1() {
Bool get(Lisp l) {
ret l.size() == 1 && notKnownIf(l.get(0));
}
});
// There is no statement with operator X.
evaluators.put("zhoulgsatpswstfa", new F1() {
Bool get(Lisp l) {
ret l.size() == 1 && !hasTruthWithHead(l.raw(0));
}
});
// There is no answer to (X).
evaluators.put("xikyminwmeahxiws", new F1() {
Bool get(Lisp l) {
bool ok = l.size() == 1 && null == lispForward("pxavyqesoqyqbipb", l.get(0));
print("Checking for answer to " + l.get(0) + " => " + ok);
ret ok;
}
});
// :- rules
for (final Lisp rule : lispTruth2("sicrogpdrtkiptun"))
evaluators.put(rule.raw(0), new F1() {
Bool get(Lisp l) {
ret l.isLeaf() && matchCondition(rule.get(1));
}
});
bot();
//applyRule("nfhwfngqkgoqtngs");
//applyAlwaysRules();
//runInstruction("yrgkrfrcwubpevzu");
}
answer {
if "lisp" { printLispStatements(); ret "ok"; }
if "print" { printPrettyFacts(); ret "ok"; }
if "rule *" { applyRule($1); ret "ok"; }
if "step" { applyAlwaysRules_step(); ret "ok"; }
if "run" { applyAlwaysRules(defaultMax); ret "ok"; }
if "force" { force(defaultMax); ret "ok"; }
}
svoid showQuestion() {
L l = lispTruth1("fxxathfdlfzgmaov");
if (l(l) > 1) warn("Multiple open questions");
if (nempty(l)) {
final Lisp q = first(l).get(0);
if (eq(currentQuestion, q)) ret;
currentQuestion = q;
print("Question: " + q);
swing {
showControls2(
centerAndSouth(
withBottomMargin(jcenteredBoldLabel(lispToEnglish_prettier(q))),
jcenteredline(answerButton("Yes"), answerButton("No"), answerButton("I don't know")));
}
}
}
svoid runInstruction(S instructionID) {
Lisp rule = getLispTruth(instructionID);
if (rule == null) { print("Instruction not found: " + instructionID); ret; }
runInstruction(rule);
}
svoid runInstruction(Lisp rule) {
print("runInstruction: " + rule);
if (rule.is("hzmtabxcmkrtffgh", 1)) // Apply X
applyRule(rule.raw(0));
else if (rule.is("cuutddpitkuswthu", 2)) { // While (X) => (Y)
while (ping() && matchCondition(rule.get(0)))
runInstruction(rule.get(1));
} /*else if (rule.is("houyieutcmfdvgmz", 1))
execute(rule.get(0));
/*else if (rule.is("jexyjrtbtilmsmfw", 1)) // setQuestion(X)
setQuestion(rule.get(0));*/
else print("Unknown instruction type: " + rule);
}
svoid applyRule(S ruleID) {
// process the rule
Lisp rule = getLispTruth(ruleID);
if (rule == null) { print("Rule not found: " + ruleID); ret; }
//print("Applying rule " + ruleID);
print_setPrefixForThread(ruleID + "> ");
try {
L conditions = dropLast(rule.args);
Lisp out = last(rule.args);
//for (Lisp cond : conditions) print("Condition: " + cond);
new Map matches;
int n = matchConditions_random(conditions, matches);
if (n == -1) {
print("Yo! " + struct(matches));
out = lispReplaceVars(out, matches);
if (lispTrue(out))
print("Already had: " + out);
else {
print("Defining: " + lispToEnglish_prettier(out));
emit(out, ruleID);
}
} else
print("Only " + n + " of " + n(conditions, "condition") + " met");
} finally {
print_setPrefixForThread("");
}
}
// if match: returns -1
// if no match: returns how many conditions were met
static int matchConditions_random(L conditions, Map m) {
if (empty(conditions)) ret -1;
Lisp condition = first(conditions);
Map m2 = cloneMap(m);
if (!matchCondition_random(condition, m2)) {
print("Condition failed: " + condition);
ret 0;
}
print("Condition matched, " + struct(m2));
int n = matchConditions_random(dropFirst(conditions), m2);
if (n == -1) {
m.putAll(m2);
ret -1;
}
ret n+1; // failure
}
sbool matchCondition(Lisp condition) {
print("matchCondition " + condition);
O evaluator = evaluators.get(condition.head);
if (evaluator != null)
ret isTrue(callF(evaluator, condition));
ret lispTrue(condition);
}
static bool matchCondition_random(Lisp condition, Map m) {
L facts = lispTruth();
O evaluator = evaluators.get(condition.head);
if (evaluator != null)
ret isTrue(callF(evaluator, lispReplaceVars(condition, m)));
L