为什么我的函数有时会返回(共享...)而不是(list ...)

时间:2013-09-26 08:52:35

标签: racket

我使用以下函数将posns列表转换为三元组列表(posn,posn,symbol)供以后使用draw-solid-line:

(define (list->triples a-list)
        (cond
          [(= (length a-list) 1) empty]
          [else (cons (list (first a-list) (second a-list) my-color) (list->triples (rest a-list)))]
          )
        )

当我将它应用于(list(make-posn 10 10)(make-posn 10 20))时,我得到了

(list (list (make-posn 10 10) (make-posn 10 20) 'black))

正如所料,但当我在列表中添加更多posns时,我得到以下内容:

(shared ((-4- (make-posn 10 20))) (list (list (make-posn 10 10) -4- 'black) (list -4- (make-posn 20 20) 'black)))

我觉得很困惑。

它显然表现得像我需要的列表,因为它可以以预期的方式绘制,但我只是不知道(共享...)是什么以及为什么我的函数返回这种类型的值。

我唯一的线索是它应该与列表中posns的存在有关,因为我没有得到符号列表的相同行为。

以防这是相关的:我正在使用HTDP高级教学语言。

任何人都可以澄清为什么我会得到这种类型的输出吗?

1 个答案:

答案 0 :(得分:1)

程序中的结果以这种方式打印,因为您在语言设置中启用了“显示值共享”设置。如果您不希望像这样打印值,可以取消选中设置。

共享打印机只是缩写多次出现的部分结果。您可以在racket/shared的文档中找到有关共享的更多信息。

注意:在将来的SO帖子中,如果您提供正在尝试运行的整个程序将会很有帮助,因此很容易重现该问题。如果您指出正在使用的语言设置,它也会有所帮助。