Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

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


  • Prev by Date: Re: Re: Re: Update 6.0.2
  • Next by Date: Strange font problem
  • Previous by thread: Function Works in Notebook NOT Package
  • Next by thread: Mouth position with the GraphicsRow