e lisp 自定义函数
自定义函数
(defun multi-by-seven (number)
"multi number by seven"
(interactive "p")
(message "result is %d" (* 7 number)))
- defun 是定义函数的关键字
- multi-by-sever 是函数的名字
- (number) 是函数的参数,必须有括号
- “multi number by seven”是函数的注释,当用C-h f,输入函数名字后,注释会显示出来
- (interactive "p") 说明是和emacs交互的函数, 参数p的作用是,告诉emacs,这个函数的参数number是需要用C-u来设定
- (message "result is %d" (* 7 number))是函数的实体。message的作用是,把result is %d显示到用户信息行
用法
1,C-u后,输入一个数字(这个数字就是传递个函数的参数),并键入M-x multi-by-seven,回车
如果在C-u后,输入的数字是3,则在用户信息行,显示:result is 21.
如果在C-u后,没有输入任何数字,则取默认值4,所以显示:result is 28.
2,M后,输入一个数字(这个数字就是传递个函数的参数),并键入M-x multi-by-seven,回车
如果在M后,输入的数字是5,则在用户信息行,显示:result is 35
let 表达式
let表达式模板:(let varlist body ...)
(let ((var1 value1)
(var2 value2))
(
;body
))
(let ((zebra 'str1)
(tiger 'str2) )
(message "one %s %s" zebra tiger))
;执行结果:one str1 str2
(let ((birch 3)
pine
fir
(oak "some"))
(message "Here are %d variables with %s, %s, and %s value"
birch pine fir oak))
;执行结果:Here are 3 variables with nil, nil, and some value
if 表达式
nil为false,其余都为true
(if true-or-false-test
action-to-carry-out-if-test-is-true)
(if (> 5 4) ;if-part
(message "5 is greater than 4!")) ;then-part
(defun iftest (str)
"this is if test code"
(if (equal str 'da)
(message "this is %s" str))
)
(iftest 'da)
(iftest 'da1)
if-else 表达式
nil为false,其余都为true
(if true-or-false-test
action-to-carry-out-if-test-is-true
action-to-carry-out-if-test-is-false)
(if (> 4 5) ;if-part
(message "5 is greater than 4!") ;then-part
(message "4 is not greater than 5!")) ;else-part
(defun iftest (str)
"this is if test code"
(if (equal str 'da)
(message "this is %s" str)
(message "this is not %s" str))
)
(iftest 'da)
(iftest 'da1)
nil
nil有2种意思,第一种为(),第二种为false
(if ()
'true
'false)
;结果为false
(if nil
'true
'false)
;结果为false
(if 4
'true
'false)
;结果为tre
(if (buffer-size)
'true
'false)
;结果为tre
or 函数
or函数可以有很多参数,它逐一对每一个参数求值,并返回第一个其值不是nil的参数的值。一旦遇到其值不是nil的参数后,后面的参数就不会被求值。
(defun simple-inser-buffer (buffer)
"simple insert buffer"
(interactive "*binsert buffer:")
(or (bufferp buffer)
(setq buffer (get-buffer buffer)))
and 函数
and函数可以有很多参数,它逐一对每一个参数求值,一旦遇到其值是nil的参数后,后面的参数就不会被求值。
save-excursion 函数
这个函数将当前的位点(point)和标记(mark)保存起来,如果在函数体里面,改变了位点和标记的值,函数执行结束后,把位点和标记恢复成函数执行前的值。这个函数的主要目的是使用户避免位点和标记的不必要的移动。
(save-excursion
first-expression-in-body
second-expression-in-body
third-expression-in-body
...
last-expression-in-body)
save-excursion经常出现在一个let表达式中
(let varlist
(save-excursion
body...))
标记
标记(mark)是缓冲区中的另外一个位置。它的值可以用一个命令(C-SPACE(set-mark-command))来设置。如果设置了一个标记,可以用命令C-x C-x(exehange-point-and-mark)使光标从位点跳到标记处,并将光标当初所处的位置设置成当前的标记。另外,标记也是存放在标记环中的,可以多次用C-u C-SPACE命令来使光标跳到被保存的标记处(和M-y的用法一样)
interactive
- "p" 前缀参数,通过C-u传入
- “P” 未加工的前缀参数,使用前需要调用函数(prefix-numeric-value arg),arg是参数
- “B” 传入缓冲区的名字给参数,可以是不存在的缓冲区。
- “r” 传入域(region)的开始位置和终了位置给参数
- “¥n" 分割参数的作用
- "*" 如果要编辑的是只读缓冲区,会显示错误消息到回显区。但是测试后,发现不加也会出错误信息。
- ”b” 要求输入一个缓冲区的名字给参数,必须是存在的缓冲区才行
e lisp 自定义函数的更多相关文章
- Mysql - 存储过程/自定义函数
在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...
- Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数
10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...
- mysql 常用自定义函数解析
-- /* -- * 用于获取一记录数据,根据传入的分隔字符delim,索引位置pos,返回相对应的value -- * SELECT Json_getKeyValue({"A": ...
- mysql 自定义函数
原文:http://www.cnblogs.com/zhangminghui/p/4113160.html 引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利 ...
- Sql Server系列:自定义函数
用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...
- asp.net MVC helper 和自定义函数@functions小结
asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...
- PHP函数之自定义函数
像数学中的函数一样,y=f(x)是函数基本的表达形式,x可看做是参数,y可看做是返回值,即函数定义就是一个被命名的.独立的代码段,它执行特定的任务,并可能给调用它的程序返回一个值. 自定义函数 函数的 ...
- C语言-自定义函数
C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...
- MySQL自定义函数
用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...
随机推荐
- 【整理】WDK 和 DDK异同
WDK和DDK的作用 开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发 WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WIND ...
- Perl文件名通配和文件查找
在shell中使用*来对文件名进行通配扩展,在Perl中也同样支持文件名通配.而且perl中的glob通配方式和shell的通配方式完全一致,实际上perl的glob函数就是直接调用csh来通配的(如 ...
- Perl使用模块和@INC
use加载模块 安装模块后,都会有对应的文档,可以通过perldoc MODULE_NAME来获取模块的使用帮助. 例如:获取File::Utils的使用帮助. perldoc File::Utils ...
- Python数值类型
数值类型 python的数值类型包括常规的类型:整数(没有小数部分的数字).浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数.分数.有理数.无理数.集合.进制数等).除了十进制整数,还有 ...
- go基础系列:简介
1.Go简介 Go语言是编译型.静态类型的类C的语言,并带有GC(垃圾收集器,garbage collection).这意味着什么? 另外,Go是一种非常严格的语言,它几乎总是要求我们"以标 ...
- Hyperledger Fabric链码之二
上篇文章中我们介绍了链码的概念,本文中我们将介绍Fabric下链码的编写和测试.我们会通过一个简单例子的方式来阐述链码API的使用. 链码API 每一个链码程序都必须实现一个接口Chainco ...
- MySQL添加列、删除列,创建主键等常用操作总结
一. 列常用操作 ① 添加新的一列test_column,并将其作为主键,FIRST将其放在表中第一行,auto_increement是自动增长 alter table test_table add ...
- [PHP] PHP闭包(closures)
1.闭包函数也叫匿名函数,一个没有指定名称的函数,一般会用在回调部分 2.闭包作为回调的基本使用, echo preg_replace_callback('~-([a-z])~', function ...
- Java中的强引用和弱引用
旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81114944 一.强引用 如下是强引用的经典 ...
- 2018最新iOS端界面UI设计规范整理
在iPhone 6还没出的时候,都是用640×1136 px来做设计稿的,自从6的发布,所有的设计稿尺寸以750×1334 px来做设计稿尺寸 以750x1334px作为设计稿标准尺寸的原由: 从中间 ...