Scheme(Dr racket)过滤问题

时间:2014-11-16 23:30:17

标签: scheme racket

我是计划的新手,我正试图在其中编写一个快速排序,我似乎无法弄清楚过滤器功能。我相信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)参数?在通过之前不会评估吗?

1 个答案:

答案 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))))]))