Fibonacci sequence: Difference between revisions

Content added Content deleted
(→‎{{header|Racket}}: removed: there are more scheme solutions below)
(Added Order)
Line 2,398: Line 2,398:
PRINT A,
PRINT A,
UNTIL GET=1</lang>
UNTIL GET=1</lang>

=={{header|Order}}==
===Recursive===
<lang c>#include <order/interpreter.h>

#define ORDER_PP_DEF_8fib_rec \
ORDER_PP_FN(8fn(8N, \
8if(8less(8N, 2), \
8N, \
8add(8fib_rec(8sub(8N, 1)), \
8fib_rec(8sub(8N, 2))))))

ORDER_PP(8fib_rec(10))</lang>

Tail recursive version (example supplied with language):
<lang c>#include <order/interpreter.h>
#define ORDER_PP_DEF_8fib \
ORDER_PP_FN(8fn(8N, \
8fib_iter(8N, 0, 1)))
#define ORDER_PP_DEF_8fib_iter \
ORDER_PP_FN(8fn(8N, 8I, 8J, \
8if(8is_0(8N), \
8I, \
8fib_iter(8dec(8N), 8J, 8add(8I, 8J)))))
ORDER_PP(8to_lit(8fib(8nat(5,0,0))))</lang>

===Memoization===
<lang c>#include <order/interpreter.h>

#define ORDER_PP_DEF_8fib_memo \
ORDER_PP_FN(8fn(8N, \
8tuple_at(0, 8fib_memo_inner(8N, 8seq))))

#define ORDER_PP_DEF_8fib_memo_inner \
ORDER_PP_FN(8fn(8N, 8M, \
8cond((8less(8N, 8seq_size(8M)), 8pair(8seq_at(8N, 8M), 8M)) \
(8equal(8N, 0), 8pair(0, 8seq(0))) \
(8equal(8N, 1), 8pair(1, 8seq(0, 1))) \
(8else, \
8lets((8S, 8fib_memo_inner(8sub(8N, 2), 8M)) \
(8T, 8fib_memo_inner(8dec(8N), 8tuple_at(1, 8S))) \
(8U, 8add(8tuple_at(0, 8S), 8tuple_at(0, 8T))), \
8pair(8U, \
8seq_append(8tuple_at(1, 8T), 8seq(8U))))))))

ORDER_PP( \
8for_each_in_range(8fn(8N, \
8print(8to_lit(8fib_memo(8N)) (,) 8space)), \
1, 21) \
)</lang>


=={{header|Oz}}==
=={{header|Oz}}==