lisp - loop keyword immediately after finally -


when had asked how get numbers lottery given hint create function shuffles list. tried so, , got working.

my current implementation looks this:

(defun shuffle (list)   (let ((len (length list)))     (loop repeat len               (rotatef           (nth (random len) list)           (nth (random len) list))               return list))) 

good news works:

(shuffle '(1 2 3 4 5 6)) ;; => (3 1 4 2 6 5) 

bad news error message:

warning: loop: loop keyword after finally: permitted cltl2, forbidden ansi cl.

unfortunately don't understand it. why tell me loop appears after finally? and, what's wrong code causes this?

is there better way formulate this?

warning: loop: loop keyword after finally: permitted cltl2, forbidden ansi cl.

this means return loop keyword, not allowed after finally, according ansi cl standard.

if want return loop, need use return macro:

(loop ...       (return list)) 

it's common mistake. finally return <expr> no longer allowed since ansi cl standard. that's reason not use cltl2 (common lisp language, 2nd edition) reference. cl hyperspec better reference.


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -