\section{Challenges} Do \ref{Yfac} first, then finish the rest in any order. \\ Have fun! \problem{} Design a recursive factorial function using $Y$. \\ \vfill \problem{} Design a non-recursive factorial function. \\ \note{This one is a lot easier than \ref{Yfac}, but I don't think it will help you solve it.} \problem{} Using pairs, make a \say{list} data structure. Define a GET function, so that $\text{GET}~L~n$ reduces to the nth item in the list. $\text{GET}~L~0$ should give the first item in the list, and $\text{GET}~L~1$, the \textit{second}. \\ Lists have a defined length, so you should be able to tell when you're on the last element. \problem{} Write POW $a$ $b$, which raises $b$ to the $a$th power. \problem{} Write a MOD $a$ $b$ function that reduces to the remainder of $a \div b$. \begin{solution} \textbf{Factorial with recursion:} \vspace{3ex} $\text{FAC} = \lm yn.[Z~n][1][\text{MULT}~n~(y~(\text{D}~n))]$ \linehack{} \textbf{Factorial without recursion:} \vspace{3ex} $\text{FAC}_0 = \lm p . \Bigl\langle~~ \Bigl[D~(p~t)\Bigr] ~,~ \Bigl[\text{MULT}~(p~T)~(p~F)\Bigr] ~~\Bigr\rangle $ \vspace{2ex} $ \text{FAC} = \lm n . \bigl( n~\text{FAC}_0~\langle n, 1 \rangle \bigr) $ \linehack{} \textbf{Lists:} \vspace{3ex} One possible implementation is $\Bigl\langle \langle \text{is last} ~,~ \text{item} \rangle ~,~ \text{next}... \Bigr\rangle$, where: \vspace{1ex} \say{is last} is a boolean, true iff this is the last item in the list. \\ \say{item} is the thing you're storing \\ \say{next...} is another one of these list fragments. \\ It doesn't matter what \say{next} is in the last list fragment. A dedicated \say{is last} slot allows us to store ANY function in this list. \vspace{1ex} Here, $\text{GET} = \lm nL.[(n~L~F)~T~F$] \\ This will break if $n$ is out of range. \end{solution} \vfill \problem{Bonus} Play with \textit{Lamb}, an automatic lambda expression evaluator. \\ \url{https://git.betalupi.com/Mark/lamb}