[Issue 5503] New: Forward declarations for nested mutually recursive functions
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Jan 29 11:33:40 PST 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5503
Summary: Forward declarations for nested mutually recursive
functions
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: bearophile_hugs at eml.cc
--- Comment #0 from bearophile_hugs at eml.cc 2011-01-29 11:31:29 PST ---
(I am not sure if this is a good idea or if it's worth the work to implement
it. But here it is.)
Currently you are allowed to write forward declarations inside nested
functions, despite they are not so useful:
Andrej Mitrovic:
> Well, you might be linking to an external function /and/ don't want
> the function to be visible at module scope:
>
> void main() {
> extern(C) double func(); // linked from some C library..
> double result = func();
> }
Currently to write mutually recursive nested functions you need to use
delegates this way:
import std.stdio: writeln;
void main() {
// Hofstadter Female and Male sequences
static int delegate(int) M;
static int delegate(int) F;
F = (int n) {
return n ? n - M(F(n - 1)) : 1;
};
M = (int n) {
return n ? n - F(M(n - 1)) : 0;
};
foreach (i; 0 .. 100)
writeln(F(i));
}
So a possible enhancement request is to allow this usage of nested forward
declarations:
import std.stdio: writeln;
void main() {
// Hofstadter Female and Male sequences
int M(int);
static int F(int n) {
return n ? n - M(F(n - 1)) : 1;
}
static int M(int n) { // line 11
return n ? n - F(M(n - 1)) : 0;
}
foreach (i; 0 .. 100)
writeln(F(i));
}
In DMD 2.051 this last code generates:
test.d(11): Error: declaration M is already defined
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list