Как увеличить локальные переменные в elisp - PullRequest
6 голосов
/ 28 июля 2011

Я пытаюсь написать цикл в elisp, который печатает значения последовательно.

Я попробовал следующий код, чтобы напечатать последовательность из 1 .., которая не работает. Пожалуйста, укажите ошибку в коде.

(let ((inc_variable 0))
  (message "%S" inc_variable)
  (while t (let ((inc_variable (+ inc_variable 1)))
    (message "%S" inc_variable))))

Ответы [ 2 ]

9 голосов
/ 28 июля 2011

В этом коде есть две привязки для inc_variable. Внешняя привязка имеет значение 0 и никогда не изменяется. Затем каждый раз вокруг цикла вы создаете новую привязку для inc_variable, которая устанавливается равной единице плюс значение внешней привязки (которое всегда равно 0). Таким образом, внутренняя привязка получает значение 1 каждый раз.

Помните, что let всегда создает новую привязку: если вы хотите обновить значение существующей привязки, используйте setq:

(let ((inc-variable 0))
  (while t 
    (message "%S" inc-variable)
    (setq inc-variable (+ inc-variable 1))))
5 голосов
/ 26 мая 2016

Другой способ увеличить переменную - использовать cl-incf из cl-lib:

(require 'cl-lib)
(let ((x 0))
  (cl-incf x)
  (message "%d" x)
)

Цикл может выглядеть следующим образом:

(require 'cl-lib)
(let ((x 0))
  (while (< x 10) (cl-incf x)
         (insert (format "%d\n" x))
  )
)
...