Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 使用Sort with key in racket的函数排序列表_Sorting_Lambda_Scheme_Racket - Fatal编程技术网

Sorting 使用Sort with key in racket的函数排序列表

Sorting 使用Sort with key in racket的函数排序列表,sorting,lambda,scheme,racket,Sorting,Lambda,Scheme,Racket,functionsort接受2个参数、函数列表和单个值。 当给定“值”时,返回按递增顺序排序的相同函数列表 例如:这是我的函数列表 (functionsort functionlist value) 应返回以下内容 (define myfunctions (list (lambda (x) (+ x 3)) (lambda (x) (- 100 x)) (lambda (x) (* x 2)))) (defi

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

例如:这是我的函数列表

(functionsort functionlist 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)   ; (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
计算值,9 94 12未排序。 我试着用

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

有什么建议吗?提前感谢

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

. . sort: contract violation
expected: (any/c . -> . any/c)
given: '(13 90 20).
无论哪种方式,它都能按预期工作:

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

看起来这是你在标签上的第999个答案?帕泰!!!:):)——这里有点吹毛求疵,如果可以的话:可能最好在这里使用“decoration sort undecorate”习惯用法,以避免函数对同一个参数进行多次求值-事实证明,Racket在缓存键时会自动为我们这样做#t是在
(排序…
调用中指定的。@WillNess不错的建议!我更新了我的答案。我想知道,为什么
#t
不是
#:缓存键的默认值?
?我猜是因为
(lambda(x)x)
是默认的
:键
。也就是说,在非常便宜的钥匙上是完全多余的。
(define (function-sort functions value)
  (sort functions < #:key (lambda (f) (f value))))
(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