我在使用地图时遇到了一些麻烦。
我将二进制树定义为列表,我有几个函数可以使用它们。我应该提出几个测试用例然后运行它们。我预定了几棵树。但是,为了节省时间,我希望将测试用例作为批处理与地图一起运行。
例如,我有以下树木:
(define ctree0 '()) ; 0 nodes
(define ctree1 '("Apple" () ())) ; 1 node
(define ctree4 '("Candy" ("Artichoke" ("Apple" () ()) ()) ("Doughnut" () ()))) ; 4 nodes
我有以下功能:
(define empty?
(lambda (t)
(null? t)
)
)
为节省时间,我定义了一个列表列表:
(define ctrees '(ctree0 ctree1 ctree4))
然后尝试运行以下内容;
(map empty? ctrees)
产生:
(#f #f #f)
正确的结果应该是(#t #f #f)
,这是我单独测试时得到的结果。
我该如何解决这个问题?我试过去删除抑制评估的前引用,但后来我明显得到关于列表无法评估的错误。
答案 0 :(得分:2)
为节省时间,我定义了一个列表列表:
(define ctrees '(ctree0 ctree1 ctree4))
你没有;您定义了三个符号的列表,ctree0
,ctree1
和ctree4
。要定义列表列表,您必须丢失引号:
(define ctrees (list ctree0 ctree1 ctree4))
在此更改后,(map empty? ctrees)
会产生预期结果。