(defvar age-name '((27 Jonah) (18 Alan) (28 Glory) (18 Popeye) (28 Alan))) (defvar nemesis-name '((Jonah Whales) (Jonah Spiders) (Alan Ghosts) (Alan Zombies) (Glory Buffy))) (defun hash-join (left left-key right right-key) (let ((join-hash [group-by left-key left])) ;; hash phase (append-each ((r-entry right)) ;; join phase (collect-each ((l-entry [join-hash [right-key r-entry]])) ^(,l-entry ,r-entry))))) (format t "~s\n" [hash-join age-name second nemesis-name first])