0

我在使用地图时遇到了一些麻烦。

我将二叉树定义为列表,并且我有几个函数可以使用它们。我应该想出几个测试用例然后运行它们。我预定义了几棵树。但是,为了节省时间,我想将测试用例作为带有 map 的批处理运行。

例如,我有以下树:

(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),这就是我单独测试它们时得到的结果)。

我怎样才能解决这个问题?我尝试过删除抑制评估的前引号,但随后我显然收到有关列表无法评估的错误。

4

1 回答 1

2

为了节省时间,我定义了一个列表列表:

(define ctrees '(ctree0 ctree1 ctree4))

你没有;您定义了一个包含三个符号 、ctree0ctree1的列表ctree4。要定义列表列表,您必须去掉引号:

(define ctrees (list ctree0 ctree1 ctree4))

在此更改之后,(map empty? ctrees)会产生预期的结果。

于 2013-10-20T21:37:45.257 回答