- basic.Defun ("set", set_value, 2, 2, false);
- basic.Defun ("=", set_value, 2, 2, false);
- basic.Defun ("and", and, 1, -1, false);
- basic.Defun ("&&", and, 1, -1, false);
- basic.Defun ("or", or, 1, -1, false);
- basic.Defun ("||", or, 1, -1, false);
- basic.Defun ("not", not, 1, 1, false);
- basic.Defun ("!", not, 1, 1, false);
- basic.Defun ("add", add, 2, -1, false);
- basic.Defun ("+", add, 2, -1, false);
- basic.Defun ("mul", mul, 2, -1, false);
- basic.Defun ("*", mul, 2, -1, false);
- basic.Defun ("sub", sub, 1, -1, false);
- basic.Defun ("-", sub, 1, -1, false);
- basic.Defun ("div", div, 2, -1, false);
- basic.Defun ("/", div, 2, -1, false);
- basic.Defun ("mod", mod, 2, 2, false);
- basic.Defun ("%", mod, 2, 2, false);
- basic.Defun ("logior", logior, 2, -1, false);
- basic.Defun ("|", logior, 2, -1, false);
- basic.Defun ("logand", logand, 2, -1, false);
- basic.Defun ("&", logand, 2, -1, false);
- basic.Defun ("add-set", add_set, 2, -1, true);
- basic.Defun ("+=", add_set, 2, -1, true);
- basic.Defun ("mul-set", mul_set, 2, -1, true);
- basic.Defun ("*=", mul_set, 2, -1, true);
- basic.Defun ("sub-set", sub_set, 2, -1, true);
- basic.Defun ("-=", sub_set, 2, -1, true);
- basic.Defun ("div-set", div_set, 2, -1, true);
- basic.Defun ("/=", div_set, 2, -1, true);
- basic.Defun ("mod-set", mod_set, 2, 2, true);
- basic.Defun ("%=", mod_set, 2, 2, true);
- basic.Defun ("logior-set", logior_set, 2, -1, true);
- basic.Defun ("|=", logior_set, 2, -1, true);
- basic.Defun ("logand-set", logand_set, 2, -1, true);
- basic.Defun ("&=", logand_set, 2, -1, true);
- basic.Defun ("lsh", lsh, 2, 2, false);
- basic.Defun ("<<", lsh, 2, 2, false);
- basic.Defun ("rsh", rsh, 2, 2, false);
- basic.Defun (">>", rsh, 2, 2, false);
- basic.Defun ("lsh-set", lsh_set, 2, 2, true);
- basic.Defun ("<<=", lsh_set, 2, 2, true);
- basic.Defun ("rsh-set", rsh_set, 2, 2, true);
- basic.Defun (">>=", rsh_set, 2, 2, true);
- basic.Defun ("eq", eq, 2, -1, false);
- basic.Defun ("==", eq, 2, -1, false);
- basic.Defun ("noteq", noteq, 2, 2, false);
- basic.Defun ("!=", noteq, 2, 2, false);
- basic.Defun ("lt", less_than, 2, -1, false);
- basic.Defun ("<", less_than, 2, -1, false);
- basic.Defun ("le", less_eq, 2, -1, false);
- basic.Defun ("<=", less_eq, 2, -1, false);
- basic.Defun ("gt", greater_than, 2, -1, false);
- basic.Defun (">", greater_than, 2, -1, false);
- basic.Defun ("ge", greater_eq, 2, -1, false);
- basic.Defun (">=", greater_eq, 2, -1, false);
- basic.Defun ("eval", eval_clause, 1, 1, true);
- basic.Defun ("progn", progn_clause, 0, -1, true);
- basic.Defun ("expr", progn_clause, 0, -1, true);
- basic.Defun ("if", if_clause, 2, -1, true);
- basic.Defun ("when", when_clause, 1, -1, true);
- basic.Defun ("while", while_clause, 1, -1, true);
-
- Fprogn = basic.GetFunc (Nprogn);
+ basic.DefTerm ("funcall", Funcall.parser);
+
+ basic.DefSubr (Fset, "set", true, 1, 1, "=");
+ basic.DefSubr (Fnot, "not", false, 1, 1, "!");
+ basic.DefSubr (Fadd, "add", true, 1, -1, "+");
+ basic.DefSubr (Fmul, "mul", true, 1, -1, "*");
+ basic.DefSubr (Fsub, "sub", true, 1, -1, "-");
+ basic.DefSubr (Fdiv, "div", true, 1, -1, "/");
+ basic.DefSubr (Fmod, "mod", true, 1, 2, "%");
+ basic.DefSubr (Flogior, "logior", true, 1, -1, "|");
+ basic.DefSubr (Flogand, "logand", true, 1, -1, "&");
+ basic.DefSubr (Flsh, "lsh", true, 1, 2, "<<");
+ basic.DefSubr (Frsh, "rsh", true, 1, 2, ">>");
+ basic.DefSubr (Feq, "eq", false, 2, -1, "==");
+ basic.DefSubr (Fnoteq, "noteq", false, 2, 2, "!=");
+ basic.DefSubr (Flt, "lt", false, 2, -1, "<");
+ basic.DefSubr (Fle, "le", false, 2, -1, "<=");
+ basic.DefSubr (Fgt, "gt", false, 2, -1, ">");
+ basic.DefSubr (Fge, "ge", false, 2, -1, ">=");
+ basic.DefSubr (Fappend, "append", true, 0, -1);
+ basic.DefSubr (Fconcat, "concat", true, 0, -1);
+ basic.DefSubr (Fnth, "nth", false, 2, 2);
+ basic.DefSubr (Fcopy, "copy", false, 1, 1);
+ basic.DefSubr (Fins, "ins", true, 2, 2);
+ basic.DefSubr (Fdel, "del", true, 2, 2);
+ basic.DefSubr (Feval, "eval", false, 1, 1);
+ basic.DefSubr (Fbreak, "break", false, 0, 1);
+ basic.DefSubr (Freturn, "return", false, 0, 1);
+
+ basic.DefSpecial (Fand, "and", 1, -1, "&&");
+ basic.DefSpecial (For, "or", 1, -1, "||");
+ basic.DefSpecial (Fprogn, "progn", 0, -1, "expr");
+ basic.DefSpecial (Fif, "if", 2, 3);
+ basic.DefSpecial (Fwhen, "when", 1, -1);
+ basic.DefSpecial (Floop, "loop", 1, -1);
+ basic.DefSpecial (Fwhile, "while", 1, -1);
+ basic.DefSpecial (Fcond, "cond", 1, -1);
+ basic.DefSpecial (Fforeach, "foreach", 2, -1);
+ basic.DefSpecial (Fquote, "quote", 1, 1);
+ basic.DefSpecial (Ftype, "type", 1, 1);
+ basic.DefSpecial (Fcatch, "catch", 2, 2);
+ basic.DefSpecial (Fthrow, "throw", 1, 2);