Mutual recursion: Difference between revisions

Content added Content deleted
(moved 2nd autohotkey example to proper place; moved prolog after powershell; minor changes to basic & mmix)
Line 78: Line 78:
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12
</pre>
</pre>

=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==
<lang AutoHotkey>Loop 20
<lang AutoHotkey>Loop 20
Line 90: Line 91:
Return n ? n - F(M(n-1)) : 0
Return n ? n - F(M(n-1)) : 0
}</lang>
}</lang>

{{trans|C}}

This one is an alternative to the above.

<lang AutoHotkey>main()
Return

F(n)
{
If (n == 0)
Return 1
Else
Return n - M(F(n-1))
}
M(n)
{
If (n == 0)
Return 0
Else
Return n - F(M(n-1)) ;
}
main()
{
i = 0
While, i < 20
{
male .= M(i) . "`n"
female .= F(i) . "`n"
i++
}
MsgBox % "male:`n" . male
MsgBox % "female:`n" . female
}</lang>

=={{header|AWK}}==
=={{header|AWK}}==
In AWK it is enough that both functions are defined before either is called.
In AWK it is enough that both functions are defined before either is called.
Line 116: Line 154:


=={{header|BASIC}}==
=={{header|BASIC}}==
{{works with|QuickBasic|4.5}}
{{works with|QBasic}}
<lang qbasic>DECLARE FUNCTION f! (n!)
<lang qbasic>DECLARE FUNCTION f! (n!)
DECLARE FUNCTION m! (n!)
DECLARE FUNCTION m! (n!)


FUNCTION f! (n!)
FUNCTION f! (n!)
IF n = 0 THEN
IF n = 0 THEN
f = 1
f = 1
ELSE
ELSE
f = m(f(n - 1))
f = m(f(n - 1))
END IF
END IF
END FUNCTION
END FUNCTION


FUNCTION f! (n!)
FUNCTION f! (n!)
IF n = 0 THEN
IF n = 0 THEN
m = 0
m = 0
ELSE
ELSE
m = f(m(n - 1))
m = f(m(n - 1))
END IF
END IF
END FUNCTION</lang>
END FUNCTION</lang>


Line 159: Line 197:
}
}
print "\n";</lang>
print "\n";</lang>

=={{header|AutoHotkey}}==
{{trans|C}}
<lang AutoHotkey>main()
Return

F(n)
{
If (n == 0)
Return 1
Else
Return n - M(F(n-1))
}
M(n)
{
If (n == 0)
Return 0
Else
Return n - F(M(n-1)) ;
}
main()
{
i = 0
While, i < 20
{
male .= M(i) . "`n"
female .= F(i) . "`n"
i++
}
MsgBox % "male:`n" . male
MsgBox % "female:`n" . female
}</lang>


=={{header|C}}==
=={{header|C}}==
Line 788: Line 792:
TRAP 0,Fputs,StdOut
TRAP 0,Fputs,StdOut
TRAP 0,Halt,0</lang>
TRAP 0,Halt,0</lang>

Output:
Output:
<pre>~/MIX/MMIX/Rosetta> mmix mutualrecurs1
~/MIX/MMIX/Rosetta> mmix mutualrecurs1
1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 10 11 11 12 13 13 14 14 15
1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 10 11 11 12 13 13 14 14 15
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12 12 13 14 14 15</pre>
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12 12 13 14 14 15


=={{header|Objective-C}}==
=={{header|Objective-C}}==
Line 1,007: Line 1,012:
0
0
(- N (f (m (dec N)))) ) )</lang>
(- N (f (m (dec N)))) ) )</lang>

=={{header|Prolog}}==
<lang prolog>female(0,1).
female(N,F) :- N>0,
N1 is N-1,
female(N1,R),
male(R, R1),
F is N-R1.

male(0,0).
male(N,F) :- N>0,
N1 is N-1,
male(N1,R),
female(R, R1),
F is N-R1.</lang>

{{works with|GNU Prolog}}
<lang prolog>flist(S) :- for(X, 0, S), female(X, R), format('~d ', [R]), fail.
mlist(S) :- for(X, 0, S), male(X, R), format('~d ', [R]), fail.</lang>

'''Testing'''

<pre>| ?- flist(19).
1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 10 11 11 12

no
| ?- mlist(19).
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12</pre>


=={{header|PostScript}}==
=={{header|PostScript}}==
Line 1,056: Line 1,033:
}def
}def
</lang>
</lang>

=={{header|PowerShell}}==
=={{header|PowerShell}}==
<lang powershell>function F($n) {
<lang powershell>function F($n) {
Line 1,066: Line 1,044:
return $n - (F (M ($n - 1)))
return $n - (F (M ($n - 1)))
}</lang>
}</lang>

=={{header|Prolog}}==
<lang prolog>female(0,1).
female(N,F) :- N>0,
N1 is N-1,
female(N1,R),
male(R, R1),
F is N-R1.

male(0,0).
male(N,F) :- N>0,
N1 is N-1,
male(N1,R),
female(R, R1),
F is N-R1.</lang>

{{works with|GNU Prolog}}
<lang prolog>flist(S) :- for(X, 0, S), female(X, R), format('~d ', [R]), fail.
mlist(S) :- for(X, 0, S), male(X, R), format('~d ', [R]), fail.</lang>

'''Testing'''

<pre>| ?- flist(19).
1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 10 11 11 12

no
| ?- mlist(19).
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12</pre>


=={{header|Pure}}==
=={{header|Pure}}==