$$ \newcommand{\lolli}{\multimap} \newcommand{\tensor}{\otimes} \newcommand{\with}{\&} \newcommand{\all}[2]{\forall {#1}.\;{#2}} \newcommand{\fix}[2]{\mu {#1}.\;{#2}} \newcommand{\letv}[3]{\mathsf{let}\,{#1} = {#2}\;\mathsf{in}\;{#3}} \newcommand{\Fun}[2]{\Lambda {#1}.\;{#2}} \newcommand{\fun}[2]{\lambda {#1}.\;{#2}} \newcommand{\unit}{\left(\right)} \newcommand{\letunit}[2]{\letv{\unit}{#1}{#2}} \newcommand{\pair}[2]{\left({#1},{#2}\right)} \newcommand{\letpair}[4]{\letv{\pair{#1}{#2}}{#3}{#4}} \newcommand{\unita}{\left[\right]} \newcommand{\paira}[2]{\left[{#1}, {#2}\right]} \newcommand{\fst}[1]{\mathsf{fst}\,{#1}} \newcommand{\snd}[1]{\mathsf{snd}\,{#1}} \newcommand{\inl}[1]{\mathsf{inl}\,{#1}} \newcommand{\inr}[1]{\mathsf{inr}\,{#1}} \newcommand{\case}[5]{\mathsf{case}({#1}, \inl{#2} \to {#3}, \inr{#4} \to {#5})} \newcommand{\abort}[1]{\mathsf{abort}\,{#1}} \newcommand{\fold}[1]{\mathsf{in}\,{#1}} \newcommand{\unfold}[1]{\mathsf{out}\,{#1}} \newcommand{\judge}[4]{{#1};{#2} \vdash {#3} : {#4}} \newcommand{\judgetp}[2]{{#1} \ \vdash {#2} : \mathsf{type}} \newcommand{\judgectx}[2]{{#1} \vdash {#2} : \mathsf{ctx}} %% Rule names \newcommand{\rulename}[3]{{#2}{\mathrm{#3}}_{\mathrm{#1}}} \newcommand{\intro}[2][]{\rulename{#1}{#2}{I}} \newcommand{\elim}[2][]{\rulename{#1}{#2}{E}} \newcommand{\Var}{\rulename{}{}{Var}} \newcommand{\AllI}{\intro{\forall}} \newcommand{\AllE}{\elim{\forall}} \newcommand{\LolliI}{\intro{\lolli}} \newcommand{\LolliE}{\elim{\lolli}} \newcommand{\UnitI}{\intro{1}} \newcommand{\UnitE}{\elim{1}} \newcommand{\TensorI}{\intro{\tensor}} \newcommand{\TensorE}{\elim{\tensor}} \newcommand{\TopI}{\intro{\top}} \newcommand{\TopE}{\elim{\top}} \newcommand{\WithI}{\intro{\with}} \newcommand{\WithEFst}{\elim[fst]{\with}} \newcommand{\WithESnd}{\elim[snd]{\with}} \newcommand{\ZeroI}{\intro{0}} \newcommand{\ZeroE}{\elim{0}} \newcommand{\SumIInl}{\intro[inl]{\oplus}} \newcommand{\SumIInr}{\intro[inr]{\oplus}} \newcommand{\SumE}{\elim{\oplus}} \newcommand{\MuI}{\intro{\mu}} \newcommand{\MuE}{\elim{\mu}} \newcommand{\size}[1]{\left|#1\right|} \newcommand{\inferrule}[3][]{\frac{#2}{#3}\;{#1}} \newcommand{\tsf}[1]{\textsf{#1}} \newcommand{\ttt}[1]{\texttt{#1}} \newcommand{\qamp}{&\quad} \newcommand{\qqamp}{&&\quad} \newcommand{\proves}{\vdash} \newcommand{\hasType}[2]{#1 : #2} \newcommand{\typeJ}[3]{#1 \proves \hasType{#2}{#3}} \newcommand{\ctx}{\Gamma} \newcommand{\typeJC}[2]{\typeJ{\ctx}{#1}{#2}} \newcommand{\val}[1]{#1~\textsf{val}} \newcommand{\error}[1]{#1~\textsf{error}} \newcommand{\num}[1]{\texttt{Int}(#1)} \newcommand{\steps}[2]{#1 \mapsto #2} \newcommand{\subst}[3]{[#1 \rightarrow #2] \ #3} \newcommand{\err}[1]{#1~\textsf{err}} \newcommand{\lett}[4]{\ttt{let} \ \hasType{#1}{#2} = #3 \ \ttt{in} \ #4} \newcommand{\rec}[3]{\ttt{rec}(#1; x.y.#2)(#3)} \newcommand{\s}{\hspace{1em}} \newcommand{\nl}{\\[2em]} \newcommand{\ir}[3]{\inferrule[\text{(#1)}]{#2}{#3}} \newcommand{\Coloneqq}{::=} \newcommand{\trans}[2]{#1 \leadsto #2} \newcommand{\app}[2]{#1 \ #2} \newcommand{\fnt}[3]{\ttt{fn} \ (\hasType{#1}{#2}) \ . \ #3} \newcommand{\lett}[3]{\ttt{let} \ #1 = #2 \ \ttt{in} \ #3} \newcommand{\tint}{\ttt{int}} $$
CS 242: Programming Languages, Fall 2017
Assignments Course Policies Guides Final Project

Assignments

  • Assignment 1: RPC Library

  • Assignment 2: Roguelike

  • Assignment 3: Lambda Interpreter

  • Assignment 4: Type Extensions

  • Assignment 5: Logic Engine

  • Assignment 6: RIIR

  • Assignment 7: SparkLite