(defvar zero (lambda (f x) x)) (defvar one (lambda (f x) (funcall f x))) (defvar false (lambda (x y) y)) (defvar true (lambda (x y) x)) (defvar is-zero (lambda (x) (funcall x (lambda (y) false) true))) (defvar fif (lambda (bool yes no) (funcall (funcall bool yes no)))) ;; CL-USER> (funcall fif ;; (funcall is-zero zero) ;; (constantly 'yes) ;; (constantly 'no)) ;; YES ;; CL-USER> (funcall fif ;; (funcall is-zero one) ;; (constantly 'yes) ;; (constantly 'no)) ;; NO