(defun word-possible-p (word blocks) (cond ((= (length word) 0) t) ((null blocks) nil) (t (let* ((c (aref word 0)) (bs (remove-if-not #'(lambda (b) (find c b :test #'char-equal)) blocks))) (some #'identity (loop for b in bs collect (word-possible-p (subseq word 1) (remove b blocks))))))))