Как красиво и коротко прочитать несколько чисел с консоли? - Lisp

Узнай цену своей работы

Формулировка задачи:

Предположим надо как-то считать несколько чисел с консоли, таких что в каждой строке по числу в переменные. Как это сделать красиво и коротко ? Хотелось бы некоего подобия такого на питоне(читаем 3 числа одной строчкой):
a, b, c = map(int, [input() for _ in range(3)])
Так нагроможденно:
(setq a (with-input-from-string (in (read-line)) (read in)))
(setq b (with-input-from-string (in (read-line)) (read in)))
(setq c (with-input-from-string (in (read-line)) (read in)))
Уже лучше:
(setq
    a (with-input-from-string (in (read-line)) (read in))
    b (with-input-from-string (in (read-line)) (read in))
    c (with-input-from-string (in (read-line)) (read in)))
Все еще ощущается некоторая награможденность:
(defun read-int () (with-input-from-string (in (read-line)) (read in)))
(setq
    a (read-int)
    b (read-int)
    c (read-int))
Тут меня мучают сомнения насчет eval:
(loop for x in '(a b c) do
    (eval (list 'setq e (with-input-from-string (in (read-line)) (read in)))))
(dolist (x '(a b c))
    (eval (list 'setq e (with-input-from-string (in (read-line)) (read in)))))
У кого какие будут варианты? (ANSI Common Lisp) P.S. И, да, переменные должны быть именованными, а не чтение списка что-то вроде:
(setq x (loop repeat 3 collect (with-input-from-string (in (read-line)) (read in))))

Решение задачи: «Как красиво и коротко прочитать несколько чисел с консоли?»

textual
Листинг программы
(destructuring-bind (a b c) (loop repeat 3 collect (parse-integer (read-line *query-io*)))
 ...)

Объяснение кода листинга программы

На каком языке программирования это написано?

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы