libera/#lisp - IRC Chatlog
Search
10:57:49
pjb
splittist: better use (reduce #'+ caloric-items) rather than apply. APPLY may be limited by CALL-ARGUMENTS-LIMIT on the length of the list, and needs a list. REDUCE only needs a sequence, and has no limit.
10:59:42
pjb
for highest, I would use a vector, and shift the elements after a dichotomy. Or use MERGE instead of SORT since the list is already sorted. (SORT might not be the fastest on sorted lists, we could be O(n), but SORT may still be O(nlogn)).
11:51:16
splittist
(with a COERCE HIGHEST 'LIST in place of HIGHEST in the DOLIST if JohnMS_WORK needs a list)
11:52:49
JohnMS_WORK
I'm trying to learn to work with lists and LISP. So need is a strong word there. :)
11:59:08
splittist
JohnMS_WORK: So we start with a sequence of zeros, which is already sorted with lowest first. For each element of the calories list we compute the sum. If the sum is higher than the first entry in the sequence (which is the lowest), we save a new sequence made up of the original elements of the sequence less the lowest, with the new sum. In my list version, we do that by POPing off the first (lowest) element of the list, PUSHING the
11:59:08
splittist
new sum onto the list, then sorting it. In pjb's version we do that by MERGEing two sequences, one of which is just the sum, and the other of which is the array except its first element (the SUBSEQ from 0)
12:02:08
splittist
(We tell the DOLIST form to return HIGHEST by specifying it as the third argument.)
12:07:13
splittist
JohnMS_WORK: you'd be way better off using the (hyper)spec. If you put 'clhs dolist' into your search you'll get something like http://clhs.lisp.se/Body/m_dolist.htm
12:16:54
splittist
JohnMS_WORK: btw, while the spec allows call-arguments-limit to be as low as 50, on the old sbcl I'm playing with it's 4,611,686,018,427,387,903
13:34:18
JohnMS_WORK
Taking in the feedback you guys have given. I've modified and worked out two solutions: https://pastebin.com/uWLnriNn . Thanks you guys have been very kind and generous.