Lisp语法解析
1、①const char *str: 代表着str是一个指向char的常量,就是不能通过改变str来改变所指向的内容。但是可以通过改变char所定义的数组从而改变其中指向的内容。
②char *const str: 这里就是定义了一个指针变量,可以通过改变str来改变数组指向内容元素的值。
这参考了const char *str,char const *str,char *const str的区别,及const详解_一个山里的少年的博客-CSDN博客
2. .rbegin()为逆向迭代器,指向字符串的最后一个字符。 .rend()为逆向迭代器,指向字符串第一个字符的前一个位置。
3.b.find('a',x)表示从string字符串第x位开始寻找字符串a的位置。
4.emplace_back()在实现时,则是直接在容器的尾部创建这个元素,省去了拷贝或移动元素的过程。
class Solution:
def evaluate(self, expression: str) -> int:
def f(vals,obj): #求值函数f,vals是符号表,obj是表达式
if isinstance(obj,tuple): #如果是元组,就递归求解
if obj[0]=='let': #根据obj[0]执行对应的操作
vals=vals.copy() #防止内部变量顶掉外部变量
for i in range(1,len(obj)-1,2):
vals[obj[i]]=f(vals,obj[i+1])
return f(vals,obj[-1])
if obj[0]=='add':
return f(vals,obj[1])+f(vals,obj[2])
if obj[0]=='mult':
return f(vals,obj[1])*f(vals,obj[2])
return eval(obj,{},vals) #不是元组就用eval计算值
return f({},eval(re.sub(r'([^( )]+)',r"'\1'",expression).replace(' ',',')))