- Hide quoted text -- Show quoted text -
> > Yet Another Noob Question.
> > What are the characteristics of each implementation?
> > How can I tell which I should be writing in what context...
> > (defun find-indicies (lst tst) > > (let ((li 0)) > > (labels ((qpred (a) > > (incf li) > > (if (funcall tst a) > > (1- li) > > nil))) > > (remove nil (mapcar #'qpred lst)))))
> > (defun find-indices (lst tst) > > (loop > > for el in lst > > counting t into index > > if (funcall tst el) > > collect index))
> You are allergic to loop
> (defun find-indices (list test) > (loop for element in list > for index from 1 > when (funcall test element) collect index))
(define (find-indices alist test)
(for/list ([(x i) (in-indexed alist)]
#:when (test x))
(find-indices '(1 2 3 4 5) odd?)
=> '(0 2 4)
I mean, I notice that you are not posting solutions in basic Scheme... I believe the code in such case would look quite similar to the "labels" version above...
(Unless you make use of Scheme's "do" form - and I wouldn't without a macro like the Racket macro above!)