+ | Pt.Unless (guard, p) ->
+ let compiled_guard = compiler [guard, 0]
+ and compiled_p = compiler [p, 0] in
+ (fun term env ->
+ match compiled_guard term with
+ | None ->
+ begin
+ match compiled_p term with
+ | None -> None
+ | Some (env', _) ->
+ Some (env' @ env)
+ end
+ | Some _ -> None)
+