Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

Re: Re: Peculiar behaviour of Mathematica code

  • To: mathgroup at smc.vnet.net
  • Subject: [mg57983] Re: [mg57970] Re: Peculiar behaviour of Mathematica code
  • From: Andrzej Kozlowski <andrzej at akikoz.net>
  • Date: Wed, 15 Jun 2005 05:58:17 -0400 (EDT)
  • References: <d8jlau$srs$1@smc.vnet.net> <200506140910.FAA13608@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On 14 Jun 2005, at 18:10, Maxim wrote:

>
>
> It is strange that NextLexicographicSubset and NextGrayCodeSubset both
> break down on certain subsets and NextGrayCodeSubset is useless for
> incrementally generating the power set:
>
> In[1]:= <<discretemath`
>
> In[2]:= NextLexicographicSubset[{a, b, c}, {c}]
>
> Drop::drop: Cannot drop positions -2 through -1 in {c}.
>
> Drop::seqs: Sequence specification (+n, -n, {+n}, {-n}, {m, n}, or  
> {m, n,
> s}) expected at position 3 in Drop[{c}, -2, a].
>
> Out[2]= Drop[{c}, -2, a]
>
> In[3]:= NextGrayCodeSubset[{a, b, c}, {c}]
>
> Part::partw: Part 4 of {a, b, c} does not exist.
>
> Part::partw: Part 4 of {a, b, c} does not exist.
>
> Out[3]= {c, {a, b, c}[[4]]}
>
> Maxim Rytin
> m.r at inbox.ru
>
>


The code for NextLexicographicSubset in the Combinatorica package is:



NextLexicographicSubset[l_List,s_List]:=Module[{elem},If[Last[
     s]===Last[l],(elem=s[[Length[s]-1]];
         Append[
       Drop[s,-2],l[[Position[l,elem][[1,1]]+1]]]),Append[
             s,l[[Position[l,Last[s]][[1,1]]+1]]]]]


This is obviously going to break down when the list s consists just  
of the element Last[l].  The correct code should be:

NextLexicographicSubset[l_List, s_List] := Module[{elem}, If[
     Last[s] === Last[l], (elem = s[[Length[s] - 1]];
         If[Length[s] == 1, {}, Append[Drop[s, -2], l[[
       Position[l, elem][[1, 1]] + 1]]]]), Append[s, l[[Position[l,  
Last[s]][[
         1, 1]] + 1]]]]]

It seems strange that this bug has survived so long!
I assume the other cases are of the same kind although I have not  
checked this.

Andrzej Kozlowski

Chiba, Japan






  • Prev by Date: problem with InverseLaplaceTransform
  • Next by Date: Re: Write/WriteString -- writing delimited txt to a stream?
  • Previous by thread: Re: Peculiar behaviour of Mathematica code
  • Next by thread: Text Manipulation