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

MathGroup Archive 2007

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

Search the Archive

Re: a beginner's question

  • To: mathgroup at smc.vnet.net
  • Subject: [mg77795] Re: a beginner's question
  • From: Bill Rowe <readnewsciv at sbcglobal.net>
  • Date: Sun, 17 Jun 2007 06:00:16 -0400 (EDT)

On 6/16/07 at 3:31 AM, tunganhtr at yahoo.fr (tung tran) wrote:

>I am a beginner in Mathematica and in programming. I read the book
>"An Introduction to Programming with Mathematica". Page 155:

>FindSubsequence[lis_List, subseq_List] := Module[{p}, p =
>Partition[lis, Length[subseq], 1]; Position[p, Flatten[{___,
>subseq, ___}]]]

>I want to know more about the role of Module function and " ; "  in
>these lines. I have read documentation about Module function but it
>doesn't help me much in understanding this line of code. Thanks for
>helping me !

Module is being used to declare a local variable, p that is gets
assigned the result from Partition. The ; is used to create a
compound expression. It effectively terminates one statement
before beginning another. If the code were written

=46indSubsequence[lis_List, subseq_List] :=
   Module[{p},
     p = Partition[lis, Length[subseq], 1]
     Position[p, Flatten[{___, subseq, ___}]]]

that is omitting the ; Mathematica would attempt to multiply
Partition[...] by Position[...] which is clearly not meaningful.
Note, this would actually generate a recursion error since p
would appear on both sides of the "=".

Other ways to write this function would be to define p at the
same time it is declared, i.e.,


=46indSubsequence[lis_List, subseq_List] :=
   Module[{p = Partition[lis, Length[subseq], 1]},
     Position[p, Flatten[{___, subseq, ___}]]]

which eliminates the need for the ;

or you could dispense with Module altogether by writing this
function as:

=46indSubsequence[lis_List, subseq_List] :=
     Position[Partition[lis, Length[subseq], 1], Flatten[{___,
subseq, ___}]]

Although functionally these are all the same, their readability
is not the same and likely the ease of maintaining the code at
some later time will be different
--
To reply via email subtract one hundred and four


  • Prev by Date: is there a better way to iterate this?
  • Next by Date: more gripe about the new documentation center (DC) in Mathematica 6
  • Previous by thread: Re: a beginner's question
  • Next by thread: Re: a beginner's question