simplify and fix
This commit is contained in:
22
sexpr.ml
22
sexpr.ml
@@ -682,23 +682,13 @@ module SExprMacroExp = struct
|
|||||||
|
|
||||||
let rec eval (ctx: (string * (SExpr.t * SExpr.t)) list) s =
|
let rec eval (ctx: (string * (SExpr.t * SExpr.t)) list) s =
|
||||||
let open SExpr in
|
let open SExpr in
|
||||||
let sli, ctx = match s with
|
let s, ctx = if is_list s then
|
||||||
Cons(l,r) ->
|
aggr_flat_map eval ctx s
|
||||||
(* Cons(1, Cons(2, Nil))
|
else
|
||||||
l: Cons(1, Nil)
|
s, ctx
|
||||||
r: Cons(Cons(2, Nil), Nil)
|
|
||||||
append r l: Cons(1, Cons(Cons(2, Nil), Nil))
|
|
||||||
*)
|
|
||||||
let l, ctx = eval ctx l in
|
|
||||||
let r, ctx = eval ctx r in
|
|
||||||
begin match append r l with
|
|
||||||
Cons(l, Cons(r, Nil)) -> li1 @@ Cons(l,r)
|
|
||||||
| Nil -> Nil
|
|
||||||
| x -> raise (FIXME x)
|
|
||||||
end, ctx
|
|
||||||
| s -> li1 s, ctx
|
|
||||||
in
|
in
|
||||||
aggr_flat_map check_expands_while ctx sli
|
let s, ctx = check_expands_while ctx s in
|
||||||
|
s, ctx
|
||||||
(* expr -> list(new exprs) * bool:changed * ctx *)
|
(* expr -> list(new exprs) * bool:changed * ctx *)
|
||||||
and check_expands ctx s =
|
and check_expands ctx s =
|
||||||
let open SExpr in
|
let open SExpr in
|
||||||
|
Reference in New Issue
Block a user