在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)
。
为此,至少在没有直接功能的情况下,应该有一个具有较高阶函数的衬里(因为我必须填写一行来获得此行为)。 有什么想法吗?
答案 0 :(得分:5)
尝试argmin
:
#lang racket
(define lst '((1 . 3) (3 . 8) (5 . 6)))
(define (f pair)
(- (cdr pair) (car pair)))
(argmin f lst)
根据需要生成'(5 . 6)
。
答案 1 :(得分:3)
您可以使用min
中的this generic version,它接受一个key
参数:
(require relation)
(apply min #:key f lst)
=> '(5 . 6)
此版本的min
也适用于字符串或任何其他可排序类型(即不仅是数字)。
[披露:我是这个图书馆的作者]