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