[squeak-dev] Smalltalk idiom

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[squeak-dev] Smalltalk idiom

Jerome Peace

Hi Ramiro,


>Ramiro Diaz Trepat ramiro at diaztrepat.name
>Wed May 20 08:01:11 UTC 2009 asks:
>
>I have a simple question regarding the use of a proper idiom.I had to create
>a matrix (n X m) of random values and I used a line similar to this one:
>
>NMatrix withRows: ((1 to: n) collect: [ :i | random next: m ]).
>
>Since Smalltalk is so neat for its collection handling, I obviously did not
>like to write that line.
>I thought that I did not want to explicitly create the interval, nor use a
>block that requires an
>argument that I also don't use.
>The question, finally, is if there an elegant way of replicating the
>behaviour of #collect: but
>without the argument?
>In my case, I thought it would be great for Integer to have something like
>#timesCollect:
>that would allow me to rewrite the line above as:
>
>NMatrix withRows: (n timesCollect: [ random next: m ])
>
>Does anyone else think that this would be an useful method to have?

In a workspace evaluate:

picker := Random new .

(Matrix rows: 2 columns: 3 ) collect: [ :each | picker next ] .

result:

 a Matrix
(0.2668126189461036 0.319686627164337 0.973142751014392
 0.610216298890401 0.905335450966533 0.97292439452043)

You may wish to study the Matrix class and see what else it can do.
The class is a recent contribution by someone who had a need for it.

Hth,

Yours in curiosity and service, --Jerome Peace


     

Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Smalltalk idiom

Ramiro Diaz Trepat-2
Hi Jerome,
Igor also replied with comments regarding the proper use of matrices, so I know now that I must have not been clear in my original mail.   Apologies for that.
I was not interested in discussing the Matrix protocol, but weather or not did people consider it useful to add a method that provides the same functionality as #collect: but without the argument, basically as a method called #timesCollect: of the Integer class, much in the same fashion as #timesRepeat:
With this method one could write code that produces the same result as:

(1 to: n) collect: [ :i | random next: m ]

as

n timesCollect: [ random next: m ]

which does not force the user to visibly create the Interval nor to use a one argument block when the argument is not needed.

My intention, hence, was only to ask if people would consider it a nice to have method on the Integer class, as a sibling of #timesRepeat:

Cheers



On Thu, May 21, 2009 at 1:11 AM, Jerome Peace <[hidden email]> wrote:

Hi Ramiro,


>Ramiro Diaz Trepat ramiro at diaztrepat.name
>Wed May 20 08:01:11 UTC 2009 asks:
>
>I have a simple question regarding the use of a proper idiom.I had to create
>a matrix (n X m) of random values and I used a line similar to this one:
>
>NMatrix withRows: ((1 to: n) collect: [ :i | random next: m ]).
>
>Since Smalltalk is so neat for its collection handling, I obviously did not
>like to write that line.
>I thought that I did not want to explicitly create the interval, nor use a
>block that requires an
>argument that I also don't use.
>The question, finally, is if there an elegant way of replicating the
>behaviour of #collect: but
>without the argument?
>In my case, I thought it would be great for Integer to have something like
>#timesCollect:
>that would allow me to rewrite the line above as:
>
>NMatrix withRows: (n timesCollect: [ random next: m ])
>
>Does anyone else think that this would be an useful method to have?

In a workspace evaluate:

picker := Random new .

(Matrix rows: 2 columns: 3 ) collect: [ :each | picker next ] .

result:

 a Matrix
(0.2668126189461036 0.319686627164337 0.973142751014392
 0.610216298890401 0.905335450966533 0.97292439452043)

You may wish to study the Matrix class and see what else it can do.
The class is a recent contribution by someone who had a need for it.

Hth,

Yours in curiosity and service, --Jerome Peace







Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Smalltalk idiom

Nicolas Cellier
I think it would be more usefull to have some generator behaving like Stream.
In this particular case, Random is already anamorphic to a Stream:

Matrix row: 2 column: 5 contents: (Random new next: 10).

Nicolas

2009/5/21 Ramiro Diaz Trepat <[hidden email]>:

> Hi Jerome,
> Igor also replied with comments regarding the proper use of matrices, so I
> know now that I must have not been clear in my original mail.   Apologies
> for that.
> I was not interested in discussing the Matrix protocol, but weather or not
> did people consider it useful to add a method that provides the same
> functionality as #collect: but without the argument, basically as a method
> called #timesCollect: of the Integer class, much in the same fashion as
> #timesRepeat:
> With this method one could write code that produces the same result as:
> (1 to: n) collect: [ :i | random next: m ]
> as
> n timesCollect: [ random next: m ]
> which does not force the user to visibly create the Interval nor to use a
> one argument block when the argument is not needed.
> My intention, hence, was only to ask if people would consider it a nice to
> have method on the Integer class, as a sibling of #timesRepeat:
> Cheers
>
>
> On Thu, May 21, 2009 at 1:11 AM, Jerome Peace <[hidden email]>
> wrote:
>>
>> Hi Ramiro,
>>
>>
>> >Ramiro Diaz Trepat ramiro at diaztrepat.name
>> >Wed May 20 08:01:11 UTC 2009 asks:
>> >
>> >I have a simple question regarding the use of a proper idiom.I had to
>> > create
>> >a matrix (n X m) of random values and I used a line similar to this one:
>> >
>> >NMatrix withRows: ((1 to: n) collect: [ :i | random next: m ]).
>> >
>> >Since Smalltalk is so neat for its collection handling, I obviously did
>> > not
>> >like to write that line.
>> >I thought that I did not want to explicitly create the interval, nor use
>> > a
>> >block that requires an
>> >argument that I also don't use.
>> >The question, finally, is if there an elegant way of replicating the
>> >behaviour of #collect: but
>> >without the argument?
>> >In my case, I thought it would be great for Integer to have something
>> > like
>> >#timesCollect:
>> >that would allow me to rewrite the line above as:
>> >
>> >NMatrix withRows: (n timesCollect: [ random next: m ])
>> >
>> >Does anyone else think that this would be an useful method to have?
>>
>> In a workspace evaluate:
>>
>> picker := Random new .
>>
>> (Matrix rows: 2 columns: 3 ) collect: [ :each | picker next ] .
>>
>> result:
>>
>>  a Matrix
>> (0.2668126189461036 0.319686627164337 0.973142751014392
>>  0.610216298890401 0.905335450966533 0.97292439452043)
>>
>> You may wish to study the Matrix class and see what else it can do.
>> The class is a recent contribution by someone who had a need for it.
>>
>> Hth,
>>
>> Yours in curiosity and service, --Jerome Peace
>>
>>
>>
>>
>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Smalltalk idiom

Nicolas Cellier
Ah, some s missing!
If only I could evaluate it from gmail!

Matrix rows: 2 columns: 5 contents: (Random new next: 10).

2009/5/21 Nicolas Cellier <[hidden email]>:

> I think it would be more usefull to have some generator behaving like Stream.
> In this particular case, Random is already anamorphic to a Stream:
>
> Matrix row: 2 column: 5 contents: (Random new next: 10).
>
> Nicolas
>
> 2009/5/21 Ramiro Diaz Trepat <[hidden email]>:
>> Hi Jerome,
>> Igor also replied with comments regarding the proper use of matrices, so I
>> know now that I must have not been clear in my original mail.   Apologies
>> for that.
>> I was not interested in discussing the Matrix protocol, but weather or not
>> did people consider it useful to add a method that provides the same
>> functionality as #collect: but without the argument, basically as a method
>> called #timesCollect: of the Integer class, much in the same fashion as
>> #timesRepeat:
>> With this method one could write code that produces the same result as:
>> (1 to: n) collect: [ :i | random next: m ]
>> as
>> n timesCollect: [ random next: m ]
>> which does not force the user to visibly create the Interval nor to use a
>> one argument block when the argument is not needed.
>> My intention, hence, was only to ask if people would consider it a nice to
>> have method on the Integer class, as a sibling of #timesRepeat:
>> Cheers
>>
>>
>> On Thu, May 21, 2009 at 1:11 AM, Jerome Peace <[hidden email]>
>> wrote:
>>>
>>> Hi Ramiro,
>>>
>>>
>>> >Ramiro Diaz Trepat ramiro at diaztrepat.name
>>> >Wed May 20 08:01:11 UTC 2009 asks:
>>> >
>>> >I have a simple question regarding the use of a proper idiom.I had to
>>> > create
>>> >a matrix (n X m) of random values and I used a line similar to this one:
>>> >
>>> >NMatrix withRows: ((1 to: n) collect: [ :i | random next: m ]).
>>> >
>>> >Since Smalltalk is so neat for its collection handling, I obviously did
>>> > not
>>> >like to write that line.
>>> >I thought that I did not want to explicitly create the interval, nor use
>>> > a
>>> >block that requires an
>>> >argument that I also don't use.
>>> >The question, finally, is if there an elegant way of replicating the
>>> >behaviour of #collect: but
>>> >without the argument?
>>> >In my case, I thought it would be great for Integer to have something
>>> > like
>>> >#timesCollect:
>>> >that would allow me to rewrite the line above as:
>>> >
>>> >NMatrix withRows: (n timesCollect: [ random next: m ])
>>> >
>>> >Does anyone else think that this would be an useful method to have?
>>>
>>> In a workspace evaluate:
>>>
>>> picker := Random new .
>>>
>>> (Matrix rows: 2 columns: 3 ) collect: [ :each | picker next ] .
>>>
>>> result:
>>>
>>>  a Matrix
>>> (0.2668126189461036 0.319686627164337 0.973142751014392
>>>  0.610216298890401 0.905335450966533 0.97292439452043)
>>>
>>> You may wish to study the Matrix class and see what else it can do.
>>> The class is a recent contribution by someone who had a need for it.
>>>
>>> Hth,
>>>
>>> Yours in curiosity and service, --Jerome Peace
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Smalltalk idiom

Mariano Martinez Peck


On Thu, May 21, 2009 at 7:40 AM, Nicolas Cellier <[hidden email]> wrote:
Ah, some s missing!
If only I could evaluate it from gmail!

I could be easy to create a gtalk bot than can receive smalltalk code and evaluates hahaha
 


Matrix rows: 2 columns: 5 contents: (Random new next: 10).

2009/5/21 Nicolas Cellier <[hidden email]>:
> I think it would be more usefull to have some generator behaving like Stream.
> In this particular case, Random is already anamorphic to a Stream:
>
> Matrix row: 2 column: 5 contents: (Random new next: 10).
>
> Nicolas
>
> 2009/5/21 Ramiro Diaz Trepat <[hidden email]>:
>> Hi Jerome,
>> Igor also replied with comments regarding the proper use of matrices, so I
>> know now that I must have not been clear in my original mail.   Apologies
>> for that.
>> I was not interested in discussing the Matrix protocol, but weather or not
>> did people consider it useful to add a method that provides the same
>> functionality as #collect: but without the argument, basically as a method
>> called #timesCollect: of the Integer class, much in the same fashion as
>> #timesRepeat:
>> With this method one could write code that produces the same result as:
>> (1 to: n) collect: [ :i | random next: m ]
>> as
>> n timesCollect: [ random next: m ]
>> which does not force the user to visibly create the Interval nor to use a
>> one argument block when the argument is not needed.
>> My intention, hence, was only to ask if people would consider it a nice to
>> have method on the Integer class, as a sibling of #timesRepeat:
>> Cheers
>>
>>
>> On Thu, May 21, 2009 at 1:11 AM, Jerome Peace <[hidden email]>
>> wrote:
>>>
>>> Hi Ramiro,
>>>
>>>
>>> >Ramiro Diaz Trepat ramiro at diaztrepat.name
>>> >Wed May 20 08:01:11 UTC 2009 asks:
>>> >
>>> >I have a simple question regarding the use of a proper idiom.I had to
>>> > create
>>> >a matrix (n X m) of random values and I used a line similar to this one:
>>> >
>>> >NMatrix withRows: ((1 to: n) collect: [ :i | random next: m ]).
>>> >
>>> >Since Smalltalk is so neat for its collection handling, I obviously did
>>> > not
>>> >like to write that line.
>>> >I thought that I did not want to explicitly create the interval, nor use
>>> > a
>>> >block that requires an
>>> >argument that I also don't use.
>>> >The question, finally, is if there an elegant way of replicating the
>>> >behaviour of #collect: but
>>> >without the argument?
>>> >In my case, I thought it would be great for Integer to have something
>>> > like
>>> >#timesCollect:
>>> >that would allow me to rewrite the line above as:
>>> >
>>> >NMatrix withRows: (n timesCollect: [ random next: m ])
>>> >
>>> >Does anyone else think that this would be an useful method to have?
>>>
>>> In a workspace evaluate:
>>>
>>> picker := Random new .
>>>
>>> (Matrix rows: 2 columns: 3 ) collect: [ :each | picker next ] .
>>>
>>> result:
>>>
>>>  a Matrix
>>> (0.2668126189461036 0.319686627164337 0.973142751014392
>>>  0.610216298890401 0.905335450966533 0.97292439452043)
>>>
>>> You may wish to study the Matrix class and see what else it can do.
>>> The class is a recent contribution by someone who had a need for it.
>>>
>>> Hth,
>>>
>>> Yours in curiosity and service, --Jerome Peace
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>>
>