Some nitpicks - (x . y . zs) should be (x y . zs) - note that this was buggy at the time you wrote your post, but I have just posted a bugfix on your arc-wiki.git. Also, the builtin pair uses (list (list (car xs))) for the ((x)) case.
Also, the definition of factorial above will crash on (factorial -1) but then so does Haskell if you defined it like that ^^.