[REBOL] More on expressions
From: joel::neely::fedex::com at: 1-Feb-2003 10:21
Inspired by the discussions of ANY and ALL, I thought I'd share this
little puzzle, prefaced with a tad of background.
Some languages are described as "imperative" or "procedural" because
the programmer is writing commands to be obeyed. PASCAL, COBOL,
FORTRAN, and (the way most published code appears) C come to mind.
Other languages are designated as "functional" because the programmer
is defining functions whose (side-effect-free) evaluation yields the
desired result. SCHEME, ML, and HASKELL come to mind.
I think of REBOL as a hybrid which I'll call "expressional" because
we write expressions to be evaluated, but often the (side-)effect
of those evaluations is the goal. For instance APPEND has both a
resulting value and an effect; sometimes we want one, or the other,
Thinking clearly about what our expressions can do for us is a very
stimulating way to explore the power of programming concepts. Here
is a little puzzle along that vein.
GIVEN: Three variables, A, B, and C which we'll assume have
been set to numeric values.
CHALLENGE: Write an expression whose value is the median of the
values. A trival (but time-consuming) solution is
second sort reduce [a b c]
since the median of a set of values is "the one in the
middle if they are in order".
CONSTRAINT: Just to make it iteresting ;-) the expression MAY NOT
use any of these REBOL words/functions:
sort if either first second third
nor any path expressions.
The trick, of course, is to find an expression that eliminates the
need for any explicit "decision" or "selection" activity.