I was thinking about something like this.
f(x):= block(if x=1 then void else 2)$
This is sort of like a subroutine and sort of like a function. It can be
either which is consistent with the general behavior of Maxima which allows
mixing things up. f(x) would be a weakly typed function or subroutine
depending on what it wants to be at the time or depending on the inputs. I
have wanted the pw() and pwsimp() functions to have this flexibility but I
am frustrated with that since there is no way to do it.
Rich
----- Original Message -----
From: "Richard Fateman" <fateman at cs.berkeley.edu>
To: "Richard Hennessy" <rich.hennessy at verizon.net>
Sent: Monday, October 05, 2009 10:48 AM
Subject: Re: [Maxima] Void in Maxima
> In lisp, a function can return "no values" or one (the usual case) or
> several.
> This is done with the (values... ) construction.
>
> However, there is another role played by "returning", which is to alter
> the flow of control from "do the next statement in line" to
> "do the next statement after the call to the function". If you want to
> change the latter, you need to use something like
> goto, catch/throw, or errorset/error.
>
> Having a situation in which something is not printed seems like a "throw"
> to the top-level loop.
>
> RJF
> Richard Hennessy wrote:
>> Maybe the idea is too hard to implement as this point. If there was an
>> way to do it I without so much effort it would have been a good idea.
>>
>> Rich
>>
>> ----- Original Message ----- From: "Richard Fateman"
>> <fateman at cs.berkeley.edu>
>> To: "Barton Willis" <willisb at unk.edu>
>> Cc: "Richard Hennessy" <rich.hennessy at verizon.net>; "Maxima List"
>> <maxima at math.utexas.edu>
>> Sent: Monday, October 05, 2009 10:04 AM
>> Subject: Re: [Maxima] Void in Maxima
>>
>>
>>> what may not be clear to everyone in this discussion is that adding a
>>> new object with special properties like the ones suggested for "void"
>>> requires an examination of many places in Maxima.
>>> For example, the instructions for simplifying "void + x" would not be
>>> encoded in the object "void". These are encoded on the property list of
>>> the object "+".
>>> Thus to make "void", or for that matter, inf, und, ind, intervals, etc
>>> work, one has to modify +, *, sin, cos, exp, log, integrate, diff, etc
>>> etc etc.
>>>
>>> Now maybe this organization is wrong, but that's the way it is.
>>> (arguing about whether cos(void) should send a "void" message to "cos"
>>> or a "cos" method to "void" does not
>>> offer a solution to "void+infinity+interval(-1,1)")
>>>
>>
>