guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Using '-1' in a method named '*'


From: Alejandro Sanchez
Subject: Re: Using '-1' in a method named '*'
Date: Mon, 27 Feb 2017 23:26:35 +0100

> It could be that this is totally the wrong thing.  Is (* x 2) -> (+ x x)
> a valid transformation if you don't know the type of x?  I don't know.
Only if both addition and multiplication are defined for the type. In a 
group-like structure there is only one operation, while ring-like structures 
have two (usually called addition and multiplication). All the numeric types 
included in Guile are ring-like, so that works fine. Outside of that all bets 
are off. What would transforming (* -1 v) to (- 0 v) mean? You cannot add or 
subtract scalars and vectors, unless you were to embed both into a field where 
they are both defined, like the quaternion field. Or you would have to use the 
zero-vector as the value of 0.

> WDYT?  We could remove this transformation, or only apply it when type
> inference has run.
I don’t know. I guess there must be a good reason why Guile does these 
transformations, all I know is that they are not guaranteed to make sense 
outside Guile’s numeric types. Maybe it was my mistake for trying to make 
methods called * or + instead of making up my own names. The reason why I used 
those names (aside from simplicity) is that in those case it does make sense to 
mix multiplication of different types. I can write (* 2 3 q 4 5) where q is a 
quaternion and it will apply the correct operation to all operands, just as if 
I had written it on paper. It also allows me to use any type that implements * 
as the component of a dual number and have it work.

If you can stop Guile from re-writing code when it is not certain that the 
rewritten code makes sense it would be great. Pretty much every test that I 
have written over the past few days was broken even though my math was correct.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]