• Re: MAP (and variants) vs LOOP - Popular opinion observation?

    From B. Pym@21:1/5 to Nathan Baum on Thu Aug 22 06:35:48 2024
    Nathan Baum wrote:

    Then suppose you later need the loop/map to collect some of the values
    under certain conditions. You might have

    (loop for x in (get-list)
    for i from 0
    do (format t "~A - ~A~%" i x)
    if (test x)
    collect (foo x))

    newLISP

    (let (result)
    (dolist (x '(2 9 22 25 42 49 58))
    (println (format "%d - %d" $idx x))
    (when (odd? x) (push (sqrt x) result -1)))
    result)

    0 - 2
    1 - 9
    2 - 22
    3 - 25
    4 - 42
    5 - 49
    6 - 58
    (3 5 7)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to All on Sun Sep 8 12:06:16 2024
    XPost: comp.lang.scheme

    Then suppose you later need the loop/map to collect some of the values
    under certain conditions. You might have

    (loop for x in (get-list)
    for i from 0
    do (format t "~A - ~A~%" i x)
    if (test x)
    collect (foo x))

    Gauche Scheme

    (use srfi-13) ;; string-upcase

    (filter-map
    (lambda (x i) (print i " - " x)
    (and (string? x) (string-upcase x)))
    '(foo "an" 8 "why")
    (lrange 0))

    0 - foo
    1 - an
    2 - 8
    3 - why
    ("AN" "WHY")

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to B. Pym on Sun Sep 8 12:44:44 2024
    XPost: comp.lang.scheme

    B. Pym wrote:

    Then suppose you later need the loop/map to collect some of the values under certain conditions. You might have

    (loop for x in (get-list)
    for i from 0
    do (format t "~A - ~A~%" i x)
    if (test x)
    collect (foo x))

    Gauche Scheme

    (use srfi-13) ;; string-upcase

    (filter-map
    (lambda (x i) (print i " - " x)
    (and (string? x) (string-upcase x)))
    '(foo "an" 8 "why")
    (lrange 0))

    0 - foo
    1 - an
    2 - 8
    3 - why
    ("AN" "WHY")

    Suppose you have

    (loop for x in (get-list)
    do (format t "~A~%" x))

    and then it turns out you need to print a numeric index. You can do

    (loop for x in (get-list)
    for i from 0
    do (format t "~A - ~A~%" i x))

    If you start with

    (mapc (lambda (x) (format t "~A~%" x)) (get-list))

    it seems (to me) that it'd be harder to modify it as needed,

    (let ((list (get-list)))
    (mapc (lambda (i x) (format t "~A - ~A" i x))
    (range 0 (length list))
    list))

    (I'm assuming the toolkit includes a RANGE utility, or something similar.)

    Gauche Scheme

    Shorter than the loop:

    (for-each
    (pa$ format #t "~a - ~a\n")
    (lrange 0)
    '(a b c))

    0 - a
    1 - b
    2 - c

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