本题不难,有足够的耐心就能做出来。对于比较复杂的规则,我们用递归应该比用栈更容易。因为“括号”天然就提示了递归的层次,而且这种expression parse的题型,括号内外的规则都是完全一样的,非常适合用递归。
注意一下对于let语句,后面会跟着总数为奇数个的参数。除了最后一个参数,第2k个参数一定是一个变量,第2k+1个参数则可以是变量/数值/递归式,这两种类型交替出现。而对于最后一个参数(注意它也是属于2k),则同样可能是变量/数值/递归式,这就需要额外进行判断。也就是说,在处理第2k个参数时,如果遇到了数值或者递归式,就意味着这个参数一定最后一个;如果遇到了变量但变量的结尾就是字符串的结尾,也意味着这个参数是最后一个。