2013-03-26 65 views
0

我是相当新的计划和,我想了一个办法,立方体给定的列表中的每个数字递归到目前为止,这是我所:方案:功能援助

(define (cube-it-list lst) 
    (cond [(empty? lst) empty] 
     [else (cons (cube-it (first lst)) 
        (cube-it-list (rest lst)))])) 

但每次我执行该程序我得到一个错误,我不知道为什么这是任何人都可以帮助或想出一个更好的更有效的方式来做到这一点。

+0

您得到的错误是什么?发布它作为问题的一部分 – 2013-03-27 00:19:55

回答

1

您是否定义了函数cube-it?当我做了,你的代码为我工作。

在任何情况下,在Scheme中都有一个构造,正是这样的事情:通过对每个元素应用转换使一个列表脱离另一个列表。这就是所谓的地图:

(map cube-it '(1 2 3 4 5)) 
=> '(1 8 27 64 125) 

你已经基本上彻底改造在这里,除了地图不局限于单一的变换操作 - 你通过它,你要作为第一个参数使用的功能。 (请注意,如果您已被特别告知实施递归解决方案,您应该坚持原始代码。map将在内部使用递归,但使用map意味着您自己的代码不需要涉及任何对于这种情况递归。)

2

该功能看起来很好,也许问题出在cube-it过程或您调用它的方式。例如,这个工程:

(define (cube-it x) 
    (* x x x)) 

(define (cube-it-list lst) 
    (cond 
    [(empty? lst) 
    empty] 
    [else 
    (cons (cube-it (first lst)) 
      (cube-it-list (rest lst)))])) 

(cube-it-list '(1 2 3 4 5)) 
=> '(1 8 27 64 125) 

至于“更好更有效的方式来做到这一点”,坚持@ SVK的答案,并map在输入列表中,这是解决这类问题,涉及到习惯的方法将函数应用于输入列表中的每个元素,以生成包含结果的输出列表:

(map cube-it '(1 2 3 4 5)) 
=> '(1 8 27 64 125)