• merits of Lisp vs Python

    From Robert L.@21:1/5 to All on Fri Feb 11 18:29:42 2022
    (loop for e in list
    maximizing e into max
    minimizing e into min
    finally (return (values min max)))

    In one pass, find the largest number and
    the smallest number.

    Even better: in one pass, find the smallest number,
    the largest number, the sum, and the product.

    (multi-reduce min max + * '(3 2 9 8 4 5 6 7))

    2
    9
    44
    362880

    Given:

    (define (multi-fold* funcs knils the-list)
    (let loop ((the-list the-list)
    (accums knils))
    (if (null? the-list)
    (apply values accums)
    (loop (cdr the-list)
    (map (lambda (fn acc) (fn (car the-list) acc))
    funcs
    accums)))))

    (define (multi-fold . args)
    (let ((rev (reverse args)))
    (multi-fold* (reverse (cddr rev)) (cadr rev) (car rev))))

    (define (multi-reduce* funcs the-list)
    (multi-fold* funcs (map (lambda _ (car the-list)) funcs) (cdr the-list)))

    (define (multi-reduce . args)
    (let ((rev (reverse args)))
    (multi-reduce* (reverse (cdr rev)) (car rev))))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)