|
本帖最后由 Shawn赵瑞翔 于 2-15-2025 08:50 编辑
近期查看真题,发现竟然忘了什么是LISP,什么CDR、CAR看不懂,觉得自己退化了连ACSL题目都看不懂 所以就研究了一下
1,什么是LISP
LISP是一种非常高端的语言,并且长期垄断了人工智能领域的应用,虽然非常古老,但是依旧走在科技前言
LISP是LIST Processing 的简称,由来自麻省理工学院的人工智能研究先驱John McCarthy在1958年基于λ演算所创造,采用抽象数据列表与递归作符号演算来衍生人工智能(这段是百度百科)
听起来,LISP非常的高深难懂,但是很明显,ACSL这类型的竞赛不会考到这么难的内核,只会让你看尽无数的括号..
2,ACSL在这个板块考什么
实际上,虽然ACSL叫这个板块叫LISP语言,但实际上是纸老虎,说白了就是让你看伪代码,看懂伪代码并且判断其输出
不同于常规的汇编伪代码,LISP看起来更难懂,但实际上更简单
在ACSL中出现的LISP伪代码基本上就是一行,比前后缀加减法还简单
一般出现的伪代码我们分成两类:1,运算 2,控制符
1,运算
例如:
(ADD (MULT 3 (EXP 2 3)) (MULT (EXP 2 2) (SUB (MULT 5 3) 6)) (EXP 2 (SUB (9 3))))
这就是一段LISP伪代码,不难看懂,ADD(加法),MULT(乘法),SUB(减法),EXP(次方),DIV(除法)
十分类似于前缀表达式,优先计算小括号内的运算,再进行第二层的运算,以此类推。在一个括号内,会包括:(运算符,a, b),例如(EXP, a, b)。
那么这个表达式的意思就是去运算a的b次方,a为底,b为幂。类似的,(SUB, a, b)指的就是a-b
例题:
(ADD (MULT 2 5) (EXP 3 2) (SUB 9 (ADD 1 7)) (DIV 15 3) (ADD 4 (SUB 8 4) 6))
【答案】39
【解析】(ADD (MULT 2 5) (EXP 3 2) (SUB 9 (ADD 1 7))(DIV 15 3) (ADD 4 (SUB 8 4) 6))
= (ADD 10 9 (SUB 9 8) 5 (ADD 4 4 6))
= (ADD 10 9 1 5 14)
= 39
2,控制符
这种符号会相对难理解一点,但仅限于一点
ACSL主要考到的控制符包括:CDR, CAR, REVERSE, SETQ
控制符不同于运算符,针对的对象不是数字,而是一个大LIST。通过控制符来更改list中元素的顺序,生成新list,删除list元素,选取元素等等,故只服务一个对象
类似于前面的运算符,控制符的表达方式是:(控制符(控制符(控制符(控制符(控制符(.....(一堆字母/数字表示变量))))))))
举个例子:
(CDR (CAR (CDR (REVERSE (CAR (CDR ‘(1 (2 ((3 4) 2) 3) 2 (4 (1 2)))))))))
注意,这个‘表示的是后面的所有内容是一个大的多层的list,而非控制符,我们解题的时候要从有'的地方开始解
现在来解释这些控制符
1 CAR:保留List中第一部分(可能为一个元素,也可能为一个子List)
例如:CAR(a, b, c)=(a) CAR((a,b),(d,c),e,f)=(a,b)
2 CDR:去掉List中第一部分
例如:CDR(a, b, c)=(b, c) CDR((a,b),(d,c),e,f)=((d,c),e,f)
3 REVERSE:把List中各个部分倒序输出
例如 REVERSE: (a,b,c)=(c,b,a) REVERSE((a,b),(d,c),e,f)=(f,e,(d,c),(a,b))
4 SETQ: 赋值运算符,把一个变量赋值为一个List
其实这就是说我初始化设置,SETQ X = (a,b), 那么我在式子中的x就代表(a,b) (其实就是换元)
知道了这些,我们先来一起做一道例题
(CDR (CAR (CDR (REVERSE (CAR (CDR ‘(1 (2 ((3 4) 2) 3) 2 (4 (1 2)))))))))
注意到我们的初始list是(1 (2 ((3 4) 2) 3) 2 (4 (1 2))
第一层操作是CDR, 也就是将第一个元素,即1 删除,list变为:((2 ((3 4) 2) 3) 2 (4 (1 2))
接下来第二层操作是CAR,也就是只保留第一个元素,即整个子list (2 ((3 4) 2) 3)
第三层是REVERSE,将剩下的list倒序输出得到:(3 ((3 4) 2) 2) 注意:list中的子list里面不换顺序,将子list看做一个整体,一个元素来看
第四层是CDR,删除第一项,得到((3 4) 2) 2)
第五层是CAR,保留第一项,剩下((3 4) 2)
最后一层是CDR,删除第一项,也就得到了答案,即(2)。注意,答案以一个小list形式呈现
接下来,我们来小试牛刀
(REVERSE (CAR (CDR (CDR (CAR ‘((a b (c d)) (e (f g)) (h (j k))))))))
【答案】‘(d c)
【解析】(REVERSE (CAR (CDR (CDR (CAR ‘((a b (c d)) (e (f g)) (h (j k))))))))
= (REVERSE (CAR (CDR (CDR ‘(a b (c d))))))
= (REVERSE (CAR (CDR ‘(b (c d)))))
= (REVERSE (CAR ‘((c d))))
= (REVERSE ‘(c d))
= ‘(d c)
希望本帖对你有帮助:-)
|
|