我是计划的新手,我正试图在其中编写一个快速排序,我似乎无法弄清楚过滤器功能。我相信filter有两个参数,一个可以应用于列表中每个元素的过程,然后是一个应用过程的列表。
#lang racket
;Quick sort
(define(quickSort l)
(cond
[(null? l)('(()))]
[(append(quickSort(filter(lambda(x)(< x car l))(cdr l))))(list(car l))(quickSort(filter(lambda(x)(>= x car l)(cdr l) cdr l)))]
)
)
(quickSort '(5 9 4 6 8 7 1 9))
这给了我违反合同的条款,说明(&lt; x car l)应该是真实的,并且它得到的是汽车程序。
我尝试提取过滤器功能并自行运行,如下所示:
(过滤器(lambda(x)(&lt; x car'(3 5 1 7 8))(cdr'(3 5 1 7 8))))
但这告诉我只有一个论点。我不知道为什么。在我看来,有两个。
那么,有什么想法吗?我最初认为它可能是过滤函数的参数有问题,但现在我想也许lambda不能接受(car l)参数?在通过之前不会评估吗?
答案 0 :(得分:1)
缩进你的代码,然后你会发现存在语法错误。我在下面更正了它们:
;Quick sort
(define (quickSort l)
(cond [(null? l) '()]
[else (append (quickSort (filter (lambda (x) (< x (car l))) (cdr l)))
(list (car l))
(quickSort (filter (lambda (x) (>= x (car l))) (cdr l))))]))