# Way to use \`empty\` instead of \`'()\`, at least until I introduce \`(quote ...)\` and \`'(...)\`?

**URL:** <https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133>\
**Category:** Questions & Answers\
**Tags:** teaching\
**Created:** [March 6, 2026, 6:58pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133 "2026-03-06T18:58:26Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![ToddOBryan](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/toddobryan/32/1962_2.png) [@ToddOBryan](https://racket.discourse.group/u/ToddOBryan)\
**Post date:** [March 6, 2026, 6:58pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/1 "2026-03-06T18:58:26Z")

</div>

Is there a parameter or anything I can use to have `'()` print as `empty`, as it used to, in the latest versions of DrRacket. I've searched around, but couldn't find anything.

I'd just like to hold off on `'()` until I've taught abbreviating lists as `'(a b "c" 1 2 3)`.

---

<div class="post-metadata">

**Author:** ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)\
**Post date:** [March 9, 2026, 4:13am UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/2 "2026-03-09T04:13:02Z")

</div>

I have wanted this for a long time as well. @EmEf, what would you think about adding an option in the Language dialog for this?

---

<div class="post-metadata">

**Author:** ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)\
**Post date:** [March 9, 2026, 3:27pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/3 "2026-03-09T15:27:25Z")

</div>

I consider `empty` a pedagogical flaw.

Here is why. Time and again I see students use these kind of expressions:

```scheme
`(1 2 3 empty)

```

or

```scheme
(list 1 2 'empty)

```

which is why I replaced `empty` with `'()` in 2e as much as possible.

And I sure wish I had never invented `empty`.

Makes sense?

---

<div class="post-metadata">

**Author:** ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)\
**Post date:** [March 9, 2026, 8:50pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/4 "2026-03-09T20:50:41Z")

</div>

I understand that you teach that way, but I (and others) avoid quote entirely when teaching HtDP and so the current printing approach is quite awkward while the bogus expressions that you're talking about never come up. That's why I would be interested in a preference to go back to the prior approach.

---

<div class="post-metadata">

**Author:** ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)\
**Post date:** [March 9, 2026, 9:06pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/5 "2026-03-09T21:06:57Z")

</div>

Do you use symbols?

NU tried teaching without quote. (I do consider quasrquote and unquote essential but ignore that) just symbols. Kids would still write `'empty` which suggests we should remove symbols from the teaching languages and use only strings (in the hope that nobody writes "empty" in the end and expects `'()` after all).

@robby -- thoughts?

---

<div class="post-metadata">

**Author:** ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)\
**Post date:** [March 9, 2026, 9:19pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/6 "2026-03-09T21:19:01Z")

</div>

No, I don't use symbols at all. (Sometimes they appear in error messages but I ignore that.)

---

<div class="post-metadata">

**Author:** ![robby](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/robby/32/7_2.png) [@robby](https://racket.discourse.group/u/robby)\
**Post date:** [March 9, 2026, 9:23pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/7 "2026-03-09T21:23:55Z")

</div>

> [@EmEf](#):
>
> @robby -- thoughts?

Nothing useful, I'm afraid.

---

<div class="post-metadata">

**Author:** ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)\
**Post date:** [March 9, 2026, 9:44pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/8 "2026-03-09T21:44:17Z")

</div>

@robby

The question is whether you would be willing to add a preference to the language dialog that brings back the old printer preference of rendering empty list as `empty`. (To be honest, this may go all the way back to HtDP/1e and the teaching language printer from back then.)

Since you own this panel, you're the right person to think about this.

---

<div class="post-metadata">

**Author:** ![maueroats](https://avatars.discourse-cdn.com/v4/letter/m/c0e974/32.png) [@maueroats](https://racket.discourse.group/u/maueroats)\
**Post date:** [March 9, 2026, 10:16pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/9 "2026-03-09T22:16:35Z")

</div>

What would you think about having `'()` or `empty` print as `(list)` instead?

Then it would be consistent (if ugly). I'm assume someone has considered this and though it was a bad idea, but no reason came to my mind while writing this.

---

<div class="post-metadata">

**Author:** ![robby](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/robby/32/7_2.png) [@robby](https://racket.discourse.group/u/robby)\
**Post date:** [March 9, 2026, 10:48pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/10 "2026-03-09T22:48:11Z")

</div>

> [@EmEf](#):
>
> The question is whether you would be willing to add a preference to the language dialog that brings back the old printer preference of rendering empty list as `empty`. (To be honest, this may go all the way back to HtDP/1e and the teaching language printer from back then.)
> 
> Since you own this panel, you're the right person to think about this.

Are you asking about the language dialog version of BSL or the `#lang` version? For the former, it seems not too difficult to add. For the latter, it would probably require a student to write something like:

```scheme
#lang htdp/bsl/empty

```

or something like that on the first line.

---

<div class="post-metadata">

**Author:** ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)\
**Post date:** [March 9, 2026, 11:01pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/11 "2026-03-09T23:01:28Z")

</div>

I won't be using this feature, so @samth @ToddOBryan ?

---

<div class="post-metadata">

**Author:** ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)\
**Post date:** [March 9, 2026, 11:42pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/12 "2026-03-09T23:42:58Z")

</div>

I was thinking in the menu-based version.

---

<div class="post-metadata">

**Author:** ![ToddOBryan](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/toddobryan/32/1962_2.png) [@ToddOBryan](https://racket.discourse.group/u/ToddOBryan)\
**Post date:** [March 10, 2026, 2:03pm UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/13 "2026-03-10T14:03:06Z")

</div>

Just a personal preference, but I would love everything that can be a parameter to be. That way I can put the settings in a file and have students require it. Getting them all to get things correct in different menus and windows has proven to be a source of confusion and annoyance. (Especially when they switch to a new computer, etc.)

In fact, if I could have the test-coverage highlighting as a parameter, I would love that. 🙂

But whatever is easiest for you is fine with me.

---

<div class="post-metadata">

**Author:** ![hendrikboom3](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/hendrikboom3/32/2748_2.png) [@hendrikboom3](https://racket.discourse.group/u/hendrikboom3)\
**Post date:** [March 11, 2026, 1:57am UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/14 "2026-03-11T01:57:59Z")

</div>

What's the pproblem with () ?  
It looks like an empty list as much as (1 2 3) looks like a list of numbers.

-- hendrik

---

<div class="post-metadata">

**Author:** ![maueroats](https://avatars.discourse-cdn.com/v4/letter/m/c0e974/32.png) [@maueroats](https://racket.discourse.group/u/maueroats)\
**Post date:** [March 11, 2026, 2:44am UTC](https://racket.discourse.group/t/way-to-use-empty-instead-of-at-least-until-i-introduce-quote-and/4133/15 "2026-03-11T02:44:34Z")

</div>

In the student languages, the output of `(list 1 2 3)` is just `(list 1 2 3)`. Having the output of `(list)` be `'()` introduces a new syntax element, the quote, that is not used other places and (imo) has no place early in the process of learning lists.

What should a beginner make of this interaction?

```scheme
> (list 1 2 3)
(list 1 2 3)
> (list)
'()

```

I rarely attempt to explain `quote` to a beginner, but when I do it ends horriibly. `(list 1 2 variable 4)` isn't the same as `'(1 2 variable 4)` -- ouch. Beginners should stay away from this.
