From: Alain Grumbach
Subject: typical pure programs
Date: 
Message-ID: <852ncn$n7q$1@menuisier.enst.fr>
My question concerned lisp beginners.
I agree that the right answer is the Y-combinator.
Below is a quite different solution, a fanciful one.

We need two general auxiliary functions : apply-bis, rplac.
(e : lambda expression   ,   a : apply argument list)
The core of the factorial program is the s-expression beginning with 
apply-bis, ending with the argument 5.


(defun apply-bis (e a)  (apply (rplac e e) a))

; rplac replaces the "here" atom by a pointer to e (the lambda expression)

(defun rplac (e f)
       (cond ((atom e) nil)
             ((equal (car e) 'here) (rplaca e f) f)
             (t (or (rplac (car e) f) (rplac (cdr e) f)))))

(apply-bis '(lambda (x)(cond ((= x 1) 1)
                             (t (* x (apply 'here (list (- x 1))))))) 
	   (list 5))

That's it.