       Re: Piecewise inside a Module or Block, I don't understand this behavior.

• To: mathgroup at smc.vnet.net
• Subject: [mg83284] Re: Piecewise inside a Module or Block, I don't understand this behavior.
• From: Szabolcs Horvát <szhorvat at gmail.com>
• Date: Sat, 17 Nov 2007 05:09:04 -0500 (EST)
• References: <fhjs9v\$4vg\$1@smc.vnet.net>

```W. Craig Carter wrote:
> Hello,
>
> I have a Piecewise function calculated in a module:
> Here is a simplifed example of something which has a
> behavior that puzzles me.
>
> a[c_, d_] :=
>   Module[{e, f}, e = d^2; f = c^2;
>    Return[Piecewise[{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}]]];
> a[1,2] (*doen't return what I had anticipated*)

You did not explain what kind of behaviour you expected ... I do not see
anything wrong with the *behaviour* of this example.  But I would like
to note that Piecewise is used incorrectly (it should be Piecewise[{{e,
0 < x < 1/2}, {f, 1/2 < x <= 1}}]), 'x' is not defined, Return[] is not
needed at the end of Module[], and ';' is not needed at the end of a :=
definition.

This is what I get:

In:=
a[c_, d_] := Module[{e, f}, e = d^2; f = c^2;
Return[Piecewise[{e, 0 < x < 1/2}, {f, Inequality[1/2, Less, x,
LessEqual, 1]}]]];
a[1, 2] (* original *)

During evaluation of In:= Piecewise::pairs:The first argument
{4,0<x<1/2} of Piecewise is not a list of pairs. >>

Out= Piecewise[{e\$65, 0 < x < 1/2}, {f\$65, Inequality[1/2, Less, x,
LessEqual, 1]}]

In:=
a[c_, d_] := Module[{e, f}, e = d^2; f = c^2;
Piecewise[{{e, 0 < x < 1/2}, {f, Inequality[1/2, Less, x,
LessEqual, 1]}}]]
a[1, 2] (* corrected version *)

Out= Piecewise[{{4, 0 < x < 1/2}, {1, Inequality[1/2, Less, x,
LessEqual,
1]}}]

In:=
x = 0.3;
a[c_, d_] := Module[{e, f}, e = d^2; f = c^2;
Piecewise[{{e, 0 < x < 1/2}, {f, Inequality[1/2, Less, x,
LessEqual, 1]}}]]
a[1, 2] (* 'x' is defined *)

Out= 4

(Sorry about the ugly InpuForm ... just paste it into Mathematic and
press CTRL-SHIFT-N to convert the inequalities to a more readable form.)

Szabolcs

> (*However this does*)
> a[c_, d_] :=
> Module[{e, f}, e = d^2; f = c^2;
> Return[Piecewise[{d^2, 0 < x < 1/2}, {c^2, 1/2 < x <= 1}]]];
> a[1,2]
>
> (*The same goes for Block, and putting an explicit Evaluate
> inside the local function*)
>
> (*This behavior seems to be unique to Piecewise*)
> a[c_, d_] :=
> Module[{e, f}, e = d^2; f = c^2;
> Return[MyFunction[{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}]]];
> a[1,2]
>
> I can't find anything about Piecewise, or in Module and
> Block documentation that gives me a hint.
>
> Anyone know what is going on?
>
> Thanks, Craig
>
> PS: I have a work-around:
>
> aAlt[c_, d_] :=
> Module[{e, f}, e = d^2; f = c^2;
> {{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}}];
> Piecewise@aAlt[1,2]
>
> but, I am still curious....
>

```

• Prev by Date: Creating a Slideshow with Mathematica6!
• Next by Date: data structures in Mathematica
• Previous by thread: Piecewise inside a Module or Block, I don't understand this behavior.
• Next by thread: Re: Piecewise inside a Module or Block, I don't understand this behavior.