3.1 defun宏

来源:互联网 发布:水火箭 淘宝 编辑:程序博客网 时间:2024/06/08 17:28

3.1 defun宏

在Lisp中,像mark-whole-buffer这样的符号关联了代码,告诉计算机在调用函数时该做什么。这段代码被称为函数定义,使用defun开头。

函数定义的模板如下,有五部分(函数名,参数,可选的文档,交互式参数(可选),函数主体):

   (defun函数名(参数...)
       
“可选的文档......”
       
(交互式参数传递信息);可选
      
函数主体...)

例如,

     (defun multiply-by-seven (number)
       "Multiply NUMBER by seven."
       (* 7 number))

定义了一个数字(number)与7相乘。这个定义从括号和符号defun开始,后面跟着函数的名字。该函数的名称后面是一个包含将传递给该函数的参数的列表。由于参数列表中的名称对于函数定义来说是私有的,因此可以在函数体内更改此类符号的值,而不更改函数外的值。效果类似于由let表达式产生的效果。 (See let.)参数列表后跟描述该函数的文档字符串。这就是您输入C-h f和函数名称时所看到的内容。顺便说一句,当你写这样的文档字符串,你应该使第一行完整的句子,因为一些命令,如apropos,只打印多行文档字符串的第一行。此外,如果您有一个文档字符串,则不应该缩进文档字符串的第二行,因为使用C-h f(describe-function)时看起来很奇怪。文档字符串是可选的,但它是如此有用,它应该包括在你写的几乎每个函数中。示例的第三行由函数定义的主体组成(大多数函数的定义当然比这个长)在这个函数中,主体是列表(* 7 number),它表示将数值乘以7。(这个例子不是交互式的,更多信息请参阅Making a Function Interactive)。

 (multiply-by-seven 3)

如果你评估这个例子,你可能会得到一个错误信息。(继续,尝试一下!)这是因为我们已经写了函数定义,但是还没有告诉计算机关于定义 - 我们还没有在Emacs中加载函数定义。安装函数是告诉Lisp解释器函数定义的过程。安装在下一节中介绍。



原创粉丝点击