作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个方案过程,它列出了谓词为真的(嵌套)列表中的所有事物。
(define (deep-filter f lst)
(cond
((null? lst) '())
((and (atom? lst) (f lst)) lst)
((atom? lst) '() )
(else (cons (deep-filter f (car lst))
(deep-filter f (cdr lst))))))
(deep-filter number? '(2 (a ((c)) (1)) 6)) => (2 (() ((())) (1)) 6)
最佳答案
试试这个:
(define (deep-filter f lst)
(cond
((null? lst) '())
((and (atom? lst) (f lst)) (list lst))
((atom? lst) '())
(else (append (deep-filter f (car lst))
(deep-filter f (cdr lst))))))
append
而不是
cons
并在列表中打包单个元素(
cond
中的第二种情况)。请注意,这将消除所有子列表,仅返回满足谓词的元素。
(define (deep-filter f lst)
(cond ((null? lst)
'())
((atom? (car lst))
(if (f (car lst))
(cons (car lst) (deep-filter f (cdr lst)))
(deep-filter f (cdr lst))))
(else
(filter (compose not null?)
(cons (deep-filter f (car lst))
(deep-filter f (cdr lst)))))))
(deep-filter number? '(2 (a ((c)) (b)) 6))
=> '(2 6)
(deep-filter number? '(2 (a ((c)) (1)) 6))
=>'(2 ((1)) 6)
(deep-filter number? '(2 (a ((4)) (1)) 6))
=> '(2 (((4)) (1)) 6)
(deep-filter number? '(2 (a ((4)) (1)) 6 ((((((b))))))))
=> '(2 (((4)) (1)) 6)
关于list - 如何在scheme中制作深度过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333291/
我是一名优秀的程序员,十分优秀!