\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{{[}deleted{]}} \pdfinfo{ /Title (racket.pdf) /Creator (Cheatography) /Author ({[}deleted{]}) /Subject (Racket Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{6CA103} \definecolor{LightBackground}{HTML}{F5F9EF} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Racket Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{{[}deleted{]}} via \textcolor{DarkBackground}{\uline{cheatography.com/916/cs/353/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}{[}deleted{]} \\ \uline{cheatography.com/deleted-916} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 15th April, 2014.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{What is the lambda calculus}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Compare the following concrete three sentences (i add brackets to separate them): \newline % Row Count 2 (+ 2) (John gives Mary a kiss) \newline % Row Count 3 (+ 1) (Fred gives Richie a banana) \newline % Row Count 4 (+ 1) (Alfred gives Jeff a hint) \newline % Row Count 5 (+ 1) You can generalize those sentences with a {\bf{function}} (another word is {\bf{expression}}): \newline % Row Count 7 (+ 2) (X gives Y a Z) \newline % Row Count 8 (+ 1) This function (or expression) contains the variables X, Y and Z. To make that clear, lets write those variables in front, so that we know what is a variable and what is not: \newline % Row Count 12 (+ 4) (X Y Z (X gives Y a Z)) \newline % Row Count 13 (+ 1) Lets also add the word 'function' at the beginning, to make clear that this is a function: \newline % Row Count 15 (+ 2) (function X Y Z (X gives Y a Z)) \newline % Row Count 16 (+ 1) This function does not do much. We have to fill the variables with concrete values to get concrete sentences out of it. Lets write the concrete values behind the function: \newline % Row Count 20 (+ 4) ((function X Y Z (X gives Y a Z)) John Mary kiss) \newline % Row Count 21 (+ 1) When we execute (or evaluate) this function we get: \newline % Row Count 23 (+ 2) (John gives Mary a kiss) \newline % Row Count 24 (+ 1) Now we do it with the other two concrete sentences from the start: \newline % Row Count 26 (+ 2) ((function X Y Z (X gives Y a Z)) Fred Richie banana) \newline % Row Count 28 (+ 2) ... results in ... \newline % Row Count 29 (+ 1) (Fred gives Richie a banana) \newline % Row Count 30 (+ 1) } \tn \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{What is the lambda calculus (cont)}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{... and ... \newline % Row Count 1 (+ 1) ((function X Y Z (X gives Y a Z)) Alfred Jeff hint) \newline % Row Count 3 (+ 2) ... results in ... \newline % Row Count 4 (+ 1) (Alfred gives Jeff a hint) \newline % Row Count 5 (+ 1) Notice that the inventor, Alonzo Church, called it lambda calculus (he learned greek at school) so today people do not write ... \newline % Row Count 8 (+ 3) (function X Y Z (X gives Y a Z)) \newline % Row Count 9 (+ 1) ... but instead ... \newline % Row Count 10 (+ 1) (lambda X Y Z (X gives Y a Z)) \newline % Row Count 11 (+ 1) Thats all what you have to know to use the lambda calculus in practice.% Row Count 13 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{What is Scheme}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Scheme is a successor of Lisp, both programming languages. Lisp was the first language that implemented the lambda calculus.% Row Count 3 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{The way they talk about Scheme is wrong.}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Some People talk about Scheme as if it were the theory of relativity. They throw lots of Math Spam at their readers (Math is easy too btw., but it has a short and therefore bizarre syntax). If you see docs like this and you do not like it, do not complain, instead leave immediately. You will find docs explaining it the easy way.% Row Count 7 (+ 7) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Scheme sourcecode formatting}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Instead of ... \newline % Row Count 1 (+ 1) (define (hello name) \newline % Row Count 2 (+ 1) ....(string-append "Hello " name) \newline % Row Count 3 (+ 1) ) \newline % Row Count 4 (+ 1) .. or ... \newline % Row Count 5 (+ 1) ( \newline % Row Count 6 (+ 1) ....define \newline % Row Count 7 (+ 1) ....(hello name) \newline % Row Count 8 (+ 1) ....(string-append "Hello " name) \newline % Row Count 9 (+ 1) ) \newline % Row Count 10 (+ 1) ... you will see ... \newline % Row Count 11 (+ 1) (define (hello name) \newline % Row Count 12 (+ 1) ....(string-append "Hello " name)) \newline % Row Count 13 (+ 1) ... which is obviously hard to read (but maybe easier to code). If you see code formatted like this and you do not like it, copy it into your editor and format it the way you want it.% Row Count 17 (+ 4) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{What is a REPL}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{"REPL" is a shortcut for "{\bf{r}}ead-{\bf{e}}val-{\bf{p}}rint {\bf{l}}oop". You have a window where you enter a line of code. Then you press enter. Then the program {\bf{reads}} the code you entered. Then it {\bf{evaluates}} it. Then it {\bf{prints}} the result (if there is one) to the next like. Now the game starts at the beginning, you enter code, you press enter, etc. Therefore it is called a {\bf{loop}}. \newline % Row Count 8 (+ 8) You usually enter your code at lines starting with '\textgreater{} ', the results of an evaluation are printed on lines that do not start with '\textgreater{} ' \newline % Row Count 11 (+ 3) Example repl session: \newline % Row Count 12 (+ 1) \textgreater{} 5 \newline % Row Count 13 (+ 1) 5 \newline % Row Count 14 (+ 1) \textgreater{} "Hello World" \newline % Row Count 15 (+ 1) "Hello World" \newline % Row Count 16 (+ 1) \textgreater{} (define (hello name) (string-append "Hello " name)) \newline % Row Count 18 (+ 2) \textgreater{} (hello "John") \newline % Row Count 19 (+ 1) "Hello John" \newline % Row Count 20 (+ 1) \textgreater{} \newline % Row Count 21 (+ 1) the repl is a practical thing to do quick tests. Scheme was the first programming language where environments provided it and it has been adopted by many other languages, for example Python.% Row Count 25 (+ 4) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Downloading Racket and starting the repl}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Download racket from here: \newline % Row Count 1 (+ 1) \seqsplit{http://racket-lang.org/download/} \newline % Row Count 2 (+ 1) install it, then start the Racket.exe in the installation folder. A repl opens. You can quit this repl by typing ... \newline % Row Count 5 (+ 3) \textgreater{} (exit)% Row Count 6 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{What is an expression}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{An expression is something that evaluates to something which is simpler or identical but usually not more complex.% Row Count 3 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Simple Expressions}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Simple expressions evaluate to themselve, like Numbers ... \newline % Row Count 2 (+ 2) \textgreater{} 5 \newline % Row Count 3 (+ 1) 5 \newline % Row Count 4 (+ 1) ... and strings (a string is a list of chars surrounded by "): \newline % Row Count 6 (+ 2) \textgreater{}"hello" \newline % Row Count 7 (+ 1) "hello"% Row Count 8 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Complex expressions}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Complex expressions are surrounded with brackets and evaluate to something simpler: \newline % Row Count 2 (+ 2) \textgreater{} (substring "the boy out of the country" 4 7) \newline % Row Count 3 (+ 1) "boy" \newline % Row Count 4 (+ 1) this expression is a call of the "substring" function, which has three parameters, a string and two numbers. it returns a string.% Row Count 7 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}