Not in Lisp. In Lisp IF, COND, ... are either special operators or macros which expand to more primitive special operators. They are not functions.
The syntax for COND is:
cond {clause}* => result*
clause::= (test-form form*)
For example: (cond ((> x 1) (print 'larger) 1)
((= x 1) (print 'equal) 1)
(t (print 'smaller)))
COND is not a function. It is a macro. In a function call all arguments would be evaluated. But COND does not work that way.COND has a list of clauses. During evaluation, the first clause is looked at. It's first subform then is evaluated, here (> x 1). If that is true, then the following subforms are evaluated left to right and the values of the last form is returned. If the first subform form was not evaluated to true, the evaluation goes to the next form and repeats the process on the subform.
* COND is not a function
* COND has a special syntax
* COND has a special evaluation rule
The same is the case for defining functions. In Lisp the operator to define a global function is called DEFUN. DEFUN is a macro, not a function. It has special syntax (for example the second element in a DEFUN form needs to be an unevaluated function name, which usually (I omit some detail) needs to be a symbol (which will not be evaluated)...
Again, DEFUN is not a function, it has special syntax and special semantics with side effects during compilation.
I wrote multiple times right about this difference between Rebol-s and Lisp-s. The main difference being that Lisps evaluate lists by default and you have to quote them to not be evaluated and Rebols don't evaluate blocks by default and you have to "do" them to evaluate them. That's why Rebol's can have if/loop/fn as ordinary functions and Lisps use Macros for them.
If in rebol would be more like (if (> x 1) '(print 'larger)) I think.
Thanks for making this clear ... it was a nice read.