删除列表中小于10的数字的函数。

问题描述 投票:0回答:1

我需要创建一个函数,用来接收一个数字列表,并删除所有小于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
1个回答
1
投票

你需要将谓词应用到绑定循环变量上 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)
© www.soinside.com 2019 - 2024. All rights reserved.