>From your email below, Matthew, I get the impression that you think some of this can&#39;t be fixed inside the PLAI language itself, because there&#39;s no other option at the Racket level. Is that correct?<div><br></div><div>
Jay<br><br><div class="gmail_quote">On Sun, Nov 20, 2011 at 7:48 AM, Matthew Flatt <span dir="ltr">&lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">At Sun, 20 Nov 2011 09:31:02 -0300, Eric Tanter wrote:<br>
&gt; By default, #lang plai prints out values as follows in the REPL:<br>
&gt;<br>
&gt; (define-type Foo<br>
&gt;   (foo (x number?)))<br>
&gt;<br>
&gt; &gt; (foo 1)<br>
&gt; (foo 1)<br>
&gt; &gt; (list 1 2)<br>
&gt; &#39;(1 2)<br>
&gt;<br>
&gt; The output is not really consistent, in that foo is printed as a (user-level)<br>
&gt; constructor, but list is not.<br>
<br>
</div>Well, `quote&#39; is playing the role of constructor.<br>
<div class="im"><br>
&gt; For teaching, the problem with output &#39;(1 2) is<br>
&gt; the need to explain (or try to ignore) the quote.<br>
<br>
</div>PLAI uses `quote&#39; for lists starting on page 8, so if you&#39;re teaching<br>
with the book, it may not be worthwhile to avoid `quote&#39;.<br>
<br>
I think my students has had little trouble with `quote&#39;. In contrast,<br>
in the bad old days when the `quote&#39; was missing --- so that `(list 1<br>
2)&#39; printed as just `(1 2)&#39; --- students had a difficult time with the<br>
difference between expressions and printed values.<br>
<div class="im"><br>
&gt; If I change the output configuration to &quot;constructor&quot;, then I get:<br>
&gt;<br>
&gt; &gt; (foo 1)<br>
&gt; (make-foo 1)<br>
&gt; &gt; (list 1 2)<br>
&gt; (list 1 2)<br>
&gt;<br>
&gt; Now list is printed as constructor, but foo is printed using its &quot;low-level&quot;<br>
&gt; constructor, which for teaching is not that great either.<br>
<br>
</div>Agreed --- this should be fixed.<br>
<br>
Currently, constructor-style printing always uses a &quot;make-&quot;, but the<br>
default mode should be to use the same constructor name that `print&#39;<br>
uses when `print-as-expression&#39; is true.<br>
<div class="im"><br>
&gt; The other option for output is &quot;write&quot;, which gives:<br>
&gt;<br>
&gt; &gt; (foo 1)<br>
&gt; #(struct:foo 1)<br>
&gt; &gt; (list 1 2)<br>
&gt; (1 2)<br>
&gt;<br>
&gt; Again not so nice.<br>
<br>
</div>Agreed --- definitely not the right option for teaching.<br>
<div class="im"><br>
&gt; Basically, there seems to be no way to obtain:<br>
&gt;<br>
&gt; &gt; (foo 1)<br>
&gt; (foo 1)<br>
&gt; &gt; (list 1 2)<br>
&gt; (list 1 2)<br>
&gt;<br>
&gt; Is there?<br>
<br>
</div>Right -- not until we fix constructor-style printing.<br>
<div><div></div><div class="h5"><br>
_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Jay McCarthy &lt;<a href="mailto:jay@cs.byu.edu" target="_blank">jay@cs.byu.edu</a>&gt;<br>Assistant Professor / Brigham Young University<br><a href="http://faculty.cs.byu.edu/~jay" target="_blank">http://faculty.cs.byu.edu/~jay</a><br>
<br>&quot;The glory of God is Intelligence&quot; - D&amp;C 93<br>
</div>