Re: Function Works in Notebook NOT Package
- To: mathgroup at smc.vnet.net
- Subject: [mg86565] Re: Function Works in Notebook NOT Package
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Thu, 13 Mar 2008 20:52:59 -0500 (EST)
- Organization: University of Bergen
- References: <fras5u$19s$1@smc.vnet.net>
What do you mean when you say "it does not work"? If you at least
provided a sample input, and explained what kind of output you were
expecting, then you would spare us the trouble of having to read a long
and uncommented piece of code full misused ToStrings.
I get the same output for random 2D matrices, no matter if I define the
function in the front end or load it from a package.
But I wouldn't be surprised if that MakeExpression caused trouble.
Strings are converted to expressions with ToExpression, not MakeExpression.
Andrew Beveridge wrote:
> Any help would be appreciated.
>
> I am using Mathematica 5.2.
>
> I wrote a function that compares rows in a 2D array. If the
> individual values of the rows are within some tolerance, for example
> 15%, it is considered a match.
Within 15% tolerance of what? What does the function return? Please
provide an exact description of the problem.
>
> Since I do not know many elements will be in each row, I had to write
> a conditional for any value of elements. There is probably a better
> way of doing this, any suggestions welcomed.
>
> Anyway the following function works fine IF I evaluate it in a
> Notebook. When I try to place it in a package file it does not work.
> It appears the replacement rules are not working.
>
> Why does not it work in the package file?
>
> Function:
>
> PreliminaryAlignment[x_List, percentTolerance_] :=
> Module[ {ListLength,numLength, correctForm,numData,
> blankTable,lowerLimit, upperLimit, conditionalTable,stringConditional},
>
> correctForm =SameQ@@(Length/@x);
> numData = Rest/@x;
> ListLength=Length/@numData;
> numLength = First[ListLength];
> lowerLimit = ToString[ 1 - percentTolerance];
> upperLimit = ToString[1 + percentTolerance];
>
> If[correctForm=== False, Return[$Failed],
>
> blankTable = "z:Table[_, {"<>ToString[numLength]<>"}]";
> conditionalTable =
> Table["LessEqual[Times["<>lowerLimit<>",Part[kkk, j, " <> ToString[i] <>
> "]], Part[z," <> ToString[
> i] <> "], Times["<>upperLimit<>", Part[kkk, j, "<>ToString[i]<>"]]]
> " , {i,1,numLength}] ;
>
> stringConditional =
> MakeExpression[ blankTable <> "/; And[" <> \
> StringReplace[ToString[conditionalTable]<> "]", {"{"\[Rule] " ",
> "}"\[Rule] ""} ] ] ;
>
> Union[ Table[Flatten[
> Position[numData, ReleaseHold[
> stringConditional/.{kkk\[Rule] numData,j\[Rule]l} ] ] ],{l,1,
> Length[numData]} ] ]
>
> ]
>
> ]
>
>
>
> Andrew C Beveridge
> MS M888
> Los Alamos National Laboratory
> Los Alamos, NM 87545
>
> 505-665-2092
> e-mail: acbev at lanl.gov