ELisp编程七:创建函数

2023-11-27 02:38
文章标签 函数 创建 编程 elisp

本文主要是介绍ELisp编程七:创建函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

defun原型

https://www.gnu.org/software/emacs/manual/html_node/eintr/defun.html 里面介绍的defun并不全,可能文档过于老旧了吧。

http://www.gnu.org/software/emacs/manual/html_node/elisp/Defining-Functions.html 要全点,和emacs c-h f显示的差不多


下面是Emacs c-h f显示的defun macro的帮助文档

defun is a Lisp macro.(defun NAME ARGLIST &optional DOCSTRING DECL &rest BODY)Define NAME as a function.
The definition is (lambda ARGLIST [DOCSTRING] BODY...).
See also the function `interactive'.
DECL is a declaration, optional, of the form (declare DECLS...) where
DECLS is a list of elements of the form (PROP . VALUES).  These are
interpreted according to `defun-declarations-alist'.
The return value is undefined.[forward]

参数解释

NAME 是函数名称

ARGLIST是函数接受的参数

DOCSTRING 是一个字符串,描述函数的功能,emacs帮助系统会使用它,建议每个函数作者都尽可能写这段描述

DECL是一个宏,用来对函数添加元数据,比如描述该函数要被废除

&rest 可以是interactive,有了它,可以直接在M-x中调用函数

BODY是函数体


简单函数例子

用Emacs创建一个test.el文件。编写如下代码:

(defun add2 (x)(+ 2 x))(add2 8)

第一段是定义了一个函数add2,传递任意数值x,都会加上2后返回,在这个函数的最后的括号后面运行C-x C-e,创建该函数。

然后在到第二段调用代码最后面执行C-x C-e

在Mini-buffer可以看到和为10.


复杂一点的例子


下面有一个例子
(defun sql-connect-preset (name)"Connect to a predefined SQL connection listed in `sql-connection-alist'"(eval `(let ,(cdr (assoc name sql-connection-alist))(flet ((sql-get-login (&rest what)))(sql-product-interactive sql-product)))))

sql-connect-preset是函数名
(name)是参数列表
"Connect to ..." 是描述文字
最后是body

interactive

有了(interactive),就可以通过M-x执行eval-buffer2了。不过该函数可以放在init.el中,也可以独立放在一个el文件中,然后运行M-x load-file来运行。

(defun eval-buffer2 ()(interactive)(eval-buffer nil (get-buffer-create "output")))

(interactive)是可以接受参数的,以后再细说。

局部变量
let函数用于定义一个局部变量,该变量屏蔽了其他同名的变量,但尽在let语句内部有效。
let包含了三个部分,第一是let函数,第二是varlist,第三是body,也就是可以在let块内部执行的语句。
(let ((variable value)(variable value)...)body...)

下面是一个例子:
(let ((zebra 'stripes)(tiger 'fierce))(message "One kind of animal has %s and another is %s."zebra tiger))




这篇关于ELisp编程七:创建函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426838

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念