Proper use of reduce, nested loops
First, (not (null x)) is not very idiomatic; just use x instead.

Next, you are not handling all the cased in your cond (and you obviously mean (null arc-2) and not (null (arc-2))). If fact, I would drop the let and use nested ifs instead.

Finally, to answer your original question: of course loop can do everything reduce can, but if your intent is clearer with the latter, use it!

EDIT: unless is more idiomatic than when (null ...).