[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: loop macro
- To: BSG@SCRC-STONY-BROOK.ARPA
- Subject: Re: loop macro
- From: Gregor.pa@Xerox.COM
- Date: Tue, 04 Feb 1986 19:50:00 -0000
- Cc: Fahlman@C.CS.CMU.EDU, common-lisp@SU-AI.ARPA
- In-reply-to: Bernard S. Greenberg <BSG@SCRC-STONY-BROOK.ARPA>'s message of Tue, 4 Feb 86 16:38 EST
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)
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))
;; Sort of GETL.
(iterate ((prop on plist by cddr))
(when (memq (car prop) properties-to-collect)
;; 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)
(finally (error "Could find a right hand.")))