#!/usr/local/bin/sbcl --script (defun *->helper (form forms git) (if (null forms) form (let* ((base (car (last forms))) (forms (reverse (cons form (butlast forms))))) (dolist (form forms base) (seth base `(let ((,git ,form)) ,base)))))) (defmacro -> (form &rest forms) (*->helper form forms (intern (symbol-name '#:it)))) (defun square (n) (* n n)) (defun add1 (n) (1+ n)) (princ (-> 5 (add1 it) (square it)))