summaryrefslogtreecommitdiff
path: root/topics/lisp/lisp4schemers.gmi
diff options
context:
space:
mode:
Diffstat (limited to 'topics/lisp/lisp4schemers.gmi')
-rw-r--r--topics/lisp/lisp4schemers.gmi40
1 files changed, 40 insertions, 0 deletions
diff --git a/topics/lisp/lisp4schemers.gmi b/topics/lisp/lisp4schemers.gmi
new file mode 100644
index 0000000..e776915
--- /dev/null
+++ b/topics/lisp/lisp4schemers.gmi
@@ -0,0 +1,40 @@
+# Lisp For Schemers
+
+## iota
+
+### In Scheme
+
+```
+scheme@(guile-user)> (iota 12)
+
+$1 = (0 1 2 3 4 5 6 7 8 9 10 11)
+```
+
+### In Common Lisp
+
+```
+CL-USER: (loop for i below 12 collect i)
+
+(0 1 2 3 4 5 6 7 8 9 10 11)
+
+CL-USER: (macroexpand '(loop for i below 12 collect i))
+
+(BLOCK NIL
+ (LET ((I 0))
+ (DECLARE (IGNORABLE I)
+ (TYPE (AND NUMBER REAL) I))
+ (SB-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD (#:LOOP-LIST-HEAD-493
+ #:LOOP-LIST-TAIL-494)
+ (TAGBODY
+ SB-LOOP::NEXT-LOOP
+ (WHEN (>= I '12) (GO SB-LOOP::END-LOOP))
+ (SB-LOOP::LOOP-COLLECT-RPLACD
+ (#:LOOP-LIST-HEAD-493 #:LOOP-LIST-TAIL-494) (LIST I))
+ (SB-LOOP::LOOP-DESETQ I (1+ I))
+ (GO SB-LOOP::NEXT-LOOP)
+ SB-LOOP::END-LOOP
+ (RETURN-FROM NIL
+ (SB-LOOP::LOOP-COLLECT-ANSWER #:LOOP-LIST-HEAD-493))))))
+T
+```
+