Scheme 去除原子的方案功能?
如果我有一个像e qr这样的列表 我怎样才能去掉所有的原子,然后再回来呢Scheme 去除原子的方案功能?,scheme,Scheme,如果我有一个像e qr这样的列表 我怎样才能去掉所有的原子,然后再回来呢 (define rem-atoms (lambda (lat) (cond ((null? lat) lat) ((not (pair? (car lat))) (rem-atoms (cdr lat))) (else (cons (rem-atoms (car lat)) (rem-atoms (cdr lat))))))) 如果列表为空,则返回空列表。如果它是一个原子,或者更确
(define rem-atoms
(lambda (lat)
(cond
((null? lat) lat)
((not (pair? (car lat))) (rem-atoms (cdr lat)))
(else
(cons (rem-atoms (car lat)) (rem-atoms (cdr lat)))))))
如果列表为空,则返回空列表。如果它是一个原子,或者更确切地说,不是一个列表,只需删除它。如果它是一个列表,则在car和列表的cdr上递归调用该函数
如果列表为空,则返回空列表。如果它是一个原子,或者更确切地说,不是一个列表,只需删除它。如果它是一个列表,则在car和列表的cdr上递归调用该函数。嘿,一种称为树递归的技术对于此类问题很有用 我同意格雷格答案的一般结构,但我认为我们需要从嵌套列表中显式过滤原子非列表值
(define (rem-atoms lst)
(cond
((not (list? lst)) lst)
((null? lst) (list))
(else
(filter
(lambda (a) (list? a))
(cons (rem-atoms (car lst))
(rem-atoms (cdr lst)))))))
(rem-atoms '(f (x y) z () (k ()))) ; --> (() () (()))
(rem-atoms '(f x (y))) ; --> (())
经过进一步检查,对Greg的“好的解决方案”的微小修改现在也提供了正确的结果。具体来说:不是名单?xx而不是配对?xx
(define (rem-atoms lat)
(cond
((null? lat) lat)
((not (list? (car lat))) (rem-atoms (cdr lat)))
(else
(cons (rem-atoms (car lat))
(rem-atoms (cdr lat)))))))
(rem-atoms '(f (x y) z () (k ()))) ; --> (() () (()))
(rem-atoms '(f x (y))) ; --> (())
嗯,我想我最喜欢第二个版本了
注意,我在这里是全新的,但我希望这能有所帮助。嘿,一种称为树递归的技术对这类问题很有用 我同意格雷格答案的一般结构,但我认为我们需要从嵌套列表中显式过滤原子非列表值
(define (rem-atoms lst)
(cond
((not (list? lst)) lst)
((null? lst) (list))
(else
(filter
(lambda (a) (list? a))
(cons (rem-atoms (car lst))
(rem-atoms (cdr lst)))))))
(rem-atoms '(f (x y) z () (k ()))) ; --> (() () (()))
(rem-atoms '(f x (y))) ; --> (())
经过进一步检查,对Greg的“好的解决方案”的微小修改现在也提供了正确的结果。具体来说:不是名单?xx而不是配对?xx
(define (rem-atoms lat)
(cond
((null? lat) lat)
((not (list? (car lat))) (rem-atoms (cdr lat)))
(else
(cons (rem-atoms (car lat))
(rem-atoms (cdr lat)))))))
(rem-atoms '(f (x y) z () (k ()))) ; --> (() () (()))
(rem-atoms '(f x (y))) ; --> (())
嗯,我想我最喜欢第二个版本了
请注意,我是新来的,但我希望这能有所帮助。很好的解决方案,谢谢你纠正我的错误。我忘了空列表不能与pair一起使用?使用列表的问题?这有两个方面:1。它必须遍历整个列表来确定它是否是一个正确的列表,每次都是?不需要遍历,和2。您是否也要删除不正确的列表?它们不是原子。我想是一双还是一双?foo空?foo更合理。很好的解决方案,谢谢你纠正我的错误。我忘了空列表不能与pair一起使用?使用列表的问题?这有两个方面:1。它必须遍历整个列表来确定它是否是一个正确的列表,每次都是?不需要遍历,和2。您是否也要删除不正确的列表?它们不是原子。我想是一双还是一双?foo空?foo更合理。