Deutsch   English   Français   Italiano  
<v7ajkm$2b52a$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.lisp
Subject: Re: finding the min or max element of a list
Date: Thu, 18 Jul 2024 08:27:06 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 33
Message-ID: <v7ajkm$2b52a$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Thu, 18 Jul 2024 10:27:07 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="8e507d2f4c44ea84c4d5df38107e66f0";
	logging-data="2462794"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/uyB1KK5TyECkuvahXo+Iw"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:LsHw86FrRH9+wZc0KfseyozvB30=
Bytes: 1414

> (defun best (lst cmp &key (key #'identity))
>   (loop with rtn = (car lst)
>         for x in (cdr lst)
>         when (funcall cmp (funcall key x) (funcall key rtn))
>         do (setq rtn x)
>         finally (return rtn)))

Gauche Scheme

(define (best lst cmp :key (key identity))
  (reduce
    (lambda (x chosen)
      (if (cmp (key x) (key chosen))
        x chosen))
    #f
    lst))

(best '((a) (f o o b) (b a r) (2 3)) > :key length)
  ===>
(f o o b)

(best '(5 0 4 9) >)
  ===>
9

(best '() >)
  ===>
#f

(best '(2) >)
  ===>
2