tree-sitter-lang/corpus/edigits_like.langexp

473 lines
14 KiB
Text

================================================================================
EdigitsDraft
================================================================================
:: os;
:: std : BigInt;
:: math;
exec.main = {
%n := (?? os.args.size > 1 => (<> os.args[1]).scan !!=> 27);
%k := binary_search 0;
%p & %q := sum_terms 0 (k - 1);
p += q;
$a := (std.BigInt.of 10).pow (n - 1);
%answer := p * a /. q;
%s := answer.to_string;
@ %i : (@ %j : 0..(n / 10 +. 1) => j * 10) => {
?? i + 10 <=. n =>
print (s.subseg i (i + 10) ++ "\t:" ++. (i + 10).to_string)
!!=>
print (s.subseg i n
++ (@ _ : 0..(10 - math.mod n 10) => ''\s'')
++ "\t:"
++ n.to_string);
};
}
sum_terms 'a 'b : Int Int -> std.BigInt -> std.BigInt = {
?? 'b ==. 'a + 1 => return std.BigInt.of 1 & std.BigInt.of 'b;
%mid := 'a + 'b /. 2;
%p_left & %q_left := sum_terms 'a mid;
%p_right & %q_right := sum_terms mid 'b;
return p_left * q_right +. p_right &.. q_left * q_right;
}
binary_search 'n : Int -> Int = {
%a := 0;
%b := 1;
@ not (test_k 'n b) => {
a = b;
b *= 2;
};
@ b - a >. 1 => {
%m := a + b /. 2;
?? test_k 'n m => b = m !!=> a = m;
};
return b;
}
test_k 'n 'k : Int Int -> Bool = {
?? k < 0 => return false;
%ln_k_factorial := k * (math.log k - 1) +. 0.5 * math.log math.tau;
%log_10_k_factorial := ln_k_factorial / math.ln10;
return log_10_k_factorial >=. n + 10;
}
--------------------------------------------------------------------------------
(source_file
(import
(simple_name_identifier))
(import
(simple_name_identifier)
(simple_type_identifier))
(import
(simple_name_identifier))
(function_definition
(simple_name_identifier)
(block
(match
(name_definition
(simple_name_identifier))
(case
(condition
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(name_expression
(reference_expression
(array_access
(simple_name_identifier)
(number_literal)))
(simple_name_identifier))
(number_literal))))
(match
(name_definition
(simple_name_identifier))
(case
(name_expression
(simple_name_identifier)
(number_literal))))
(match
(operator_expression
(name_definition
(simple_name_identifier))
(operator)
(name_definition
(simple_name_identifier)))
(case
(name_expression
(simple_name_identifier)
(number_literal)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))))
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))
(match
(name_definition
(simple_name_identifier))
(case
(name_expression
(name_expression
(type
(simple_type_identifier))
(simple_name_identifier)
(number_literal))
(simple_name_identifier)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))))
(match
(name_definition
(simple_name_identifier))
(case
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))
(operator_tail1)
(name_expression
(simple_name_identifier)))))
(match
(name_definition
(simple_name_identifier))
(case
(name_expression
(simple_name_identifier))))
(loop
(name_definition
(simple_name_identifier))
(loop
(name_definition
(simple_name_identifier))
(operator_expression
(number_literal)
(operator)
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(operator_tail1)
(number_literal)))
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))
(block
(condition
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(operator_tail1)
(name_expression
(simple_name_identifier)))
(name_expression
(simple_name_identifier)
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier)
(simple_name_identifier)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))
(operator)
(string_literal))
(operator_tail1)
(name_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(simple_name_identifier))))
(name_expression
(simple_name_identifier)
(operator_expression
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier)
(simple_name_identifier)
(simple_name_identifier))
(operator)
(loop
(placeholder)
(operator_expression
(number_literal)
(operator)
(operator_expression
(number_literal)
(operator)
(name_expression
(simple_name_identifier)
(simple_name_identifier)
(number_literal))))
(char_literal)))
(operator)
(string_literal))
(operator)
(name_expression
(simple_name_identifier)))))))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(type
(simple_type_identifier))
(type
(simple_type_identifier))
(type
(simple_type_identifier))
(type
(simple_type_identifier))
(block
(condition
(operator_expression
(name_expression
(argument_name_identifier))
(operator_tail1)
(operator_expression
(name_expression
(argument_name_identifier))
(operator)
(number_literal)))
(return
(operator_expression
(name_expression
(type
(simple_type_identifier))
(simple_name_identifier)
(number_literal))
(operator)
(name_expression
(type
(simple_type_identifier))
(simple_name_identifier)
(argument_name_identifier)))))
(match
(name_definition
(simple_name_identifier))
(case
(operator_expression
(operator_expression
(name_expression
(argument_name_identifier))
(operator)
(name_expression
(argument_name_identifier)))
(operator_tail1)
(number_literal))))
(match
(operator_expression
(name_definition
(simple_name_identifier))
(operator)
(name_definition
(simple_name_identifier)))
(case
(name_expression
(simple_name_identifier)
(argument_name_identifier)
(simple_name_identifier))))
(match
(operator_expression
(name_definition
(simple_name_identifier))
(operator)
(name_definition
(simple_name_identifier)))
(case
(name_expression
(simple_name_identifier)
(simple_name_identifier)
(argument_name_identifier))))
(return
(operator_expression
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))
(operator_tail1)
(name_expression
(simple_name_identifier)))
(operator_tail2)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
(type
(simple_type_identifier))
(type
(simple_type_identifier))
(block
(match
(name_definition
(simple_name_identifier))
(case
(number_literal)))
(match
(name_definition
(simple_name_identifier))
(case
(number_literal)))
(loop
(name_expression
(simple_name_identifier)
(name_expression
(simple_name_identifier)
(argument_name_identifier)
(simple_name_identifier)))
(block
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))))
(loop
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))
(operator_tail1)
(number_literal))
(block
(match
(name_definition
(simple_name_identifier))
(case
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))
(operator_tail1)
(number_literal))))
(condition
(name_expression
(simple_name_identifier)
(argument_name_identifier)
(simple_name_identifier))
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier))))))
(return
(name_expression
(simple_name_identifier)))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(type
(simple_type_identifier))
(type
(simple_type_identifier))
(type
(simple_type_identifier))
(block
(condition
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(return
(bool_literal)))
(match
(name_definition
(simple_name_identifier))
(case
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(operator_expression
(name_expression
(simple_name_identifier)
(simple_name_identifier))
(operator)
(number_literal)))
(operator_tail1)
(operator_expression
(float_number_literal)
(operator)
(name_expression
(simple_name_identifier)
(simple_name_identifier))))))
(match
(name_definition
(simple_name_identifier))
(case
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(name_expression
(simple_name_identifier)))))
(return
(operator_expression
(name_expression
(simple_name_identifier))
(operator_tail1)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))))))