|
|
От: | Александр Шумилов | |
| Дата: | 09.06.06 08:00 | ||
| Оценка: | |||
reduce (lambda (el, isthere) => if isthere then true else (N == el)), false, L)reduce (b, false, [1, 3, 5, 7])
== b(1, b(3, b(5, b(7, false)))) (по определению функции reduce)
-> b(1, b(3, b(5, false)))
-> b(1, b(3, false))
-> b(1, false)
-> truereduce (b, false, [1, 3, 5, 7])
-> b(1, reduce(b, false, [3, 5, 7]))
-> trueВычисление заканчивается так быстро, поскольку для b никогда не требуется значения его второго аргумента, иначе говоря, b не является строгой относительно второго аргумента. Если значение первого аргумента оказывается тем числом, которое проверяется на принадлежность к списку, то второй аргумент попросту отбрасывается; такой случай и показан в выше приведенном примере, где выражение отброшенного аргумента выделено курсивом.
reduce(f, b, nil) <= b
reduce(f, b, x::l) <= f(x, reduce(f, b, l))