自定义函数

(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. [机器学习] 分类 --- Naive Bayes(朴素贝叶斯)

    Naive Bayes-朴素贝叶斯 Bayes' theorem(贝叶斯法则) 在概率论和统计学中,Bayes' theorem(贝叶斯法则)根据事件的先验知识描述事件的概率.贝叶斯法则表达式如下所示 ...

  2. awk知识点总结

    find+xargs+grep+sed+awk系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 0.学习资料推荐 1.awk入门:看视频.找 ...

  3. 完美实现 Windows 下网络通信

    编译环境:DEV C++ 配置编译器 Windows 下 实现 Socket 编译需要 ws2_32.lib 这个库的支撑,所以我们编译前应该配置下编译器,具体配置步骤如下: Tools -> ...

  4. YTKNetwork源码详解

    本篇是第三篇关于网络请求的,将讲述YTKNetwork源码,上述两篇分别讲述AFNetworking源码解析以及结合自己项目封装AFNetworking. AFNetworking源码解析:https ...

  5. C#委托。

    什么是委托. 委托是一种数据类型. 委托的作用. 把变化的东西封装起来. 委托是引用变量,声明后不赋值为null   所以使用前校验非空. class Program { static void Ma ...

  6. 【转载】Sqlserver通过维护计划定时自动备份数据库

    Sqlserver数据库的运维过程中,数据库的备份操作至关重要,平时我们都是手动进行数据库的备份操作.如果要做到让数据库定时自动备份,则可以使用Microsoft SQL Server Managem ...

  7. 各个模式的accesstoken续期详解

    一些预备知识 jwt的时间格式 转换为时间可以用js, new Date(1531841745*1000) ==>Tue Jul 17 2018 23:35:45 GMT+0800 (中国标准时 ...

  8. vb.net 使用NPO自定義格式

    '導入命名空間 Imports System.IOImports NPOI.HSSF.UserModelImports NPOI.HPSFImports NPOI.POIFS.FileSystem P ...

  9. 将Hexo博客部署到云主机

    摘要: 在云主机上搭建一个git裸仓库,然后使用nginx作为网页服务器,就可以轻松将Hexo博客通过git部署到云主机上. 这是一个忧伤的故事 我的博客KiwenLau之前部署在Coding Pag ...

  10. gulp es6 转 es5

    npm install --save-dev gulp-babel babel-preset-es2015 var babel = require("gulp-babel"); / ...