我对scheme中的append函数有问题
所以我一直在做这个简单的换位程序,有人能告诉我为什么我的附加不起作用吗我对scheme中的append函数有问题,scheme,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
(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)
如果您查看调试语句,它似乎是有效的,您不能像现在这样在一行中编写两个
if
表达式;因为如果
是一个表达式,它将计算第一个表达式((null?y)0)
),放弃答案(因为您没有在任何地方使用它),然后运行第二个表达式(如果(car y)
为空,它将返回一个未定义的值)。另外,如果y
不是空的,但是它的第一个元素是空的,会发生什么?那件事没有得到处理。通常,在Scheme中,使用cond
替换其他语言中的if-elseif-else链。否则失败的具体原因是什么?如果你解决了if
问题并处理了我提到的另一个案例,我认为你的代码会工作或几乎工作。我得到了同样的错误(定义内容(lambda(xy)(cond((not(null)(cary)))(内容(append x(list(map cary)))(map cdr y)))你还需要处理(null?y)
和(null?(car y))
您的条件表达式中的大小写。您想做什么?类似于:(映射列表“(1234)”(4567)”(7890))
?和“如果您查看调试语句”都不是很有帮助。我看不到任何调试语句。。。