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)

大家都在看

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