Second, redefining the F function will update its association (or binding) to the F symbol, but the previous function will still be available if it has been referenced somewhere before the update. For example:
(setf (symbol-function 'foo) #'1+) (let ((old-foo #'foo)) (setf (symbol-function 'foo) #'1-) (funcall old-foo 42))
It still return 41 on sbcl
It still return 41 on sbcl