Более того, стоит отметить, что основное назначение interactive
в интерактивном контексте (например, когда пользователь вызывает функцию с привязкой клавиш) позволяет пользователю указывать аргументы функции, которые в противном случае могли бы быть заданы только программно.
Например, рассмотрим функцию sum
, которая возвращает сумму двух чисел.
(defun sum (a b)
(+ a b))
Вы можете позвонить по номеру (sum 1 2)
, но вы можете сделать это только в программе на Лиспе (или в REPL). Если вы используете специальную форму interactive
в своей функции, вы можете запросить аргументы у пользователя.
(defun sum (a b)
(interactive
(list
(read-number "First num: ")
(read-number "Second num: ")))
(+ a b))
Теперь M-x sum
позволит вам ввести два числа в минибуфере, и вы все равно можете набрать (sum 1 2)
.
interactive
должен возвращать список, который будет использоваться в качестве списка аргументов, если функция вызывается в интерактивном режиме.