diff --git a/indenting2.el b/indenting2.el index 6f42fef..3f06b30 100644 --- a/indenting2.el +++ b/indenting2.el @@ -1,6 +1,7 @@ ;; Emacs indent settings (progn (mapcar #'(lambda (x) (put x 'scheme-indent-function 1)) - '(transition extend-transition prefix-transition)) + '(transition extend-transition prefix-transition + extend-transition* prefix-transition*)) (mapcar #'(lambda (x) (put x 'scheme-indent-function 2)) '(role role/fresh yield))) diff --git a/os2.rkt b/os2.rkt index 1e138a0..a1de988 100644 --- a/os2.rkt +++ b/os2.rkt @@ -21,7 +21,9 @@ (except-out (struct-out transition) transition) (rename-out [make-transition transition]) extend-transition + extend-transition* prefix-transition + prefix-transition* role role/fresh @@ -213,11 +215,25 @@ [(transition state actions) (transition state (list actions more-actions))] [state (transition state more-actions)])) +(define (extend-transition* t fn) + (match t + [(transition state actions) + (prefix-transition (fn state) actions)] + [state + (fn state)])) + (define (prefix-transition t . more-actions) (match t [(transition state actions) (transition state (list more-actions actions))] [state (transition state more-actions)])) +(define (prefix-transition* t fn) + (match t + [(transition state actions) + (extend-transition (fn state) actions)] + [state + (fn state)])) + ;;--------------------------------------------------------------------------- ;; Topics and roles