Emacs Lisp(elisp)中的范围数据类型或生成器?

mca*_*dre 15 elisp range

什么是elisp相当于Python的range(start, end, [step])

mic*_*ohn 18

number-sequence类似于python,range但它的输出完全不同.例如:

(number-sequence 5)
 => (5)
(number-sequence 1 5)
 => (1 2 3 4 5)
(number-sequence 1 5 2)
 => (1 3 5)
Run Code Online (Sandbox Code Playgroud)

我使用这个函数给我一个类似于python的输出range:

(defun py-range (start &optional end step)
  (unless end
    (setq end start
      start 0))
  (number-sequence start (1- end) step))
Run Code Online (Sandbox Code Playgroud)

现在一切都按预期工作:

(py-range 5)
 => (0 1 2 3 4)
(py-range 1 5)
 => (1 2 3 4)
(py-range 1 5 2)
 => (1 3)
Run Code Online (Sandbox Code Playgroud)


mca*_*dre 7

(number-sequence FROM &optional TO INC)
Run Code Online (Sandbox Code Playgroud)