Re: problems with delayed write: tag list
- To: mathgroup at smc.vnet.net
- Subject: [mg79901] Re: problems with delayed write: tag list
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 8 Aug 2007 04:54:10 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <f991i3$c99$1@smc.vnet.net>
P_ter wrote: > Hello, > I have a list of elements of two numbers:myList = {{1,2},{2,7},..}. The first number is in this case always the position. I want to know when the difference is a certain value,myDiff, eg. 5 > i=1;myDiff==5; ------------^^ Error: must be a single equal sign = to make an assignment; otherwise it is a logical comparison returning True or False. > now= Reap[While[i<Length[myList],i++; > If[myList[[i,2]]-myList[[i,1]]==myDiff,Sow[i]]];w] ---------------------------------------------------------^ Q: What is w? Below, I shall assume that it is the current element, so that you wanted something like a lit of {position, pair}. > My question is: how do I make "nowFunction[myDiff_]:="? > I run into tag list errors in the definition when I try that. In[1]:= myList = {{1, 2}, {2, 7}, {3, 5}, {4, 9}}; Clear[nowFun] nowFun[lst_List, delta_Integer] := Module[{i = 0, len = Length@lst}, Flatten[Reap[ While[i++ < len, If[lst[[i, 2]] - lst[[i, 1]] == delta, Sow[{i, lst[[i, All]]}] ] ] ][[2]], 1] ] nowFun[myList, 5] Out[4]= {{2, {2, 7}}, {4, {4, 9}}} Note that it might be worth investigating some others more efficient, less error-prone approaches (depending, of course, of your real needs) such as In[5]:= myDiff = 5 Select[myList, #[[2]] - #[[1]] == myDiff &] Cases[myList, x_ /; x[[2]] - x[[1]] == myDiff] Cases[myList, {x_, y_} /; y - x == myDiff] Position[myList, {x_, y_} /; y - x == myDiff] Out[5]= 5 Out[6]= {{2, 7}, {4, 9}} Out[7]= {{2, 7}, {4, 9}} Out[8]= {{2, 7}, {4, 9}} Out[9]= {{2}, {4}} Regards, Jean-Marc