Can an unneeded value be void? An APL perspective
John Gilmore
gnu at hoptoad.uucp
Tue Aug 12 20:00:57 AEST 1986
This whole discussion of e? void1(): void2(); reminds me of a similar
circumstance in the APL world many years ago.
People were just getting around to defining a new function "execute",
which would take a character vector containing an expression and
would run it as an APL statement. The question was: suppose it
didn't return a value?
The eventual answer was that if the expression didn't return a value,
then "execute" didn't return a value either. If somebody wanted
that value (e.g. to assign to a variable) then a "VALUE ERROR"
would occur at that point. If the execute was a "leftmost execute"
(execute was the leftmost function on the line) then it is a
complete statement and no value is required.
In the context of C's ? operator, you can think of it similarly.
'?' can be allowed to return a void value in some circumstances.
If you said
a = e? v1(): v2();
then you'd get an error -- but not "inside" the ?. The error
arises in assignment of ?'s result, just as if you had said:
a = v1();
This argument only seems to come up with flow-of-control operators
which can be embedded in expressions. Traditional flow control
*statements* don't occur in expressions so nobody notices. What
does LISP or ALGOL 68 do for this stuff?]
[I support the use of ? with voids but this is more to explain
how the APL world saw a similar problem, than to argue for either way.]
--
John Gilmore {sun,ptsfa,lll-crg,ihnp4}!hoptoad!gnu jgilmore at lll-crg.arpa
May the Source be with you!
More information about the Comp.lang.c
mailing list