We'd make a small preamble to define new names for things like DEFUN, Lisp's operator to define new functions. No F's needed to do that either. We can do this by taking advantage of read-time evaluation.
First we get references to the symbols DEFMACRO and DEFUN.
(eval-when (:compile-toplevel :load-toplevel :execute)
(setq de*un (intern (map 'string 'code-char '(68 69 70 85 78))))
(setq de*macro (intern (map 'string 'code-char '(68 69 70 77 65 67 82 79)))))
This technique can be used to access any symbol in Common Lisp that may have an F in it.Now, to make life-without-F easy, we define new names for DEFMACRO (mac) and DEFUN (proc) without actually lexically referring to the F-infected symbols:
(#.de*macro mac (&body r) `(,de*macro ,@r))
(mac proc (&body r) `(,de*un ,@r))
Now we can define functions with PROC instead of DEFUN. Here's the Fibonacci function, with the F censored out. Note that we don't need IF since Lisp has the superior COND: (proc *ib (n)
(cond
((= 0 n) 0)
((= 1 n) 1)
(t (+ (*ib (- n 1)) (*ib (- n 2))))))
Test it: > (print (*ib 10))
55