perm filename COMMEN[1,LMM]1 blob
sn#029047 filedate 1973-03-12 generic text, type T, neo UTF8
(PROGN (LISPXPRIN1 (QUOTE "FILE CREATED ")
T)
(LISPXPRIN1 (QUOTE "12-MAR-73 03:01:06")
T)
(LISPXTERPRI T))
(LISPXPRINT (QUOTE COMMENTVARS)
T)
(RPAQQ COMMENTVARS ((FNS COLLECT* FIL*)
(VARS COMMENTS)))
(DEFINEQ
(COLLECT*
[LAMBDA (FN COMMENTS)
[APPLY (QUOTE EDITF)
(LIST FN (QUOTE (LP F *(E (SETQ COMMENTS (CONS (##)
COMMENTS))
T]
(CONS FN (CONS (ARGLIST FN)
COMMENTS])
(FIL*
[LAMBDA (FIL)
(PROG ([FILCOMMENTS (CONS (QUOTE :)
(MAPCAR (FILEFNSLST FIL)
(FUNCTION COLLECT*]
(AL (ASSOC FIL COMMENTS)))
(COND
(AL (RPLACD AL FILCOMMENTS))
(T (SETQ COMMENTS (CONS (CONS FIL FILCOMMENTS)
COMMENTS])
)
[RPAQQ COMMENTS ([CYCLIC : ((VALENCE (X)
(* This function finds the
VALENCE of an atom or
STRUCTURE or STRUCFORM))
(FVPARTITION1 (N VL S)
(* This function is a
sub-function of
FVPARTITIONS - I'm not too
sure what it does offhand))
(FVPART1 (N MAXSUM MAXOCCUR)
(* Again , i'm not too sure what
this function does))
(MINLOOPS (VALENCELIST)
(* This function computes the
minimum number of loops that
any STRUCTURE with the given
VALENCELIST must have - See
cycgen paper for derivation of
formula))
(MAXLOOPS (VALENCELIST)
(* This function computes the
maximum number of loops that
any STRUCTURE with the given
VALENCELIST may have - See
cycgen paper for derivation of
formula))
(SUPERATOMPARTITIONS (CL U)
(* This function finds
all partitions of
CL and unsaturation
U into superatom
parts and remaining
atoms, according to
the constraints
given in the cycgen
paper about valid
superatom parts -
The value is a list
of
SUPERATOMPARTITION
records))
(MAXUNSATL (PC U)
(* This function, i think, takes
a composition list of
composition lists (pc)
and an unsaturation (U)
and returns a list of the
maximum unsaturation that may
be assigned to each
individual part in pc such
that the final structures
will each have correct TOTAL
unsaturation and a free
VALENCE of at least one)
(* Note U is either NIL
(normal)
or it is equal to the
unsaturation IN the case
WHERE remats is NIL and there
is only one part here))
(COMPUTEFV (U CL)
(* This function computes the
free VALENCE of a composition
and saturation - I.e. Any
STRUCTURE with the given
composition and unsaturation
will have the resulting
number of free valences))
(ROWS (LL)
(* Ll is a list of lists - If one
envisions it as a matrix, this
function computes the transpose))
(BIVALENTPARTITIONS (VL)
(* This function takes
a valence list
(starting with
bivalents)
and partitions
(CAR VL)
into
(number
of EDGES IN a
STRUCTURE built on
(CDR VL))
parts))
(TRIMZEROS (L)
(* This function takes a list of
numbers and returns the list
with trailing zeros removed))
(TD (VL J)
(* This function takes a VALENCE list
starting with j-valents and returns
the TOTAL VALENCE))
(M2/2 (N)
(* Silly function - Computes
(n/2)
-1))
(LOOPPARTITIONS1 (P VL J)
(* SUBFUNCTION OF
LOOPPARTITIONS - DONT
REMEMBER WHAT IT DOES))
(JLIST (LL N)
(* AGAIN, I DON'T REMEMBER WHAT THIS
ONE DOES))
(LPROWS (LPP VL)
(* AGAIN, I DON'T REMEMBER WHAT
THIS ONE DOES))
(LOOPPARTITIONS (P VL)
(* THIS FUNCTION FINDS ALL
LOOP PARTITIONS - I'M
NOT SURE HOW, THOUGH))
(CLPARTLP1 (CL ROW N)
(* Again, i don't remember what
this one does))
(STRUCTURESWITHATOMS (CLL STRUC)
(* CLL is a list of
composition lists
the first CL
contains bivalent
atoms, the second,
trivalent atoms,
and so forth -
Struc is a
STRUCTURE -
STRUCTURESWITHATOMS
finds all ways of
attaching the given
atoms to the
STRUCTURE by
labelling))
(NUMPARTITIONS (N NUMPARTS MINPART MAXPART)
(* This function finds all
partitions of the number
N into numparts parts,
WHERE each part is
greater or equal to
minpart and less than or
equal to maxpart - The
result is a list of
partitions, WHERE a
partition here is a list
of numbers, the sum of
which is N))
(NUMPARTITIONS* (U MN MAXIMA OCCURLIST)
(* Again, i don't remember
what this one does))
(FVPARTITIONS (FV VL)
(* This function finds all
ways of partitioning free
valences fv among the
"ATOMS" of vl
(vl is a VALENCE list)
according to appropriate
constraints]
[STRGEN : ((STARTUP NIL (* This function does all of the
things necessary to LOAD the
STRUCTURE generator]
[CL : ((CLDIFF (CL1 CL2)
(* This function computes the DIFFERENCE of
two composition lists - Zero terms are
eliminated))
(CLCOUNT (CL)
(* This function computes the number of
elements IN a composition list))
[CLPARTS (CL PARTSIZE)
(* This function finds all SUB compositions of
the composition list cl1 which are of SIZE
parsizze, and returns a list of the
possibilities - I.e. (CLPARTS
'
((A . 3)
(B . 2))
2)
returns
(((a . 2))
,
((a . 1)
(b . 1))
,
((b . 2]
(CLPARTITIONSN (CL N MINPARTSIZE MAXPARTSIZE)
(* This function finds all partitions of
CL into N parts WHERE each part has a
CLCOUNT of at least MINPARTSIZE and at
most MAXPARTSIZE))
(CLPARTITIONS (CL PARTSIZES)
(* PARTSIZES IS a list of numbers - This
function finds all partitions of CL
into PARTS WHERE each PART IS of the
corresponding SIZE IN PARTSIZES - The
sum of PARTSIZES must be equal to the
CLCOUNT of CL or ELSE the value will be
NIL - The value IS a list of
partitions; a partition IS a list of
composition lists))
[CLCREATE (L)
(* This function takes a list which may have
duplicates, and returns a composition list
which corresponds to it - I.e.
(CLCREATE '
(A A A B B C))
returns
((a . 3)
(b . 2)
(C . 1]
(CLINSERT (ITEM CL)
(* This function returns the composition list
CL with "ITEM" inserted))
(CL=PARTS (CL NPARTS PARTSIZE)
(* This function finds all partitions of CL
into NPARTS parts, where every part is of
size PARTSIZE - NPARTS*PARTSIZE must be
equal to the CLCOUNT of CL))
(CLBYVALENCE (CL)
(* CL must be a composition list of things
with a VALENCE - This function returns a
list of composition lists; the first CL
contains those things with VALENCE 2 -
The second those with VALENCE 3, and so
on))
(CLPARTITIONSL (CL LL)
(* Damn if i can remember what this one
does))
(CLEXPAND (CL)
(* This function is the inverse of CLCREATE -
It takes a composition list and returns a
list with the appropriate number of copies
of each item IN the composition list - I.e.
(CLEXPAND ' ((A . 3)
(B . 2)))
gives
(a a a b b]
(GENLISP : ((GROUPRADS (RADCLIST)
(* This function takes a composition
list of lists, and returns all
possible selections of items from
those lists; e.g. doing GROUPRADS
on (((a b C D e) . 3)
((F g H i) . 2))
will return all lists in which
three elements come from
(a b C D e)
and 2 elements come from
(F g H i)
- Duplication is allowed; i.e.
(a a a F F)
will be among the resulting lists))
(GROUPRADS1 (RADLIST N RADSLIST)
(* Subfunction of GROUPRADS))
(FIX+ (X)
(* Rounds a number upward))
(GROUPBY (FN L)
(* FN is a functional argument, l is a
list - This function groups l by the
value of FN applied to its elements -
It returns a list of groups - The CDR
of a GROUP contains elements of l which
all have the same value of FN - The CAR
is that value - Can be used to GROUP a
list of atom names by their VALENCE,
for EXAMPLE))
[*CARLIST (L)
(* (MAPCAR L (FUNCTION CAR]
[CDRLIST (L)
(* (MAPCAR L (FUNCTION CDR]
[LCARLIST (L)
(* (MAPCAR L (FUNCTION CARLIST]
[LCDRLIST (L)
(* (MAPCAR L (FUNCTION CDRLIST]
(DELETE (I L)
(* Returns l with the first instance of i
deleted))
(DIFF (L1 L2)
(* Returns the list of elements of l1 which
are not elements of l2))
(ORDPAIR (X1 X2)
(* Returns either (CONS X1 X2)
or
(CONS X2 X1)
depending on whether x1<x2 or not -
Uses a generalized ordering in which
anumbers are in order numerically, and
less than atoms which are ordered
alphabetically, and are less than lists
which are ordered first by their CAR
and then by their CDR))
(MAXREST (VL J)
(* Silly function used somewhere - Again
damn if i know))
(MAX (X Y)
(* MAX of X and Y))
(MIN (X Y)
(* MIN of X and Y - Uses INTEGER arithmetic))
(TWICE (X)
(* X*2))
(LEQ (X Y)
(* Generalized ordering function - See ORDPAIR)
)
(*PLUS (L)
(* L is a list of integers - *PLUS computes
their sum))
(LMASSOC (X Y Z)
(* This is similar to the ASSOC on the 360
- If there is an element of Y whose CAR
is equal to Y, returns its CDR -
Otherwise returns z))
(*MAX (L)
(* L is a list of integers - *MAX returns
their maximum]
STOP