REDUCE

9.2 Support Functions for Eval and Apply

(evlis U:any-list): any-list expr
Evlis evaluates each element of U The list of results is returned.
    (de evlis (p)  
      (if (not (pairp p))  
        ()  
        (cons (eval (first u))  
              (evlis (rest u)))))

(idapply FN:id U:any-list): any expr
Applies the function referenced by FN to the argument list U. An equivalent form would be (apply FN U). The use of idapply is more efficient. If FN is not an id it is an error and the message
    ⋆⋆⋆⋆⋆ Ill-formed function expression

is printed.

(codeapply FN:code-pointer U:any-list): any expr
The body of compiled function referenced by FN is executed with arguments in U.

(codeevalapply FN:code-pointer U:any-list): any expr
(codeevalapply FN U) is essentially (codeapply FN (evlis U)). The difference between the two is that the first is more efficient than the second.

(evprogn U:form-list): any expr
The forms in U are evaluated in a left to right order. The value of the last is returned. This function is used in situations where an application of progn is implied. For example, the definition of many functions consists of a sequence of expressions. Each expression is evaluated and the value of the last is returned, without having to wrap the definition inside a progn.
    (de evprogn (u)  
      (if (pairp u)  
        (progn (while (pairp (cdr u))  
                 (eval (car u))  
                 (setq u (cdr u)))  
               (eval (car u)))  
        nil))