使用 lambda 在 Racket 中删除深层列表
deep list remove in Racket with lambda
我需要创建一个接受 2 个输入的过程。第一个是测试程序,第二个是列表。
作为输出,它生成一个列表,该列表是输入列表的副本,其中包含
测试程序评估为 true 的删除。
注意输入列表可以是深列表。
例如
(deep-list-remove (lambda (x) (= x 0)) (list 0 1 2 3))
;returns (1 2 3)
或
(deep-list-remove (lambda (x) (< x 4)) '(7 2 (3 4 (5 6))))
;returns '(7 ( 4 (5 6)))
我试过
(define (deep-list-remove f list)
(for/list ([i list]
#:unless (f (f i))))
i
)
)
enter image description here
但我收到以下错误
=: contract violation
expected: number?
given: #t
提前感谢您的帮助
这是一个使用递归函数的解决方案:
(define (deep-list-remove f lst)
(cond ((null? lst) lst)
((cons? (car lst))
(cons (deep-list-remove f (car lst)) (deep-list-remove f (cdr lst))))
((f (car lst)) (deep-list-remove f (cdr lst)))
(else (cons (car lst) (deep-list-remove f (cdr lst))))))
我需要创建一个接受 2 个输入的过程。第一个是测试程序,第二个是列表。
作为输出,它生成一个列表,该列表是输入列表的副本,其中包含 测试程序评估为 true 的删除。
注意输入列表可以是深列表。
例如
(deep-list-remove (lambda (x) (= x 0)) (list 0 1 2 3))
;returns (1 2 3)
或
(deep-list-remove (lambda (x) (< x 4)) '(7 2 (3 4 (5 6))))
;returns '(7 ( 4 (5 6)))
我试过
(define (deep-list-remove f list)
(for/list ([i list]
#:unless (f (f i))))
i
)
)
enter image description here
但我收到以下错误
=: contract violation expected: number? given: #t
提前感谢您的帮助
这是一个使用递归函数的解决方案:
(define (deep-list-remove f lst)
(cond ((null? lst) lst)
((cons? (car lst))
(cons (deep-list-remove f (car lst)) (deep-list-remove f (cdr lst))))
((f (car lst)) (deep-list-remove f (cdr lst)))
(else (cons (car lst) (deep-list-remove f (cdr lst))))))