From: Pankaj S. <pan...@gm...> - 2014-07-21 13:06:48
|
Hi, Using Barton's suggestion I fixed it as, ex(ll,x,f):=apply(substinpart,cons(apply(f,piece),cons(ll,x)))$ ex(ll,[3,3,4],fun) => [2,3,[a,b,[t,y,[u,i],fun(o,p),6,7]],8,8] With this now one can get functionality similar to Mathematica's "MapAt" feature. I am thankful to provided suggestions and help. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Jul 21, 2014 at 4:59 PM, Barton Willis <wi...@un...> wrote: > Try using either inpart or substinpart; example > > (%i12) substinpart(apply(f,piece), ll, 3,3,3); > (%o12) [2,3,[a,b,[t,y,f(u,i),[o,p],6,7]],8,8] > > --bw > > ________________________________________ > > I want to access list elements based on their position but I don't > intend to extract the elements out of list but instead keep my curosr > there to apply some function on it, say, > > ll:[2,3,[a,b,[t,y,[u,i],[o,p],6,7]],8,8] > > I can reachout to various elements using, > > a) Using substitution, > subst(apply(f,ll[3][3][3]),ll[3][3][3],ll) > > b) Or using positions directly as, > ll[3][3][4]:apply(f,ll[3][3][4]); > > Showing the combined result of above two expressions, > ll now, [2,3,[a,b,[t,y,f(u,i),f(o,p),6,7]],8,8] > > I want to create a function say, > map_at_position(ll,[3,3,4],f) that shall give me > [2,3,[a,b,[t,y,[u,i],f(o,p),6,7]],8,8] > > Function definition needs to be like, > > > map_at_position(ll,a,f):=block([],ll[a1][a2]a[3]...[an]:apply(f,ll[a1],[a2],[a3]...[an]),ll) > where a = [a1,a2,a3...an] representing the positions > > I am not able to figure out how to convert [3,3,3] to ll[3][3][3] kind > of expression. I mean there can't be consed/joined/appended etc > without comma. > > -- > -- Regards, Pankaj Sejwal _______________________________________________ "The more I read, the more I acquire, the more certain I am that I know nothing.” - Voltaire <http://www.goodreads.com/author/show/5754446.Voltaire> |