(define (op a b) (cond ((eq? a "double") "double") ((eq? a "float" ) (cond ((eq? b "double") "double") ((eq? b "float" ) "float") ((eq? b "int" ) "float")) ((eq? a "int" ) (cond ((eq? b "double") "double") ((eq? b "float" ) "float") ((eq? b "int" ) "int")))))) (fold op "int" (list "int" "float" "double"))