Plaster
New
List
Login
text
default
anonymous
2020.09.16 04:37:48
ONE-MORE-RE-NIGHTMARE> (make-lambda-form (parse-regular-expression "c(a|d)+r")) (LAMBDA (VECTOR START END CONTINUATION) (DECLARE (OPTIMIZE (SPEED 3) (SAFETY 0) (DEBUG 0) (SPACE 0) (COMPILATION-SPEED 0)) (FUNCTION CONTINUATION) (VECTOR VECTOR) (FIXNUM START END) (IGNORABLE START END VECTOR)) (MACROLET ((WITH-NEXT-VALUE ((VALUE SUCCEED-BODY) FAIL-BODY) `(IF (>= POSITION END) ,FAIL-BODY (LET ((,VALUE ,'(AREF VECTOR POSITION))) (DECLARE (IGNORABLE ,VALUE)) ,SUCCEED-BODY)))) (PROG* ((THIS-START START) (POSITION THIS-START)) (DECLARE (FIXNUM POSITION THIS-START)) LOOP (WHEN (= THIS-START END) NIL (RETURN)) (SETF POSITION THIS-START) (SETF) (GO #:|(JOIN (LITERAL { c }) (JOIN (JOIN (LITERAL { a, d }) (KLEENE (LITERAL { a, d }))) (LITERAL { r })))|) #:|(EMPTY-STRING)| (FUNCALL CONTINUATION THIS-START POSITION 'NIL) (IF (= THIS-START POSITION) (INCF THIS-START) (SETF THIS-START POSITION)) (GO LOOP) #:|(LITERAL { })| (INCF THIS-START) (GO LOOP) #:|(JOIN (LITERAL { c }) (JOIN (JOIN (LITERAL { a, d }) (KLEENE (LITERAL { a, d }))) (LITERAL { r })))| (WITH-NEXT-VALUE (VALUE (COND ((OR (EQL VALUE '#\c)) (PROGN (INCF POSITION) (GO #:|(JOIN (JOIN (LITERAL { a, d }) (KLEENE (LITERAL { a, d }))) (LITERAL { r }))|))) ((NOT (OR (EQL VALUE '#\c))) (PROGN (INCF POSITION) (GO #:|(LITERAL { })|))))) (PROGN (INCF POSITION) (GO #:|(LITERAL { })|))) #:|(JOIN (JOIN (LITERAL { a, d }) (KLEENE (LITERAL { a, d }))) (LITERAL { r }))| (WITH-NEXT-VALUE (VALUE (COND ((OR (EQL VALUE '#\a) (EQL VALUE '#\d)) (PROGN (INCF POSITION) (GO #:|(JOIN (KLEENE (LITERAL { a, d })) (LITERAL { r }))|))) ((NOT (OR (EQL VALUE '#\a) (EQL VALUE '#\d))) (PROGN (INCF POSITION) (GO #:|(LITERAL { })|))))) (PROGN (INCF POSITION) (GO #:|(LITERAL { })|))) #:|(JOIN (KLEENE (LITERAL { a, d })) (LITERAL { r }))| (WITH-NEXT-VALUE (VALUE (COND ((OR (EQL VALUE '#\d) (EQL VALUE '#\a)) (PROGN (INCF POSITION) (GO #:|(JOIN (KLEENE (LITERAL { a, d })) (LITERAL { r }))|))) ((OR (EQL VALUE '#\r)) (PROGN (INCF POSITION) (GO #:|(EMPTY-STRING)|))) ((NOT (OR (EQL VALUE '#\d) (EQL VALUE '#\a) (EQL VALUE '#\r))) (PROGN (INCF POSITION) (GO #:|(LITERAL { })|))))) (PROGN (INCF POSITION) (GO #:|(LITERAL { })|))))))
Raw
Annotate
Repaste
Edit