gpt4 book ai didi

sorting - 使用 sort with key in racket 对功能列表进行排序

转载 作者:行者123 更新时间:2023-12-01 11:34:56 26 4
gpt4 key购买 nike

(functionsort functionlist value)

functionsort 采用 2 个参数、函数列表和单个值。当给定“值”时,返回按递增顺序排序的相同函数列表。

例如:这是我的函数列表

(define myfunctions (list (lambda (x) (+ x 3)) 
(lambda (x) (- 100 x))
(lambda (x) (* x 2))))
(define fs
(function-sort myfunctions
5))

应该返回以下内容

((first fs) 6)   ; (first fs) is (lambda (x) (+ x 3))
9
((second fs) 6) ; (second fs) is (lambda (x) (* x 2))
12
((third fs) 6) ; (third fs) is (lambda (x) (- 100 x))
94

这是我到目前为止得到的:

define (function-sort functions value )
(map (lambda (y) (y value)) functions))

计算值 , 9 94 12 未排序。我尝试使用

 (sort myfunctions #:key (function-sort myfunctions 10) <)

这给了我错误

. . sort: contract violation
expected: (any/c . -> . any/c)
given: '(13 90 20).

有什么建议吗?提前致谢

最佳答案

您的尝试是正确的,但您必须为 #:key 传递足够的参数 - 我们希望评估具有给定值的每个函数,并且当应用于值时,sort 过程将根据每个函数返回的结果对函数的输入列表进行排序。试试这个:

(define (function-sort functions value)
(sort functions < #:key (lambda (f) (f value))))

要提高包含昂贵函数的大型列表的性能,请注意 Will Ness 的建议:使用 #:cache-keys? #t 将防止对同一个参数进行多次评估,实际上将类似于您首先打算对 map 执行的操作(即:预先计算值 排序之前)。考虑:

(define (function-sort functions value)
(sort functions < #:cache-keys? #t #:key (lambda (f) (f value))))

无论哪种方式,它都按预期工作:

(define myfunctions (list (lambda (x) (+ x 3)) 
(lambda (x) (- 100 x))
(lambda (x) (* x 2))))

(define fs (function-sort myfunctions 5))

((first fs) 6)
=> 9
((second fs) 6)
=> 12
((third fs) 6)
=> 94

关于sorting - 使用 sort with key in racket 对功能列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com