球拍功能,用于查找给定功能的列表的最小元素

时间:2020-08-14 14:46:54

标签: functional-programming scheme racket

在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)

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

2 个答案:

答案 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也适用于字符串或任何其他可排序类型(即不仅是数字)。

[披露:我是这个图书馆的作者]

相关问题