球拍函数,用于在给定函数的情况下查找列表的最小元素
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)
。
您可以使用 min
的 this generic version,它接受 key
参数:
(require relation)
(apply min #:key f lst)
=> '(5 . 6)
此版本的 min
也适用于字符串或任何其他可订购类型(即不仅仅是数字)。
[披露:我是这个库的作者]
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)
。
您可以使用 min
的 this generic version,它接受 key
参数:
(require relation)
(apply min #:key f lst)
=> '(5 . 6)
此版本的 min
也适用于字符串或任何其他可订购类型(即不仅仅是数字)。
[披露:我是这个库的作者]