| Deutsch English Français Italiano |
|
<v6ujg9$3nd4k$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: Sat, 13 Jul 2024 19:11:07 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 65
Message-ID: <v6ujg9$3nd4k$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: Sat, 13 Jul 2024 21:11:07 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="bb9db39bc7686b389eb5c60179405e43";
logging-data="3912852"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/FLSb+EvF0oD+IbwinEijB"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:5uXb9pigYNHeAVbw0w3VLteWLDM=
Bytes: 2599
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
>
(use gauche.collection) ;; fold2
(define (min-max-by fn lst)
(define (use compare x score best worth)
(cond ((compare score worth) (list (list x) score))
((= score worth) (list (cons x best) worth))
(#t (list best worth))))
(if (null? lst)
(values (list '() #f) (list '() #f))
(let ((initial (list (take lst 1) (fn (car lst)))))
(fold2
(lambda (x mini maxi)
(let ((score (fn x)))
(values
(apply use < x score mini)
(apply use > x score maxi))))
initial initial
(cdr lst)))))
(min-max-by (lambda(x) (* (- x 2) (- x 3))) (lrange -10 11))
===>
((3 2) 0)
((-10) 156)