aboutsummaryrefslogtreecommitdiff
path: root/v2/src/content/en
diff options
context:
space:
mode:
Diffstat (limited to 'v2/src/content/en')
-rw-r--r--v2/src/content/en/about.md11
-rw-r--r--v2/src/content/en/pastebins/raku-tuple-type-annotation.md31
-rw-r--r--v2/src/content/en/pastebins/sicp-exercise-3-19.md107
-rw-r--r--v2/src/content/en/tils/lisp-three-way-conditional.md57
4 files changed, 206 insertions, 0 deletions
diff --git a/v2/src/content/en/about.md b/v2/src/content/en/about.md
new file mode 100644
index 0000000..1e39407
--- /dev/null
+++ b/v2/src/content/en/about.md
@@ -0,0 +1,11 @@
+---
+
+title: About
+
+---
+
+It's all about me, baby!
+
+```
+xablau
+```
diff --git a/v2/src/content/en/pastebins/raku-tuple-type-annotation.md b/v2/src/content/en/pastebins/raku-tuple-type-annotation.md
new file mode 100644
index 0000000..5877470
--- /dev/null
+++ b/v2/src/content/en/pastebins/raku-tuple-type-annotation.md
@@ -0,0 +1,31 @@
+---
+
+title: Raku tuple type annotation
+
+date: 2019-12-29
+
+---
+
+```perl
+# Single Str return value: this works
+sub f1(Str $in --> Str) {
+ $in;
+}
+
+# Tuple of Str as return value: this works
+sub f2(Str $in) {
+ ($in, $in);
+}
+
+# Tuple of Str as return value with type annotation: this doesn't works
+sub f2(Str $in --> (Str, Str)) {
+ ($in, $in);
+}
+```
+
+Error log is:
+
+```perl
+===SORRY!=== Error while compiling /path/to/my/file
+Malformed return value
+```
diff --git a/v2/src/content/en/pastebins/sicp-exercise-3-19.md b/v2/src/content/en/pastebins/sicp-exercise-3-19.md
new file mode 100644
index 0000000..3188dce
--- /dev/null
+++ b/v2/src/content/en/pastebins/sicp-exercise-3-19.md
@@ -0,0 +1,107 @@
+---
+
+title: SICP exercise 3.19
+
+date: 2021-09-02
+
+---
+
+Some content here, before:
+
+```scheme
+(define (cycle? l)
+ (define (rec l x)
+ (cond
+ ((null? x) false)
+ ((eq? l x) true)
+ (true (rec l (cdr x)))))
+ (rec l (cdr l)))
+```
+
+Sample interactive session:
+
+```scheme
+scheme@(guile-user)> (define true #t)
+scheme@(guile-user)> (define false #f)
+scheme@(guile-user)>
+(define (cycle? l)
+ (define (rec l x)
+ (cond
+ ((null? x) false)
+ ((eq? l x) true)
+ (true (rec l (cdr x)))))
+ (rec l (cdr l)))
+scheme@(guile-user)> (cycle? '(1 2 3))
+$9 = #f
+scheme@(guile-user)> (cycle? (make-cycle '(1 2 3)))
+$10 = #t
+```
+
+# An h1
+
+a list:
+
+1. one
+2. two
+3. three
+
+some content.
+
+- item
+- another
+- yet another
+
+## An h2
+
+Xablau:
+
+```
+xupliu 1
+
+3
+4
+
+
+
+
+
+dez
+```
+
+Foi `wikiwiu`.
+
+a very long code block:
+
+```
+wef
+wef wef wef wef
+wef wef wef wef we fwef wef wef wef wef
+```
+
+Someone said:
+
+> Xablau, xupliu.
+
+### A repeated header
+### A repeated header
+
+a big list:
+
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
+1. a
diff --git a/v2/src/content/en/tils/lisp-three-way-conditional.md b/v2/src/content/en/tils/lisp-three-way-conditional.md
new file mode 100644
index 0000000..cd7a034
--- /dev/null
+++ b/v2/src/content/en/tils/lisp-three-way-conditional.md
@@ -0,0 +1,57 @@
+---
+
+title: Three-way conditional for number signs on Lisp
+
+date: 2021-04-24 3
+
+update: 2021-08-14
+
+---
+
+A useful macro from Paul Graham's [On Lisp][on-lisp] book:
+
+```lisp
+(defmacro nif (expr pos zero neg)
+ (let ((g (gensym)))
+ `(let ((,g ,expr))
+ (cond ((plusp ,g) ,pos)
+ ((zerop ,g) ,zero)
+ (t ,neg)))))
+```
+
+After I looked at this macro, I started seeing opportunities to using it in many places, and yet I didn't see anyone else using it.
+
+The latest example I can think of is section 1.3.3 of [Structure and Interpretation of Computer Programs][sicp], which I was reading recently:
+
+```scheme
+(define (search f neg-point pos-point)
+ (let ((midpoint (average neg-point pos-point)))
+ (if (close-enough? neg-point post-point)
+ midpoint
+ (let ((test-value (f midpoint)))
+ (cond ((positive? test-value)
+ (search f neg-point midpoint))
+ ((negative? test-value)
+ (search f midpoint pos-point))
+ (else midpoint))))))
+```
+
+Not that the book should introduce such macro this early, but I couldn't avoid feeling bothered by not using the `nif` macro, which could even remove the need for the intermediate `test-value` variable:
+
+```scheme
+(define (search f neg-point pos-point)
+ (let ((midpoint (average neg-point pos-point)))
+ (if (close-enough? neg-point post-point)
+ midpoint
+ (nif (f midpoint)
+ (search f neg-point midpoint)
+ (midpoint)
+ (search f midpoint pos-point)))))
+```
+
+It also avoids `cond`'s extra clunky parentheses for grouping, which is unnecessary but built-in.
+
+As a macro, I personally feel it tilts the balance towards expressivenes despite its extra cognitive load toll.
+
+[on-lisp]: http://www.paulgraham.com/onlisptext.html
+[sicp]: https://mitpress.mit.edu/sites/default/files/sicp/index.html