From 20dec6564365349d742374c2628a91dfe2751d10 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Mon, 10 Apr 2023 15:19:26 +0100 Subject: [PATCH] Upversioned to 0.3.0; documentation regenerated. --- README.md | 2 +- docs/codox/beowulf.bootstrap.html | 2 +- docs/codox/beowulf.cons-cell.html | 2 +- docs/codox/beowulf.core.html | 2 +- docs/codox/beowulf.gendoc.html | 2 +- docs/codox/beowulf.host.html | 2 +- docs/codox/beowulf.interop.html | 2 +- docs/codox/beowulf.io.html | 2 +- docs/codox/beowulf.manual.html | 2 +- docs/codox/beowulf.oblist.html | 2 +- docs/codox/beowulf.read.html | 2 +- docs/codox/beowulf.reader.char-reader.html | 2 +- docs/codox/beowulf.reader.generate.html | 2 +- docs/codox/beowulf.reader.macros.html | 2 +- docs/codox/beowulf.reader.parser.html | 2 +- docs/codox/beowulf.reader.simplify.html | 2 +- docs/codox/further_reading.html | 2 +- docs/codox/index.html | 2 +- docs/codox/intro.html | 4 ++-- docs/codox/mexpr.html | 2 +- docs/codox/values.html | 2 +- project.clj | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index b248e34..364cfe3 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ You are of course welcome to fork the project and do whatever you like with it! Invoke with - java -jar target/uberjar/beowulf-0.3.0-SNAPSHOT-standalone.jar --help + java -jar target/uberjar/beowulf-0.3.0-standalone.jar --help (Obviously, check your version number) diff --git a/docs/codox/beowulf.bootstrap.html b/docs/codox/beowulf.bootstrap.html index cf5ffc7..8301c99 100644 --- a/docs/codox/beowulf.bootstrap.html +++ b/docs/codox/beowulf.bootstrap.html @@ -1,6 +1,6 @@ -beowulf.bootstrap documentation

beowulf.bootstrap

Lisp as defined in Chapter 1 (pages 1-14) of the Lisp 1.5 Programmer's Manual; that is to say, a very simple Lisp language, which should, I believe, be sufficient in conjunction with the functions provided by beowulf.host, be sufficient to bootstrap the full Lisp 1.5 interpreter..

+beowulf.bootstrap documentation

beowulf.bootstrap

Lisp as defined in Chapter 1 (pages 1-14) of the Lisp 1.5 Programmer's Manual; that is to say, a very simple Lisp language, which should, I believe, be sufficient in conjunction with the functions provided by beowulf.host, be sufficient to bootstrap the full Lisp 1.5 interpreter..

The convention is adopted that functions in this file with names in ALLUPPERCASE are Lisp 1.5 functions (although written in Clojure) and that therefore all arguments must be numbers, symbols or beowulf.cons_cell.ConsCell objects.

APPLY

(APPLY function args environment depth)

Apply this function to these arguments in this environment and return the result.

For bootstrapping, at least, a version of APPLY written in Clojure. All args are assumed to be symbols or beowulf.cons-cell/ConsCell objects. See page 13 of the Lisp 1.5 Programmers Manual.

EVAL

(EVAL expr)(EVAL expr env depth)

Evaluate this expr and return the result. If environment is not passed, it defaults to the current value of the global object list. The depth argument is part of the tracing system and should not be set by user code.

All args are assumed to be numbers, symbols or beowulf.cons-cell/ConsCell objects. However, if called with just a single arg, expr, I’ll assume it’s being called from the Clojure REPL and will coerce the expr to ConsCell.

find-target

TODO: write docs

PROG

(PROG program env depth)

The accursed PROG feature. See page 71 of the manual.

diff --git a/docs/codox/beowulf.cons-cell.html b/docs/codox/beowulf.cons-cell.html index b222e03..6e2b315 100644 --- a/docs/codox/beowulf.cons-cell.html +++ b/docs/codox/beowulf.cons-cell.html @@ -1,3 +1,3 @@ -beowulf.cons-cell documentation

beowulf.cons-cell

The fundamental cons cell on which all Lisp structures are built. Lisp 1.5 lists do not necessarily have a sequence as their CDR, and must have both CAR and CDR mutable, so cannot be implemented on top of Clojure lists.

cons-cell?

(cons-cell? o)

Is this object o a beowulf cons-cell?

F

The canonical false value - different from NIL, which is not canonically false in Lisp 1.5.

make-beowulf-list

(make-beowulf-list x)

Construct a linked list of cons cells with the same content as the sequence x.

make-cons-cell

(make-cons-cell car cdr)

Construct a new instance of cons cell with this car and cdr.

MutableSequence

protocol

Like a sequence, but mutable.

members

getCar

(getCar this)

Return the first element of this sequence.

getCdr

(getCdr this)

like more, q.v., but returns List NIL not Clojure nil when empty.

getUid

(getUid this)

Returns a unique identifier for this object

rplaca

(rplaca this value)

replace the first element of this sequence with this value

rplacd

(rplacd this value)

replace the rest (but-first; cdr) of this sequence with this value

pretty-print

(pretty-print cell)(pretty-print cell width level)

This isn’t the world’s best pretty printer but it sort of works.

T

The canonical true value.

\ No newline at end of file +beowulf.cons-cell documentation

beowulf.cons-cell

The fundamental cons cell on which all Lisp structures are built. Lisp 1.5 lists do not necessarily have a sequence as their CDR, and must have both CAR and CDR mutable, so cannot be implemented on top of Clojure lists.

cons-cell?

(cons-cell? o)

Is this object o a beowulf cons-cell?

F

The canonical false value - different from NIL, which is not canonically false in Lisp 1.5.

make-beowulf-list

(make-beowulf-list x)

Construct a linked list of cons cells with the same content as the sequence x.

make-cons-cell

(make-cons-cell car cdr)

Construct a new instance of cons cell with this car and cdr.

MutableSequence

protocol

Like a sequence, but mutable.

members

getCar

(getCar this)

Return the first element of this sequence.

getCdr

(getCdr this)

like more, q.v., but returns List NIL not Clojure nil when empty.

getUid

(getUid this)

Returns a unique identifier for this object

rplaca

(rplaca this value)

replace the first element of this sequence with this value

rplacd

(rplacd this value)

replace the rest (but-first; cdr) of this sequence with this value

pretty-print

(pretty-print cell)(pretty-print cell width level)

This isn’t the world’s best pretty printer but it sort of works.

T

The canonical true value.

\ No newline at end of file diff --git a/docs/codox/beowulf.core.html b/docs/codox/beowulf.core.html index 81b6d15..8b8b2ef 100644 --- a/docs/codox/beowulf.core.html +++ b/docs/codox/beowulf.core.html @@ -1,3 +1,3 @@ -beowulf.core documentation

beowulf.core

Essentially, the -main function and the bootstrap read-eval-print loop.

-main

(-main & opts)

Parse options, print the banner, read the init file if any, and enter the read/eval/print loop.

cli-options

TODO: write docs

repl

(repl prompt)

Read/eval/print loop.

stop-word

The word which, if submitted an an input line, will cause Beowulf to quit. Question: should this be forlǣte?

\ No newline at end of file +beowulf.core documentation

beowulf.core

Essentially, the -main function and the bootstrap read-eval-print loop.

-main

(-main & opts)

Parse options, print the banner, read the init file if any, and enter the read/eval/print loop.

cli-options

TODO: write docs

repl

(repl prompt)

Read/eval/print loop.

stop-word

The word which, if submitted an an input line, will cause Beowulf to quit. Question: should this be forlǣte?

\ No newline at end of file diff --git a/docs/codox/beowulf.gendoc.html b/docs/codox/beowulf.gendoc.html index b272376..763e8ab 100644 --- a/docs/codox/beowulf.gendoc.html +++ b/docs/codox/beowulf.gendoc.html @@ -1,4 +1,4 @@ -beowulf.gendoc documentation

beowulf.gendoc

Generate table of documentation of Lisp symbols and functions.

+beowulf.gendoc documentation

beowulf.gendoc

Generate table of documentation of Lisp symbols and functions.

NOTE: this is very hacky. You almost certainly do not want to use this!

find-documentation

(find-documentation entry)

Find appropriate documentation for this entry from the oblist.

gen-doc-table

(gen-doc-table)

TODO: write docs

gen-index

(gen-index)(gen-index url destination)

TODO: write docs

host-functions

Functions which we can infer are written in Clojure. We need to collect these at run-time, not compile time, hence memoised function, not variable.

infer-implementation

(infer-implementation entry)

TODO: write docs

infer-signature

(infer-signature entry)

Infer the signature of the function value of this oblist entry, if any.

infer-type

(infer-type entry)

Try to work out what this entry from the oblist actually represents.

open-doc

(open-doc symbol)

Open the documentation page for this symbol, if known, in the default web browser.

\ No newline at end of file diff --git a/docs/codox/beowulf.host.html b/docs/codox/beowulf.host.html index 13e5a53..d6c6f6f 100644 --- a/docs/codox/beowulf.host.html +++ b/docs/codox/beowulf.host.html @@ -1,6 +1,6 @@ -beowulf.host documentation

beowulf.host

provides Lisp 1.5 functions which can’t be (or can’t efficiently be) implemented in Lisp 1.5, which therefore need to be implemented in the host language, in this case Clojure.

ADD1

(ADD1 x)

TODO: write docs

AND

(AND & args)

T if and only if none of my args evaluate to either F or NIL, else F.

+beowulf.host documentation

beowulf.host

provides Lisp 1.5 functions which can’t be (or can’t efficiently be) implemented in Lisp 1.5, which therefore need to be implemented in the host language, in this case Clojure.

ADD1

(ADD1 x)

TODO: write docs

AND

(AND & args)

T if and only if none of my args evaluate to either F or NIL, else F.

In beowulf.host principally because I don’t yet feel confident to define varargs functions in Lisp.

ASSOC

(ASSOC x a)

If a is an association list such as the one formed by PAIRLIS in the above example, then assoc will produce the first pair whose first term is x. Thus it is a table searching function.

All args are assumed to be beowulf.cons-cell/ConsCell objects. See page 12 of the Lisp 1.5 Programmers Manual.

NOTE THAT this function is overridden by an implementation in Lisp, but is currently still present for bootstrapping.

ATOM

(ATOM x)

Returns T if and only if the argument x is bound to an atom; else F. It is not clear to me from the documentation whether (ATOM 7) should return T or F. I’m going to assume T.

ATOM?

macro

(ATOM? x)

The convention of returning F from predicates, rather than NIL, is going to tie me in knots. This is a variant of ATOM which returns NIL on failure.

CAAAAR

macro

(CAAAAR x)

TODO: write docs

CAAADR

macro

(CAAADR x)

TODO: write docs

CAAAR

macro

(CAAAR x)

TODO: write docs

CAADAR

macro

(CAADAR x)

TODO: write docs

CAADDR

macro

(CAADDR x)

TODO: write docs

CAADR

macro

(CAADR x)

TODO: write docs

CAAR

macro

(CAAR x)

TODO: write docs

CADAAR

macro

(CADAAR x)

TODO: write docs

CADADR

macro

(CADADR x)

TODO: write docs

CADAR

macro

(CADAR x)

TODO: write docs

CADDAR

macro

(CADDAR x)

TODO: write docs

CADDDR

macro

(CADDDR x)

TODO: write docs

CADDR

macro

(CADDR x)

TODO: write docs

CADR

macro

(CADR x)

TODO: write docs

CAR

(CAR x)

Return the item indicated by the first pointer of a pair. NIL is treated specially: the CAR of NIL is NIL.

CDAAAR

macro

(CDAAAR x)

TODO: write docs

CDAADR

macro

(CDAADR x)

TODO: write docs

CDAAR

macro

(CDAAR x)

TODO: write docs

CDADAR

macro

(CDADAR x)

TODO: write docs

CDADDR

macro

(CDADDR x)

TODO: write docs

CDADR

macro

(CDADR x)

TODO: write docs

CDAR

macro

(CDAR x)

TODO: write docs

CDDAAR

macro

(CDDAAR x)

TODO: write docs

CDDADR

macro

(CDDADR x)

TODO: write docs

CDDAR

macro

(CDDAR x)

TODO: write docs

CDDDAR

macro

(CDDDAR x)

TODO: write docs

CDDDDR

macro

(CDDDDR x)

TODO: write docs

CDDDR

macro

(CDDDR x)

TODO: write docs

CDDR

macro

(CDDR x)

TODO: write docs

CDR

(CDR x)

Return the item indicated by the second pointer of a pair. NIL is treated specially: the CDR of NIL is NIL.

CONS

(CONS car cdr)

Construct a new instance of cons cell with this car and cdr.

CONSP

(CONSP o)

Return T if object o is a cons cell, else F.

diff --git a/docs/codox/beowulf.interop.html b/docs/codox/beowulf.interop.html index 9e56d75..cd46169 100644 --- a/docs/codox/beowulf.interop.html +++ b/docs/codox/beowulf.interop.html @@ -1,6 +1,6 @@ -beowulf.interop documentation

beowulf.interop

TODO: write docs

INTEROP

(INTEROP fn-symbol args)

Clojure (or other host environment) interoperation API. fn-symbol is expected to be either

+beowulf.interop documentation

beowulf.interop

TODO: write docs

INTEROP

(INTEROP fn-symbol args)

Clojure (or other host environment) interoperation API. fn-symbol is expected to be either

  1. a symbol bound in the host environment to a function; or
  2. a sequence (list) of symbols forming a qualified path name bound to a function.
  3. diff --git a/docs/codox/beowulf.io.html b/docs/codox/beowulf.io.html index 687c3b5..d5bae54 100644 --- a/docs/codox/beowulf.io.html +++ b/docs/codox/beowulf.io.html @@ -1,6 +1,6 @@ -beowulf.io documentation

    beowulf.io

    Non-standard extensions to Lisp 1.5 to read and write to the filesystem.

    +beowulf.io documentation

    beowulf.io

    Non-standard extensions to Lisp 1.5 to read and write to the filesystem.

    Lisp 1.5 had only READ, which read one S-Expression at a time, and various forms of PRIN* functions, which printed to the line printer. There was also PUNCH, which wrote to a card punch. It does not seem that there was any concept of an interactive terminal.

    See Appendix E, OVERLORD - THE MONITOR, and Appendix F, LISP INPUT AND OUTPUT.

    diff --git a/docs/codox/beowulf.manual.html b/docs/codox/beowulf.manual.html index 70497cf..cd01906 100644 --- a/docs/codox/beowulf.manual.html +++ b/docs/codox/beowulf.manual.html @@ -1,3 +1,3 @@ -beowulf.manual documentation

    beowulf.manual

    Experimental code for accessing the manual online.

    *manual-url*

    dynamic

    TODO: write docs

    format-page-references

    (format-page-references fn-symbol)

    Format page references from the manual index for the function whose name is fn-symbol.

    index

    This is data extracted from the index pages of Lisp 1.5 Programmer's Manual. It’s here in the hope that we can automatically link to an online PDF link to the manual when the user invokes a function probably called DOC or HELP.

    page-url

    (page-url page-no)

    Format the URL for the page in the manual with this page-no.

    \ No newline at end of file +beowulf.manual documentation

    beowulf.manual

    Experimental code for accessing the manual online.

    *manual-url*

    dynamic

    TODO: write docs

    format-page-references

    (format-page-references fn-symbol)

    Format page references from the manual index for the function whose name is fn-symbol.

    index

    This is data extracted from the index pages of Lisp 1.5 Programmer's Manual. It’s here in the hope that we can automatically link to an online PDF link to the manual when the user invokes a function probably called DOC or HELP.

    page-url

    (page-url page-no)

    Format the URL for the page in the manual with this page-no.

    \ No newline at end of file diff --git a/docs/codox/beowulf.oblist.html b/docs/codox/beowulf.oblist.html index 47df23c..74f48e7 100644 --- a/docs/codox/beowulf.oblist.html +++ b/docs/codox/beowulf.oblist.html @@ -1,5 +1,5 @@ -beowulf.oblist documentation

    beowulf.oblist

    A namespace mainly devoted to the object list and other top level global variables.

    +beowulf.oblist documentation

    beowulf.oblist

    A namespace mainly devoted to the object list and other top level global variables.

    Yes, this makes little sense, but if you put them anywhere else you end up in cyclic dependency hell.

    *options*

    dynamic

    Command line options from invocation.

    NIL

    The canonical empty list symbol.

    TODO: this doesn’t really work, because (from Clojure) (empty? NIL) throws an exception. It might be better to subclass beowulf.cons_cell.ConsCell to create a new singleton class Nil which overrides the empty method of IPersistentCollection?

    oblist

    The default environment.

    \ No newline at end of file diff --git a/docs/codox/beowulf.read.html b/docs/codox/beowulf.read.html index b8ac08a..cfa7e94 100644 --- a/docs/codox/beowulf.read.html +++ b/docs/codox/beowulf.read.html @@ -1,6 +1,6 @@ -beowulf.read documentation

    beowulf.read

    This provides the reader required for boostrapping. It’s not a bad reader - it provides feedback on errors found in the input - but it isn’t the real Lisp reader.

    +beowulf.read documentation

    beowulf.read

    This provides the reader required for boostrapping. It’s not a bad reader - it provides feedback on errors found in the input - but it isn’t the real Lisp reader.

    Intended deviations from the behaviour of the real Lisp reader are as follows:

    1. It reads the meta-expression language MEXPR in addition to the symbolic expression language SEXPR, which I do not believe the Lisp 1.5 reader ever did;
    2. diff --git a/docs/codox/beowulf.reader.char-reader.html b/docs/codox/beowulf.reader.char-reader.html index f337b07..a014787 100644 --- a/docs/codox/beowulf.reader.char-reader.html +++ b/docs/codox/beowulf.reader.char-reader.html @@ -1,6 +1,6 @@ -beowulf.reader.char-reader documentation

      beowulf.reader.char-reader

      Provide sensible line editing, auto completion, and history recall.

      +beowulf.reader.char-reader documentation

      beowulf.reader.char-reader

      Provide sensible line editing, auto completion, and history recall.

      None of what’s needed here is really working yet, and a pull request with a working implementation would be greatly welcomed.

      What’s needed (rough specification)

        diff --git a/docs/codox/beowulf.reader.generate.html b/docs/codox/beowulf.reader.generate.html index 36c5dd7..58d4e15 100644 --- a/docs/codox/beowulf.reader.generate.html +++ b/docs/codox/beowulf.reader.generate.html @@ -1,6 +1,6 @@ -beowulf.reader.generate documentation

        beowulf.reader.generate

        Generating S-Expressions from parse trees.

        +beowulf.reader.generate documentation

        beowulf.reader.generate

        Generating S-Expressions from parse trees.

        From Lisp 1.5 Programmers Manual, page 10

        Note that I’ve retyped much of this, since copy/pasting out of PDF is less than reliable. Any typos are mine.

        Quote starts:

        diff --git a/docs/codox/beowulf.reader.macros.html b/docs/codox/beowulf.reader.macros.html index b2fa009..19c4982 100644 --- a/docs/codox/beowulf.reader.macros.html +++ b/docs/codox/beowulf.reader.macros.html @@ -1,5 +1,5 @@ -beowulf.reader.macros documentation

        beowulf.reader.macros

        Can I implement reader macros? let’s see!

        +beowulf.reader.macros documentation

        beowulf.reader.macros

        Can I implement reader macros? let’s see!

        We don’t need (at least, in the Clojure reader) to rewrite forms like 'FOO, because that’s handled by the parser. But we do need to rewrite things which don’t evaluate their arguments, like SETQ, because (unless LABEL does it, which I’m not yet sure of) we’re not yet able to implement things which don’t evaluate arguments.

        TODO: at this stage, the following should probably also be read macros: DEFINE

        *readmacros*

        dynamic

        TODO: write docs

        expand-macros

        (expand-macros form)

        TODO: write docs

        \ No newline at end of file diff --git a/docs/codox/beowulf.reader.parser.html b/docs/codox/beowulf.reader.parser.html index 3f91103..7499c5e 100644 --- a/docs/codox/beowulf.reader.parser.html +++ b/docs/codox/beowulf.reader.parser.html @@ -1,3 +1,3 @@ -beowulf.reader.parser documentation

        beowulf.reader.parser

        The actual parser, supporting both S-expression and M-expression syntax.

        parse

        Parse a string presented as argument into a parse tree which can then be operated upon further.

        \ No newline at end of file +beowulf.reader.parser documentation

        beowulf.reader.parser

        The actual parser, supporting both S-expression and M-expression syntax.

        parse

        Parse a string presented as argument into a parse tree which can then be operated upon further.

        \ No newline at end of file diff --git a/docs/codox/beowulf.reader.simplify.html b/docs/codox/beowulf.reader.simplify.html index b15b557..52fa75b 100644 --- a/docs/codox/beowulf.reader.simplify.html +++ b/docs/codox/beowulf.reader.simplify.html @@ -1,4 +1,4 @@ -beowulf.reader.simplify documentation

        beowulf.reader.simplify

        Simplify parse trees. Be aware that this is very tightly coupled with the parser.

        remove-nesting

        (remove-nesting tree context)

        TODO: write docs

        remove-optional-space

        (remove-optional-space tree)

        TODO: write docs

        simplify

        (simplify p)

        Simplify this parse tree p. If p is an instaparse failure object, throw an ex-info, with p as the value of its :failure key. Calls remove-optional-space before processing.

        simplify-tree

        (simplify-tree p)(simplify-tree p context)

        Simplify this parse tree p. If p is an instaparse failure object, throw an ex-info, with p as the value of its :failure key.

        +beowulf.reader.simplify documentation

        beowulf.reader.simplify

        Simplify parse trees. Be aware that this is very tightly coupled with the parser.

        remove-nesting

        (remove-nesting tree context)

        TODO: write docs

        remove-optional-space

        (remove-optional-space tree)

        TODO: write docs

        simplify

        (simplify p)

        Simplify this parse tree p. If p is an instaparse failure object, throw an ex-info, with p as the value of its :failure key. Calls remove-optional-space before processing.

        simplify-tree

        (simplify-tree p)(simplify-tree p context)

        Simplify this parse tree p. If p is an instaparse failure object, throw an ex-info, with p as the value of its :failure key.

        NOTE THAT it is assumed that remove-optional-space has been run on the parse tree BEFORE it is passed to simplify-tree.

        \ No newline at end of file diff --git a/docs/codox/further_reading.html b/docs/codox/further_reading.html index fa767f4..4ff9617 100644 --- a/docs/codox/further_reading.html +++ b/docs/codox/further_reading.html @@ -1,6 +1,6 @@ -Further Reading

        Further Reading

        +Further Reading

        Further Reading

        1. CODING for the MIT-IBM 704 COMPUTER, October 1957 This paper is not about Lisp. But it is about the particular individual computer on which Lisp was first implemented, and it is written in part by members of the Lisp team. I have found it useful in understanding the software environment in which, and the constraints under which, Lisp was written.
        2. MIT AI Memo 1, John McCarthy, September 1958 This is, as far as I can find, the earliest specification document of the Lisp project.
        3. diff --git a/docs/codox/index.html b/docs/codox/index.html index 80e307d..5d09c60 100644 --- a/docs/codox/index.html +++ b/docs/codox/index.html @@ -1,3 +1,3 @@ -Beowulf 0.3.0-SNAPSHOT

          Beowulf 0.3.0-SNAPSHOT

          Released under the GPL-2.0-or-later

          LISP 1.5 is to all Lisp dialects as Beowulf is to English literature.

          Installation

          To install, add the following dependency to your project or build file:

          [beowulf "0.3.0-SNAPSHOT"]

          Topics

          Namespaces

          beowulf.bootstrap

          Lisp as defined in Chapter 1 (pages 1-14) of the Lisp 1.5 Programmer's Manual; that is to say, a very simple Lisp language, which should, I believe, be sufficient in conjunction with the functions provided by beowulf.host, be sufficient to bootstrap the full Lisp 1.5 interpreter..

          Public variables and functions:

          beowulf.cons-cell

          The fundamental cons cell on which all Lisp structures are built. Lisp 1.5 lists do not necessarily have a sequence as their CDR, and must have both CAR and CDR mutable, so cannot be implemented on top of Clojure lists.

          beowulf.core

          Essentially, the -main function and the bootstrap read-eval-print loop.

          Public variables and functions:

          beowulf.gendoc

          Generate table of documentation of Lisp symbols and functions.

          beowulf.host

          provides Lisp 1.5 functions which can’t be (or can’t efficiently be) implemented in Lisp 1.5, which therefore need to be implemented in the host language, in this case Clojure.

          beowulf.io

          Non-standard extensions to Lisp 1.5 to read and write to the filesystem.

          beowulf.manual

          Experimental code for accessing the manual online.

          Public variables and functions:

          beowulf.oblist

          A namespace mainly devoted to the object list and other top level global variables.

          Public variables and functions:

          beowulf.read

          This provides the reader required for boostrapping. It’s not a bad reader - it provides feedback on errors found in the input - but it isn’t the real Lisp reader.

          Public variables and functions:

          beowulf.reader.char-reader

          Provide sensible line editing, auto completion, and history recall.

          Public variables and functions:

            beowulf.reader.macros

            Can I implement reader macros? let’s see!

            Public variables and functions:

            beowulf.reader.parser

            The actual parser, supporting both S-expression and M-expression syntax.

            Public variables and functions:

            beowulf.reader.simplify

            Simplify parse trees. Be aware that this is very tightly coupled with the parser.

            \ No newline at end of file +Beowulf 0.3.0

            Beowulf 0.3.0

            Released under the GPL-2.0-or-later

            LISP 1.5 is to all Lisp dialects as Beowulf is to English literature.

            Installation

            To install, add the following dependency to your project or build file:

            [beowulf "0.3.0"]

            Topics

            Namespaces

            beowulf.bootstrap

            Lisp as defined in Chapter 1 (pages 1-14) of the Lisp 1.5 Programmer's Manual; that is to say, a very simple Lisp language, which should, I believe, be sufficient in conjunction with the functions provided by beowulf.host, be sufficient to bootstrap the full Lisp 1.5 interpreter..

            Public variables and functions:

            beowulf.cons-cell

            The fundamental cons cell on which all Lisp structures are built. Lisp 1.5 lists do not necessarily have a sequence as their CDR, and must have both CAR and CDR mutable, so cannot be implemented on top of Clojure lists.

            beowulf.core

            Essentially, the -main function and the bootstrap read-eval-print loop.

            Public variables and functions:

            beowulf.gendoc

            Generate table of documentation of Lisp symbols and functions.

            beowulf.host

            provides Lisp 1.5 functions which can’t be (or can’t efficiently be) implemented in Lisp 1.5, which therefore need to be implemented in the host language, in this case Clojure.

            beowulf.io

            Non-standard extensions to Lisp 1.5 to read and write to the filesystem.

            beowulf.manual

            Experimental code for accessing the manual online.

            Public variables and functions:

            beowulf.oblist

            A namespace mainly devoted to the object list and other top level global variables.

            Public variables and functions:

            beowulf.read

            This provides the reader required for boostrapping. It’s not a bad reader - it provides feedback on errors found in the input - but it isn’t the real Lisp reader.

            Public variables and functions:

            beowulf.reader.char-reader

            Provide sensible line editing, auto completion, and history recall.

            Public variables and functions:

              beowulf.reader.macros

              Can I implement reader macros? let’s see!

              Public variables and functions:

              beowulf.reader.parser

              The actual parser, supporting both S-expression and M-expression syntax.

              Public variables and functions:

              beowulf.reader.simplify

              Simplify parse trees. Be aware that this is very tightly coupled with the parser.

              \ No newline at end of file diff --git a/docs/codox/intro.html b/docs/codox/intro.html index 2cd54be..0875f1d 100644 --- a/docs/codox/intro.html +++ b/docs/codox/intro.html @@ -1,6 +1,6 @@ -beowulf

              beowulf

              +beowulf

              beowulf

              Þý liste cræfte spræc

              LISP 1.5 is to all Lisp dialects as Beowulf is to English literature.

              Beowulf logo

              @@ -60,7 +60,7 @@

              You are of course welcome to fork the project and do whatever you like with it!

              Invoking

              Invoke with

              -
              java -jar target/uberjar/beowulf-0.3.0-SNAPSHOT-standalone.jar --help
              +
              java -jar target/uberjar/beowulf-0.3.0-standalone.jar --help
               

              (Obviously, check your version number)

              Command line arguments as follows:

              diff --git a/docs/codox/mexpr.html b/docs/codox/mexpr.html index 19ef964..7692fe9 100644 --- a/docs/codox/mexpr.html +++ b/docs/codox/mexpr.html @@ -1,6 +1,6 @@ -Interpreting M-Expressions

              Interpreting M-Expressions

              +Interpreting M-Expressions

              Interpreting M-Expressions

              M-Expressions (‘mexprs’) are the grammar which John McCarthy origininally used to write Lisp, and the grammar in which many of the function definitions in the Lisp 1.5 Programmer’s Manual are stated. However, I have not seen anywhere a claim that Lisp 1.5 could read M-Expressions, and it is not clear to me whether it was even planned that it should do so, although the discussion on page 10 suggests that it was.

              Rather, it seems to me possible that M-Expressions were only ever a grammar intended to be written on paper, like Backus Naur Form, to describe and to reason about algorithms. I think at the point at which the M-Expression grammar was written, the idea of the universal Lisp function

              I set out to make Beowulf read M-Expressions essentially out of curiousity, to see whether it could be done. I had this idea that if it could be done, I could implement most of Lisp 1.5 simply by copying in the M-Expression definitions out of the manual.

              diff --git a/docs/codox/values.html b/docs/codox/values.html index 6337cb1..1bfdc12 100644 --- a/docs/codox/values.html +++ b/docs/codox/values.html @@ -1,6 +1,6 @@ -The properties of the system, and their values

              The properties of the system, and their values

              +The properties of the system, and their values

              The properties of the system, and their values

              here be dragons

              Lisp is the list processing language; that is what its name means. It processes data structures built of lists - which may be lists of lists, or lists of numbers, or lists of any other sort of data item provided for by the designers of the system.

              But how is a list, in a computer, actually implemented?

              diff --git a/project.clj b/project.clj index 976a128..b57eeb4 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject beowulf "0.3.0-SNAPSHOT" +(defproject beowulf "0.3.0" :aot :all :cloverage {:output "docs/cloverage" :ns-exclude-regex [#"beowulf\.gendoc" #"beowulf\.scratch"]}