about summary refs log tree commit diff stats
path: root/doc/bane.20.cdr15.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/bane.20.cdr15.md')
-rw-r--r--doc/bane.20.cdr15.md48
1 files changed, 48 insertions, 0 deletions
diff --git a/doc/bane.20.cdr15.md b/doc/bane.20.cdr15.md
new file mode 100644
index 0000000..d999852
--- /dev/null
+++ b/doc/bane.20.cdr15.md
@@ -0,0 +1,48 @@
+title: An ISLisp-like subset of ANSI Common Lisp  
+author: Darren Bane  
+copyright: 2020 Darren Bane, CC BY-SA  
+
+# Abstract
+
+A subset of Common Lisp that has rough feature parity with ISLisp is defined.
+
+# Introduction
+
+There are many Common Lisp coding standards encoding the opinion of various experts.
+This document defines yet another, but relies on the opinions of the ISLisp standard committee instead.
+
+The ANSI Common Lisp standard explicitly allows subsets.
+ISLisp was designed to be "culturally-compatible" with Common Lisp,
+and indeed it is only moderate work to port between them
+(and incidentally, also ELisp).
+
+# Procedure
+
+Write an ISLisp program, making the following adaptations:
+
+* `for` becomes `do`
+* `quotient` becomes `/`
+* `create` becomes `make-instance`
+* `(class x)` becomes `(find-class 'x)`
+* `(standard-output)` becomes `*standard-output*`
+
+ISLisp doesn't have the following features (and probably many more):
+
+* structs. Use classes instead.
+* `print-object`. But you can define it yourself.
+
+## Extensions to ISLisp
+
+It was noted in the ISLisp standard document that the committee would have liked to define packages.
+So I recommend the following pattern, using the subset of CL packages that OpenLisp supports:
+
+```lisp
+(require "dependency")
+(defpackage #:pack
+  (:use #:common-lisp #:dependency)
+  (:export
+    #:fun))
+(in-package #:pack)
+...
+(provide "pack")
+```