In more recent definitions, we prefer to make some [macro] rules. Macros apply statically, before the program is executed, thus increasing the execution performance. The let and letrec constructs here could be made into [macro].