Emacs Lisp基本语法(六)
简介
Lisp,名称源自列表处理器(英语:List Processor)的缩写,最早由约翰·麦卡锡在1958年基于λ演算创造,演化至今,是历史第二悠久的高级语言,仅次于Fortran,也是第一个函数式编程语言。
1980年代盖伊·史提尔二世编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。还有一种是编辑器Emacs所派生出来的Emacs Lisp
(而Emacs正是用Lisp作为扩展语言进行功能扩展)非常流行,并创建了自己的标准。
LISP基本构建块
Lisp程序是由三个基本构建块
原子(atom)
一个原子是一个数字连续字符或字符串。它包括数字和特殊字符。比如
hello-world imfidding 123 #name ...
Lisp
列表(list)
列表是包含在括号中的原子和/或其他列表的序列,有点类似于数组。比如
(i am fidding) (the (1 2 3) is (hello))
Lisp
字符串(string)
字符串是一组括在双引号字符。比如
"hello world" "你好!"
Lisp
LISP的基本操作符
quote
(quote a)
即返回a,等同于'a
简写。将
quote
写成'
只是一种语法糖,我们更常用的为后者的写法。atom
(atom a),用来判断a是否为atom类型, 当a是一个atom或者空的列表(list)时,返回原子t,否则返回NIL。
在lisp中,我们用原子
t
表示真,用nil
或者()
表示假。例如
(atom 'a)
Lisp
返回
t
Lisp
eq
(eq x y)
,当x和y指向相同的对象的时候返回t,否则返回NIL。car
(car x)
要求x是一个表,它返回x中的第一个元素。cdr
(cdr x)
同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表。
LISP变量与常量
全局变量
全局变量有永久值在整个LISP系统,并保持有效,直到指定的新值。
- 可以使用
defvar
结构一般声明,例如(defvar x 123)
Lisp
即声明了一个类型为var的变量符号x,并赋值为123
- 也可以使用
setq
来声明为定义类型的变量,例如(setq x 123)
Lisp
- 可以使用
局部变量
局部变量是指只在给定的过程中生效。 局部变量也可以使用
setq
来声明,此外还有其他两种方式let
与prog
。- let声明,结构如下,
(let ((var value) (var2 value2))...)
Lisp
例如
(let ((x 'a)(y 'b)(z 'c))
Lisp
即列表中放键值对,将x赋值为a,y赋值为b,z赋值为c。
- prog声明,例如
(prog ((x '(a b c)) (y '(1 2 3)) (z '(a s d)))
Lisp
- let声明,结构如下,
常量
常量使用defconstant结构声明。例如
(defconstant PI 3.141592)
Lisp
LISP决策
决策就是当条件为true,则执行;当条件为false,则执行其他条件。
cond结构,cond的基本语法规则为
(cond (cod1 action1)(cod2 action2)...(codn actionn))
Lisp
即第一次执行决策
cod1
,如果为真,那么执行action1
语句;如果计算解决为nil,那么执行下一个决策cod2
,当所有的条件都为nil,那么结果将返回nil。if结构,if的基本语法规则为
(if (test-clause) (<action1) (action2))
Lisp
LISP函数
命名函数defun宏用于定义函数,该函数需要三个参数,函数名(name),参数(args),函数体(body),其结构如下
(defun name (args)"description"body
)
Lisp
例如
(defun sum (a b c d)"改行数用于计算4个数总和"( + a b c d)
)
Lisp
这样就定义了一个简单的函数,即sum函数传入4个参数,用于执行+函数操作,当执行
(write(sum 1 2 3 4))
Lisp
返回
10
Lisp
总结
emacs lisp的语法不止这些,本文只是简单的介绍了一些基本概念,或者说是一些入门级的语法。
Emacs Lisp基本语法(六)相关推荐
- Emacs Lisp 功能扩展集锦
From 参考 Emacs Lisp 功能扩展集锦 session.el desktop.el ibuffer.el browse-kill-ring.el ido.el tabbar.el spee ...
- Pocket英语语法---六、感官动词接不同的动词表示什么意思
Pocket英语语法---六.感官动词接不同的动词表示什么意思 一.总结 一句话总结:其实进行时一般是表示连续,动词原形一般表示常态,过去分词一般表示被动(或者完成). 感官动词接原型表示动作的一般情 ...
- Emacs Lisp语言
An Introduction to Programming in Emacs Lisp 这本书 emacs 里有,按"C-h i",输入"m,Emacs Lisp In ...
- Emacs lisp 列表与函数的区别
1.通常我们在使用emacs学习elisp时,先打开一个测试用的文件如lisp.el,这时emacs会自动切换成Emacs-lisp模式如下: 在这个lisp.el中输入我们想要学习的各种语法即可. ...
- Emacs实现C++ 语法高亮、自动补全、各种跳转
觉得这篇博文发表出来后,可能会引起一些争议,很多人眼中Emacs已经太陈旧了,根本无法和自己心目中的IDE齐驱并驾,最开始接触Emacs是在前年的这个时候,当时公司里面来了一群linux高人,当时还在 ...
- python函数名的语法_Python 基础语法六 ——函数
一个程序可以按不同的功能实现拆分成不同的模块,而函数就是能实现某一部分功能的代码块. 1.函数的概述 定义:在Python中,定义个函数要使用 def 语句,一次写出函数名.括号.括号中的参数和冒号( ...
- c语言 结构体里使用动态数组_PHP 语法六数组使用及内部结构
说明 这里基于 php7.2.5 进行测试,php7 之后内部结构变化应该不是太大,但与 php5.X 有差别.我们今天学习 PHP 中的数组语法,数组在 PHP 中堪称万能结构,什么都能存什么都能放 ...
- Emacs lisp函数调用defun(五)
1.无参函数调用 (defun ADD ()"add print test"(interactive "add func")(message "xxx ...
- Emacs Lisp程序单步调试
原址 emacs运行过程中有时候会报错,这时我们需要对其进行debug(调试). 打开调试开关 执行M-x toggle-debug-on-error打开debug开关,这样当emacs出错的时候会进 ...
最新文章
- 300. Longest Increasing Subsequence
- 平时少用到的sql query
- MongoDB数据库备份与恢复
- 点击链接如何直接跳转到相对应的聊天窗口
- asp.net mvc kendo Grid Filter
- [Node.js] 模块化 -- path路径模块
- php 返回object,深入分析使用mysql_fetch_object()以对象的形式返回查询结果
- SoapUI接口测试断言
- 【生活中的逻辑谬误】功利误导和情感误导
- matlab相关性分析(皮尔逊,肯德尔,斯皮尔曼)
- 微服务可有本手、妙手、俗手?落子网关,俗手转妙手 ———— 2022高考全国作文题
- Mac pro M2芯片如何进入恢复模式
- python实验楼工资计算器_挑战:完善工资计算器
- 【放苹果】m个苹果放到n个盘子中
- DBCC CHECKDB用法 手工修复数据库
- 对C语言中警告(warning)的处理方法
- 500以内的蓝牙降噪耳机哪款好?高性价比降噪蓝牙耳机分享
- Unity 2D游戏制作
- 揭开真实的加密币地下瑞士银行, 特种部队巡逻、罗斯柴尔德家族投资投资的背后堪比现实版007...
- Barbara Liskov:CLU与Argus语言发明人