perm filename GROUP[DEN,LMM] blob
sn#070823 filedate 1973-11-07 generic text, type T, neo UTF8
(FILECREATED " 7-NOV-73 5:19:45" S-GROUP)
(LISPXPRINT (QUOTE GROUPVARS)
T)
[RPAQQ GROUPVARS
((* group finding and fixing routines)
(FNS FIXUPGROUP FINDNEWGROUP FINDNEWGROUP1 FINDPERMS
POSSIMS CONNECTIVITY GROUPCOUNT FOUND? FINDGROUPEDGES
IMAGE FINDGROUPNODES)
(BLOCKS (NIL FINDPERMS POSSIMS CONNECTIVITY FOUND? IMAGE
(LINKFNS . T]
(* group finding and fixing routines)
(DEFINEQ
(FIXUPGROUP
[LAMBDA (STRUC)
(replace GROUP of STRUC with
(FINDNEWGROUP
STRUC
(CLASSIFYNODES
(for X in (fetch CTABLE of STRUC)
when (for NL in (CAR (fetch GROUP of STRUC))
always (NOT (MEMB (fetch NODENUM of X)
NL)))
collect (fetch NODENUM of X))
STRUC])
(FINDNEWGROUP
[LAMBDA (STRUC NEWORBITS)
(PROG (NEWOBJ)
(SETQ NEWOBJ (FOR ORB IN NEWORBITS XLIST
FIRST (CAR (fetch GROUP of STRUC))
(REVERSE ORB)))
(RETURN (CONS NEWOBJ (FOR P IN (FINDNEWGROUP1 STRUC
NEWORBITS)
WHEN (NOT (EQUAL NEWOBJ
(CDR P)))
XLIST
(CDR P])
(FINDNEWGROUP1
[LAMBDA (STRUC NEWORBITS)
(for P in (fetch GROUP of STRUC)
join (FINDPERMS (CAR NEWORBITS)
NEWORBITS
(CONS NIL P)
(CONS NIL (CAR (fetch GROUP of STRUC)))
STRUC])
(FINDPERMS
[LAMBDA (NODES CLASSES IMS MAPPED STRUC)
(COND
((NULL CLASSES)
(LIST IMS))
((NULL NODES)
(FINDPERMS (CADR CLASSES)
(CDR CLASSES)
(CONS NIL IMS)
(CONS NIL MAPPED)
STRUC))
(T (FOR Y IN (POSSIMS (CAR NODES)
(CAR CLASSES)
IMS MAPPED STRUC)
JOIN (FINDPERMS (CDR NODES)
CLASSES
(CONS (CONS Y (CAR IMS))
(CDR IMS))
(CONS (CONS (CAR NODES)
(CAR MAPPED))
(CDR MAPPED))
STRUC])
(POSSIMS
[LAMBDA (X CLASS IMS MAPPED STRUC)
(FOR Y IN CLASS WHEN (NOT (MEMB Y (CAR IMS)))
WHEN (FOR ML IN MAPPED AS IL IN IMS FOR M IN ML AS I
IN IL AND (EQ (CONNECTIVITY Y I STRUC)
(CONNECTIVITY X M STRUC)))
XLIST Y])
(CONNECTIVITY
[LAMBDA (X Y STRUC)
(FOR Z IN (FETCH NBRS OF (FINDCTE X STRUC)) WHEN (EQ Z Y)
SUM 1])
(GROUPCOUNT
[LAMBDA (L)
(PROG NIL
(SETQ L (GROUPBY (QUOTE CDR)
(CLCREATE L)))
(RETURN (FOR I TO (FOR X IN L MAXIMUM (CAR X))
COLLECT (CARLIST (LMASSOC I L NIL])
(FOUND?
[LAMBDA (NODE GROUP)
(FOR NL IN (CAR GROUP) AS N FROM 1
DO (COND
((MEMB NODE NL)
(RETURN (CONS N NL])
(FINDGROUPEDGES
[LAMBDA (EDGES STRUC)
(PROG (G)
(COND
([NOT (FOR EDGE
IN EDGES
AND (AND (FOUND? (FETCH NODE1 OF EDGE)
(FETCH GROUP OF STRUC))
(FOUND? (FETCH NODE2 OF EDGE)
(FETCH GROUP OF STRUC]
(FIXUPGROUP STRUC))
(T NIL))
(SETQ G (FETCH GROUP OF STRUC))
(RETURN
(CREATE NPL REMPERMS←(FOR
P
IN
(CDR G)
XLIST
(CREATE
CHECKPERM OBJ← EDGES POBJ←(FOR
EDGE IN EDGES
COLLECT (ORDPAIR (IMAGE (FETCH NODE1 OF EDGE)
(CAR G)
P)
(IMAGE (FETCH NODE2 OF EDGE)
(CAR G)
P)))
ORIGPERM← P))
OKPERMS←(LIST (CAR G])
(IMAGE
[LAMBDA (NODE MAPPED IMAGES)
(FOR ML IN MAPPED AS IL IN IMAGES FOR M IN ML AS I IN IL
WHEN (EQP NODE M)
DO (RETURN I])
(FINDGROUPNODES
[LAMBDA (OBJECTS STRUC)
(PROG (N FOUND)
L1 (SETQ FOUND (FOUND? (CAR OBJECTS)
(FETCH GROUP OF STRUC)))
[COND
((NOT FOUND)
(FIXUPGROUP STRUC))
(T
(RETURN
(CREATE NPL REMPERMS←(FOR
P IN (CDR (FETCH GROUP OF STRUC))
XLIST
(CREATE CHECKPERM OBJ←(CDR FOUND)
POBJ←(CAR (NTH P (CAR FOUND)))
ORIGPERM← P))
OKPERMS←(LIST (CAR (FETCH GROUP OF STRUC]
(GO L1])
)
(DECLARE
(BLOCK: NIL FINDPERMS POSSIMS CONNECTIVITY FOUND? IMAGE
(LINKFNS . T))
)STOP