Returning from functions in Kap
Until now, the only way to return a value from a Kap function was to have it be returned as the return value from the last expression in a function.
Well, there are also exceptions, but those a bit special and should, well, exceptions.
But in some cases it's useful to return a value early. Essentially what return
is in languages like C, Java, etc.
So, I did the obvious and implemented return just like in those languages, except that it's called →
to align with APL.
This example should be self-describing:
∇ foo (x) {
if (x≡0) {
→10
} else {
→20
}
}
However, since →
is a regular function, it can also be called dyadically. So if the left argument is true, the right argument will be returned from the calling function. If it is false, then the function will return normally (returning the right argument). Confused yet? The word “return” was used in the description of both behaviours: to return from the current function, and returning a value from the return function itself.
Perhaps this example will make it more clear:
∇ foo (x) {
(x≡0) → 10
20
}
Future work: Returning from different scopes
Common Lisp has a function RETURN-FROM
that allows the for returning from an outer function, for example when using nested functions. It also provides a BLOCK
form that creates a named scope that can be explicitly returned to.
This is a very useful feature, and implementing it in KAP would not be particularly complicated.