我在方案中有附加功能的问题

时间:2011-03-02 23:40:21

标签: scheme

所以我一直在研究这个简单的转置编程,有人可以告诉我为什么我的追加工作不起作用吗?

(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) 

如果查看调试语句

,它似乎有效

1 个答案:

答案 0 :(得分:2)

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