Warning: session_start(): open(/var/lib/php/sessions/sess_17ad7lnol8lvne8fk0rpq626b7, 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
!759
static S code = [=[
if [User < says < what < is < a < XY]
and [XY < can < be < split < in < 2 < as < X < and < Y]
// and [X < is < an < adjective]
then [say < maybe < [a > XY] is < [a > Y] < that < is < [very > X]]
]=];
static boolean yo(Lisp snl, Map m) {
new HashMap m2;
if (snlMatch("XY < can < be < split < in < 2 < as < X < and < Y", snl, m2)) {
//print("m2: " + structure (m2));
S XY = snlGetString(m2, "XY");
L l = codeTokensOnly(javaTok(XY));
print ("XY: " + XY + ", " + l);
if (l(l) != 2) ret false;
putMatchX(m, m2, "X", l.get(0));
putMatchX(m, m2, "Y", l.get(1));
ret true;
}
if (snlMatch("X < is < an < adjective", snl, m2)) {
S X = snlGetString(m2, "X");
ret isYes(askSelf("is * an adjective", X));
}
ret false;
}
static S answer(S s) {
s = or((S) callOpt/*Safe*/(getBot ("#1002700"), "naiveSNL", s), s);
Lisp in = snlToTree(s);
new HashMap m;
for (S cs : toLinesFullTrim(code)) {
Lisp code = snlToTree(cs);
if (code.isic("if *", "and *")) {
Lisp a = code.get(0);
Lisp b = snlApply(a, m);
boolean OK = false;
S x;
if (snlMatchX(b, x = "user < says < [ " + s + " ]", m)) OK = true;
print("ok: " + OK + ", x: " + x + ", b: " + b + ", " + snlToTree(x) + "m: " + structure (m));
pcall {
if (!OK && yo(b, m)) { // todo: rename vars
OK = true;
}
}
print("ok: " + OK);
if (!OK) ret null;
print ("Ok " + snlFromTree(b));
} else if (code.isic("then *")) {
Lisp a = code.get(0);
if (a.isA("<")) { // say
Lisp b = a.get (1);
print ("m: " + structure (m) + ", b: " + structure (b));
ret snlToText(snlApply(b, m));
}
}
}
null;
}