{Record encode_small_integer prim_arity prim_short_name} Where Let (encode_small_integer n) (2 * n) Let (prim_arity name) Match (MAP.search prim_arities name) | `just.{_ arity} arity | `nothing (die (STRING.concat ["No such primitive \"" name "\"."])) ; Let (prim_short_name name) Match (MAP.search prim_short_names name) | `just.{_ short_name} short_name | `nothing (die (STRING.concat ["No such primitive \"" name "\"."])) ; Where Let prim_arities Let (construct_map arity_list) (LIST.reduce arity_list MAP.empty MAP.insert) In (construct_map [ {"die" 1} {"file_create" 1} {"file_open" 1} {"file_close" 1} {"file_read_all" 1} {"file_write" 2} {"string_length" 1} {"string_fetch" 2} {"string_equal" 2} {"string_compare" 2} {"string_append" 2} {"string_clip" 3} {"negate" 1} {"multiply" 2} {"add" 2} {"subtract" 2} {"less" 2} {"less_or_equal" 2} {"greater" 2} {"greater_or_equal" 2} {"equal" 2} {"cons" 2} {"print" 1} {"print_line" 1} {"show_integer" 1} ]) Let prim_short_names Let (construct_map list) (LIST.reduce list MAP.empty MAP.insert) In (construct_map [ {"die" "s26"} {"print" "s18"} {"print_line" "s79"} {"file_create" "s20"} {"file_open" "s23"} {"file_close" "s92"} {"file_read_all" "s28"} {"file_write" "s97"} {"show_integer" "s12"} {"multiply" "s93"} {"add" "s19"} {"subtract" "s47"} {"negate" "s84"} {"equal" "s50"} {"less" "s10"} {"less_or_equal" "s63"} {"greater" "s61"} {"greater_or_equal" "s55"} {"string_length" "s65"} {"string_fetch" "s69"} {"string_compare" "s37"} {"string_equal" "s45"} {"string_append" "s25"} {"string_clip" "s44"} {"cons" "s34"} ]) Where Let MAP (SEARCH.MAP STRING.compare Func {key _}. key) Let die OS.die Where Let LIST Package "list" Let OS Package "os" Let SEARCH Package "search" Let STRING Package "string"