(defun prefixp (llst rlst) (cond ((or (null llst) (null rlst)) T) ((equal (first llst) (first rlst)) (prefixp (cdr llst) (cdr rlst))) (t nil))) (defun start-with (s1 s2) (prefixp (map 'list #'identity s1) (map 'list #'identity s2))) (defun find-power-of-2 (n) (let ((start-n (floor (log n 2))) (ns (format nil "~a" n))) (loop for m = start-n then (1+ m) for p = (expt 2 m) if (start-with (format nil "~a" p) ns) return p))) (defun main () (format t "~{~a~%~}" (loop for n from 1 upto 100 collect (find-power-of-2 n)))) (main)
Note that non-ascii characters in the above source code will be escaped (such as \x9f).