Fibonacci sequence: Difference between revisions
Content added Content deleted
(Add bruijn) |
No edit summary |
||
Line 10,165: | Line 10,165: | ||
=={{header|Ol}}== |
=={{header|Ol}}== |
||
Same as [https://rosettacode.org/wiki/Fibonacci_sequence#Scheme Scheme] example(s). |
Same as [https://rosettacode.org/wiki/Fibonacci_sequence#Scheme Scheme] example(s). |
||
=={{header|Onyx (wasm)}}== |
|||
<syntaxhighlight lang="C"> |
|||
use core.iter |
|||
use core { printf } |
|||
// Procedural Simple For-Loop Style |
|||
fib_for_loop :: (n: i32) -> i32 { |
|||
a: i32 = 0; |
|||
b: i32 = 1; |
|||
for 0 .. n { |
|||
tmp := a; |
|||
a = b; |
|||
b = tmp + b; |
|||
} |
|||
return a; |
|||
} |
|||
FibState :: struct { a, b: u64 } |
|||
// Functional Folding Style |
|||
fib_by_fold :: (n: i32) => { |
|||
end_state := |
|||
iter.counter() |
|||
|> iter.take(n) |
|||
|> iter.fold( |
|||
FibState.{ a = 0, b = 1 }, |
|||
(_, state) => FibState.{ |
|||
a = state.b, |
|||
b = state.a + state.b |
|||
} |
|||
); |
|||
return end_state.a; |
|||
} |
|||
// Custom Iterator Style |
|||
fib_iterator :: (n: i32) => |
|||
iter.generator( |
|||
&.{ a = cast(u64) 0, b = cast(u64) 1, counter = n }, |
|||
(state: & $Ctx) -> (u64, bool) { |
|||
if state.counter <= 0 { |
|||
return 0, false; |
|||
} |
|||
tmp := state.a; |
|||
state.a = state.b; |
|||
state.b = state.b + tmp; |
|||
state.counter -= 1; |
|||
return tmp, true; |
|||
} |
|||
); |
|||
main :: () { |
|||
printf("\nBy For Loop:\n"); |
|||
for i in 0 .. 21 { |
|||
printf("{} ", fib_for_loop(i)); |
|||
} |
|||
printf("\n\nBy Iterator:\n"); |
|||
for i in 0 .. 21 { |
|||
printf("{} ", fib_by_fold(i)); |
|||
} |
|||
printf("\n\nBy Fold:\n"); |
|||
for value, index in fib_iterator(21) { |
|||
printf("{} ", value); |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
For-Loop: |
|||
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 |
|||
Functional Fold: |
|||
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 |
|||
Custom Iterator: |
|||
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 |
|||
C:\Users\dersoy\Documents\GitHub\onyx\fib> |
|||
</pre> |
|||
=={{header|OPL}}== |
=={{header|OPL}}== |