Re: Insulating data from code
- To: mathgroup at smc.vnet.net
- Subject: [mg66567] Re: Insulating data from code
- From: Bill Rowe <readnewsciv at earthlink.net>
- Date: Sat, 20 May 2006 04:47:28 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
On 5/17/06 at 3:29 AM, koopman at sfu.ca (Ray Koopman) wrote:
>>From time to time I've wanted to partition the first level of one
>list, say A, the same way that another list, say B, is partitioned.
>One way to do this is
>copyPartition[A_List, B_List] /; Length@A >= Length@Flatten@B :=
>Module[{i = 0}, Map[A[[++i]]&,B,{-1}]]
>But all the methods I've thought of have a pointer that functions
>something like i in the above code. I'd like to eliminate the
>pointer, because in the unlikely event that A contains an
>unevaluated symbol that is the same as the name of the pointer with
>$ appended -- e.g., i$, if the pointer is i -- then in the returned
>list that symbol will have a numeric value assigned to it. Unique[i]
>doesn't help. The only solution I see is the probabilistic one of
>giving the pointer a strange (random?) name that hopefully would be
>very unlikely to show up as data. But that would be giving up. Does
>anyone have any ideas?
Here is an alternative that has no explicit pointer and avoids the issue you mention
copyPartition[A_List, B_List] :=
((Take[A, #]) & /@ Transpose@{Most@#,
Rest@# - 1}) &[FoldList[Plus, 1, Length /@ B]]
--
To reply via email subtract one hundred and four