<p>I learned Racket using the material taught by the UW MOOC on Coursera Programming Languages, Part B, which is modeled after <a href="http://courses.cs.washington.edu/courses/cse341/17sp/" rel="nofollow noreferrer">this UW course</a>.</p>

<p>Here are the relevant helpful documents, which do provide an introduction to the language along with quite advanced material which involves implementing a programming language within Racket:</p>

<ul>
<li><p>Notes for <a href="http://courses.cs.washington.edu/courses/cse341/17sp/unit5notes.pdf" rel="nofollow noreferrer">Unit 5</a> and <a href="http://courses.cs.washington.edu/courses/cse341/17sp/unit6notes.pdf" rel="nofollow noreferrer">Unit 6</a></p></li>
<li><p><a href="http://courses.cs.washington.edu/courses/cse341/17sp/hw4.pdf" rel="nofollow noreferrer">Homework 4</a> and <a href="http://courses.cs.washington.edu/courses/cse341/17sp/hw5.pdf" rel="nofollow noreferrer">Homework 5</a> </p></li>
</ul>

<p>The materials in this course are heavy on recursion, so some of the earlier exercises in Homework 4 may help your students with this concept while getting them comfortable with basic Racket exercises.</p>

<p>I also can't speak highly enough of the free, self-paced course materials for <a href="https://berkeley-cs61as.github.io/index.html" rel="nofollow noreferrer">UC Berkeley's CS61AS</a> found on the "Textbook" tab. </p>

<p>These two additional resources may spark some ideas as well:</p>

<ul>
<li><p><a href="http://www.cems.uvm.edu/~rsnapp/teaching/cs32/racket.html" rel="nofollow noreferrer">Example programs in Racket</a></p></li>
<li><p><a href="https://jeapostrophe.github.io/2013-04-15-astar-post.html" rel="nofollow noreferrer">A* Search in Racket</a> (this relates to <a href="https://cseducators.stackexchange.com/questions/282/introducing-a-search-algorithm">one of your other posts</a> as well - two birds with one stone?)</p></li>
</ul>

CC BY-SA 3.0
2017-06-03T19:40:13.410Z
2017-06-03T19:40:13.410Z
Peter
<p>When my students move up to junior year, they make a series of transitions: from programming to theoretical computer science, and from imperative to functional programming.  We use <strong>DrRacket</strong>, and one of the goals of the course is to give them a very broad exposure to theoretical computer science.  Part of that is choosing labs that can be coded using the tools that they have learned so far.</p>

<p>They are already familiar with linked lists, Big $O$, $\Omega$, and $\Theta$, binary trees, the runtime stack, BFS and DFS before they arrive at this class.  They have also been exposed to recursion a fair amount (though most of them are not highly skilled at it yet)</p>

<p>My first lesson with them in Racket is called <em>"Cons, Car, Cdadr, and Contracts"</em> and it contains exactly the sorts of material you would expect from that title.  I have created a lab that makes them use these tools, but adds up to no further significance.  What I <em>want</em> is an algorithm that has some theoretical significance and that they can do with those tools.  The algorithm itself can come from any part of computer science - I just want it to be something <em>worth</em> exposing them to in the first place.</p>

<p>The lab goals would thus be two-fold: first, to give them a chance to play around with and familiarize themselves with the beginnings of Racket.  Second, I want to give them a chance to learn about an important algorithm.</p>

CC BY-SA 3.0
2017-06-05T20:42:37.470Z
I would suggest asking @ShriramKrishnamurthi, as he is very likely the person most knowledgeable about Racket on this SE.
xuq01
<lesson-ideas><algorithms><functional-programming><scheme>
Significant algorithm from CS for DrRacket that emphasize cons, car, and cdr
# Significant algorithm from CS for DrRacket that emphasize cons, car, and cdr

(Asked by: username_0 on 2017-06-03)

When my students move up to junior year, they make a series of transitions: from programming to theoretical computer science, and from imperative to functional programming. We use **DrRacket**, and one of the goals of the course is to give them a very broad exposure to theoretical computer science. Part of that is choosing labs that can be coded using the tools that they have learned so far.

They are already familiar with linked lists, Big $O$, $\Omega$, and $\Theta$, binary trees, the runtime stack, BFS and DFS before they arrive at this class. They have also been exposed to recursion a fair amount (though most of them are not highly skilled at it yet)

My first lesson with them in Racket is called *"Cons, Car, Cdadr, and Contracts"* and it contains exactly the sorts of material you would expect from that title. I have created a lab that makes them use these tools, but adds up to no further significance. What I *want* is an algorithm that has some theoretical significance and that they can do with those tools. The algorithm itself can come from any part of computer science - I just want it to be something *worth* exposing them to in the first place.

The lab goals would thus be two-fold: first, to give them a chance to play around with and familiarize themselves with the beginnings of Racket. Second, I want to give them a chance to learn about an important algorithm.

**Tags:** lesson-ideas, algorithms, functional-programming, scheme

> **Comments:**
> **username_1**: I would suggest asking @ShriramKrishnamurthi, as he is very likely the person most knowledgeable about Racket on this SE.  

---

## 1 answers

### Answer by username_2 on 2017-06-03. Score: 2

I learned Racket using the material taught by the UW MOOC on Coursera Programming Languages, Part B, which is modeled after [this UW course](http://courses.cs.washington.edu/courses/cse341/17sp/).

Here are the relevant helpful documents, which do provide an introduction to the language along with quite advanced material which involves implementing a programming language within Racket:

* Notes for [Unit 5](http://courses.cs.washington.edu/courses/cse341/17sp/unit5notes.pdf) and [Unit 6](http://courses.cs.washington.edu/courses/cse341/17sp/unit6notes.pdf)
* [Homework 4](http://courses.cs.washington.edu/courses/cse341/17sp/hw4.pdf) and [Homework 5](http://courses.cs.washington.edu/courses/cse341/17sp/hw5.pdf)

The materials in this course are heavy on recursion, so some of the earlier exercises in Homework 4 may help your students with this concept while getting them comfortable with basic Racket exercises.

I also can't speak highly enough of the free, self-paced course materials for [UC Berkeley's CS61AS](https://berkeley-cs61as.github.io/index.html) found on the "Textbook" tab.

These two additional resources may spark some ideas as well:

* [Example programs in Racket](http://www.cems.uvm.edu/~rsnapp/teaching/cs32/racket.html)
* [A\* Search in Racket](https://jeapostrophe.github.io/2013-04-15-astar-post.html) (this relates to [one of your other posts](https://cseducators.stackexchange.com/questions/282/introducing-a-search-algorithm) as well - two birds with one stone?)


---

