【发布时间】:2019-08-05 02:53:30
【问题描述】:
我正在继续学习 Racket,现在我需要使用我自己的函数对列表进行排序。
列表的每个元素,也是列表,需要作为参数传递给我自己的函数,函数会返回一个介于[0, 1]之间的实值。
简而言之:我将有一个需要使用函数排序的列表列表,该函数有一个列表作为参数,它将返回 [0, 1] 之间的实际值。
在 Racket 中,我找到了 sort 函数:
(sort '(1 3 4 2) <)
我需要类似的东西,但我需要使用自己的函数,而不是使用<。
#lang racket
(define my-list '(1 2 3 4) '(5 7 3 1) '(9 4 1 8))
(define my-function
(lambda (lst)
(let ([result ; Do my own calculations ])
result))) ; Result is a real number between [0,1].
(define list-sorted (my-sort my-list my-function))
注意:将my-function 想象成一个黑盒,输入为列表,输出为实数。
我该怎么做?
我曾想过创建另一个列表my-list-real-values,其中my-list中每个元素的实数值以相同的顺序,然后使用(sort my-list-real-values <)对其进行排序,但我不知道如何链接这两个列表,my-list-real-values 和 my-list,在我对 my-list-real-values 进行排序时对 my-list 进行排序。
也许我可以使用Hash Tables,但我不知道这是否只是Racket的一个功能,或者它也可以与Scheme一起使用。
【问题讨论】:
-
my-list不能是 3 个值。也许它应该是 3 个列表的列表?<只是名称,因此如果任何两个元素(在您的情况下为列表)应被视为低于右侧,则您传递任何可以返回#t的内容。如果只需要<,就像数字一样,你就不会费心要求比较函数了。
标签: sorting functional-programming scheme racket