diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet index e7e586e..1b01267 100644 --- a/books/bookvol5.pamphlet +++ b/books/bookvol5.pamphlet @@ -5205,6 +5205,101 @@ The tokConstruct function is a constructer and selectors for leaf tokens @ +\chapter{Attributed Structures} +For objects which are pairs where the CAR field is either just a tag +(an identifier) or a pair which is the tag and an association list. + +\defun{ncTag}{ncTag} +Pick off the tag +<>= +(defun |ncTag| (x) + (cond + ((null (consp x)) (|ncBug| 's2cb0031 nil)) + (t + (setq x (qcar x)) + (cond + ((identp x) x) + ((null (consp x)) (|ncBug| 's2cb0031 nil)) + (t (qcar x)))))) + +@ + +\defun{ncAlist}{ncAlist} +Pick off the property list +<>= +(defun |ncAlist| (x) + (cond + ((null (consp x)) (|ncBug| 's2cb0031 nil)) + (t + (setq x (qcar x)) + (cond + ((identp x) nil) + ((null (consp x)) (|ncBug| 's2cb0031 nil)) + (t (qcdr x)))))) + +@ + +\defun{ncEltQ}{ncEltQ} +Get the entry for key k on x's association list +<>= +(defun |ncEltQ| (x k) + (let (r) + (setq r (qassq k (|ncAlist| x))) + (cond + ((null r) (|ncBug| 's2cb0007 (list k))) + (t (cdr r))))) + +@ + +\defun{ncPutQ}{ncPutQ} +\begin{verbatim} +;-- Put (k . v) on the association list of x and return v +;-- case1: ncPutQ(x,k,v) where k is a key (an identifier), v a value +;-- put the pair (k . v) on the association list of x and return v +;-- case2: ncPutQ(x,k,v) where k is a list of keys, v a list of values +;-- equivalent to [ncPutQ(x,key,val) for key in k for val in v] +;ncPutQ(x,k,v) == +; LISTP k => +; for key in k for val in v repeat ncPutQ(x,key,val) +; v +; r := QASSQ(k,ncAlist x) +; if NULL r then +; r := CONS( CONS(k,v), ncAlist x) +; RPLACA(x,CONS(ncTag x,r)) +; else +; RPLACD(r,v) +; v\end{verbatim} +<>= +(defun |ncPutQ| (x k v) + (let (r) + (cond + ((listp k) + ((lambda (Var1 key Var2 val) + (loop + (cond + ((or (atom Var1) + (progn (setq key (car Var1)) nil) + (atom Var2) + (progn (setq val (car Var2)) nil)) + (return nil)) + (t + (|ncPutQ| x key val))) + (setq Var1 (cdr Var1)) + (setq Var2 (cdr Var2)))) + k nil v nil) + v) + (t + (setq r (qassq k (|ncAlist| x))) + (cond + ((null r) + (setq r (cons (cons k v) (|ncAlist| x))) + (rplaca x (cons (|ncTag| x) r))) + (t + (rplacd r v))) + v)))) + +@ + \chapter{System Command Handling} \defdollar{systemCommands} The system commands are the top-level commands available in Axiom @@ -20081,8 +20176,10 @@ maxindex <> <> +<> <> <> +<> <> <> <> @@ -20095,6 +20192,8 @@ maxindex <> <> <> +<> +<> <> <> <> diff --git a/changelog b/changelog index 317b322..da9e9c6 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +20091105 tpd src/axiom-website/patches.html 20091105.02.tpd.patch +20091105 tpd src/interp/astr.lisp removed +20091105 tpd books/bookvol5 merge astr.lisp 20091105 tpd src/axiom-website/patches.html 20091105.01.tpd.patch 20091105 tpd src/interp/ptrees.lisp partial merge 20091105 tpd books/bookvol5 partial merge of ptrees diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 907f984..ae4d6d8 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -2231,5 +2231,7 @@ books/bookvol5 merge, remove cstream.lisp
src/interp/int-top.lisp removed
20091105.01.tpd.patch books/bookvol5 partial merge of ptrees
+20091105.02.tpd.patch +books/bookvol5 merge, remove of astr
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet index 5b3972a..35740e1 100644 --- a/src/interp/Makefile.pamphlet +++ b/src/interp/Makefile.pamphlet @@ -140,7 +140,6 @@ The file http.lisp contains code to enable browser-based hyperdoc and graphics. <>= OBJS= ${OUT}/vmlisp.${O} \ - ${OUT}/astr.${O} \ ${OUT}/alql.${O} ${OUT}/buildom.${O} \ ${OUT}/cattable.${O} \ ${OUT}/cformat.${O} ${OUT}/cfuns.${O} \ @@ -3447,29 +3446,6 @@ ${MID}/ptrop.lisp: ${IN}/ptrop.lisp.pamphlet @ -\subsection{astr.lisp} -<>= -${OUT}/astr.${O}: ${MID}/astr.lisp - @ echo 531 making ${OUT}/astr.${O} from ${MID}/astr.lisp - @ ( cd ${MID} ; \ - if [ -z "${NOISE}" ] ; then \ - echo '(progn (compile-file "${MID}/astr.lisp"' \ - ':output-file "${OUT}/astr.${O}") (${BYE}))' | ${DEPSYS} ; \ - else \ - echo '(progn (compile-file "${MID}/astr.lisp"' \ - ':output-file "${OUT}/astr.${O}") (${BYE}))' | ${DEPSYS} \ - >${TMP}/trace ; \ - fi ) - -@ -<>= -${MID}/astr.lisp: ${IN}/astr.lisp.pamphlet - @ echo 532 making ${MID}/astr.lisp from ${IN}/astr.lisp.pamphlet - @ (cd ${MID} ; \ - ${TANGLE} ${IN}/astr.lisp.pamphlet >astr.lisp ) - -@ - \subsection{msg.lisp} <>= ${OUT}/msg.${O}: ${MID}/msg.lisp @@ -4051,9 +4027,6 @@ clean: <> <> -<> -<> - <> <> <> diff --git a/src/interp/astr.lisp.pamphlet b/src/interp/astr.lisp.pamphlet deleted file mode 100644 index 2f97fc3..0000000 --- a/src/interp/astr.lisp.pamphlet +++ /dev/null @@ -1,132 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/interp astr.lisp} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -<<*>>= - -(IN-PACKAGE "BOOT") - -;--% Attributed Structures (astr) -;-- For objects which are pairs where the CAR field is either just a tag -;-- (an identifier) or a pair which is the tag and an association list. -; -;-- Pick off the tag -;ncTag x == -; not PAIRP x => ncBug('S2CB0031,[]) -; x := QCAR x -; IDENTP x => x -; not PAIRP x => ncBug('S2CB0031,[]) -; QCAR x - - -(DEFUN |ncTag| (|x|) - (PROG NIL - (RETURN - (COND - ((NULL (CONSP |x|)) - (|ncBug| (QUOTE S2CB0031) NIL)) - (#0=(QUOTE T) - (PROGN - (SETQ |x| (QCAR |x|)) - (COND - ((IDENTP |x|) |x|) - ((NULL (CONSP |x|)) (|ncBug| (QUOTE S2CB0031) NIL)) - (#0# (QCAR |x|))))))))) - - -;-- Pick off the property list -;ncAlist x == -; not PAIRP x => ncBug('S2CB0031,[]) -; x := QCAR x -; IDENTP x => NIL -; not PAIRP x => ncBug('S2CB0031,[]) -; QCDR x - -(DEFUN |ncAlist| (|x|) - (PROG NIL - (RETURN - (COND - ((NULL (CONSP |x|)) (|ncBug| (QUOTE S2CB0031) NIL)) - (#0=(QUOTE T) - (PROGN - (SETQ |x| (QCAR |x|)) - (COND - ((IDENTP |x|) NIL) - ((NULL (CONSP |x|)) (|ncBug| (QUOTE S2CB0031) NIL)) - (#0# (QCDR |x|))))))))) - -;--- Get the entry for key k on x's association list -;ncEltQ(x,k) == -; r := QASSQ(k,ncAlist x) -; NULL r => ncBug ('S2CB0007,[k]) -; CDR r - -(DEFUN |ncEltQ| (|x| |k|) - (PROG (|r|) - (RETURN - (PROGN - (SETQ |r| (QASSQ |k| (|ncAlist| |x|))) - (COND - ((NULL |r|) (|ncBug| (QUOTE S2CB0007) (LIST |k|))) - ((QUOTE T) (CDR |r|))))))) - -;-- Put (k . v) on the association list of x and return v -;-- case1: ncPutQ(x,k,v) where k is a key (an identifier), v a value -;-- put the pair (k . v) on the association list of x and return v -;-- case2: ncPutQ(x,k,v) where k is a list of keys, v a list of values -;-- equivalent to [ncPutQ(x,key,val) for key in k for val in v] -;ncPutQ(x,k,v) == -; LISTP k => -; for key in k for val in v repeat ncPutQ(x,key,val) -; v -; r := QASSQ(k,ncAlist x) -; if NULL r then -; r := CONS( CONS(k,v), ncAlist x) -; RPLACA(x,CONS(ncTag x,r)) -; else -; RPLACD(r,v) -; v - -(DEFUN |ncPutQ| (|x| |k| |v|) - (PROG (|r|) - (RETURN - (COND - ((LISTP |k|) - (PROGN - ((LAMBDA (|bfVar#1| |key| |bfVar#2| |val|) - (LOOP - (COND - ((OR (ATOM |bfVar#1|) - (PROGN (SETQ |key| (CAR |bfVar#1|)) NIL) - (ATOM |bfVar#2|) - (PROGN (SETQ |val| (CAR |bfVar#2|)) NIL)) - (RETURN NIL)) - ((QUOTE T) - (|ncPutQ| |x| |key| |val|))) - (SETQ |bfVar#1| (CDR |bfVar#1|)) - (SETQ |bfVar#2| (CDR |bfVar#2|)))) - |k| NIL |v| NIL) - |v|)) - ((QUOTE T) - (PROGN - (SETQ |r| (QASSQ |k| (|ncAlist| |x|))) - (COND - ((NULL |r|) - (SETQ |r| (CONS (CONS |k| |v|) (|ncAlist| |x|))) - (RPLACA |x| (CONS (|ncTag| |x|) |r|))) - ((QUOTE T) (RPLACD |r| |v|))) - |v|)))))) - -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document}