3.5.3 Emacs Lisp写成的公式 :使用Emacs Lisp来写公式

你可以使用Emacs Lisp来写公式;这在当Calc提供的函数不足与实现我们期望的操纵字符串和控制结构的功能时非常有用. 如果一个公式是以单引号后跟一个开括号开头的,则该公式被认为是Lisp形式的. 该Lisp的运算结果应该是返回一个字符串或者是数字的. 就像使用'calc'公式一样,你可以在分号';'后面指定模式和printf格式. 使用Emacs Lisp形式,你需要关注域引用插入到form中的方式. 默认情况下,一个引用是将域中的值以字符串的形式(包括在双引号内)插入的. 如果开启了M模式,则所有的被引用元素都会被转化为数字(非数字域转化为0)并且在插入时作为Lisp数字型插入(不包含引号). 如果你提供了'L'标志,所有的域将会以字面上的方式(不包含引号)插入公式中. 也就是说,如果你想一个引用作为字符串来插入到Lisp形式的公式中,则使用双引号来包含引用表达式(例如"$3")即可. 区域在插入时会作为一系列以空格分隔的域,这样你就可以把它们潜入list或vector符号中. 下面是一些例子–注意我们在用Lisp计算时是如何使用'N'模式的

    
Swap the first two characters of the content of column 1
  '(concat (substring $1 1 2) (substring $1 0 1) (substring $1 2))
Add columns 1 and 2, equivalent to Calc's $1+$2
  '(+ $1 $2);N
Compute the sum of columns 1-4, like Calc's vsum($1..$4)
  '(apply '+ '($1..$4));N