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扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...
随机推荐
- 五分钟轻松了解Hbase面向列的存储
说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点. 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了 ...
- java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql mybatis 循环执行update生效一次 实际只执行一次
java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说提交成功了一次,并没有实际的个数循环 有可能是同一个对象导致的 可以仔细看一下下面两段代码有什么区别 p ...
- mysql常用字符串操作函数大全,以及实例
今天在论坛中看到一个关于mysql的问题,问题如下 good_id cat_id12654 665,56912655 601,4722 goods_id是商品i ...
- js forEach跳出循环
假设当我们只需知道某个数组有没有某个属性,如果找到了直接跳出循环,省略掉剩下的循环步骤是较优化的操作,但是for中是可以利用break跳出循环,但break在forEach中无效,那么forEach能 ...
- JQ-bootstrap我的开源前端框架
因为实在不知道写啥,所以迟迟没有相关的介绍.但是必须要积累过程资产,所以还是介绍一下,不定哪天就有人用了. 首先还是介绍遇到的问题,我是做传统后台管理系统的,公司赶时髦,要用boo ...
- Perl模块管理
Perl模块管理 perl有自带的模块,还有第三方模块.自带的模块是随perl安装而安装好的,第三方模块需要从CPAN(Comprehensive Perl Archive Network)上下载并安 ...
- perl选项、特殊变量、一些函数参考手册
perl一行式程序系列文章:Perl一行式 本文用来收集Perl一行式中涉及到的一些选项.特殊变量的说明,可以用来做速查手册. 本文会逐渐更新. 第一次学Perl一行式时,请直接忽略本文内容,并直接从 ...
- C# 未能加载文件或程序集“ Newtonsoft.Json” Json格式错误
原因:版本不一致,所使用的dll和配置文件中的版本不一致.解决: (1)查看所使用的Newtonsoft.Json.dll版本 ,然后把对应的版本修改在配置文件中如下,比如版本为“4.5.0.0” 修 ...
- [日常]nginx与网络事件模型
Nginx 的特点: 1.处理静态文件 2.反向代理加速 3.fastCGI,简单的负载均衡和容错 4.模块化的结构 5.分阶段资源分配技术,使得它的 CPU 与内存占用率非常低,保持 10,000 ...
- JavaScript中的三种弹窗
---恢复内容开始--- 1.警告窗口(alert) <script type="text/javascript"> alert("我是警告弹框!" ...