elisp 中的赋值
Assignment in elisp
我正在努力学习 elisp。我想使用 (random n)
然后
取 (random n)
的结果并用它来计算一个新的随机数
数,直到我们达到 1。
像这样:
(random 100)
99
(random 99)
51
(random 51)
24
(random 24)
11
(random 11)
3
(random 3)
2
(random 2)
1
如何将 n
的新值分配给 (random n)
?
(setq n (random n))
不起作用。这样给出一个常数,(random n)
不计算
你能给我一个提示吗?我意识到这是一个新手问题。谢谢。
EDİT
(defun rnd (n)
(setq counter 0)
(let ((ret ()))
(while (< 1 n)
(setq n (random n))
(setq counter (+ counter 1))
(push n ret))
(reverse ret))
)
(format "list: %s \n steps: %s" (rnd 100000) counter)
您不能在函数内更改外部变量的值:
(defvar n 100)
(defun rnd (n)
(setq n (random n)))
(rnd n)
不会 更改 n
的值,因为 rnd
会为 n
创建一个新绑定。
然而,这应该有效:
(defvar n 100)
(defun rnd ()
(setq n (random n)))
或者你可以在 rnd
:
中做一个循环
(defun rnd (n)
(let ((ret ()))
(while (< 1 n)
(setq n (random n))
(push n ret))
ret))
(rnd 100)
==> (1 3 8 16 20 27 53)
我正在努力学习 elisp。我想使用 (random n)
然后
取 (random n)
的结果并用它来计算一个新的随机数
数,直到我们达到 1。
像这样:
(random 100)
99
(random 99)
51
(random 51)
24
(random 24)
11
(random 11)
3
(random 3)
2
(random 2)
1
如何将 n
的新值分配给 (random n)
?
(setq n (random n))
不起作用。这样给出一个常数,(random n)
不计算
你能给我一个提示吗?我意识到这是一个新手问题。谢谢。
EDİT
(defun rnd (n)
(setq counter 0)
(let ((ret ()))
(while (< 1 n)
(setq n (random n))
(setq counter (+ counter 1))
(push n ret))
(reverse ret))
)
(format "list: %s \n steps: %s" (rnd 100000) counter)
您不能在函数内更改外部变量的值:
(defvar n 100)
(defun rnd (n)
(setq n (random n)))
(rnd n)
不会 更改 n
的值,因为 rnd
会为 n
创建一个新绑定。
然而,这应该有效:
(defvar n 100)
(defun rnd ()
(setq n (random n)))
或者你可以在 rnd
:
(defun rnd (n)
(let ((ret ()))
(while (< 1 n)
(setq n (random n))
(push n ret))
ret))
(rnd 100)
==> (1 3 8 16 20 27 53)