[REBOL] Can I define an anti function?
From: lmecir::mbox::vol::cz at: 23-Feb-2004 20:55
Doc draw my attention to the %subject%, which was discussed at
comp.lang.scheme. The thread started with:
{Suppose f is a function returning a boolean.Is there a way of defining
a function anti, which, when given f, returns "not f"?}
the discussion continued:
{
> > > > (define (anti f)
> > > > (lambda args
> > > > (not (apply f args))))
> > Why is this objectionable? It provides the ability to do something that
> > hardly any other languages can do.
}
{
> This last statement is a bit too strong, even in Python you can do
Sheesh, I clearly said "hardly any other languages", not "no other
languages". I stand by my original statement -- most programming
languages can't do this. Python and Scheme are some of the few that
can. C can do it for functions of a specific arity, but can't
generalize (e.g. you can write anti_f1 for 1-argument functions, anti_f2
for 2-argument functions, etc.)
}
{
I expect most general-purpose dynamically typed languages can, at least
those using a conventional syntax. Perl can, Ruby can (but its treatment
of higher orded functions is weird), Dylan can, and probably all Lisp
variants too.
Smalltalk can't because variable arity doesn't make sense: the method name
implies the arity syntactically. Rebol probably can't: here the arity of a
function tells how many words to parse as its argument and where the next
function call begins. Forth and Postscript can't.
Among statically typed languages C# can, and it's the only one I know.
}
Question: Is the guess about Rebol correct? (I will post my answer later)
-L