Racket 为什么我的函数有时返回(共享…)而不是(列表…)

Racket 为什么我的函数有时返回(共享…)而不是(列表…),racket,htdp,Racket,Htdp,我使用以下函数将posn列表转换为三元组(posn、posn、symbol)列表,以便以后绘制实线时使用: (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)))]

我使用以下函数将posn列表转换为三元组(posn、posn、symbol)列表,以便以后绘制实线时使用:

(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(makeposn1010)(makeposn1020))时,我得到

正如预期的那样,但当我向列表中添加更多POSN时,我得到以下结果:

(shared ((-4- (make-posn 10 20))) (list (list (make-posn 10 10) -4- 'black) (list -4- (make-posn 20 20) 'black)))
我觉得很困惑

它的行为显然与我需要的列表类似,因为它可以按预期的方式绘制,但我不知道(共享…)是什么,也不知道为什么我的函数返回这种类型的值

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

以防万一:我正在使用HTDP高级教学语言


有人能解释一下为什么我会得到这种类型的输出吗?

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

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


注意:在以后的SO帖子中,如果您提供了您试图运行的整个程序,以便很容易重现问题,这将是很有帮助的。如果您指明正在使用的语言设置,也会有所帮助。

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

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

注意:在以后的SO帖子中,如果您提供了您试图运行的整个程序,以便很容易重现问题,这将是很有帮助的。另外,如果您指明正在使用的语言设置,也会有所帮助。

谢谢。取消选中“Show Share…”就可以了。(我还编辑了我的帖子,加入了关于语言设置的信息)谢谢。取消选中“Show Share…”就可以了。(我还编辑了我的帖子,加入了关于语言设置的信息)
(shared ((-4- (make-posn 10 20))) (list (list (make-posn 10 10) -4- 'black) (list -4- (make-posn 20 20) 'black)))