DrRacket:如何删除列表中 greater/lower 大于特定数字的元素
DrRacket: How to remove elements in a list that are greater/lower than a certain number
我正在尝试编写一个将列表作为输入的小程序,第一个函数应该删除大于 4 的值,另一个函数应该删除列表中小于 4 的值检查预期。我认为这是一个简单的解决方案,但我似乎无法弄清楚,因为我对列表和数据结构还是陌生的。任何帮助将不胜感激,这是代码:
(define (removehigher lon n)
(cond [(> n lon)(remove (lon))]
[(< n lon) true]))
(define (removelower lon n)
(cond [(> n lon) true]
[(< n lon) (remove(lon))]))
(check-expect(removehigher(list 0 1 2 3 4 5 6)4)(list 0 1 2 3))
(check-expect(removelower(list 0 1 2 5 6 7) 3)(list 5 6 7))
有一个名为 filter
的函数可以执行此操作。
(define (my-filter pred lst (acc '()))
(cond [(null? lst) (reverse acc)]
[(pred (car lst)) (my-filter pred (cdr lst) (cons (car lst) acc))]
[else (my-filter pred (cdr lst) acc)]))
它实际上是一个内置函数filter
。我使用 my-
作为前缀,以免覆盖此内置函数。
一旦你有了函数filter
(或my-filter
),你就可以很容易地写出你想要的函数——然后就是为它正确定义谓词函数(pred
)每个案例:
(define (remove-higher lst n)
(filter (lambda (x) (<= x n)) lst))
(define (remove-lower lst n)
(filter (lambda (x) (<= n x)) lst))
或者,也可以使用 append-map
:
(define (remove-higher lst n)
(append-map (lambda (x) (if (<= x n) (list x) '())) lst))
(define (remove-lower lst n)
(append-map (lambda (x) (if (<= n x) (list x) '())) lst))
或使用 append-map
定义 filter
:
(define (my-filter pred lst)
(append-map (lambda (x) (if (pred x) (list x) '())) lst))
append-map
依次可以定义:
(define (my-append-map func lst)
(apply append (map func lst)))
我正在尝试编写一个将列表作为输入的小程序,第一个函数应该删除大于 4 的值,另一个函数应该删除列表中小于 4 的值检查预期。我认为这是一个简单的解决方案,但我似乎无法弄清楚,因为我对列表和数据结构还是陌生的。任何帮助将不胜感激,这是代码:
(define (removehigher lon n)
(cond [(> n lon)(remove (lon))]
[(< n lon) true]))
(define (removelower lon n)
(cond [(> n lon) true]
[(< n lon) (remove(lon))]))
(check-expect(removehigher(list 0 1 2 3 4 5 6)4)(list 0 1 2 3))
(check-expect(removelower(list 0 1 2 5 6 7) 3)(list 5 6 7))
有一个名为 filter
的函数可以执行此操作。
(define (my-filter pred lst (acc '()))
(cond [(null? lst) (reverse acc)]
[(pred (car lst)) (my-filter pred (cdr lst) (cons (car lst) acc))]
[else (my-filter pred (cdr lst) acc)]))
它实际上是一个内置函数filter
。我使用 my-
作为前缀,以免覆盖此内置函数。
一旦你有了函数filter
(或my-filter
),你就可以很容易地写出你想要的函数——然后就是为它正确定义谓词函数(pred
)每个案例:
(define (remove-higher lst n)
(filter (lambda (x) (<= x n)) lst))
(define (remove-lower lst n)
(filter (lambda (x) (<= n x)) lst))
或者,也可以使用 append-map
:
(define (remove-higher lst n)
(append-map (lambda (x) (if (<= x n) (list x) '())) lst))
(define (remove-lower lst n)
(append-map (lambda (x) (if (<= n x) (list x) '())) lst))
或使用 append-map
定义 filter
:
(define (my-filter pred lst)
(append-map (lambda (x) (if (pred x) (list x) '())) lst))
append-map
依次可以定义:
(define (my-append-map func lst)
(apply append (map func lst)))