Debruijn indexes and levels, and why they're handy

function r(str) { while (str.charAt(0) == &#x27; &#x27;) { str = str.slice(1); } return str; } function get_args(str) { str = r(str); if (str == "") { return ["", []] } else if (str.charAt(0) == &#x27;.&#x27;) { return [str.slice(1), []]; } let [rest, l] = get_args(str.slice(1)); return [rest, [str.charAt(0)].concat(l)]; } function parse_app(str) { str = r(str); if (str == "") { return ["", []]; }…