Lisp racket博士的mcons

Lisp racket博士的mcons,lisp,scheme,sicp,racket,Lisp,Scheme,Sicp,Racket,我无法读取racket博士的输出。默认情况下,它使用MCON显示列表。例如,sicp练习2.32生成: > (subsets (list 1 2 3)) (mcons (mcons '() (mcons (mcons 3 '()) (mcons (mcons 2 '()) (mcons (mcons 2 (mcons 3 '())) (mcons (mcons 1 '()) (mcons (mc

我无法读取racket博士的输出。默认情况下,它使用MCON显示列表。例如,sicp练习2.32生成:

> (subsets (list 1 2 3))
(mcons
 (mcons
  '()
  (mcons
   (mcons 3 '())
   (mcons
    (mcons 2 '())
    (mcons
     (mcons 2 (mcons 3 '()))
     (mcons
      (mcons 1 '())
      (mcons
       (mcons 1 (mcons 3 '()))
       (mcons
        (mcons 1 (mcons 2 '()))
        (mcons (mcons 1 (mcons 2 (mcons 3 '()))) '()))))))))
 '())
我读这个有困难。有没有办法使输出看起来像:

 (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))

谢谢

你知道你的语言系使用什么语言吗?下面的其余说明假设您正在使用lang行

如果您在LangR5RS中,并且您显示或写入了这些值,那么您应该可以看到预期的输出

> (define p (list 1 2))
> (display p)
(1 2)
> (set-car! p 'one)
> (display p)
(one 2)
如果您只是在交互中直接键入值,DrRacket将打印它们,并使用您看到的表示形式。在DrRacket中,您可以选择打印值的方式。以下是过程,一步一步:

转到“语言”菜单,然后选择“选择语言”。您应该会看到“语言”对话框弹出

如果左下角的按钮显示“显示详细信息”,请单击该按钮,对话框窗口应展开以包含自定义设置

查找“输出样式”选项。应该有四种选择:构造函数、准注释、写入和打印。选择“写入样式”,然后按“确定”确认自定义

一旦您这样做,那么:

> (display (list 1 2))
(1 2)
> (write (list 1 2))
(1 2)
> (list 1 2)
{1 2}
使用大括号,它的打印方式仍然与您预期的略有不同,因为它试图表示列表结构是可变的

如果这困扰你,我们可以解决。在程序顶部附近的lang行之后添加以下行

这条线引入了一个特定于球拍的模块,名为,该模块试图提高r5rs的合规性;特别是,对于可变对,大括号最终应打印为圆形

> (display (list 1 2))
(1 2)
> (write (list 1 2))
(1 2)
> (list 1 2)
(1 2)

谢谢写作风格起了作用。我用的是lang planet neil/sicp。但是现在,随着书写风格语言显示为SICP PLaneT 1.16 custom并说“read:lang在当前上下文中未启用”,我不得不注释掉land行以使其工作。酷。稍后我将与Neil联系,看看是否可以更改他的包的默认值,使其默认为写入。如果从终端而不是DrRacket运行,如何配置输出样式?我在Emacs中通过geiser模式运行Racket。@拥挤请参见:。例如,您可以将默认打印处理程序配置为不使用表达式样式打印,方法是以表达式f的形式打印。@dyoo我可以知道您与Neil跟进的结果吗?
> (display (list 1 2))
(1 2)
> (write (list 1 2))
(1 2)
> (list 1 2)
(1 2)