Common LISP 命令大全

书籍下载地址:

Ansi Common Lisp 中文版|百度网盘

实用Common.Lisp编程 .pdf|百度网盘

LISP指令速查网站推荐:

Simplified Common Lisp reference (jtra.cz)

我制作的表格:

由于Common LISP命令很多,经常忘,所以做个这个表格,方便速查。

表格中命令的顺序基本为ANSI Common LISP这本书中命令出现的顺序。

命令 含义 例子 T 真 NIL 假 +-*/ 加减乘除 > (+ 2 3 4)

9 1+ (1+ n) 相当于 (+ n 1) 1- (1- n) 相当于 (- n 1) >和< 大于和小于 > (> 2 1)

T CHAR< 和 CHAR> 字符比较 全局变量需要左右加上星号 > (setf print-array t)

T ZEROP 为0时返回真 ACTERP 是否为字符 /= 不相等 = 判断相等(建议到这个
网站

查看具体解释)。仅能判断数字。 > (= 4 4.0)

T EQ 是否完全相同。内容相同但是内存位置不同也为不同。不用于数字。 > (eq (cons ‘a ‘b) (cons ‘a ‘b))

NIL

(eq ‘a ‘a)

T EQL 与EQ相似。可以比较数字。 EQUAL 是否内容相同。内存位置可以不同。字符串大小写敏感 > (equal (list 1 (cons 2 3)) (list 1 (cons 2 (+ 2 1))))

T EQUALP 字符串大小写不敏感 AND OR NOT 逻辑与、或、非 ODDP 是否为奇数 EVENP 是否为偶数 QUOTE() 不求值 >(+ 1 2)

(+ 1 2) CONS 构建一个长度为2的列表

(但第二个输入值可以是一个列表) > (cons ‘a ‘(b c d))

(A B C D) CONSP 判断是否为CONS LIST 构建一个列表 (list 1 2 3) GETF 获取列表的键值 (getf (list :a 1 :b 2 :c 3) :a) ;;如果没有该值,返回NIL CAR 获取列表第一个元素 CDR 获取列表第二个以及

之后的元素构成的列表 THIRD 获取列表第三个元素 LISTP 判断输入是否为列表 NULL 判断是否为空表或NIL IF 相当于c语言的aaa?xxx:yyy DEFUN 声明全局函数

(defun name (parameter*))

“Optional documentation string.”

body-form*) (defun our-third (x)

(car (cdr (cdr x))))

调用时:(our-third (1 2 3)) (DEFUN的参数列表 &rest 剩余的参数。会被包装为列表。 (defun our-funcall (fn &rest args)

(apply fn args)) &optional 可选参数 (defun philosoph (thing &optional (property ‘fun))

(list thing ‘is property)) &key 关键字参数 > (defun keylist (a &key x y z)

(list a x y z))

KEYLIST

(keylist 1 :y 2)

(1 NIL 2 NIL) ) EQL 相等判断 FORMAT 输出 > (format t “~A plus ~A equals ~A. ~%” 2 3 (+ 2 3))

2 PLUS 3 EQUALS 5

NIL ~A 数据输出的位置,相当于C语言的%d ~% 换行符 READ 输入 > let ((val (read)) LET 定义局部变量 > (let ((x 1) (y 2))

(+ x y))

3 DEFPARAMETER 创建全局变量(变量需要加星号) > (defparameter glob 99) DEFCONSTANT 定义全局常量(不需要星号) BOUNDP 判断是否为全局变量或常量 > (boundp ‘glob)

T DEFVAR 定义全局变量 (defvar db NIL) SETQ 赋值 SETF 赋值(可给全局或局部变量),可以创建全局变量。

可以给数组的某个值赋值,而setq不行。 > (let ((a ‘(1 2 3 4))) (setf (third a) ‘new-value) a)

(1 2 NEW-VALUE 4) SET 赋值。用于设置符号 (set ‘foo ‘(1 2 3)) INCF 自加。不加参数时相当于c的++。也可以参数相当于+= REMOVE 返回不包含这个对象的新列表,但不改变原列表 > (setf lst ‘(c a r a t))

(C A R A T)

(remove ‘a lst)

(C R T) DELETE REMOVE的破坏性版本。但不能保证所需移除的元素都能移除。 > (setf lst ‘(a r a b i a) )

(A R A B I A)

(delete ‘a lst )

(R B I)

lst

(A R B I) DO 循环

(DO (变量定义)

(结束条件 返回值)

循环主体)

其中变量定义为(变量名 变量初值 (变量变化语句)) (defun show-squares (start end)

(do ((i start (+ i 1)))

((> i end) ‘done)

(format t “~A A%” i (* i i)))) DOTIMES 循环次数 (dotimes (x 5 x)

(format t “~A ” x))

0 1 2 3 4

5;; 第一行第二个x是返回值,可以不加 LOOP 循环宏 > (loop for x from 0 to 9

do (princ x))

0123456789

NIL

(loop for x = 8 then (/ x 2)

until (< x 1)

do (princ x))

8421

NIL (defun sumx (n)

(loop for x from 1 to n

sum x));;返回从1加到n的结果 > (loop for x from 1 to 5

collect (random 10))

(3 8 6 5 0) (defun even/odd (ns)

(loop for n in ns

if (evenp n)

collect n into evens

else collect n into odds

finally (return (values evens odds))))

(even/odd ‘(1 2 3 4))

(2 4)

(1 3) (loop for i below 10

and a=0 then b

and b=1 then (+ b a)

finally (return a));;计算第11个斐波那契数 PROGN 接受任意数量的表达式,依序对它们求值,并返回最后一个值。 DOLIST for each… > (dolist (obj lst) 相当于C++的for(auto obj:lst){,相当于Python的for obj in lst: FUNCTION(#’) 把函数当做实参传入 APPLY 接受函数和实参列表,并返回把传入函数应用在后面实参的结果 > (apply #’+ ‘(1 2 3))

6 FUNCALL 功能和APPLY相同,但实参不需要包装成列表。 > (funcall #’+ 1 2 3)

6 LAMBDA Lambda表达式 (lambda (x y)

(+ x y))

(funcall #'(lambda (x) (+ x 100)) 1) TYPEP 判断是否为某种类型 > (typep 27 ‘integer)

T COPY-LIST 返回列表的复制 ATOM 验证一个项是否为原子(即列表的一个项) APPEND 返回列表串接 > (append ‘(a b) ‘(c d) ‘e)

(A B C D E) NCONC 返回列表串接并更新第一个列表的最后一个 cons 单元的 next 指针。 > (let ((l1 (list 1 2 3))

(l2 (list 4 5 6)))

(nconc l1 l2)

l1)

(1 2 3 4 5 6) NTH 通过索引获取列表元素 > (nth 0 ‘(a b c))

A NTHCDR 找到第n个CDR > (nthcdr 2 `(a b c d e))

(C D E) LAST 返回列表最后一个CONS对象 > (last ‘(a b c))

(C) LAST的CAR 返回列表的最后一个元素 > (car (last ‘(a b c)))

C SECOND 返回第二个元素 CADR 返回第二个元素(相当于CDR的CAR) CADDR 返回第三个元素(相当于CDR的CDR的CAR)可以无限加D。 MAPCAR 返回把函数应用到列表每个元素的结果 > (mapcar #'(lambda (x) (+ x 10))

‘(1 2 3))

(11 12 13)

MAPCAN 类似MAPCAR。但它返回值是用NCONC拼接在一起的。 MAPC 把函数应用到列表每个元素,返回原来的列表 MAP 把函数应用到列表每个元素,可定义返回的类型。 (map ‘list (lambda (x) (+ x 10)) ‘(1 2 3 4))

(11 12 13 14) MAP-INTO 把函数应用到列表每个元素,第一个参数不是一个序列类型,而是用来存储结果的。 > (let ((a (list 1 2 3 4))) (map-into a #’* a a) a)

(1 4 9 16)

还可以:(setf v (map-into v #’1+ v)) MAPLIST 将列表的渐进的下一个 CDR传入函数 > (maplist #'(lambda (x) x) ‘(a b c))

((A B C) (B C) (C)) MEMBER 判断元素是否为列表的成员。可以传入参数:TEST和:KEY > (member ‘b ‘(a b c))

(B C)

(member ‘(a) ‘((a) (z)) :test #’equal)

((A) (Z))

(member ‘a ‘((a b) (c d)) :key #’car)

((A B) (C D)) ;;在这个例子里,我们询问是否有一个元素的CAR是 a MEMBER-IF 返回由满足条件的元素构成的列表 > (member-if #’oddp ‘(2 3 4))

(3 4) ADJOIN 如果对象还不是列表的,成员,构建对象至列表上 > (adjoin ‘b ‘(a b c))

(A B C)

(adjoin ‘z ‘(a b c))

(Z A B C) UNION 并集 INTERSECTION 交集 SET-DIFFERENCE 补集 > (set-difference ‘(a b c d e) ‘(b e))

(A C D) LENGTH 返回元素的数目 SUBSEQ 获取列表的一部分,相当于其他语言的Slice > (subseq ‘(a b c d) 1 2)

(B)

(subseq ‘(a b c d) 1)

(B C D) REVERSE 列表反转 NREVERSE 使原列表反转? EVERY 判断列表每个元素都满足条件 > (every #’oddp ‘(1 3 5))

T SOME 判断列表部分元素满足条件 > (some #’evenp ‘(1 2 3))

T PUSH 把元素插入列表的前端 (push atom list) POP 移除列表的第一个元素,并返回这个元素 ASSOC 返回列表中CAR为指定元素的列表 > (setf min ‘((a b c) (b c) (c d)))

(cdr (assoc ‘a min))

(B C) MAKE-ARRAY 构造数组 > (setf arr (make-array ‘(2 3) :initial-element nil)) ;;构造了一个2×3的数组 AREF 通过索引获取数组元素 > (setf (aref arr 0 0) ‘b)

B>

(aref arr 0 0)

B #na 表示字面常量的数组,其中n是数组的维度 #2a((b nil nil) (nil nil nil)) VECTOR 向量 > (vector “a” ‘b 3) VECTOR-PUSH 把元素插入向量的前端 VECTOR-POP 移除向量的第一个元素,并返回这个元素 SVREF 通过索引获取向量元素 WRITE-TO-STRING 数字转字符串 SORT 字符串排序 > (sort “elbow” #’char

Original: https://www.cnblogs.com/mariocanfly/p/16584882.html
Author: mariocanfly
Title: Common LISP 命令大全

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573908/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • zabbix部署

    zabbix zabbix zabbix介绍 zabbix特点 zabbix部署 zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开…

    Linux 2023年6月13日
    0121
  • [云原生]Kubernetes-集群搭建(第2章)

    一、前置知识点 二、kubeadm部署方式介绍 三、安装要求 四、最终目标 五、准备环境 六、环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(…

    Linux 2023年6月13日
    062
  • gerrit系统如何配置访问控制

    .版本:v0.3作者:河东西望日期:2022-7-13. gerrit系统的上手使用有两个难点: 想要上手使用gerrit的同仁们,搭建部署好gerrit系统之后,会发现gerri…

    Linux 2023年6月7日
    087
  • 操作系统虚拟内存发展史

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    0104
  • 访问github 与 mac修改hosts并刷新DNS

    加速githubhttps://ipaddress.com/website/github.global.ssl.fastly.nethttps://ipaddress.com/we…

    Linux 2023年6月8日
    0109
  • 代码审计-Typecho反序列化getshell

    0x01 漏洞代码 install.php&#xFF1A; php $config = unserialize(base64_decode(Typecho_Cookie::…

    Linux 2023年5月28日
    083
  • 小记:音频格式转化ByPython(上)

    近日新买了个耳机,店家附送了一些周董的无损音乐资源,收到货后迫不及待的下载试听,才发现这些资源是wav格式的,导入播放器后歌名、作者、专辑等全是未知,当时想着是不是店家的资源有问题…

    Linux 2023年6月8日
    098
  • Sharding-jdbc + Seata + Nacos整合

    前置条件 先了解Sharding-jdbc、Seata、Nacos这三样东西各自的作用以及单独使用时的配置。 如果已经做过Seata + Nacos的整合的,直接看最后的 Seat…

    Linux 2023年6月7日
    088
  • sed与awk命令

    1.1 sed命令语法 在看单个命令以前,需要回顾一下关于所有sed命令的两点语法。在上一个章中,我们介绍了其大部分内容。行地址对于任何命令都是可选的。它可以使一个模式,被描述为由…

    Linux 2023年6月7日
    096
  • 【EventOS Nano】EventOS Nano初步了解

    EventOS Nano是什么? EventOS Nano是一个面向单片机、事件驱动的、分布式的、可跨平台开发的嵌入式开发平台。主要有两大技术特色: 事件驱动和 超轻量 Event…

    Linux 2023年6月13日
    082
  • JuiceFS 新手必知 24 问

    JuiceFS 是一个创新性的软件产品,很多初次尝试的小伙伴对产品和用法感到很多疑惑,所以为了帮助大家快速理解并上手 JuiceFS,我们整理了24个关于 JuiceFS 经典的问…

    Linux 2023年6月14日
    098
  • 常见网络安全设备

    一、防火墙定位:访问控制类产品,网络出现后的第一类安全产品。功能:隔离内网、外网以及DMZ区(业务系统对外发布区,Web应用服务器,邮件服务器等)并控制用户访问。部署方式:通常部署…

    Linux 2023年6月14日
    078
  • Vim配置文件-详解(.vimrc)

    Vim配置文件的作用 Vim启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim 所有系统用户在启动Vim时,都会加载这个配置文件。…

    Linux 2023年6月13日
    082
  • NoteOfMySQL-14-日志管理

    一、MySQL日志 日志是MySQL数据库的重要组成部分,日志文件记录了MySQL数据库的日常操作和错误信息,可以通过分析这些日志文件了解MySQL数据库的运行情况。MySQL数据…

    Linux 2023年6月14日
    086
  • Netty源码解读(四)-读写数据

    读写Channel(READ)的创建和注册 在NioEventLoop#run中提到,当有IO事件时,会调用 processSelectedKeys方法来处理。 当客户端连接服务端…

    Linux 2023年6月7日
    080
  • CentOS8 AnolisOS8 yum安装 No match for argument: htop Error: Unable to find a match: htop

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 CentOS8 AnolisOS8 yum安装失败 今天有人反馈服务器卡,登录上服务器,想看下CPU以及内存使用情况,觉得top…

    Linux 2023年5月27日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球