函数
函数式编程语言中,函数的地位非常高。与其他编程语言一样,函数分为两部分:
- 定义
- 调用
函数定义
基本定义格式如下:
(defun FUNC-NAME (ARGS)
"Docstring ... "
FUNC-BODY
)
如其他编程语言一样,Elisp的函数也由以下几部分组成:
- defun关键字,用于函数的声明
- 函数名(除了lambda函数,一般都有名字)
- 参数列表
- 函数文档,可选(但不建议省略),一般用以说明函数的用途
- 函数体
- 返回值(对,你没看错!虽然没有类似return这样的关键字,但Elisp的函数也有返回值:最后一条语句的执行结果)
函数调用
我们前面已经使用过很多次的函数调用了,如:
(setq name "Cabins")
(message "Hello World")
所以函数调用的基本语法是:
(函数名称 函数参数)
交互式命令
我们经常通过M-x来执行一些命令,这些命令如果你用C-h f查看的话,其实也是函数。但为什么我们上面写的函数不能通过M-x来调用呢?
是因为我们还缺少一个关键的声明:interactive!
我们把上面的函数定义添加上interactive之后,变成如下的样子:
(defun FUNC-NAME (ARGS)
"Docstring ... "
(interactive)
FUNC-BODY
)
即,在BODY的第一句添加上interactive,之后函数就变成了可执行的命令了。但如果你曾经看过Emacs里面的交互式命令的写法的话,你经常会发现interactive后面可能还会跟一些参数,例如:
(interactive "fInput your file name: ")
后面参数的第一个字母(以及\n后面的第一个字母)是有特殊含义的,其他的代表提示。特殊含义可以通过C-h f interactive查阅。
现在练习一下,在scratch中编写以下函数,然后通过M-x 来执行一下看看吧!
(defun welcome-to ()
"Welcome to emacs world!"
(interactive)
(message "Hello, Hacker!"))
哦哦,对了,写完函数后,别忘了在函数的结尾,通过C-x C-e来安装函数(执行函数的声明)哦。