カンマ演算子の活用

カンマ演算子悪用活用

#define FOREACH_LIST(list, kar, kdr, syntax) \
        for (Object *l = list, *kdr = ((Cons*)l)->getCdr(), *kar = ((Cons*)l)->getCar(); \
                 ; kdr->isCons() ? (l = kdr, kdr = ((Cons*)l)->getCdr(), kar = ((Cons*)l)->getCar()):\
 (RAISE_ERROR(list->lineno(), "syntax-error: malformed %s", syntax), kar = NULL))

こう使います。

FOREACH_LIST(cdr, kar, kdr, "and")
{
    Object* o = Kernel::eval(kar, env);
    if (o->isFalse())
    {
        return SCM_FALSE;
    }
    else if (kdr->isNil())
    {
        return o;
    }
}

もちろん良い子は真似してはいけません。