NSUBSTITUTE, NSUBSTITUTE-IF and NSUBSTITUTE-IF used to contain
(let ((length (length sequence))) ...
in the code path for lists. In the macroexpansion it became clear that
this recomputed and shadowed the LENGTH variables already established
by DEFINE-SEQUENCE-TRAVERSER.
A very brief test with list lengths between 5 and 500 suggests that
the speedup produced by removing the redundant computation can be
around 5 to 20 %.
(let ((end (or end length)))
(seq-dispatch sequence
(if from-end
(let ((end (or end length)))
(seq-dispatch sequence
(if from-end
- (let ((length (length sequence)))
- (nreverse (nlist-substitute*
- new old (nreverse (the list sequence))
- test test-not (- length end) (- length start)
- count key)))
+ (nreverse (nlist-substitute*
+ new old (nreverse (the list sequence))
+ test test-not (- length end) (- length start)
+ count key))
(nlist-substitute* new old sequence
test test-not start end count key))
(if from-end
(nlist-substitute* new old sequence
test test-not start end count key))
(if from-end
(declare (fixnum end))
(seq-dispatch sequence
(if from-end
(declare (fixnum end))
(seq-dispatch sequence
(if from-end
- (let ((length (length sequence)))
- (nreverse (nlist-substitute-if*
- new predicate (nreverse (the list sequence))
- (- length end) (- length start) count key)))
+ (nreverse (nlist-substitute-if*
+ new predicate (nreverse (the list sequence))
+ (- length end) (- length start) count key))
(nlist-substitute-if* new predicate sequence
start end count key))
(if from-end
(nlist-substitute-if* new predicate sequence
start end count key))
(if from-end
(declare (fixnum end))
(seq-dispatch sequence
(if from-end
(declare (fixnum end))
(seq-dispatch sequence
(if from-end
- (let ((length (length sequence)))
- (nreverse (nlist-substitute-if-not*
- new predicate (nreverse (the list sequence))
- (- length end) (- length start) count key)))
+ (nreverse (nlist-substitute-if-not*
+ new predicate (nreverse (the list sequence))
+ (- length end) (- length start) count key))
(nlist-substitute-if-not* new predicate sequence
start end count key))
(if from-end
(nlist-substitute-if-not* new predicate sequence
start end count key))
(if from-end