2011-02-01 59 views
1

编写函数(pick-numbers-simple L)Scheme:函数,返回数字列表

L是一个简单的列表,其中不包含嵌套的列表。

函数的结果是数字的L列表。

在结果列表中的号码的出现顺序应该是相同的L。例如,(pick-numbers-simple (list a b 1 2 c 3 d))结果应该是(1 2 3)

我有很多需要写的东西,我只是需要一个开始。如果我能得到这个帮助,我可以完成剩下的工作。

+0

哪一部分“写在方案中的功能”,你遇到问题的? – 2011-02-01 03:23:03

回答

2

为了详细说明@Jerry棺材的答案,因为这个问题标记为 “功课”,你可以写pick-numbers-simple,如:

(define (pick-numbers-simple xs) 
    (let loop ((acc (list)) 
      (xs xs)) 
    (cond 
     ((empty? xs) 
     (reverse acc)) 
     ((number? (car xs)) 
     (loop (cons (car xs) acc) (cdr xs))) 
     (else 
     (loop acc (cdr xs)))))) 

或者使用功能filter

(define (pick-numbers-simple xs) 
    (filter number? xs)) 

例子:

> (pick-numbers-simple (list 666 'foo 13 42 'bar)) 
(666 13 42) 
3

number?要告诉你一个特定的项目是否是一个数字。

一旦你的,它应该是相当简单:返回值是当前项目(当且仅当它是一个数字)组成的列表,其后在该列表的其余操作相同的功能。