Return Isn't Transparent

Howard Lovatt howard.lovatt at
Sat Jul 17 06:46:46 PDT 2010

A return statement isn't transparent. This is well articulated in
Principles of Programming Languages R. D. Tennent (I don't have a copy
handy - but I think page 56 is one such place). Consider:

int m() {
  return 42; // To be wrapped in a lambda

Then imagine that you could create a lambda that encapsulated the long
return and you called it:

int m() {
  { -> return 42; }.();
  // Oops error - must return value from m

Therefore arguments about transparency are moot in any language that
has a return statement. The solution to this problem Tennent proposed
was the normal Pascal solution of a dummy local for return values that
has a default value, in a Javanese like language with no return
following Tennent the original would be:

int m() {
  m = 42;

The encapsulated form would be:

int m() {
  { -> m = 42; }.();
  // No error since m has a default value, 0

  -- Howard.

More information about the lambda-dev mailing list