macro to create a function type, its return value can be passed around or be defined: #;4> (define f (function 'int ('int 'char))) and you can use ‘decl-order’ to show its readable form: #;5> (decl-order f) (int #(int char))
precisely, but there are unimplemented parts) • ~140 tests • And prevent you from “breaking” the type system: #;2> (decl-order (array (function 'void ()) 3)) Error: uncaught exception: "no array of functions"
in a Lisp-like language 2. Make it programmable 3. So that we can experiment our ideas, build tools like to test the function calls, or do overload resolution, provide diagnosis, and allow users to programmably use these tools!
healthy ecosystem plus ◦ Common Lisp keyword arguments (DSSSL) ◦ Common Lisp printf and format ◦ CLOS-like object system (COOPS) • Unit tests, modules and packaging (Egg) in CHICKEN • Pattern matching and varies SRFI libraries • Hygienic macros • Applying rules to tree-like structures • Some beauty in C++’s type system :)