If I understood the question correctly, you are looking for something like this:
(defun foo (list) (interactive) (let ((arg (ido-completing-read "Select from list: " list)))) ...)
The selection process is not like a phased one, but for users, emacs is often selected from a list using ido or other similar alternatives. You can narrow your search, move between alternatives and long, etc. The Mx type is customize-group RET ido if you want to have an idea of ββwhat settings you can configure.
source share