#!/usr/local/bin/sbcl --script (defmacro -> (form . forms) (if (null forms) form `(-> ,(nsubst form 'it (car forms)) ,@(cdr forms)))) (defun join-string (lst sep) (-> (reduce (lambda (acc s) (list* s "a" acc)) (cdr x) :initial-value (list (car x))) (nreverse it) (apply #'concatenate 'string it))) (let ((x (list "a" "b" "c" "d"))) (print (join-string x " ")))