Pascal Costanza wrote:
I'm not advocating tail-recursion instead of specialized iteration mechanisms closer to the problem domain. I'm just saying tail-
recursion code isn't anywhere as low-level as you're making it up to
be.
It actually is, and your posting below shows it very nicely.
Here is a nice example using loop:
(loop for (key value) on property-list by #'cddr
unless (member key excluded-keys)
append (list key value)) ; [1]
As a function:
(defun filter (excluded-keys property-list)
(loop for (key value) on property-list by #'cddr
unless (member key excluded-keys)
nconc (list key value)))
(filter '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))(A 1 B 2 B 3)
The result is a correct property list
Gauche Scheme
(define (remove-props bad-keys prop-list)
(concatenate
(remove (^p (member (car p) bad-keys))
(slices prop-list 2))))
(remove-props '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
===>
(a 1 b 2 b 3)
Pascal Costanza wrote:
I'm not advocating tail-recursion instead of specialized iteration mechanisms closer to the problem domain. I'm just saying tail-
recursion code isn't anywhere as low-level as you're making it up to
be.
It actually is, and your posting below shows it very nicely.
Here is a nice example using loop:
(loop for (key value) on property-list by #'cddr
unless (member key excluded-keys)
append (list key value)) ; [1]
As a function:
(defun filter (excluded-keys property-list)
(loop for (key value) on property-list by #'cddr
unless (member key excluded-keys)
nconc (list key value)))
(filter '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))(A 1 B 2 B 3)
The result is a correct property list
Gauche Scheme
(define (remove-props bad-keys prop-list)
(concatenate
(remove (^p (member (car p) bad-keys))
(slices prop-list 2))))
(remove-props '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
===>
(a 1 b 2 b 3)
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 65 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 05:22:44 |
| Calls: | 862 |
| Files: | 1,311 |
| D/L today: |
921 files (14,318M bytes) |
| Messages: | 264,603 |