libera/#lisp - IRC Chatlog
Search
8:39:17
JohnMS_WORK
Good morning. I'm trying to modify a value in a list during a for loop, but it's not being updated. What is wrong with my approach? https://pastebin.com/pZqch6i6
8:54:14
splittist
If you're going to use a list to hold the values, then (a) probably don't use a literal list and (b) you might look at SETF of ELT.
8:56:17
splittist
I, who only deal with comparatively short lists, would probably calculate the totals and use SORT.
8:58:00
aeth
JohnMS_WORK: you don't set elements of '(1 2 3) in Common Lisp because it's a literal... that's the difference between '(1 2 3) and (list 1 2 3)
8:58:52
aeth
and thus inline it into the program where mutation will cause weird things if it even lets you do it since now a lot of them check
8:59:51
splittist
The list '(0 0 0) is literal. Perhaps not a great problem in this case, but something like (list 0 0 0) or (make-list 3 :initial-element 0) might be better. In the latter case, depending on your logic, you could easily make it a TOP-N function.
9:02:17
JohnMS_WORK
So I should do: (let ((highest (list 0 0 0)) (sum 0))) instead for creating the highest list.
9:12:58
splittist
One approach: (subseq (sort (mapcar (lambda (entry) (apply '+ entry)) *cals*) '>) 0 3)