Re: Function returns null
- To: mathgroup at smc.vnet.net
- Subject: [mg104724] Re: Function returns null
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Sun, 8 Nov 2009 06:42:37 -0500 (EST)
On 11/7/09 at 6:46 AM, mgreene at csumb.edu (Michael Greene) wrote:
>I'm getting an unexpected result when I remove a print statement
>from my function. The function computes a single digit sum of digits
>and returns what I expect as long as the print statement just prior
>to the function exit is present. I can verify that by invoking the
>function within a print statement, e.g.,
>Print["sOd returned - ",sOd[3329]]
>When I remove the print within the function, the function returns a
>null result. What simple point am I missing ? Does the := operator
>have something to do with this?
>Here is the function: (with embedded print statement)
>sOd[x0_] := Module[{sodv, x, digit},
>x = IntegerPart[x0]; (* ensure we have an integer input*)
>sodv = x;
>If[(x > 9), { (* sum digits if input has two or more digits*)
>sodv = 0;
>While[x > 0,
>digit = (FractionalPart[x /10])*10;
>sodv = sodv + digit;
>x = IntegerPart[x/10];
>];
>sodv = sOd[sodv]; (* check for multiple digit sum *)
>}
>]
>Print["sOd returns -", sodv]; (* remove this and function returns null*)
>Return[sodv]; (* return single digit sum *)
>]
Module returns the result of the last expression which is
Return[sodv];. This is a compound expression equivalent to
Return[sodv];Null which is why you get the Null. Change this to
Return[sodv] and things will behave as you expected.
Also, I note the code is much more complex than need by to
compute the sum of digits in an integer. The following code has
the same functionality as your code:
sOd[x_Integer] := FixedPoint[Total[IntegerDigits@#] &, x]