RE: how to interrupt maphash

"James Anderson" <[email protected]> Fri, 28 Apr 2006 11:45:22 +0200
Newsgroups gmane.lisp.allegro
Message-ID <[email protected]>
hello;

> -----Original Message-----
> From: Yaling Zheng [mailto:[email protected]]
> Sent: Friday, April 28, 2006 01.10
> To: [email protected]
> Subject: how to interrupt maphash
>
>
>
> Does anybody know how to interrupt maphash?
> Is there another construct I should use for that purpose?
>
> Thank you,
>
> Yaling
>

does your use case not allow this:

CG-USER(19): (defparameter *t* (make-hash-table))
*T*
CG-USER(20): (dotimes (x 100) (setf (gethash x *t*) t))
NIL
CG-USER(21): (gethash 101 *t*)
NIL
NIL
CG-USER(22): (gethash 1 *t*)
T
T
CG-USER(26): (let ((r (random 100)))
               (block :done (maphash #'(lambda (k v) (print (list k v)) (when
(eql k r) (return-from :done))) *t*))
               r)

(0 T)
(10 T)
(20 T)
(30 T)
(40 T)
(50 T)
(60 T)
(70 T)
(80 T)
(90 T)
(1 T)
(11 T)
(21 T)
(31 T)
(41 T)
(51 T)
51
CG-USER(27): (let ((r (random 100)))
               (block :done (maphash #'(lambda (k v) (print (list k v)) (when
(eql k r) (return-from :done))) *t*))
               r)

(0 T)
(10 T)
(20 T)
(30 T)
(40 T)
(50 T)
(60 T)
(70 T)
(80 T)
(90 T)
(1 T)
(11 T)
(21 T)
(31 T)
(41 T)
(51 T)
(61 T)
(71 T)
(81 T)
(91 T)
(2 T)
(12 T)
(22 T)
(32 T)
(42 T)
(52 T)
(62 T)
(72 T)
(82 T)
(92 T)
(3 T)
(13 T)
(23 T)
(33 T)
(43 T)
(53 T)
(63 T)
(73 T)
(83 T)
(93 T)
(4 T)
(14 T)
(24 T)
(34 T)
(44 T)
(54 T)
(64 T)
(74 T)
(84 T)
(94 T)
(5 T)
(15 T)
(25 T)
(35 T)
(45 T)
(55 T)
(65 T)
(75 T)
(85 T)
(95 T)
(6 T)
(16 T)
(26 T)
(36 T)
(46 T)
(56 T)
(66 T)
(76 T)
(86 T)
(96 T)
(7 T)
7
CG-USER(28):