Structure and Interpretation of Computer Programs - solutions using scala