core.logic has a function lcons to model these improper-tail cons cells, I've only used it when translating the Reasoned Schemer exercises.
lcons
also llist
llist