diff --git a/crates/percival/src/codegen.rs b/crates/percival/src/codegen.rs index f5b5780..05a5974 100644 --- a/crates/percival/src/codegen.rs +++ b/crates/percival/src/codegen.rs @@ -470,7 +470,7 @@ fn cmp_new_decls(ctx: &Context) -> (Context, String) { for result in Rc::clone(&ctx.results).iter() { let name = ctx.gensym(&format!("{}_new", result)); decls.push(format!( - "let {} = {}.Set().asMutable();", + "const {} = {}.Set().asMutable();", name, VAR_IMMUTABLE, )); ctx = ctx.add(VarId::New(result.clone()), name); @@ -533,7 +533,7 @@ fn cmp_rule_incremental( let goal = format!( " -let {goal} = {imm}.Map({goal_obj}); +const {goal} = {imm}.Map({goal_obj}); if (!{set}.includes({goal})) {new}.add({goal}); ", goal = VAR_GOAL, diff --git a/examples/purchased.txt b/examples/purchased.txt new file mode 100644 index 0000000..7687830 --- /dev/null +++ b/examples/purchased.txt @@ -0,0 +1,5 @@ +all_purchased(buyer) :- + orders_unique(buyer), + num_purchased = count[1] { orders_unique(buyer) }, + num_total = count[1] { food() }, + `num_purchased === num_total`. diff --git a/examples/rolling.txt b/examples/rolling.txt new file mode 100644 index 0000000..2c76c0a --- /dev/null +++ b/examples/rolling.txt @@ -0,0 +1,6 @@ +rolling(end_time, average) :- + data(time: end_time), + average = mean[x] { + data(time, x), + `end_time - 7 < time && time <= end_time` + }.