User loginNavigation |
Can local variables assignments be considered pure functional without monads?Okay, this might seem like an odd question, but is there contention on whether or not a while loop that performs assignment on local function variables is pure functional? For example the following Java code:
int process(int[] xs)
{
int zeros = 0;
int sum = 0;
int i=0;
while (i < xs.Size) {
if (xs[i] == 0)
zeros++;
sum += xs[i];
++i;
}
return sum - zeros;
}
Now I have heard frequently that the above code is considered to have side-effects because of the local assignments to variables. However, the mapping to pure-functional stack-based code (here shown in Cat) is very straightforward:
define process {
// top argument = xs
0 // zeros
0 // sum
0 // i
[
dig3 // bring xs to top of local stack
dupd swap get_at eqz // xs[i] == 0
[[inc] dip3] // inc zeros
[]
if
dupd swap get_at // tmp = xs[i]
[bury3] dip // put xs to bottom of local stack
swap [add_int] dip // sum += tmp
inc // ++i
]
[
dig3 count [bury3] dip // tmp = xs.Size
dupd lt_int // i < tmp
]
while
pop // remove i
swap sub_int // sum-zeros
}
So, my problem is that I am not sure whether this is old news or new news. Any feedback would be appreciated. By cdiggins at 2008-04-10 17:30 | LtU Forum | previous forum topic | next forum topic | other blogs | 11885 reads
|
Browse archives
Active forum topics |
Recent comments
18 hours 57 min ago
19 hours 12 min ago
5 days 20 hours ago
5 days 20 hours ago
5 days 20 hours ago
3 weeks 6 days ago
4 weeks 4 days ago
4 weeks 5 days ago
4 weeks 6 days ago
4 weeks 6 days ago