简介

Lisp,名称源自列表处理器(英语:List Processor)的缩写,最早由约翰·麦卡锡在1958年基于λ演算创造,演化至今,是历史第二悠久的高级语言,仅次于Fortran,也是第一个函数式编程语言。

1980年代盖伊·史提尔二世编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。还有一种是编辑器Emacs所派生出来的Emacs Lisp(而Emacs正是用Lisp作为扩展语言进行功能扩展)非常流行,并创建了自己的标准。

LISP基本构建块

Lisp程序是由三个基本构建块

  1. 原子(atom)

    一个原子是一个数字连续字符或字符串。它包括数字和特殊字符。比如

    hello-world
    imfidding
    123
    #name
    ...

    Lisp

  2. 列表(list)

    列表是包含在括号中的原子和/或其他列表的序列,有点类似于数组。比如

    (i am fidding)
    (the (1 2 3) is (hello))

    Lisp

  3. 字符串(string)

    字符串是一组括在双引号字符。比如

    "hello world"
    "你好!"

    Lisp

LISP的基本操作符

  1. quote

    (quote a) 即返回a,等同于 'a简写。

    quote写成' 只是一种语法糖,我们更常用的为后者的写法。

  2. atom

    (atom a),用来判断a是否为atom类型, 当a是一个atom或者空的列表(list)时,返回原子t,否则返回NIL。

    在lisp中,我们用原子t表示真,用nil或者()表示假。

    例如

    (atom 'a)

    Lisp

    返回

    t

    Lisp

  3. eq

    (eq x y),当x和y指向相同的对象的时候返回t,否则返回NIL。

  4. car

    (car x)要求x是一个表,它返回x中的第一个元素。

  5. cdr

    (cdr x)同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表。

LISP变量与常量

  1. 全局变量

    全局变量有永久值在整个LISP系统,并保持有效,直到指定的新值。

    1. 可以使用defvar结构一般声明,例如

      (defvar x 123)

      Lisp

      即声明了一个类型为var的变量符号x,并赋值为123

    2. 也可以使用setq来声明为定义类型的变量,例如
      (setq x 123)

      Lisp

  2. 局部变量

    局部变量是指只在给定的过程中生效。 局部变量也可以使用setq来声明,此外还有其他两种方式letprog

    1. let声明,结构如下,

      (let ((var value) (var2 value2))...)

      Lisp

      例如

      (let ((x 'a)(y 'b)(z 'c))

      Lisp

      即列表中放键值对,将x赋值为a,y赋值为b,z赋值为c。

    2. prog声明,例如
      (prog ((x '(a b c))
      (y '(1 2 3))
      (z '(a s d)))

      Lisp

  3. 常量

    常量使用defconstant结构声明。例如

    (defconstant PI 3.141592)

    Lisp

LISP决策

决策就是当条件为true,则执行;当条件为false,则执行其他条件。

  1. cond结构,cond的基本语法规则为

    (cond   (cod1    action1)(cod2    action2)...(codn   actionn))

    Lisp

    即第一次执行决策cod1,如果为真,那么执行action1语句;如果计算解决为nil,那么执行下一个决策cod2,当所有的条件都为nil,那么结果将返回nil。

  2. 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基本语法(六)相关推荐

  1. Emacs Lisp 功能扩展集锦

    From 参考 Emacs Lisp 功能扩展集锦 session.el desktop.el ibuffer.el browse-kill-ring.el ido.el tabbar.el spee ...

  2. Pocket英语语法---六、感官动词接不同的动词表示什么意思

    Pocket英语语法---六.感官动词接不同的动词表示什么意思 一.总结 一句话总结:其实进行时一般是表示连续,动词原形一般表示常态,过去分词一般表示被动(或者完成). 感官动词接原型表示动作的一般情 ...

  3. Emacs Lisp语言

    An Introduction to Programming in Emacs Lisp 这本书 emacs 里有,按"C-h i",输入"m,Emacs Lisp In ...

  4. Emacs lisp 列表与函数的区别

    1.通常我们在使用emacs学习elisp时,先打开一个测试用的文件如lisp.el,这时emacs会自动切换成Emacs-lisp模式如下: 在这个lisp.el中输入我们想要学习的各种语法即可. ...

  5. Emacs实现C++ 语法高亮、自动补全、各种跳转

    觉得这篇博文发表出来后,可能会引起一些争议,很多人眼中Emacs已经太陈旧了,根本无法和自己心目中的IDE齐驱并驾,最开始接触Emacs是在前年的这个时候,当时公司里面来了一群linux高人,当时还在 ...

  6. python函数名的语法_Python 基础语法六 ——函数

    一个程序可以按不同的功能实现拆分成不同的模块,而函数就是能实现某一部分功能的代码块. 1.函数的概述 定义:在Python中,定义个函数要使用 def 语句,一次写出函数名.括号.括号中的参数和冒号( ...

  7. c语言 结构体里使用动态数组_PHP 语法六数组使用及内部结构

    说明 这里基于 php7.2.5 进行测试,php7 之后内部结构变化应该不是太大,但与 php5.X 有差别.我们今天学习 PHP 中的数组语法,数组在 PHP 中堪称万能结构,什么都能存什么都能放 ...

  8. Emacs lisp函数调用defun(五)

    1.无参函数调用 (defun ADD ()"add print test"(interactive "add func")(message "xxx ...

  9. Emacs Lisp程序单步调试

    原址 emacs运行过程中有时候会报错,这时我们需要对其进行debug(调试). 打开调试开关 执行M-x toggle-debug-on-error打开debug开关,这样当emacs出错的时候会进 ...

最新文章

  1. 300. Longest Increasing Subsequence
  2. 平时少用到的sql query
  3. MongoDB数据库备份与恢复
  4. 点击链接如何直接跳转到相对应的聊天窗口
  5. asp.net mvc kendo Grid Filter
  6. [Node.js] 模块化 -- path路径模块
  7. php 返回object,深入分析使用mysql_fetch_object()以对象的形式返回查询结果
  8. SoapUI接口测试断言
  9. 【生活中的逻辑谬误】功利误导和情感误导
  10. matlab相关性分析(皮尔逊,肯德尔,斯皮尔曼)
  11. 微服务可有本手、妙手、俗手?落子网关,俗手转妙手 ———— 2022高考全国作文题
  12. Mac pro M2芯片如何进入恢复模式
  13. python实验楼工资计算器_挑战:完善工资计算器
  14. 【放苹果】m个苹果放到n个盘子中
  15. DBCC CHECKDB用法 手工修复数据库
  16. 对C语言中警告(warning)的处理方法
  17. 500以内的蓝牙降噪耳机哪款好?高性价比降噪蓝牙耳机分享
  18. Unity 2D游戏制作
  19. 揭开真实的加密币地下瑞士银行, 特种部队巡逻、罗斯柴尔德家族投资投资的背后堪比现实版007...
  20. Barbara Liskov:CLU与Argus语言发明人

热门文章

  1. 病毒行为分析初探(二)
  2. Hibernate框架基本使用
  3. hive优化--增加减少map数
  4. ActiveMQ持久化方式
  5. string 转换int
  6. ip subnet-zero
  7. Cooliris – 优雅的照片浏览工具[iOS/Android]
  8. onmounted vue3_Vue3.x 生命周期 和 Composition API 核心语法理解
  9. uni-app开发微信小程序上传提示以下文件没有被打包上传
  10. mpi并行 写同一文件_并行计算调度策略的笔记(001)