[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: loop macro
I think I prefer "lispy" iteration macros. Here is an example of what I
mean by a lispy iteration macro:
;; Return a list of the items in list-of-items
;; which pass the test TEST.
(iterate ((item in list-of-items))
(when (test item)
(collect item)))
I like this better because:
-the bindings looks more like standard lisp bindings (let do etc).
-I can use COLLECT, SUM etc. at any level in the body.
-uses of collect sum etc. look like lisp function calls.
-which makes it natural to use the existing when, unless etc.
NOTE: I am not proposing this version of ITERATE as something we
should consider in and of itself, I am just using it to show
some things I like about it.
Here are some more examples using it:
;; Basically FIRSTN
;; Get the first 10 items in a list
(iterate ((item in list)
(i from 0 below 10))
(collect y))
;; Sort of GETL.
;;
(iterate ((prop on plist by cddr))
(when (memq (car prop) properties-to-collect)
(collect prop)))
;; Return a left hand to match left-hand-to-match
;; or error if couldn't find one.
(iterate ((left in left-hands)
(right in right-hands))
(when (eq left left-to-match)
(return right))
(finally (error "Could find a right hand.")))