Mutual recursion: Difference between revisions
Content added Content deleted
(→Kotlin) |
(Add bruijn) |
||
Line 890: | Line 890: | ||
p 0.to(20).map! { n | female n } |
p 0.to(20).map! { n | female n } |
||
p 0.to(20).map! { n | male n }</syntaxhighlight> |
p 0.to(20).map! { n | male n }</syntaxhighlight> |
||
=={{header|Bruijn}}== |
|||
Normally it's not possible to call functions before they are defined. We can still induce mutual recursion using its [[Variadic_fixed-point_combinator|variadic fixed-point combinator]]. |
|||
<syntaxhighlight lang="bruijn"> |
|||
:import std/Combinator . |
|||
:import std/Number . |
|||
:import std/List . |
|||
f' [[[=?0 (+1) (0 - (1 (2 --0)))]]] |
|||
m' [[[=?0 (+0) (0 - (2 (1 --0)))]]] |
|||
f ^(y* (f' : {}m')) |
|||
m _(y* (f' : {}m')) |
|||
:test ((f (+0)) =? (+1)) ([[1]]) |
|||
:test ((m (+0)) =? (+0)) ([[1]]) |
|||
:test ((f (+4)) =? (+3)) ([[1]]) |
|||
:test ((m (+4)) =? (+2)) ([[1]]) |
|||
:test ((f (+15)) =? (+9)) ([[1]]) |
|||
:test ((m (+15)) =? (+9)) ([[1]]) |
|||
</syntaxhighlight> |
|||
=={{header|C}}== |
=={{header|C}}== |