finish machine.lisp
--     fix some silly error
caused by not knowning the difference between set-cdr! in scheme and setf (cdr $val) in common lisp.
The return value is different!