scheme - 仅提取列表中的数字

标签 scheme racket

有没有办法只提取列表中的数字? 我正在使用初学者语言包,因此我无法使用过滤器,这很糟糕。

(列出 a 1 2 b d 3 5) => 1 2 3 5 等 我想用它作为我的辅助函数的一部分,但我无法弄清楚!

谢谢!

最佳答案

理想情况下,这个问题应该使用 filter 来解决高阶过程,如下所示:

(filter number? '(a 1 2 b d 3 5))
=> '(1 2 3 5)

...但是因为这看起来像作业,所以我会给你一些关于如何手动解决问题的提示,只需填空即可:

(define (only-numbers lst)
  (cond (<???>                        ; is the list empty?
         <???>)                       ; return the em´pty list
        (<???>                        ; is the 1st element in the list a number?
         (cons <???>                  ; then cons the first element
               (only-numbers <???>))) ; and advance the recursion
        (else                         ; otherwise
         (only-numbers <???>))))      ; simply advance the recursion

请注意,此解决方案遵循一个众所周知的模板,即递归处理列表并依次创建新列表作为输出的配方。不要忘记测试您的程序:

(only-numbers '(a 1 2 b d 3 5))
=> '(1 2 3 5)

(only-numbers '(1 2 3 4 5))
=> '(1 2 3 5)

(only-numbers '(a b c d e))
=> '()

关于scheme - 仅提取列表中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15507732/

相关文章:

functional-programming - Scheme/Lisp 嵌套循环和递归

functional-programming - Racket - Closure/Currying,区别在哪里?

scheme - 如何评估从 Scheme 中的函数返回的符号?

scheme - 文学编程的直觉动机?

scheme - 将方案翻译为 CL

scheme - 将函数映射到列表列表并将结果连接到列表中

racket - Racket v5.1.1 中的范围界定错误?

scheme - 无限流的累加器

multithreading - 如何从异常处理程序中产生线程的当前延续