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扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...
随机推荐
- python基本操作
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- Python机器学习笔记:XgBoost算法
前言 1,Xgboost简介 Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器.因为Xgboost是一种提升树模型,所以它是将许多 ...
- 从a文件判断是否删除b文件中的行(sed示例)
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html test.xml文件很大,内容结构如下: <?xml v ...
- MySQL中间件之ProxySQL(3):Admin管理接口
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL的Admin管理接口 当ProxySQL启动后,将 ...
- haproxy(8):haproxy代理MySQL要考虑的问题
HaProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html haproxy可以通过 TCP协议 来代理MySQL.但是两个问题必须考虑: ...
- @property详解,@property修饰符以及各个修饰符区别(上)
相信很多参加过面试的人员很多都会被问到:weak与assign的区别,copy与strong的区别.如果你仅仅说一点点copy一般对NSString,weak对于控件的修饰,assign对于基本类型, ...
- [心得]如何快速利用SqlMap做安全檢測
SqlMap的介紹我就不詳提啦!SqlMap是用來尋找與做Sql-injection的一款工具 在使用前你需要安裝python唷!安裝的過程我們就不介紹了. 直接來看如何快速使用SqlMap吧! 這裡 ...
- Revit二次开发: 文件损坏
哪些因素可能会导致损坏? 损坏的原因也各不相同,包括但不限于 无法读取/写入存储介质 程序发生崩溃(特别是在数据写入 RVT 模型时) 附加模块以通过正常 UI 无法或意外的方式修改图元 未经测试的多 ...
- FormCollection collection 使用
参考文档:https://www.cnblogs.com/dare/p/9173479.html
- C# Winform开发以及控件开发的需要注意的,被人问怕了,都是基础常识
我是搞控件开发的,经常被人问,所以把一些问题记录了下来!如果有人再问,直接把地址丢给他看. 一. 经常会有人抱怨Winform界面闪烁,下面有几个方法可以尽可能的避免出现闪烁 1.控件的使用尽量以纯色 ...