• Re: How do you insert declarations into loops?

    From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp on Mon Jun 23 01:52:32 2025
    From Newsgroup: comp.lang.lisp

    How do you insert declarations into loops?

    Example: This function loops over a list of associations
    collecting the cdrs.

    (defun list-cdrs (list)
    (loop for (unwanted-var . wanted-var) in list
    collect wanted-var))

    When I compile list-cdrs, I get an "unused lexical variable, UNWANTED-VAR" message (this is fine.). Normally, if I wanted to inhibit this
    warning I would stick a (declare (ignore unwanted-var)) in the
    beginning of the function body immediately following the declaration.
    It doesn't seem that you can do this using loop.

    The solution is not to introduce an ignore declartion, but instead to
    use a hack in the destructuring pattern matcher:

    (defun list-cdrs (list)
    (loop for (NIL . wanted-var) in list
    collect wanted-var))

    Scheme

    (map cdr '((a . 2) (b . 3)))

    '(2 3)
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp on Wed Jun 25 19:58:21 2025
    From Newsgroup: comp.lang.lisp

    B. Pym wrote:

    How do you insert declarations into loops?

    Example: This function loops over a list of associations
    collecting the cdrs.

    (defun list-cdrs (list)
    (loop for (unwanted-var . wanted-var) in list
    collect wanted-var))

    When I compile list-cdrs, I get an "unused lexical variable, UNWANTED-VAR"
    message (this is fine.). Normally, if I wanted to inhibit this
    warning I would stick a (declare (ignore unwanted-var)) in the
    beginning of the function body immediately following the declaration.
    It doesn't seem that you can do this using loop.

    The solution is not to introduce an ignore declartion, but instead to
    use a hack in the destructuring pattern matcher:

    (defun list-cdrs (list)
    (loop for (NIL . wanted-var) in list
    collect wanted-var))

    Scheme

    (map cdr '((a . 2) (b . 3)))

    '(2 3)

    Is it true that users of CL inspired the movie "Idiocracy"?


    --- Synchronet 3.21d-Linux NewsLink 1.2