From 628c87c1a75e48c34888031f2aca3695b5a704cf Mon Sep 17 00:00:00 2001 From: Darren Bane Date: Thu, 30 Jul 2020 23:01:26 +0100 Subject: Maybe CL is better after all --- doc/bane.20.cdr15.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 doc/bane.20.cdr15.md (limited to 'doc/bane.20.cdr15.md') 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") +``` -- cgit 1.4.1-2-gfad0