(defmacro llist
"Constructs a sequence from 2 or more arguments, with the last argument as the
tail. The tail is improper if the last argument is a logic variable."
([f s] `(lcons ~f ~s))
([f s & rest] `(lcons ~f (llist ~s ~@rest))))