我想根据其值创建列表的子集.例如:
List (AA AB BA DC AD)
Run Code Online (Sandbox Code Playgroud)
我想要一个列表,其中包含所有原子的值,从'A'开始.所以答案应该是:
(AA AB AD)
Run Code Online (Sandbox Code Playgroud)
我现在可以通过遍历整个列表并将每个值转换为另一个列表并读取第一个值然后重新创建列表来实现此目的.
这是一个非常复杂的解决方案.
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)))))
Run Code Online (Sandbox Code Playgroud)
使用过滤器获取所有以'A'开头的原子:
> (filter (lambda (x) (char=? (string-ref (symbol->string x) 0) #\A))
'(AA AB BA DC AD))
=> (AA AB AD)
Run Code Online (Sandbox Code Playgroud)