创建一个帖子,记录自己学习 Elisp 的经过

终于重启学习 Elisp 了。主要是受今天 Emacs Talk 采访懒猫的影响。这一次,从李杀的 Elisp 教程开始,学习到 Elisp Basic 这一章,用懒猫推荐的 ielm 来测试每一个命令,得到了很有趣的体验,我将我的笔记暂时先发布在这里:

Elisp Basic

Elisp 基础数据类型以及数据的表达方式

Printing

  1. message

    (message) 在 Emacs 的 minibuffer 里发送某些数据,并在 minibuffer 中显示。 (message FORMAT-STRING &rest ARGS)

    1. 与不同变量值结合的方式

      1. %d 表示 decimal number(不包小数点后面的整数)

        (message "age is %d " 16) 测试:不能表示 1/3 这类表达的分数

      2. %s 表示 string(字符串)

        (message “name is %s” “Joe”) 测试:中英文皆可

      3. %c is char by unicode codepoint in decimal

        (message "Mid init is %c“ 65) 返回结果:“Mid init is A” 测试:一开始不太理解为啥输入 65 的值表达是 A。检索 unicode codepoint,找到一些编码进行测试,返回错误信息【值错了】。后来,M-x 输入 unicode 指令,找到一个命令 counsel-unicode-char,可以检索 Emacs 内置的编码信息,于是输入不同的数值,可得到用这一数字表达的【字符】。理解为,只能表达 Emacs 内置的 unicode 编码。

  2. insert

    (insert) 在当前 buffer 中,当前光标的位置中输入【字符串】。 (insert &rest ARGS)

  3. print

    (print) Print lisp object. Output can be read back by function read. Optional arg for a target buffer, or other functions. (print OBJECT &optional PRINTCHARFUN)

    测试:关于 print 指令,李杀的解释是,它可以 print 任何数据格式,The “OBJECT” is any elisp object you want to print. It can be any lisp datatype, such as string, number, list, buffer, frame, …, etc.

    print 和 insert 的区别是,insert 操作当前的 buffer,print 则是操作新 buffer。

  4. prin1

    print 的变式,性质作用一样,不同的是【不会在末尾另起一行】。 (prin1 OBJECT &optional PRINTCHARFUN)

  5. princ

    (princ OBJECT &optional PRINTCHARFUN) Print without newline nor delimiters. For human reading. 测试:输出的结果更符合人类阅读习惯,通常可以理解为把【数值旁边的双引号给去掉】。

Arithmetic 数学运算

Convert Float/Integer 浮点数/整数的转换

  1. (float 3) 用于将整数转换成浮点数

    3.0

  2. (truncate 3.3) 用于将浮点数转换成整数

    3

  3. (floor 3.3) 用于将浮点数转换成整数,但取小值

    3p

  4. (ceiling 3.3) 用于将浮点数转换成整数,但取大值

    4

  5. (round 3.4) 根据四舍五入的法则,来取大小值

    (round 3.4) → 3 (round 3.5) → 3 (round 3.6) → 4

  6. 字符串/数值之间的转换

    1. (string-to-number)

    2. (number-to-string)

5 个赞