update tests for new recursion optmization
This commit is contained in:
parent
65984ed15b
commit
90c7753201
|
@ -2835,8 +2835,6 @@ impl<'a> CodeGenerator<'a> {
|
|||
} else {
|
||||
dependent_params.clone()
|
||||
};
|
||||
|
||||
|
||||
|
||||
dep_insertions.push(AirTree::define_func(
|
||||
&dep_key.function_name,
|
||||
|
@ -3747,13 +3745,15 @@ impl<'a> CodeGenerator<'a> {
|
|||
// If we have parameters that remain static in each recursive call,
|
||||
// we can construct an *outer* function to take those in
|
||||
// and simplify the recursive part to only accept the non-static arguments
|
||||
let mut recursive_func_body = Term::var(&func_name).apply(Term::var(&func_name));
|
||||
let mut recursive_func_body =
|
||||
Term::var(&func_name).apply(Term::var(&func_name));
|
||||
for param in recursive_nonstatic_params.iter() {
|
||||
recursive_func_body = recursive_func_body.apply(Term::var(param));
|
||||
}
|
||||
|
||||
// Then construct an outer function with *all* parameters, not just the nonstatic ones.
|
||||
let mut outer_func_body = recursive_func_body.lambda(&func_name).apply(func_body);
|
||||
let mut outer_func_body =
|
||||
recursive_func_body.lambda(&func_name).apply(func_body);
|
||||
|
||||
// Now, add *all* parameters, so that other call sites don't know the difference
|
||||
for param in params.iter().rev() {
|
||||
|
|
|
@ -418,8 +418,8 @@ mod tests {
|
|||
"$ref": "#/definitions/test_module~1Input"
|
||||
}
|
||||
},
|
||||
"compiledCode": "59029a01000032323232323232323232322223232533300a4a22930b19299980519b874800000454ccc038c020010526153300b4911d4578706563746564206e6f206669656c647320666f7220436f6e73747200161533300a3370e90010008a99980718040020a4c2a6601692011d4578706563746564206e6f206669656c647320666f7220436f6e73747200161533300a3370e90020008a99980718040020a4c2a6601692011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300b4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300800333232232533300c3370e90000008991919191919299980b180c0010991924c6601400846eb8004c94ccc04ccdc3a400000226464a66603260360042930a9980b249334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a6032002602200c2a660289212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016301100515330134901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602c002602c0046eb0c050004c050008c048004c02800854cc0352412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300a0013001001222533300f00214984c8ccc010010c04800c008c004c04000800ccc0040052000222233330073370e0020060184666600a00a66e000112002300e001002002230063754002460086ea80055cd2b9c5573aaae7955cfaba157441",
|
||||
"hash": "0d35a0ec18c7a4bcf0e14d2b21ddc6798b07aaee55ee7af46fe35448",
|
||||
"compiledCode": "59029101000032323232323232323232322223232533300a4a22930b19299980519b874800000454ccc038c020010526153300b4911d4578706563746564206e6f206669656c647320666f7220436f6e73747200161533300a3370e90010008a99980718040020a4c2a6601692011d4578706563746564206e6f206669656c647320666f7220436f6e73747200161533300a3370e90020008a99980718040020a4c2a6601692011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300b4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630080033253330093370e900000089919191919192999809980a8010991924c646600200200a44a66602c00229309919801801980c801191bae00130170013253330103370e900000089919299980b180c0010a4c2a660269201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a602c002601c00c2a660229212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300e00515330104901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602600260260046eb0c044004c044008c03c004c01c01054cc0292412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300700333001001480008888cccc01ccdc38008018061199980280299b8000448008c0380040080088c018dd5000918021baa0015734ae7155ceaab9e5573eae855d11",
|
||||
"hash": "401a6c4bac4f3554a9bbe260aa12d2eec8c97bf903d23cd6ad426d1e",
|
||||
"definitions": {
|
||||
"ByteArray": {
|
||||
"dataType": "bytes"
|
||||
|
@ -683,8 +683,8 @@ mod tests {
|
|||
"$ref": "#/definitions/test_module~1Dict$test_module~1UUID_Int"
|
||||
}
|
||||
},
|
||||
"compiledCode": "590110010000323232323232323232223253330064a22930b19919119299980499b87480000044c8c94ccc03cc0440084c92633005001232375a60200046eb8c03800454cc031241334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163756601e00260186ea800854cc0292412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300a37540026002002444a66601800429309919980200218078018011800980680100119800800a40004444666600a66e1c00400c0288cccc014014cdc0002240046018002004004ae695ce2ab9d5573caae7d5d0aba21",
|
||||
"hash": "90090f9697c714ade0e0e9969aba9db6702f751628cdd5843d0274b6",
|
||||
"compiledCode": "590106010000323232323232323232223253330064a22930b19299980319b87480000044c8c94ccc030c0380084c926323300100100222533300e00114984c8cc00c00cc044008c8c8dd698078011bae300d001300f0011533009491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163756601800260126ea800c54cc01d2412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300737540046600200290001111199980299b8700100300a2333300500533700008900118060008010012b9a5738aae7555cf2ab9f5742ae89",
|
||||
"hash": "683885e262c8857f80788a1626c1a327267d85cb49e08382288933b2",
|
||||
"definitions": {
|
||||
"ByteArray": {
|
||||
"dataType": "bytes"
|
||||
|
@ -746,8 +746,8 @@ mod tests {
|
|||
"$ref": "#/definitions/test_module~1Dict$test_module~1UUID_Int"
|
||||
}
|
||||
},
|
||||
"compiledCode": "585001000032323232323222323253330054a22930b1999180080091129998050010a4c264666008008601a006004600260160040024646eb4c020008dd718030009bab0025734aae7555cf2ab9f5742ae89",
|
||||
"hash": "09cac9988ed491803b5ae5e6c00783cdab5d95ad9cf8882856647a39",
|
||||
"compiledCode": "584c01000032323232323222323253330054a22930b19198008008011129998048008a4c26466006006601800464646eb4c028008dd7180400098050009bab0025734aae7555cf2ab9f5742ae881",
|
||||
"hash": "6ab85c61be6a417c860621155f9c9c91cbaff382efbe7d532173b7ea",
|
||||
"definitions": {
|
||||
"ByteArray": {
|
||||
"dataType": "bytes"
|
||||
|
@ -944,8 +944,8 @@ mod tests {
|
|||
"$ref": "#/definitions/test_module~1LinkedList$Int"
|
||||
}
|
||||
},
|
||||
"compiledCode": "59035e010000323232323232323232323222232323232533300c4a22930b1801002999191919119299980819b87480000044c8c94ccc058c0600084c92630070011533013491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163016001300e002153330103370e9001000899191919299980c180d00109924c6464660120024601c0026eb0c060008dd7180b0008a9980aa49334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163232337606034004603400260340026eb0c060004c060008dd6980b00098070010a99808a4812b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300e0013001001222533301300214984c8ccc010010c05800c008c004c050008c00400488c94ccc034cdc3a4000002264646464a66602a602e00426493198038038008a998092481334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016301500130150023370e900118081baa3013001300b0021533300d3370e90010008a99980898058010a4c2a6601c9211d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300e4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300b00100530010012232533300b3370e90000008991919192999809980a80109924c6600e00e0022a66020921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630130013013002375a602200260120042a66601666e1d20020011533300f3009002149854cc03124011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300900133001001480008888cccc01ccdc38008018061199980280299b8000448008c0380040080088c018dd5000918021baa0015734ae7155ceaab9e5573eae855d11",
|
||||
"hash": "feae9dcb5bb1552028eba02fd2a5cd575c292cf1f3e4f1e8a19e4c48",
|
||||
"compiledCode": "590358010000323232323232323232323222232323232533300c4a22930b180100299919119299980719b87480000044c8c94ccc050c0580084c92630050011533011491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163014001300c0021533300e3370e9001000899191919299980b180c00109924c6464646600200200444a66603400229309919801801980e801191807000980d8009bac3016002375c60280022a660269201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163232337606030004603000260300026eb0c058004c058008dd6980a00098060010a99807a4812b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300c00130010012232533300d3370e9000000899191919299980a980b80109924c6600e00e0022a660249201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016301500130150023370e900118081baa3013001300b0021533300d3370e90010008a99980898058010a4c2a6601c9211d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300e4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300b00100530010012232533300b3370e90000008991919192999809980a80109924c6600e00e0022a66020921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630130013013002375a602200260120042a66601666e1d20020011533300f3009002149854cc03124011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300900133001001480008888cccc01ccdc38008018061199980280299b8000448008c0380040080088c018dd5000918021baa0015734ae7155ceaab9e5573eae855d11",
|
||||
"hash": "2250642962915ebe2fc08ad9cd0377f2a4b8c281d94f8bae6782fd63",
|
||||
"definitions": {
|
||||
"Bool": {
|
||||
"title": "Bool",
|
||||
|
|
|
@ -186,31 +186,35 @@ fn acceptance_test_2_repeat() {
|
|||
.apply(
|
||||
Term::list_data().apply(
|
||||
Term::var("repeat")
|
||||
.lambda("repeat")
|
||||
.apply(Term::var("repeat").apply(Term::var("repeat")))
|
||||
.lambda("repeat")
|
||||
.apply(
|
||||
Term::less_than_equals_integer()
|
||||
Term::var("repeat")
|
||||
.apply(Term::var("repeat"))
|
||||
.apply(Term::var("n"))
|
||||
.apply(Term::integer(0.into()))
|
||||
.delayed_if_else(
|
||||
Term::empty_list(),
|
||||
Term::mk_cons()
|
||||
.apply(Term::b_data().apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("repeat")
|
||||
.apply(Term::var("repeat"))
|
||||
.apply(Term::var("x"))
|
||||
.lambda("repeat")
|
||||
.apply(
|
||||
Term::less_than_equals_integer()
|
||||
.apply(Term::var("n"))
|
||||
.apply(Term::integer(0.into()))
|
||||
.delayed_if_else(
|
||||
Term::empty_list(),
|
||||
Term::mk_cons()
|
||||
.apply(Term::b_data().apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::sub_integer()
|
||||
.apply(Term::var("n"))
|
||||
.apply(Term::integer(1.into())),
|
||||
Term::var("repeat")
|
||||
.apply(Term::var("repeat"))
|
||||
.apply(
|
||||
Term::sub_integer()
|
||||
.apply(Term::var("n"))
|
||||
.apply(Term::integer(1.into())),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
.lambda("n")
|
||||
.lambda("repeat"),
|
||||
)
|
||||
.lambda("n")
|
||||
.lambda("x")
|
||||
.lambda("repeat"),
|
||||
.lambda("x"),
|
||||
)
|
||||
.apply(Term::byte_string("aiken".as_bytes().to_vec()))
|
||||
.apply(Term::integer(2.into())),
|
||||
|
@ -267,33 +271,35 @@ fn acceptance_test_3_concat() {
|
|||
.lambda("left"),
|
||||
)
|
||||
.lambda("foldr")
|
||||
.apply(Term::var("foldr").apply(Term::var("foldr")))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f"))
|
||||
.apply(Term::var("zero")),
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
)
|
||||
.lambda("zero")
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::list_values(vec![
|
||||
Constant::Data(Data::integer(1.into())),
|
||||
|
@ -368,33 +374,35 @@ fn acceptance_test_4_concat_no_anon_func() {
|
|||
.lambda("x"),
|
||||
)
|
||||
.lambda("foldr")
|
||||
.apply(Term::var("foldr").apply(Term::var("foldr")))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f"))
|
||||
.apply(Term::var("zero")),
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
)
|
||||
.lambda("zero")
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::list_values(vec![
|
||||
Constant::Data(Data::integer(1.into())),
|
||||
|
@ -1148,35 +1156,39 @@ fn acceptance_test_11_map_empty() {
|
|||
.apply(
|
||||
Term::list_data().apply(
|
||||
Term::var("map")
|
||||
.lambda("map")
|
||||
.apply(Term::var("map").apply(Term::var("map")))
|
||||
.lambda("map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::i_data()
|
||||
.apply(Term::var("f").apply(Term::var("x"))),
|
||||
Term::var("map")
|
||||
.apply(Term::var("map"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::i_data().apply(
|
||||
Term::var("f").apply(Term::var("x")),
|
||||
),
|
||||
)
|
||||
.apply(
|
||||
Term::var("map")
|
||||
.apply(Term::var("map"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.apply(
|
||||
Term::var("map")
|
||||
.apply(Term::var("map"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("map"),
|
||||
)
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("map"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::empty_list())
|
||||
.apply(
|
||||
|
@ -1215,35 +1227,39 @@ fn acceptance_test_11_map_filled() {
|
|||
.apply(
|
||||
Term::list_data().apply(
|
||||
Term::var("map")
|
||||
.lambda("map")
|
||||
.apply(Term::var("map").apply(Term::var("map")))
|
||||
.lambda("map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::i_data()
|
||||
.apply(Term::var("f").apply(Term::var("x"))),
|
||||
Term::var("map")
|
||||
.apply(Term::var("map"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::i_data().apply(
|
||||
Term::var("f").apply(Term::var("x")),
|
||||
),
|
||||
)
|
||||
.apply(
|
||||
Term::var("map")
|
||||
.apply(Term::var("map"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.apply(
|
||||
Term::var("map")
|
||||
.apply(Term::var("map"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("map"),
|
||||
)
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("map"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::list_values(vec![
|
||||
Constant::Data(Data::integer(6.into())),
|
||||
|
@ -1296,40 +1312,42 @@ fn acceptance_test_12_filter_even() {
|
|||
.apply(
|
||||
Term::list_data().apply(
|
||||
Term::var("filter")
|
||||
.lambda("filter")
|
||||
.apply(Term::var("filter").apply(Term::var("filter")))
|
||||
.lambda("filter")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.delayed_if_else(
|
||||
Term::mk_cons()
|
||||
.apply(Term::i_data().apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("filter")
|
||||
.apply(Term::var("filter"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("filter")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.delayed_if_else(
|
||||
Term::mk_cons()
|
||||
.apply(Term::i_data().apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("filter")
|
||||
.apply(Term::var("filter"))
|
||||
.apply(Term::var("rest")),
|
||||
),
|
||||
Term::var("filter")
|
||||
.apply(Term::var("filter"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f")),
|
||||
),
|
||||
Term::var("filter")
|
||||
.apply(Term::var("filter"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f")),
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("filter"),
|
||||
)
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("filter"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::list_values(vec![
|
||||
Constant::Data(Data::integer(1.into())),
|
||||
|
@ -2008,30 +2026,33 @@ fn acceptance_test_22_filter_map() {
|
|||
.lambda("xs"),
|
||||
)
|
||||
.lambda("foldr")
|
||||
.apply(Term::var("foldr").apply(Term::var("foldr")))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f"))
|
||||
.apply(Term::var("zero")),
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
)
|
||||
.lambda("zero")
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::empty_list())
|
||||
.apply(
|
||||
|
@ -2324,32 +2345,35 @@ fn acceptance_test_26_foldr() {
|
|||
.apply(
|
||||
Term::list_data().apply(
|
||||
Term::var("flat_map")
|
||||
.lambda("flat_map")
|
||||
.apply(Term::var("flat_map").apply(Term::var("flat_map")))
|
||||
.lambda("flat_map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("concat")
|
||||
.apply(Term::var("f").apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f")),
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("flat_map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("concat")
|
||||
.apply(Term::var("f").apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("flat_map"),
|
||||
)
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("flat_map"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.lambda("concat")
|
||||
.apply(
|
||||
|
@ -2367,33 +2391,35 @@ fn acceptance_test_26_foldr() {
|
|||
.lambda("left"),
|
||||
)
|
||||
.lambda("foldr")
|
||||
.apply(Term::var("foldr").apply(Term::var("foldr")))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f"))
|
||||
.apply(Term::var("zero")),
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
)
|
||||
.lambda("zero")
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::list_values(vec![
|
||||
Constant::Data(Data::integer(1.into())),
|
||||
|
@ -2460,32 +2486,35 @@ fn acceptance_test_27() {
|
|||
.apply(
|
||||
Term::list_data().apply(
|
||||
Term::var("flat_map")
|
||||
.lambda("flat_map")
|
||||
.apply(Term::var("flat_map").apply(Term::var("flat_map")))
|
||||
.lambda("flat_map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("concat")
|
||||
.apply(Term::var("f").apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f")),
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("flat_map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("concat")
|
||||
.apply(Term::var("f").apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("flat_map"),
|
||||
)
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("flat_map"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.lambda("concat")
|
||||
.apply(
|
||||
|
@ -2503,33 +2532,35 @@ fn acceptance_test_27() {
|
|||
.lambda("left"),
|
||||
)
|
||||
.lambda("foldr")
|
||||
.apply(Term::var("foldr").apply(Term::var("foldr")))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f"))
|
||||
.apply(Term::var("zero")),
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
)
|
||||
.lambda("zero")
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::list_values(vec![
|
||||
Constant::Data(Data::integer(1.into())),
|
||||
|
@ -2596,32 +2627,35 @@ fn acceptance_test_30() {
|
|||
.apply(
|
||||
Term::list_data().apply(
|
||||
Term::var("flat_map")
|
||||
.lambda("flat_map")
|
||||
.apply(Term::var("flat_map").apply(Term::var("flat_map")))
|
||||
.lambda("flat_map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("concat")
|
||||
.apply(Term::var("f").apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f")),
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("flat_map")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::empty_list(),
|
||||
Term::var("concat")
|
||||
.apply(Term::var("f").apply(Term::var("x")))
|
||||
.apply(
|
||||
Term::var("flat_map")
|
||||
.apply(Term::var("flat_map"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("flat_map"),
|
||||
)
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("flat_map"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.lambda("concat")
|
||||
.apply(
|
||||
|
@ -2639,33 +2673,35 @@ fn acceptance_test_30() {
|
|||
.lambda("left"),
|
||||
)
|
||||
.lambda("foldr")
|
||||
.apply(Term::var("foldr").apply(Term::var("foldr")))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest"))
|
||||
.apply(Term::var("f"))
|
||||
.apply(Term::var("zero")),
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("xs"))
|
||||
.lambda("foldr")
|
||||
.apply(
|
||||
Term::var("xs")
|
||||
.delayed_choose_list(
|
||||
Term::var("zero"),
|
||||
Term::var("f")
|
||||
.apply(Term::var("x"))
|
||||
.apply(
|
||||
Term::var("foldr")
|
||||
.apply(Term::var("foldr"))
|
||||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
)
|
||||
.lambda("zero")
|
||||
.lambda("f")
|
||||
.lambda("xs")
|
||||
.lambda("foldr"),
|
||||
.lambda("xs"),
|
||||
)
|
||||
.apply(Term::list_values(vec![
|
||||
Constant::Data(Data::integer(1.into())),
|
||||
|
|
Loading…
Reference in New Issue