《4个程序员的一天》一文中，idior问道：

(define (inner-runner 1st-number operators numbers)
(if (= 0 (length operators))
1st-number
(inner-runner ((car operators) 1st-number (car numbers))   ; calculate new 1st-number
(cdr operators)                                            ; get new operators list
(cdr numbers))))                                          ; get new numbers list

(define (Foo operators numbers)
(inner-runner (car opes) ops (cdr opes)))

> (Foo (list * - + ) (list 3 5 2 4))

Setp1：从Numbers中“POP”出第一个数作为初始化操作数，叫做1st-number，。Numbers现在剩下n个数字，我们称这个新的list为Numbers*.

Setp2：然后递归的分别从Operators和Numbers*里“POP”出运算符和第二个运算数，拿来和前面我们拿到的1st- number做运算，把得到的结果当作新的1st-number，连同新的Operators和新的Numbers*，重复step2，直到 Operators变为空。

(list * - + ) ：构造一个list，包含3个元素：*，-， +
(length operators)：得到operators这个list的长度

(car operators)：得到operators这个list的第一个元素。

(cdr operators)：得到operators这个list从第二个元素开始的子list

(Foo (list * - ) (list 3 5 2))  =>

(inner-runner
(car (list 3 5 2))
(list * -)
(cdr (list 3 5 2))) =>

(inner-runner
((car (list * -))
3
(car (list 5 2)))
(cdr (list * -))
(cdr (list 5 2))) =>

(if (=
0
(length (list -)))
15
(inner-runner
((car (list -))
15
(car (list 2)))
(cdr (list -))
(cdr (list 2)))) => 等于13