映射未正确将函数应用于列表列表

时间:2013-10-20 21:33:47

标签: list map scheme

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

我将二进制树定义为列表,我有几个函数可以使用它们。我应该提出几个测试用例然后运行它们。我预定了几棵树。但是,为了节省时间,我希望将测试用例作为批处理与地图一起运行。

例如,我有以下树木:

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

我该如何解决这个问题?我试过去删除抑制评估的前引用,但后来我明显得到关于列表无法评估的错误。

1 个答案:

答案 0 :(得分:2)

  

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

(define ctrees '(ctree0 ctree1 ctree4))

你没有;您定义了三个符号的列表,ctree0ctree1ctree4。要定义列表列表,您必须丢失引号:

(define ctrees (list ctree0 ctree1 ctree4))

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