2010-11-15 39 views
0

我想创建基于自己的价值观我的列表的子集的列表。例如:阅读并重新创建基于自己的价值观

List (AA AB BA DC AD) 

我想它有它的原子从“A”开头的所有值的列表 所以答案应该是:

(AA AB AD) 

我能做到这一点目前通过全遍历列表并将每个值转换为另一个列表并读取第一个值,然后重新创建列表。

这是一个非常复杂的解决方案。

是否有计划的任何方法可以读出字符串的第一个字符的列表和删除元素?

回答

5

检查,如果你的计划的实施有一个叫filter或类似的东西的过程。如果没有,你可以定义一个自己:

(define (filter p lst) 
    (let loop ((lst lst) (res())) 
    (if (null? lst) 
     (reverse res) 
     (if (p (car lst)) 
      (loop (cdr lst) (cons (car lst) res)) 
      (loop (cdr lst) res))))) 

使用过滤器,以获得与“A”开头的所有原子:

> (filter (lambda (x) (char=? (string-ref (symbol->string x) 0) #\A)) 
      '(AA AB BA DC AD)) 
=> (AA AB AD) 
+0

冷静!谢谢:)试图类似的逻辑,但最终进一步困惑当我碰到丑陋的错误:P – JJunior 2010-11-19 19:05:23