In yours lz-lst-accumulateyou calculate times (op (head lz) initial), and then also (op initial (head lz)). This is inconsistent; both should be the same and actually only be calculated once, since this is the same value:
(define lz-lst-accumulate
(lambda (op initial lz)
(if (lz-lst-empty? lz)
initial
(let ((val (op (head lz) initial)))
(cons val
(lambda () (lz-lst-accumulate op val (tail lz))))))))
, - *. cons .
, . lz-lst-accumulate left fold (scanl Haskell, , "" , foldl f z xs = last (scanl f z xs)).
re: take, .
(define take
(lambda (lz n)
(if (or (<= n 0) (lz-lst-empty? lz))
(list)
(if (= n 1)
(list (car lz)) ; already forced
(cons (car lz)
(take (tail lz) (sub1 n)))))))
, , ( , , , , (/ 1 0), ).
, SRFI 41 ( (take 4 (stream-map 1/ (ints-from-by 4 -1)))) work ( (1/4 1/3 1/2 1/1) 1/0, take, , ).