Чтение символа без необходимости нажатия кнопки Enter

read-line а такжеread-char оба требуют нажатия клавиши Enter после ввода чего-либо. Есть ли какой-нибудь механизм в Common Lisp, который позволил бы программе продолжать работу сразу после нажатия любого отдельного символа, не требуя дополнительного шага нажатия Enter?

Я пытаюсь создать быстрый, динамический интерфейс ввода текста для программы, чтобы пользователи могли быстро перемещаться и выполнять разные действия, нажимая цифры или буквы, соответствующие экранным меню. Все дополнительные нажатия клавиши Enter серьезно прерывают рабочий процесс. Это также будет похоже на запрос типа «y / n» из приглашения, когда достаточно просто нажать «y» или «n».

Я использую SBCL, если это имеет значение. Возможно, это зависит от реализации, так как я попробовал оба примера наэта страница и это не работает (мне все еще нужно нажать Enter); вот первый:

(defun y-or-n ()
(clear-input *standard-input*)
(loop as dum = (format t "Y or N for yes or no: ")
    as c = (read-char)
    as q = (and (not (equal c #\n)) (not (equal c #\y)))
    when q do (format t "~%Need Y or N~%")
    unless q return (if (equal c #\y) 'yes 'no)))

Ответы на вопрос(2)

Ваш ответ на вопрос