自定义函数

(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 自定义函数的更多相关文章

  1. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  2. Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数

    10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...

  3. mysql 常用自定义函数解析

    -- /* -- * 用于获取一记录数据,根据传入的分隔字符delim,索引位置pos,返回相对应的value -- * SELECT Json_getKeyValue({"A": ...

  4. mysql 自定义函数

    原文:http://www.cnblogs.com/zhangminghui/p/4113160.html 引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利 ...

  5. Sql Server系列:自定义函数

    用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...

  6. asp.net MVC helper 和自定义函数@functions小结

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  7. PHP函数之自定义函数

    像数学中的函数一样,y=f(x)是函数基本的表达形式,x可看做是参数,y可看做是返回值,即函数定义就是一个被命名的.独立的代码段,它执行特定的任务,并可能给调用它的程序返回一个值. 自定义函数 函数的 ...

  8. C语言-自定义函数

    C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...

  9. MySQL自定义函数

    用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...

随机推荐

  1. 五分钟轻松了解Hbase面向列的存储

    说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点. 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了 ...

  2. java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql mybatis 循环执行update生效一次 实际只执行一次

    java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说提交成功了一次,并没有实际的个数循环 有可能是同一个对象导致的 可以仔细看一下下面两段代码有什么区别 p ...

  3. mysql常用字符串操作函数大全,以及实例

    今天在论坛中看到一个关于mysql的问题,问题如下 good_id     cat_id12654         665,56912655         601,4722 goods_id是商品i ...

  4. js forEach跳出循环

    假设当我们只需知道某个数组有没有某个属性,如果找到了直接跳出循环,省略掉剩下的循环步骤是较优化的操作,但是for中是可以利用break跳出循环,但break在forEach中无效,那么forEach能 ...

  5. JQ-bootstrap我的开源前端框架

        因为实在不知道写啥,所以迟迟没有相关的介绍.但是必须要积累过程资产,所以还是介绍一下,不定哪天就有人用了.       首先还是介绍遇到的问题,我是做传统后台管理系统的,公司赶时髦,要用boo ...

  6. Perl模块管理

    Perl模块管理 perl有自带的模块,还有第三方模块.自带的模块是随perl安装而安装好的,第三方模块需要从CPAN(Comprehensive Perl Archive Network)上下载并安 ...

  7. perl选项、特殊变量、一些函数参考手册

    perl一行式程序系列文章:Perl一行式 本文用来收集Perl一行式中涉及到的一些选项.特殊变量的说明,可以用来做速查手册. 本文会逐渐更新. 第一次学Perl一行式时,请直接忽略本文内容,并直接从 ...

  8. C# 未能加载文件或程序集“ Newtonsoft.Json” Json格式错误

    原因:版本不一致,所使用的dll和配置文件中的版本不一致.解决: (1)查看所使用的Newtonsoft.Json.dll版本 ,然后把对应的版本修改在配置文件中如下,比如版本为“4.5.0.0” 修 ...

  9. [日常]nginx与网络事件模型

    Nginx 的特点: 1.处理静态文件 2.反向代理加速 3.fastCGI,简单的负载均衡和容错 4.模块化的结构 5.分阶段资源分配技术,使得它的 CPU 与内存占用率非常低,保持 10,000 ...

  10. JavaScript中的三种弹窗

    ---恢复内容开始--- 1.警告窗口(alert) <script type="text/javascript"> alert("我是警告弹框!" ...