3 Profile-Guided Conditionals
(require pgmp/case) | package: rackpgmp |
syntax
(case val-expr case-clause ...)
Like Racket’s case, but may sort
case-clauses in order of most frequently executed. An else
clause, if one exists, will always be last.
(require pgmp/exclusive-cond) | package: rackpgmp |
syntax
(exclusive-cond exclusive-cond-clause ...)
exclusive-cond-clause = [test-expr then-body ...+] | [else then-body ...+] | [test-expr => proc-expr]
Like Racket’s cond, but may sort
exclusive-cond-clauses in order of most frequently executed.
An else clause, if one exists, will always be last.
Note that the clauses must be mutually exclusive or which branch is
taken is non-deterministic.
When generated from another macro, be sure to preserve location
information at the top level to ensure profile data can be loaded
correctly.
Example:
> (define-syntax (dispatch syn) (define branches ...) (quasisyntax/loc syn #`(exclusive-cond #,@branches)))