+ao_poly
+ao_lisp_set(struct ao_lisp_cons *cons)
+{
+ ao_poly atom, val;
+ if (!check_argc(cons, 2, 2))
+ return AO_LISP_NIL;
+ if (!check_argt(cons, 0, AO_LISP_ATOM, 0))
+ return AO_LISP_NIL;
+
+ atom = cons->car;
+ val = ao_lisp_poly_cons(cons->cdr)->car;
+ if (ao_lisp_is_const(atom)) {
+ ao_lisp_exception |= AO_LISP_INVALID;
+ return AO_LISP_NIL;
+ }
+ ao_lisp_poly_atom(atom)->val = val;
+ return val;
+}
+
+ao_poly
+ao_lisp_setq(struct ao_lisp_cons *cons)
+{
+ struct ao_lisp_cons *expand = 0;
+ if (!check_argc(cons, 2, 2))
+ return AO_LISP_NIL;
+ expand = ao_lisp_cons_cons(_ao_lisp_atom_set,
+ ao_lisp_cons_cons(ao_lisp_cons_poly(ao_lisp_cons_cons(_ao_lisp_atom_quote,
+ ao_lisp_cons_cons(cons->car, NULL))),
+ ao_lisp_poly_cons(cons->cdr)));
+ return ao_lisp_cons_poly(expand);
+}
+