elisp 中的变量

文章详细介绍了Elisp中如何为变量赋值,包括使用setq和set-variable命令,查看变量值的describe-variable函数,以及如何通过makeunbound来删除变量。同时,区分了setq作为特殊形式和set-variable作为交互式命令的区别。
摘要由CSDN通过智能技术生成

elisp 中的变量:

概要:

1. 为变量赋值(setq)
2. 用命令为变量赋值(set-variabe)
3. 查看变量C-h v 或者命令(describe-variable)
4. 删除一个变量(makeunbound)

----------------------------------------
1. 为变量赋值
----------------------------------------

1.1 set 函数 与 setq 函数
例如: 为变量 var 赋值 "a string
emacs lisp 写法
(setq var "a string")
等价于
(set 'var "a string")
也等价于
(set (quote var) "a strng")
说明: (quote var) 返回值是 'var

如果用以下写法是什么结果呢?
(set var "a string")
首先, var 会当成表达式运行,对其求值,如果var 还没有赋值, 则给出错误.

Debugger entered--Lisp error: (void-variable var)

以上说明了函数set,setq 的区别和联系

1.2. setq 与 set-variable 辨析
set-variable 是交换式命令,可以为变量赋值    C-h f 可以找到它的描述(交互式,命令)
set-variable 可以修改变量的值,真是一个好命令!! 耶,从此我可以方便的临时修改环境中的变量了.

setq is a special form in ‘C source code’. C-h f 可以找到它的描述(非交互式,函数,c源码中特殊形式)

1.3. C-h v 等价于命令 describe-variable, C-h k 可以找到C-h v 的描述

----------------------------------------
2. 删除一个变量
----------------------------------------
虽然我用describe-variable 可以看到var 变量,但删除它却不容易.
怎样删除刚刚定义的var 变量呢? 我还是机缘巧合找到了
(+ 1 a)
 error: (void-variable a)
 我们通过手册查void-variable, 找到了无效变量和让变量无效的方法 makeunbound
例如:
  (setq x 1)               ; Put a value in the global binding.
       ⇒ 1
  (let ((x 2))             ; Locally bind it.
    (makunbound 'x)        ; Void the local binding.
    x)
  error→ Symbol's value as variable is void: x
  x                        ; The global binding is unchanged.
       ⇒ 1

删除内层bound, 则外层bound 即会暴露, 例如:
  (let ((x 2))             ; Locally bind it.
    (let ((x 3))           ; And again.
      (makunbound 'x)      ; Void the innermost-local binding.
      x))                  ; And refer: it’s void.

If a variable is void, trying to evaluate the
variable signals a ‘void-variable’ error, instead of returning a value.
如果符号没有定义, 想计算这个符号的值就会得到'void-variable', 我把它翻译成符号无效,
而不是返回符号的值.
精通c语言者还是容易理解这个概念的. 只不过c语言没有删除变量之说.
而交互式语言删除变量后就不能使用了,就看不见它了.因为变量表中不存在它了.

广义变量:下回再说,还没概念.
参考1: elisp 手册
参考2: 网上资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值