球拍函数,用于在给定函数的情况下查找列表的最小元素

Racket function for finding minimum element of list given a function

Racket(Scheme) 中是否有一些函数可以给我元素,在列表中应用给定函数后产生最小值。 类似于 (apply min (map f list)) 但在应用 f 之前返回元素。 例如:

(define lst '((1 . 3) (3 . 8) (5 . 6))
(define (f pair)
  (- (cdr pair) (car pair)))
(minimum f lst)

这应该给出 '(5 . 6).

至少在没有直接函数的情况下,应该有一个具有高阶函数的一行(因为我必须填写一行才能获得这种行为)。 有什么想法吗?

尝试 argmin:

#lang racket

(define lst '((1 . 3) (3 . 8) (5 . 6)))
(define (f pair)
  (- (cdr pair) (car pair)))
(argmin f lst)

根据需要生成 '(5 . 6)

您可以使用 minthis generic version,它接受 key 参数:

(require relation)
(apply min #:key f lst)

=> '(5 . 6)

此版本的 min 也适用于字符串或任何其他可订购类型(即不仅仅是数字)。

[披露:我是这个库的作者]