嗨我得到错误mcar: Contract 违规期待:mpair?给出:()运行这些代码时:
(define helpy
(lambda (y listz)
(map (lambda (z) (list y z))
listz)))
(define print
(lambda (listy)
(cond
((null? list) (newline))
(#t (helpy (car listy) (cdr listy))
(print (cdr listy))))))
我的代码试图在列表中返回对 . 例如,当我调用 (print '(a b c))
时,它应该返回 ((a b) (a c) (b c))
.
我只修复并更新了我的代码,现在它不会返回错误但我只能在运行这些代码时获得对((a b)(a c):
(定义帮助
(lambda(y listz)
( Map (lambda(z)(list y z))
listz)))
(定义打印
(lambda(listy)
(条件
((null?listy)(换行符))
(#t(helpy(car listy)(cdr listy)))
(print (cdr listy)))))
我认为我的递归有问题
2 回答
代码有几个问题 . 首先,按惯例,
cond
的"else"子句应以else
开头,而不是#t
. 其次,print
中的null?
测试应该收到listy
,而不是list
. 第三,你没有对helpy
在print
中返回的结果做任何事情,你只是在当前列表的cdr
上推进print
而不对递归调用返回的值做任何事情 . 试试这个:displayln
只是一个示例,如果需要,可以使用返回的结果执行其他操作 .我尝试这样实现:
运行结果: