Elisp快速自学笔记(3)函数与交互式命令

原创
2021/09/07 15:31
阅读数 132

函数

函数式编程语言中,函数的地位非常高。与其他编程语言一样,函数分为两部分:

  • 定义
  • 调用

函数定义

基本定义格式如下:

(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来安装函数(执行函数的声明)哦。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部