emacs - 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
to的新值(random n)
?
(setq n (random n))
不起作用。这给出了一个常数,(random n)
不计算。
你能给我一个提示吗?我意识到这是一个完全的新手问题。谢谢。
编辑
(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)
推荐阅读
- python - Django / Wagtail 中的大型嵌套层次结构:育儿还是分类?
- python-3.x - 为什么我不断得到我想要的输出和不需要的“无”
- c++ - 如何简化这个 OpenGL .obj 模型加载器示例?
- android - Firebase 数据库子值显示为空
- java - ¿ 实际上 Git 中的工作目录是什么?
- javascript - 无法制作:焦点或点击动画vue、gsap、css
- react-native - React-Native-Expo:登录时,setState
- git - 在用于实时部署的公共存储库中隐藏凭据
- node.js - 如何在 MongoDB 中使用 nodejs 中的日期进行聚合查询?
- c++ - C++ 多访问说明符和初始化顺序