lambda_mountain 1.13.53

Compiler Backend / Programming Language Scaffolding
Documentation

substitute-uuids := λ(: ctx Context)(: term AST). (: (tail( 
   (match term (
      ()
      ( (App( (Var 'uuid_s) (Var x ) )) (
         (while (non-zero ctx) (match ctx (
            ()
            ( (CtxBind( rst k v )) (
               (if (==( x k )) (tail(
                  (set term v)
                  (set ctx rst)
               )) (
                  (set ctx rst)
               ))
            ))
            ( _ (set ctx CtxEOF) )
         )))
      ))
      ( (App( l r )) (
         (set term (App(
            (substitute-uuids( ctx l ))
            (substitute-uuids( ctx r ))
         )))
      ))
      ( (Abs( l r tlt )) (
         (set term (Abs(
            (substitute-uuids( ctx l ))
            (substitute-uuids( ctx r ))
            tlt
         )))
      ))
      ( (Asc( l rt )) (
         (set term (Asc(
            (substitute-uuids( ctx l ))
            (close rt)
         )))
      ))
      ( _ () )
   ))
   (close term)
)) AST[]);

extract-uuids := λ(: sloc AST)(: ctx Context)(: term AST). (: (tail( 
   (match term (
      ()
      ( (App( (Var 'uuid_s) (Var x) )) (tail(
         (let id (uuid()))
         (let loc (maybe-deref(location-of sloc)))
         (map-location( id loc ))
         (let lctx (CtxBind( (close ctx) x (Var id) )))
         (set ctx lctx)
      )))
      ( (App( l r )) (tail(
         (let lctx (maybe-deref(extract-uuids( sloc ctx l ))))
         (let rctx (maybe-deref(extract-uuids( sloc lctx r ))))
         (set ctx rctx)
      )))
      ( (Abs( l r tlt )) (tail(
         (let lctx (maybe-deref(extract-uuids( sloc ctx l ))))
         (let rctx (maybe-deref(extract-uuids( sloc lctx r ))))
         (set ctx rctx)
      )))
      ( (Asc( l rt )) (tail(
         (let lctx (maybe-deref(extract-uuids( sloc ctx l ))))
         (set ctx lctx)
      )))
      ( _ () )
   ))
   (close ctx)
)) Context[]);