elisp program

1 语言概念

  • 主要用来写 Emacs 软件的 Lisp
  • Lisp 的意思是 List Processing

2 List 列表

2.1 list 概念

  • list 是 lisp 的基础
  • list 是由()包括的用空白字符分隔的原子,内部 list,或者原子和内部 list 的混合元素组成的,例如:’(rose daisy buttercup), ‘(+ 2 2), ‘(this list has (a list inside of it))
  • list 里面可以只包括一个原子,或者什么也没有
  • () 空列表,可以同时表示一个原子或者一个列表

2.2 符号表达式

  • 由原子和 list 组成的这种输出形式被称为符号表达式或者 s-expressions

2.3 Atom 原子

  • 不可分割的单个单词,数字,符号,双引号括起来的字符串都称为原子

2.4 list 中()前有’和没有’的区别

  • ‘(+ 2 2):会告诉 lisp 解释器,除了按照所写的来返回展示,什么也不执行
  • (+ 2 2):会告诉 lisp 解释器+是一条指令,会用后面剩余的原子来执行这个指令,在 lisp 中,类似+所代表的一组指令,叫做 functions

2.5 符号名称和函数定义

  • A symbol,类似+符号一样,本身不是计算机可执行的指令,但是可以暂时代表一组计算机执行指令。在 lisp 中一组指令可以用多个名字来表示,例如 :加法指令可以同时用或者 plus 来表示;但是,a symbol 在同一时间只能表示唯一的一组指令(也叫一个 function)
  • 因为 Emacs lisp 是非常庞大的,所以 symbol 的命名方式表示这个 function 属于的是哪一种功能部分的,例如 rmail-表示用来读 mail,text-表示用来处理 text 文本信息的

2.6 lisp 解释器

  • lisp 解释器主要做的两件事情:
    • 1.’()类似这样带’的 list,解释器直接返回 list
    • 2.()类似这样不带’的 list,解释器会找 list 中的第一个原子,看是否有其表示的 function 定义,如果有,则执行指令,如果没有则显示出 error message
  • lisp 解释器能解决的问题:
      1. 计算那些没有’开头的和没有()包括的 symbol
      1. 替换一些表达式为另外的一些原始定义的表达式,例如将宏(mocro)替换为原始表达式
      1. 优先处理内部嵌套的 list,如果没有内嵌的 list,则按照从左到右的顺序处理 list
      1. 执行字节码编译:通过执行 byte-compile-file 命令可以将.el 结尾的 lisp 文件进行字节码编译,生成.elc 文件

2.7 变量

    1. a symbol 能像关联一个函数定义一样关联到一个 value,例如:可关联到数字,字符串,列表等,这样有 value 值的 symbol 通常叫做变量
    1. a symbol 能同时是一个变量,和关联到一个函数定义,这两者是相互没有关联的,不会互相影响

2.8 参数

    1. 传递给函数的参数类型,取决于函数所使用的数据类型
    1. 参数可以是变量的值,或者列表,例如:
 (concat "The " (number-to-string (+ 2 fill-column)) "red fixed.")
   其中:
       fill-column 在执行时回将其返回的变量值作为参数传递给+代表的 function
       (number-to-string (+ 2 fill-column)) 在执行时会将此列表返回的值作为参数传递给 concat 
    1. message 函数
 (message "He saw %d %s" 
                 (- 30 fill-column)
                 (concat "red "
                         (substring "foxed foxes foxing" 6,11)
                         " leaping"))

2.9 赋值

  • 1.set的用法

    (set 'flower '(rose violet))
    
    其中第一个参数和第二个参数都需要将 ‘ 放在前面,如果第一个参数flower没有引号,则lisp解释器会最先将flower变量求值后返回,而这个时候flower变量还没有被赋值,所以lisp解释会抛出一个错误;第二个参数需要带 "'" 的原因是:带上 "'"list会直接返回list(参见2.4),然后传递给set函数将flower赋值。
    flower变量此时执行C-x C-e会显示出(rose violet)
  • 2.setq的用法

    (setq flower '(rose violet)) 
    
    相当于 
    
    (set 'flower '(rose violet))
    
    setq中的 q 表示的意思是:set函数的第一个参数自动会加上 '
    

    待续更新中。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值