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))
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))
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.)
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))
- More often than not, the different variables actually iterate over different kinds of values. Recently, I needed the following costruct
quite often:
(loop for x in some-list
for i from 0
collect `(,x ,i))
This enumerates all elements in a list. You would have to express this completely manually without LOOP because none of the mapxyz functions
help you here.
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.)
Nathan Baum wrote:
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
(cut print <> " - " <>)
(lrange 0)
'(a b c))
0 - a
1 - b
2 - c
(for-each
(cut print <> " - " <> " - " <>)
(lrange 0)
'(a b c)
'(! ? @))
0 - a - !
1 - b - ?
2 - c - @
(use srfi-42) ; do-ec
(do-ec (:list x (index i) '(a b c)) (print i " - " x))
0 - a
1 - b
2 - c
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))
| Sysop: | Keyop |
|---|---|
| Location: | Huddersfield, West Yorkshire, UK |
| Users: | 715 |
| Nodes: | 16 (3 / 13) |
| Uptime: | 146:16:29 |
| Calls: | 12,090 |
| Calls today: | 3 |
| Files: | 15,000 |
| Messages: | 6,517,501 |