How to write a recursive macro?

OK, here’s a simple modification of @jules’s code to impose hygiene.

macro or(args...)
    args_esc = esc.(args)
    length(args_esc) == 1 && return only(args_esc)
    quote
        if $(args_esc[1])
            true
        else
            @or $(args_esc[2:end]...)
        end
    end
end