在Scheme中没有空单词的空列表

时间:2011-05-27 14:36:57

标签: scheme racket

我正在编写一个递归函数,在基本情况下返回一个空列表。但是函数的输出在我的列表中显示“空”字,这是我不想要的。就像这样;

  

(list(list'abc)(list'snd)empty(list'ghi))

我该怎样防止这种情况?感谢。

3 个答案:

答案 0 :(得分:3)

问题可能是因为Racket有多种值的打印样式。尝试将其(在语言选择对话框中)更改为“写入”或其调用的任何内容,这应该使其输出((abc) (def) () (ghi))

答案 1 :(得分:2)

您在结果中看到的empty不是“字” - 请注意,它未被引用。如果你期望结果中有一个空列表,那么看起来你有一个。你甚至可以检查:

> (empty? (third (list (list 'abc) (list 'def) empty (list 'ghi))))
#t

答案 2 :(得分:1)

不知道细节,我最好的猜测就像是

(let ((result (recursive-call ...)))
(if (null? result) (resursive-call (cdr whatever-list))
(cons result (cdr whatever-list)))

基本上,只检查结果是否为空列表,如果是,请不要将其放入要返回的列表中。