[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: beginnerquestion (nconc)
From: |
Stefan Huchler |
Subject: |
Re: beginnerquestion (nconc) |
Date: |
Fri, 17 Mar 2017 15:19:28 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
Thien-Thi Nguyen <ttn@gnu.org> writes:
> Was that documentation by any chance "(elisp) Rearrangement"?
> That info node describes "A common pitfall...".
possible, but the pitfall more looks like 2 symbols are the the equal
object, I dont see how that refers to that problem.
> Personally, these days i prefer ‘cl-loop’ for non-trivial stuff:
>
> (cl-loop
> for n below 5
> collect (intern (string (+ ?a n))))
>
> => (a b c d e)
I thought the reason why rms dont likes/supports commonlisp is because
its so ugly api? If push + nconc (and no other elisp alternative does
the right thing, and you get forced to use a setq + nreverse at the end)
I have a very different idea about what ugly is apperently.
> If you MUST use ‘nconc’, a common trick is to init the var w/ a
> throwaway head, to be ignored (afterwards) via ‘(cdr var)’.
>
> (setq test3 (list 'MGMT)) ; overhead? underfoot? both? :-D
> (nconc test3 (list '(a)))
> (nconc test3 (list '(b)))
> (cdr test3)
because I need that a..b in that specific varible tabulated-list-entries
that means I need to do a:
(setq tabulated-list-entries (cdr tabulated-list-entries))
which is horrible code.
I guess using a shorter 2nd symbol before the setq makes the source look
slightly less horrible.
So to make it short I have to live with this horrible state or use some
custom own wrapper, I am shure I am the first who tries such stuff in
elisp, cracy me. (sorry need my green tea to get out of troll mode :) )
I just wonder with that limitation I dont see any usecase for nconc, how
are you supposed to initialise with setq the first value in a loop, that
makes zero sense.
Well lets try it differently, maybe my way of iterating through stuff is
bad thats the code I want to be cleaner:
(setq tabulated-list-entries '())
(let* ((items (cdr (assoc 'items kodi-properties))))
(dotimes (number (length items))
(let* ((item (elt items number))
(title (or ;; (cdr (assoc 'title item))
"None"))
(id number))
(push (list `(,id)
(vector `(,title id ,id)))
tabulated-list-entries)
)))
(setq tabulated-list-entries (nreverse tabulated-list-entries))
maybe some lambda magic? I rewrote it from a dolist version because I
need the iterator for the id.
if nreverse would directly change tabulated-list-entries I could live
with that, even that would still be ugly, but really such clunky ugly
setq statement to get what you expect in the first place?
I guess cdr with fake entry seems to be the least horrible solution of
the suggestions I guess
Anyway...
Thank You!
- beginnerquestion (nconc), Stefan Huchler, 2017/03/17
- Re: beginnerquestion (nconc), Thien-Thi Nguyen, 2017/03/17
- Re: beginnerquestion (nconc), Yuri Khan, 2017/03/17
- Re: beginnerquestion (nconc), Stefan Huchler, 2017/03/17
- Re: beginnerquestion (nconc), Stefan Monnier, 2017/03/17
- Re: beginnerquestion (nconc), Stefan Huchler, 2017/03/21
- Re: beginnerquestion (nconc), Stefan Huchler, 2017/03/21
- Re: beginnerquestion (nconc), John Mastro, 2017/03/21
- Re: beginnerquestion (nconc), Stefan Huchler, 2017/03/21