ELisp学习

一. 前言 Lisp语言

Lisp诞生的时候包含了9中新思想,其中一些被用于其他高级语言,我们已经习以为常,至今还有2种是Lisp独有的。

  1. 条件结构 (即if-else结构),在Fortran 1时只有基于底层机器指令实现的goto结构。
  2. 函数也是一种数据类型 Lisp语言中,函数跟整数和字符串一样,属于数据类型的一种,有自己的字面表示形式(literal representation),能存储在变量中,也能当作参数传递。
  3. 支持递归
  4. 变量的动态类型 ,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有,赋值或绑定变量都相当于复制指针,而不是复制他们指向的数据。
  5. 垃圾回收机制
  6. 程序由表达式组成,Lisp程序是一些表达式树的集合,每个表达式返回一个值,大多数后来的程序都由表达式和语句组成。
  7. 符号类型,符号实际上是一种指针,指向存储在散列表中的字符串,所以比较两个符号是否相等,只需看其指针是否一样即可,而不用逐个字符比较。
  8. 代码使用符号和常量组成的树形表示法
  9. 无论什么时候整个语言都是高度可用的,Lisp不真正区分读取期,编译期和运行期,可以在读取期编译或运行代码,也可在编译期读取或运行代码,或在运行期读取和编译代码

若程序语句看起来像数据,则其很容易作为其他数据的输入

二. 执行 Elisp代码

Emacs中切换到scratch 缓冲区

  1. 将光标移至于表达式闭括号右侧,执行M-x eval-last-sexpC-x C-e
  2. 选择执行的代码块,使用M-x eval-region
  3. M-x eval-defun执行光标所在函数,只可执行由defvardefcustom实现的代码
  4. M-x eval-expression在minibuffer中执行代码
  5. M-x eval-buffer执行整个buffer
  6. M-x load-file加载执行整个文件
  7. M-x ielm启用 elisp shell编辑执行代码
    用命令 M-x lisp-interaction-mode 切换模式,输入 (message "Hello World"),在行尾用 C-j运行当前行,会在 minibuffer和光标前一行中输出 Hello World
    除了用 C-j运行 S-expression外,还可以用 C-x C-e组合键,后者是一个全局按键绑定,会将运行的返回值显示在 minibuffer里

为什么“无人问津”的Lisp可以这么狂?
ELisp语法
叶文彬Elisp简明教程
Practical Emacs Lisp
GNU Emacs Lisp Reference Manual

posted @ 2024-11-01 19:13  sgqmax  阅读(1)  评论(0编辑  收藏  举报