Scheme 根据列表的值读取和重新创建列表

Scheme 根据列表的值读取和重新创建列表,scheme,racket,Scheme,Racket,我想根据列表的值创建列表的子集。例如: List (AA AB BA DC AD) 我想要一个列表,其中包含所有原子值,从'a'开始 所以答案应该是: (AA AB AD) 目前,我可以通过遍历整个列表,将每个值转换为另一个列表,读取第一个值,然后重新创建列表来实现这一点 这是一个非常复杂的解决方案 Scheme中是否有任何方法可以读取列表中字符串的第一个字符并删除元素?检查您的Scheme实现是否有一个名为filter或类似的过程。如果没有,您可以自己定义一个: (define (filt

我想根据列表的值创建列表的子集。例如:

List (AA AB BA DC AD)
我想要一个列表,其中包含所有原子值,从'a'开始 所以答案应该是:

(AA AB AD)
目前,我可以通过遍历整个列表,将每个值转换为另一个列表,读取第一个值,然后重新创建列表来实现这一点

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


Scheme中是否有任何方法可以读取列表中字符串的第一个字符并删除元素?

检查您的Scheme实现是否有一个名为
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)

检查您的方案实施是否有一个名为
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)
酷!!!谢谢:)尝试了类似的逻辑,但当我遇到难看的错误时,我更加困惑了:Pcool!!!谢谢:)尝试了类似的逻辑,但当我遇到难看的错误时,我更加困惑了:P