new slides
This commit is contained in:
@@ -24,7 +24,11 @@ h1 {
|
||||
float: right;
|
||||
width: 48%;
|
||||
}
|
||||
.fullWidthImg > * { width: 95%; }
|
||||
.rerun_container { position: relative; }
|
||||
.mathSize9 { font-size: 0.9em; }
|
||||
.mathSize8 { font-size: 0.8em; }
|
||||
.mathSize6 { font-size: 0.6em; }
|
||||
</style>
|
||||
</head>
|
||||
<body onload="loadEverything();">
|
||||
@@ -52,6 +56,12 @@ class: center, middle, title
|
||||
|
||||
_Lisp Background_
|
||||
---
|
||||
(from Wikipedia)
|
||||
.fullWidthImg[]
|
||||
---
|
||||
(from Wikipedia)
|
||||
.fullWidthImg[]
|
||||
---
|
||||
# Background: Lisp
|
||||
|
||||
A quick overview:
|
||||
@@ -64,14 +74,13 @@ A quick overview:
|
||||
Essentially every non-atomic expression is a parentheses delimited list.
|
||||
This is true for:
|
||||
<pre><code class="remark_code">(+ 1 2) ; function calls, evaluates to 3
|
||||
|
||||
(if false (+ 1 2) (- 1 2)) ; other special forms like if
|
||||
|
||||
(let ((a 1)
|
||||
(b 2)) ; or let
|
||||
(+ a b))
|
||||
|
||||
(lambda (a b) (+ a b)) ; or lambda to create closures
|
||||
(quote (1 a 3)) ; (equivalent to (list 1 'a 3)
|
||||
'(+ 1 2) ; expands to (quote (+ 1 2)) -> (list '+ 1 2)
|
||||
</code></pre>
|
||||
|
||||
---
|
||||
@@ -197,6 +206,34 @@ true
|
||||
</code></pre>
|
||||
---
|
||||
# Background: Fexprs - detail
|
||||
<pre><code class="remark_code"> foldr:
|
||||
(let (helper (rec-lambda recurse (f z vs i)
|
||||
(if (= i (len (idx vs 0)))
|
||||
z
|
||||
(lapply f (snoc (recurse f z vs (+ i 1))
|
||||
(map (lambda (x) (idx x i)) vs))))))
|
||||
(lambda (f z & vs) (helper f z vs 0)))
|
||||
</code></pre>
|
||||
(lapply reduces the wrap-level of the function by 1, equivalent to quoting the inputs)
|
||||
---
|
||||
# Background: Fexprs - detail
|
||||
<pre><code class="remark_code"> foldr:
|
||||
(rec-lambda recurse (f z l)
|
||||
(if (= nil l)
|
||||
z
|
||||
(lapply f (list (car l) (recurse f z (cdr l))))))
|
||||
</code></pre>
|
||||
(lapply reduces the wrap-level of the function by 1, equivalent to quoting the inputs)
|
||||
---
|
||||
# Background: Fexprs - detail
|
||||
<pre><code class="remark_code"> foldr:
|
||||
(rec-lambda recurse (f z l)
|
||||
(if (= nil l)
|
||||
z
|
||||
(f (car l) (recurse f z (cdr l)))))
|
||||
</code></pre>
|
||||
---
|
||||
# Background: Fexprs - detail
|
||||
|
||||
All special forms in Kaken are combiners too, and are thus also first class.
|
||||
In this case, we can not only pass the raw _if_ around, but we can make an _inverse_if_ which inverts its condition (kinda macro-like) and pass it around.
|
||||
@@ -339,7 +376,7 @@ $$
|
||||
\kcombine{\kprim{0}{vau}}{(s'~(s\dots)~V)}{E} &\rightarrow& \kcomb{0}{s'}{E}{(s\dots)}{V}\\\
|
||||
\kcombine{\kprim{0}{wrap}}{\kcomb{0}{s'}{E'}{(s\dots)}{V}}{E} &\rightarrow& \kcomb{1}{s'}{E'}{(s\dots)}{V}\\\
|
||||
\kcombine{\kprim{1}{unwrap}}{\kcomb{1}{s'}{E'}{(s\dots)}{V}}{E} &\rightarrow& \kcomb{0}{s'}{E'}{(s\dots)}{V}\\\
|
||||
\kcombine{\kprim{0}{if0}}{(V_c~V_t~V_e)}{E} &\rightarrow& \kcombine{\kprim{0}{vif0}}{\\&&(\keval{V_c}{E}~V_t~V_e)}{E}\\\
|
||||
\kcombine{\kprim{0}{if0}}{(V_c~V_t~V_e)}{E} &\rightarrow& \kcombine{\kprim{0}{vif0}}{\\\&&(\keval{V_c}{E}~V_t~V_e)}{E}\\\
|
||||
\kcombine{\kprim{0}{vif0}}{(0~V_t~V_e)}{E} &\rightarrow& \keval{V_t}{E}\\\
|
||||
\kcombine{\kprim{0}{vif0}}{(n~V_t~V_e)}{E} &\rightarrow& \keval{V_e}{E} ~\text{(n != 0)}\\\
|
||||
\kcombine{\kprim{0}{int-to-symbol}}{(n)}{E} &\rightarrow& 'sn ~\text{(symbol made out of the number n)}\\\
|
||||
|
||||
@@ -26,9 +26,6 @@ body {
|
||||
padding: 0 .62em;
|
||||
font: 1.2em/1.62 'Recursive', sans-serif;
|
||||
}
|
||||
.mathSize9 { font-size: 0.9em; }
|
||||
.mathSize8 { font-size: 0.8em; }
|
||||
.mathSize6 { font-size: 0.6em; }
|
||||
//body, .remark-slide-content { background-color: #eff3f5; }
|
||||
body, .remark-slide-content { background-color: #f5f3ef; }
|
||||
h1, h2, h3, h4 {
|
||||
|
||||
5
website/slides_to_add
Normal file
5
website/slides_to_add
Normal file
@@ -0,0 +1,5 @@
|
||||
x lisp tree
|
||||
x explain quote
|
||||
x show fold's internals
|
||||
x fix if0 primitive
|
||||
_ partial evaluation
|
||||
Reference in New Issue
Block a user