1) a lambda checks the number of arguments passed to it, while a proc does not (lambda will throw an error if you pass it the wrong number of arguments, whereas a proc will ignore unexpected arguments and assign nil to any that are missing)
2) when a lambda returns, it passes control back to the calling method; when a proc returns, it does so immediately, without going back to the calling method. (so additional steps on proc may get overwritten by the proc whereas the lambda itself may get overwritten by further steps in the method)