From 50ffaabb3e56f7dec884c7e44c0fc0296772dfc8 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Sun, 1 May 2011 21:02:41 +0000 Subject: * boot/utility.boot (applySubstNQ): New. * interp/compiler.boot (finishLambdaExpression): Use it. * interp/i-intern.boot (mkAtreeExpandMacros): Likewise. * interp/i-map.boot (addMap): Likewise. * interp/vmlisp.lisp (SUBLISNQ, SUBANQ, SUBB): Remove. --- src/boot/strap/utility.clisp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/boot/strap') diff --git a/src/boot/strap/utility.clisp b/src/boot/strap/utility.clisp index e399057f..f10a1749 100644 --- a/src/boot/strap/utility.clisp +++ b/src/boot/strap/utility.clisp @@ -9,7 +9,13 @@ |scalarMember?| |listMember?| |reverse| |reverse!| |lastNode| |append| |append!| |copyList| |substitute| |substitute!| |setDifference| |applySubst| |applySubst!| - |remove| |removeSymbol|)) + |applySubstNQ| |remove| |removeSymbol|)) + +(DECLAIM (FTYPE (FUNCTION (|%Thing| |%Thing| |%Thing|) |%Thing|) + |substitute|)) + +(DECLAIM (FTYPE (FUNCTION (|%Thing| |%Thing| |%Thing|) |%Thing|) + |substitute!|)) (DECLAIM (FTYPE (FUNCTION ((|%List| |%Thing|) (|%List| |%Thing|)) (|%List| |%Thing|)) @@ -204,6 +210,23 @@ (CDR |p|)) (T |t|))))) +(DEFUN |applySubstNQ| (|sl| |t|) + (PROG (|p| |tl| |hd|) + (RETURN + (COND + ((AND (CONSP |t|) + (PROGN (SETQ |hd| (CAR |t|)) (SETQ |tl| (CDR |t|)) T)) + (COND + ((EQ |hd| 'QUOTE) |t|) + (T (SETQ |hd| (|applySubstNQ| |sl| |hd|)) + (SETQ |tl| (|applySubstNQ| |sl| |tl|)) + (COND + ((AND (EQ |hd| (CAR |t|)) (EQ |tl| (CDR |t|))) |t|) + (T (CONS |hd| |tl|)))))) + ((AND (SYMBOLP |t|) (SETQ |p| (|assocSymbol| |t| |sl|))) + (CDR |p|)) + (T |t|))))) + (DEFUN |setDifference| (|x| |y|) (PROG (|a| |l| |p|) (RETURN -- cgit v1.2.3