首页 文章

Scheme(Dr racket)过滤问题

提问于
浏览
0

我是计划的新手,我正试图在其中编写一个快速排序,我似乎无法弄清楚过滤器功能 . 我相信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))

这给了我一个 Contract 违规,说(<x car l)应该是真实的,它得到的是汽车程序 .

我尝试提取过滤器功能并自行运行,如下所示:

(过滤器(lambda(x)(<x car'(3 5 1 7 8))(cdr'(3 5 1 7 8))))

但这告诉我只有一个论点 . 我不知道为什么 . 在我看来,有两个 .

那么,有什么想法吗?我最初认为它可能是过滤函数的参数有问题,但现在我想也许lambda不能接受(car l)参数?在通过之前不会评估吗?

1 回答

  • 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))))]))
    

相关问题