Deutsch English Français Italiano |
<v4do46$22q3g$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.nobody.at!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "B. Pym" <No_spamming@noWhere_7073.org> Newsgroups: comp.lang.lisp Subject: Re: Loopy Date: Thu, 13 Jun 2024 03:13:11 -0000 (UTC) Organization: A noiseless patient Spider Lines: 52 Message-ID: <v4do46$22q3g$1@dont-email.me> References: <v4552t$3poln$1@dont-email.me> <v465p2$7ib2$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Injection-Date: Thu, 13 Jun 2024 05:13:11 +0200 (CEST) Injection-Info: dont-email.me; posting-host="1732be28450302a0a7b2cfd1fb42f3c5"; logging-data="2189424"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/iAPQV/WtNTtO/mjHJTPc1" User-Agent: XanaNews/1.18.1.6 Cancel-Lock: sha1:ks+KJcvKNs+BBd4XcGUzfTMyAaQ= Bytes: 2030 On 6/10/2024, B. Pym wrote: > Peter Seibel wrote: > > > (loop for x across array-of-numbers > > minimizing x into min > > maximizing x into max > > summing x into total > > counting t into count > > finally (return (list min max (/ total count)))) > > > In Gauche Scheme, it's a one-liner. > > (use gauche.sequence) > > (define v #(0 2 -3 99 48 35 86 27 50 18)) > (define count (vector-length v)) > > > `(,(find-min v) ,(find-max v) ,(/ (fold + 0 v) count)) > ===> > (-3 99 181/5) Another way. (define v #(0 2 -3 99 48 35 86 27 50 18)) (define count (vector-length v)) (let ((r (mul-vec-reduce (list + max min) v))) (reverse (cons (/ (pop! r) count) r))) ===> (-3 99 181/5) Given: (use srfi-43) ;; vector-fold (define (mul-vec-reduce konses vec) (let ((len (length konses))) (vector-fold (lambda (i accum x) (if (null? accum) (make-list len x) (map (lambda (f a b) (f a b)) konses (make-list len x) accum))) '() vec)))