Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connectionsPath: ...!feeds.phibee-telecom.net!2.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "B. Pym"
Newsgroups: comp.lang.lisp
Subject: Re: How to improve my summarizing code
Date: Mon, 24 Jun 2024 18:04:16 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 60
Message-ID:
References:
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Mon, 24 Jun 2024 20:04:16 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="6992755104a3d7a4ecae094c19f92520";
logging-data="1118667"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19QAS5YKRFoFc5murEyEPTi"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:JtR5Muy1JCIL0ml/PS9L7XXgRnw=
Bytes: 2585
On 6/23/2024, B. Pym wrote:
> Wade Humeniuk wrote:
>
> > Yeah, but I do not worry about it, much, at the beginning. Here
> > is another, it seems easier to think in the morning
> >
> > (defun summarize (list)
> > (let ((summary nil))
> > (map nil (lambda (elt)
> > (let ((sum (find (first elt) summary :test #'eql :key #'first)))
> > (if sum
> > (incf (second sum) (second elt))
> > (push elt summary))))
> > list)
> > summary))
> >
> > and its loop version
> >
> > (defun summarize (list)
> > (loop with summary = nil
> > for elt in list
> > for sum = (find (first elt) summary :test #'eql :key #'first)
> > if sum do (incf (second sum) (second elt))
> > else do (push elt summary)
> > finally (return summary)))
> >
> > CL-USER 2 > (summarize '((c 7) (a 1) (a 3) (b 1) (b 10) (b 100)))
> > ((B 111) (A 4) (C 7))
>
> Gauche Scheme
>
> (use gauche.sequence) ;; group-sequence
>
> (define (summarize alist)
> (map
> (lambda(xs) (list (caar xs) (fold + 0 (map cadr xs))))
> (group-sequence alist :key car)))
>
> (summarize '((c 7) (a 1) (a 3) (b 1) (b 10) (b 100)))
> ===>
> ((c 7) (a 4) (b 111))
Another way:
(use util.match)
(define (summarize assoclist)
(define tree (make-tree-map))
(for-each
(match-lambda
[(key val) (tree-map-update! tree key (cut + <> val) 0)])
assoclist)
(tree-map->alist tree))
(summarize '((c 7) (a 1) (a 3) (b 1) (b 10) (b 100)))
===>
((a . 4) (b . 111) (c . 7))