首页 > 解决方案 > 删除列表中小于 10 的数字的函数

问题描述

我需要创建一个函数,它接受一个数字列表并删除所有小于 10 的数字并输出一个新列表。

到目前为止,我有这个:

#lang racket


(define less-than10(lambda (x)
  (for/list ([i x] #:when (lambda (x) (< x 10))) i)))


(less-than10 '(1 2 3 4 11))

但是,它仍然不会删除小于 10 的数字。它只是输出完全相同的列表。有什么帮助吗?

标签: racket

解决方案


您需要将谓词应用于绑定循环变量i,还要注意我已经翻转了谓词:

#lang racket

(define less-than10
  (lambda (x)
    (for/list ([i x] #:when ((lambda (x) (> x 10)) i)) i)))

(less-than10 '(1 2 3 4 11))
; => '(11)

更自然的版本将使用filter

(define less-than10.v2
  (lambda (x)
    (filter (lambda (x) (> x 10)) x)))

(less-than10.v2 '(1 2 3 4 11))
; => '(11)

推荐阅读