有没有办法只提取列表中的数字?我正在使用初学者语言包,所以我不能使用过滤器,这很糟糕。
(列出 1 2 bd 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))
=> '()