所以我一直在研究这个简单的转置编程,有人可以告诉我为什么我的追加工作不起作用吗?
(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 :(得分:2)
你不能像你一样连续写两个if
个表达式;因为if
是一个表达式,它将评估第一个((if (null? y) 0)
),丢弃答案(因为你没有在任何地方使用它),然后运行第二个(它将返回一个未定义的值)如果(car y)
为空)。此外,如果y
不为空但第一个元素为空,会发生什么?那个案子没有处理。通常,在Scheme中,您使用cond
替换其他语言中的if-elseif-else链。特别是失败的是什么?我认为如果您解决if
问题并处理我提到的其他情况,您的代码将会起作用或接近工作。