This page is part of the web mail archives of SRFI 77 from before July 7th, 2015. The new archives for SRFI 77 contain all messages, not just those from before July 7th, 2015.
John.Cowan wrote:
Per Bothner scripsit:It's a choice bwteeen: (define (square-sum (x :: <flonum>) (y :: <flonum>)) (+ (* x x) (* y y))) or: (define (square-sum x y) (fl+ (fl* x x) (fl* y))) If you have type specifiers, you don't need the separate operation names. And type specifiers are much to be preferred. After all if Scheme is a teaching language, we want to encourage our students to use type declarations, I think.Unless you want to add overloading to Scheme, you have just pushed off the problem from the predefined names to the user-defined names, as the above will need to be complemented by a version of square-sum that does fixnums.
Huh? You're comparing apples and oranges. The srfi-77 version: (define (square-sum x y) (fl+ (fl* x x) (fl* y))) doesn't do fixnums either. Perhaps I misunderstand your point. Yes, another advantage of type declarations is that one *can* (somewhat more readily) add overloading (as Kawa and some other Scheme dialects do). But that's not what I'm arguing for. My argument is that: * Adding optional type declarations to Scheme is desirable for a number of reasons, not just performance - or overloading. * Once one has optional type declarations, the need for type-specific arithmetic primitives is reduced or eliminated. * As a matter of style, I believe type declarations are preferable to type-specific arithmetic primitives, especially since Type Declarations are Good in themselves. -- --Per Bothner per@xxxxxxxxxxx http://per.bothner.com/