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

发布于 2024-10-03 08:03:27 字数 280 浏览 3 评论 0原文

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

List (AA AB BA DC AD)

我想要一个列表,其中包含从“A”开始的所有原子值 所以答案应该是:

(AA AB AD)

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

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

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

I want to create a subset of my list based on its values. For example:

List (AA AB BA DC AD)

I want a list which has all values of atoms in it starting from 'A'
So Answer should be:

(AA AB AD)

I can do this currently by traversing through the whole list and converting each value to another list and reading the first value and then recreating the list.

This is an awfully complex solution.

Is there any method in Scheme which can read the first character of the string in a list and remove the element?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦断已成空 2024-10-10 08:03:27

检查你的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)

Check if your Scheme implementation has a procedure called filter or something like that. If not you can define one yourself:

(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)))))

Using filter to get all atoms that start with 'A':

> (filter (lambda (x) (char=? (string-ref (symbol->string x) 0) #\A)) 
          '(AA AB BA DC AD))
=> (AA AB AD)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文