(PROCLAIM '(OPTIMIZE SPEED)) (IMPORT-MODULE "initial-env") (IN-PACKAGE "BOOTTRAN") (PROVIDE "utility") (EXPORT '(|objectMember?| |symbolMember?| |stringMember?| |charMember?| |scalarMember?| |listMember?| |reverse| |reverse!| |lastNode|)) (DEFUN |objectMember?| (|x| |l|) (LOOP (COND ((NULL |l|) (RETURN NIL)) ((CONSP |l|) (COND ((EQ |x| (CAR |l|)) (RETURN T)) (T (SETQ |l| (CDR |l|))))) (T (RETURN (EQ |x| |l|)))))) (DEFUN |symbolMember?| (|s| |l|) (LOOP (COND ((NULL |l|) (RETURN NIL)) ((CONSP |l|) (COND ((EQ |s| (CAR |l|)) (RETURN T)) (T (SETQ |l| (CDR |l|))))) (T (RETURN (EQ |s| |l|)))))) (DEFUN |stringMember?| (|s| |l|) (LOOP (COND ((NULL |l|) (RETURN NIL)) ((CONSP |l|) (COND ((STRING= |s| (CAR |l|)) (RETURN T)) (T (SETQ |l| (CDR |l|))))) (T (RETURN (STRING= |s| |l|)))))) (DEFUN |charMember?| (|c| |l|) (LOOP (COND ((NULL |l|) (RETURN NIL)) ((CONSP |l|) (COND ((CHAR= |c| (CAR |l|)) (RETURN T)) (T (SETQ |l| (CDR |l|))))) (T (RETURN (CHAR= |c| |l|)))))) (DEFUN |scalarMember?| (|s| |l|) (LOOP (COND ((NULL |l|) (RETURN NIL)) ((CONSP |l|) (COND ((EQL |s| (CAR |l|)) (RETURN T)) (T (SETQ |l| (CDR |l|))))) (T (RETURN (EQL |s| |l|)))))) (DEFUN |listMember?| (|x| |l|) (LOOP (COND ((NULL |l|) (RETURN NIL)) ((CONSP |l|) (COND ((EQUAL |x| (CAR |l|)) (RETURN T)) (T (SETQ |l| (CDR |l|))))) (T (RETURN (EQUAL |x| |l|)))))) (DEFUN |reverse| (|l|) (PROG (|r|) (RETURN (PROGN (SETQ |r| NIL) (LOOP (COND ((CONSP |l|) (SETQ |r| (CONS (CAR |l|) |r|)) (SETQ |l| (CDR |l|))) (T (RETURN |r|)))))))) (DEFUN |reverse!| (|l|) (PROG (|l2| |l1|) (RETURN (PROGN (SETQ |l1| NIL) (LOOP (COND ((CONSP |l|) (SETQ |l2| (CDR |l|)) (RPLACD |l| |l1|) (SETQ |l1| |l|) (SETQ |l| |l2|)) (T (RETURN |l1|)))))))) (DEFUN |lastNode| (|l|) (PROG (|l'|) (RETURN (PROGN (LOOP (COND ((NOT (AND (CONSP |l|) (PROGN (SETQ |l'| (CDR |l|)) T) (CONSP |l'|))) (RETURN NIL)) (T (SETQ |l| |l'|)))) |l|))))