2011-03-02 37 views
0

所以我一直在这个简单的转置编工作可能有人告诉我为什么我的追加不工作?即时通讯与计划中的追加功能问题

(define stuff 
    (lambda (x y) 
     (if (null? y) 0) 
     (if (not (null? (car y))) (stuff (append x (list (map car y))) (map cdr y))) 
)) 

(define x '()) 
(define y '((1 2 3 4)(4 5 6 7)(7 8 9 0))) 
(stuff x y) 

看来,如果你看一下调试语句

+0

你想做什么?例如:'(地图列表'(1 2 3 4)'(4 5 6 7)'(7 8 9 0))'? – knivil 2011-03-03 15:15:03

+0

而“如果你看看调试语句”不是很有帮助。我看到没有调试声明... – knivil 2011-03-03 17:14:47

回答

2

不能连续写两个if表情就像你正在做的工作;因为if是一个表达式,它将评估第一个((if (null? y) 0)),放弃答案(因为您没有在任何地方使用它),然后运行第二个(如果(car y)为空,将返回未定义的值)。另外,如果y不是空的,但它的第一个元素是空的,会发生什么?该案件没有处理。通常,在Scheme中,您使用cond来替换其他语言中if-elseif-else链。有什么特别的失败呢?如果您修复if问题并处理我提到的其他情况,我认为您的代码可以工作或几乎可以工作。

+0

我得到相同的错误(定义的东西 (lambda(xy) (cond ((not(null?(car y)))(stuff(append x(list(map car y)))(map cdr y))) ))) – Danger 2011-03-03 00:05:59

+0

您还需要在'cond'表达式中处理'(null?y)'和'(null?(car y))'case。 – 2011-03-03 00:15:55