[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
As noted already, virtual code applications are specified by functions
operating on elements of a set having the properties described in
Raw Material, which are convenient to envision as ordered binary trees or
pairs of nil
. However, virtual code applications normally deal
with numeric or textual data, for example when they refer to the
contents of a text file. It is therefore necessary for the application
and the virtual machine emulator to agree on a way of describing textual
or numeric data with these trees.
The purpose of this section is to explain the basic data structures used
in the exchange of information between avram
and a virtual code
application. For example, an explanation is needed for statements like
“an application invoked with the ‘--baz’ option is expected to
return a pair (foo,bar)
, where foo
is a
list of character strings …”, that are made subsequently in this
document. Such statements should be understood as referring to the trees
representing the pairs, lists, character strings, etc., according to the
conventions explained below.
An arbitrarily chosen set of 256 trees is used to represent the
character set. They are listed in Character Table. For example,
the letter A
is represented by
(nil,(((nil,(nil,(nil,nil))),nil),(nil,nil)))
. That means that
when an application wants the letter A
written to a text file, it
returns something with this tree in it.
The value of false
is represented by nil
, and the value of
true
is represented by (nil,nil)
.
Given any two items of data x1 and x2, having the respective
representations r1 and r2, the pair (x1,x2)
has the
representation cons(r1,r2)
.
A list of the items x1, x2 … xn with respective
representations r1 through rn is represented by the tree
cons(r1,cons(r2…cons(rn,nil)…))
. In other words,
lists are represented as pairs whose left sides are the heads and whose
right sides are the tails. The empty list is identified with
nil
. Lists of arbitrary finite length can be accommodated.
A number of the form b0 + 2b1 + 4b2 + … +
2^n bn
, where each bi
is 0
or 1
, is
represented by a tree of the form
cons(t0,cons(t1…cons(tn,nil)…))
where each ti
is nil
if the corresponding
bi
is 0
, and (nil,nil)
otherwise. Note that
the numbers bi
are exactly the bits written in the binary
expansion of the number, with b0
being the least significant
bit.
are represented as lists of characters.
avram
imposes no more of a “type discipline” than necessary to
a workable interface between it and an application. This selection of
types and constructors should not be seen as constraining what a
compiler writer may wish to have in a source language.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on December 10, 2012 using texi2html 1.82.