John
5eb6411d53
- Allowed builtins to self-describe - Broke builtins into their own module - Created a macro to work with BuiltIns easier - Uses macro 2.0 syntax, so it requires passing in ALL externally referenced identifiers - Luckily, this is already a requirement of good, readable macro definitions! - As a temporary hack, turn overloadable operators into function calls - This is kind of pointless at the moment, since there can only be one definition of a function per name (no ADL/function overloading/traits/type namespaces yet!) - This is also pretty slow, but benchmarking shows it's not as slow as I thought (~400x slower in release mode than a native Rust implementation when running `fib.cl`/`fib.rs`. Totally unacceptable for most work, but this is a tree walk interpreter.) - TODO: Remove this when desugaring from operators to function calls is implemented
17 lines
281 B
Common Lisp
17 lines
281 B
Common Lisp
// Calculate Fibonacci numbers
|
|
|
|
fn main() {
|
|
for num in 0..=30 {
|
|
print("fib(", num, ") = ", fib(num))
|
|
}
|
|
}
|
|
|
|
/// Implements the classic recursive definition of fib()
|
|
fn fib(a: i64) -> i64 {
|
|
if a > 1 {
|
|
fib(a - 1) + fib(a - 2)
|
|
} else {
|
|
1
|
|
}
|
|
}
|