下一个问题是什么?
else
为什么else是下一个问题?
因为我们不需要询问更多的问题了。
else真是一个问题吗?
是的,else是一个值永远为真的问题
这一行的意思是什么:(else (or (eq? (car lat) a) (member? a (cdr lat)))) ?
现在我们知道lat不是空了,我们必须搞清楚lat的car是否是院子a,或者a是否在lat剩余的部分中。这个语句的作用就是这样的。
真还是假?:(or (eq? (car lat) a) (member? a (cdr lat)))),其中a是meat,lat是(mashed potatoes and meat gravy)
我们将按照问题的顺序来说明
(eq? (car lat) a) 是真还是假?:其中a是meat,lat是(mashed potatoes and meat gravy)
假,因为meat与mashed((mashed potatoes and meat gravy)的car)不eq?
or的第二个问题是什么?
(member? a (cdr lat)) .通过将参数lat替换成(cdr lat)来引用函数
现在,member?函数的参数是什么?
a是meat,lat现在是(cdr lat),也就是(potatoes and meat gravy)
下一个问题是什么?
(null? lat),记住第一个戒条。
(null? lat)是真还是假呢?(这里lat是(potatoes and meat gravy) ) ?
假
现在我们要做什么?
问下一个问题
下一个问题是什么?
else
(or (eq? (car lat) a) (member? a (cdr lat)))是什么意思?
查明lat的car是否和a是eq?的或者通过调用这个函数查明a是否是lat的cdr中的成员
a和lat的car eq?吗?
不,因为a是meat,lat的car是potatoes
我们下面做什么?
我们询问(member? a (cdr lat))
现在,member?的参数是什么了?
a是meat,lat是(and meat gravy)
下一个问题是什么?
(null? lat)
我们现在做什么?
因为(null? lat)是假的,所以我们询问下一个问题。
下一个问题是什么?
else
(or (eq? (car lat) a) (member? a (cdr lat)))的值是什么?
是(member? a (cdr lat))
为什么?
因为(eq? (car lat) a)是假的。
我们现在做什么?
反复--使用新的参数来引用函数
新的参数是什么?
a是meat,lat是(meat gravy)
下一个问题是什么?
(null? lat)
我们现在做啥?
因为(null? lat)是假的,询问下一个问题。
下一个问题是什么?
else
(or (eq? (car lat) a) (member? a (cdr lat)))的值是什么?
T,因为(car lat)是meat,并且a也是meat,是同一个原子。所有(or ...)回答T
那么(member? a lat)的值是什么,其中a是meat 并且lat是(meat gravy)
T,因为我们发现meat是(meat gravy)的一个成员
那么(member? a lat)的值是什么,其中a是meat 并且lat是(and meat gravy)
T,因为meat也是(and meat gravy)的一个成员
那么(member? a lat)的值是什么,其中a是meat 并且lat是(potatoes and meat gravy)
T,因为meat也是(potatoes and meat gravy)的一个成员
那么(member? a lat)的值是什么,其中a是meat 并且lat是(mashed potatoes and meat gravy)
T,因为meat也是(mashed potatoes and meat gravy)的一个成员,当然,这也是我们的最初的lat了
--
Stay Hungry. Stay Foolish.