Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: case of inconsistent API between Drop and Part?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127116] Re: case of inconsistent API between Drop and Part?
  • From: Murray Eisenberg <murray at math.umass.edu>
  • Date: Sun, 1 Jul 2012 02:07:50 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201206300917.FAA01642@smc.vnet.net>
  • Reply-to: murray at math.umass.edu

To drop just the mth and nth elements of a list is easy to do if m < n:

   Drop[lis, {m, n, n - m}]

That uses the form of Drop where the 2nd argument includes a step size 
as its 3rd entry.

To drop more than two non-consecutive elements would be a different 
matter, of course. For that you could use Delete. Thus the Drop 
expression above could be done as:

   Delete[lis, {{m}, {n}}]

The source of all the inconsistencies you indicate may be historical in 
part: Drop and Part were introduced in Mathematica version 1 (and 
subsequently modified); Delete only in version 2; Span (the double 
semicolon) only in Mathematica 6.

On 6/30/12 5:17 AM, Nasser M. Abbasi wrote:
> One thing I always liked about Mathematica's functions is
> that the API's of its functions all seem to be consistent
> (for the most part).
>
> Here is a case where it is not consistent though to share it.
>
> (I am trying to make a list of all such cases in my cheat sheet)
>
> It is between Drop and Part.
>
> Drop[list,{m,n}]  gives list with elements m THROUGH n dropped.
> Drop[list,m;;n]   gives list with elements m THROUGH n dropped.
>
> but
>
> Part[list,{m,n}]   gives the list of elements m AND n
> Part[list,m;;n]    gives the list of elements m THROUGH n
>
> Example using Drop:
> -----------------
> Clear[a,b,c,d,e];
> lis={a,b,c,d,e};
> Drop[lis,2;;4]
>
> Out[161]= {a,e}
>
> Drop[lis,{2,4}]
>
> Out[162]= {a,e}
> ----------------------
>
> Example using Part:
> ------------------
> Part[lis,2;;4]
>
> Out[163]= {b,c,d}
>
> Part[lis,{2,4}]
>
> Out[164]= {b,d}
> --------------------
>
> What the above also mean, is that using the Drop function,
> there is no direct way to tell it to Drop element 2 AND
> element 4 in one command.  (there are easy ways to do this,
> but not using one function call of Drop as is). (one easy
> solution is to complement the elements to drop, and use Part
> instead, and other ways)
>
> I do not know if the experts here agree that this is an
> inconsistency in the API between Drop and Part, but for me,
> (and I am no expert) it seems so.
>
> http://reference.wolfram.com/mathematica/ref/Part.html
> http://reference.wolfram.com/mathematica/ref/Drop.html
> --Nasser
>


-- 
Murray Eisenberg                     murray at math.umass.edu
Mathematics & Statistics Dept.
Lederle Graduate Research Tower      phone 413 549-1020 (H)
University of Massachusetts                413 545-2859 (W)
710 North Pleasant Street            fax   413 545-1801
Amherst, MA 01003-9305



  • Prev by Date: Re: Book
  • Next by Date: Re: Approximate Zero Times A Symbol
  • Previous by thread: Re: case of inconsistent API between Drop and Part?
  • Next by thread: Re: case of inconsistent API between Drop and Part?