Deutsch English Français Italiano |
<v9jsuo$qnm3$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "B. Pym" <Nobody447095@here-nor-there.org> Newsgroups: comp.lang.python,comp.lang.lisp Subject: Re: How do i get multiple Min() values? Date: Thu, 15 Aug 2024 03:33:46 -0000 (UTC) Organization: A noiseless patient Spider Lines: 57 Message-ID: <v9jsuo$qnm3$1@dont-email.me> References: <v6qu7m$2vg8q$1@dont-email.me> <v6tthj$3jj0a$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Injection-Date: Thu, 15 Aug 2024 05:33:46 +0200 (CEST) Injection-Info: dont-email.me; posting-host="7e5ecf5f7253603983f636ec904f7241"; logging-data="876227"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19ZASZpdwBBSeo4iR7DAq8J" User-Agent: XanaNews/1.18.1.6 Cancel-Lock: sha1:cHbua32W4R2mxon6wpunhHTmWHI= Bytes: 2274 B. Pym wrote: > HenHanna wrote: > > > > > How do i get multiple Min() values? > > > > e.g. for Y = (x-2)*(x-3) for x in range(-10,10) > > the min Y is hit twice > > > > > > print( min( ((x-2)*(x-3), (x, (x-2, x-3))) > > for x in range(-10,10) ) ) > > > > > > > > is this easy in Scheme(Gauche) ? > > Gauche Scheme > > (use gauche.collection) ;; fold2 > > (define (min-by fn lst) > (if (null? lst) > (values '() #f) > (fold2 > (lambda (x best worth) > (let ((score (fn x))) > (cond ((< score worth) (values (list x) score)) > ((= score worth) (values (cons x best) worth)) > (#t (values best worth))))) > (take lst 1) (fn (car lst)) > (cdr lst)))) > > (min-by (lambda(x) (* (- x 2) (- x 3))) (lrange -10 11)) > > ===> > (3 2) > 0 newLISP (define (min-by fun lst) (let (accum '() best 0 score 0) (dolist (x lst) (setf score (fun x)) (cond ((or (empty? accum) (< score best)) (setf best score) (setf accum (list x))) ((= score best) (push x accum)))) (list accum best))) (min-by (fn(n) (- (abs (* 10 n)))) '(0 9 2 2 -9 3)) ===> ((-9 9) -90)