(somehow, I didn���t get Martins mail)

 

Yes, Martin, I agree with the misleading xDo: connotation. Thanks for your nice deconstruction of what I wanted J.

 

Cyril suggests #bind:, which does not feel fully right.

How about #boundTo: ? �������������������������� #(1 2 3) boundTo: [:a :b :c | ���]

 

Happy hacking,

������������������������������ Christian

 

 

Von: Esug-list <esug-list-bounces@lists.esug.org> Im Auftrag von Fabio Niephaus
Gesendet: Samstag, 28. M��rz 2020 17:04
An: esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:

 

 

 

On Sat, 28 Mar 2020 at 5:00 pm, Norm Green <norm.green@gemtalksystems.com> wrote:

I agree with Martin. The default connotation of 'destruct' in English is to destroy.  I would suggest either #destructuredDo: or #tuppleDo: to avoid confusion.

 

I agree. How about this:

 

#(1 2 3 4) feedInto: [:a :b: | a + b]

 

Cheers,

Fabio

 



Norm

On 3/28/2020 8:13 AM, Martin McClure wrote:

Hi Christian and all,

#destructDo: is probably not the best name. "Destruct" can be interpreted as either short for "destructured" (which is what you want) or more like "destroy" as in "self-destruct." I initially took "destruct" in the "destroy" sense and guessed that #destructDo: might remove each element from the collection as it iterated. You could lengthen it to #destructured: or #destructuredDo:, but if there's a good short name that would be better.

#tupleDo: feels better.

But both #tupleDo: and #destructDo: contain "do" which implies iteration. Unless I'm missing something, your #destructDo: does not iterate. I'd really expect a #tupleDo: to iterate -- I'd expect with

#(1 2 3 4) tupleDo: [:a :b: | a + b]

that the block would be evaluated twice, once with 1 and 2 and once with 3 and 4. This would be a nice pattern; you could also have a tupleCollect: a tupleDetect: and so on.

#mapTo: is quite similar to #map: in PetitParser, except IIRC PetitParser's #map: expects an exact match in argument count. But maybe #map: is a good name for consistency.

Hope this helps.

Regards,
-Martin

On 3/28/20 7:24 AM, Christian Haider wrote:

Yes, that would be nice. Unfortunately a bit more involved than this 1-liner���

 

Von: Esug-list <esug-list-bounces@lists.esug.org> Im Auftrag von Christophe Dony
Gesendet: Samstag, 28. M��rz 2020 15:17
An: esug-list@lists.esug.org
Betreff: Re: [Esug-list] destructDo:

 

Hi.
I like tupleDo:

or matchDo:

and what about installing a full pattern matching, as in many languages e.g. Scheme : https://docs.racket-lang.org/reference/match.html

#(1 #(2 3 6 7) 4) matchDo: [:a (:b :@c) :d] | ���]
here c would be #(3 6 7)

may be it already exist?
if not, would really be a +

Christophe



Le 28/03/2020 �� 14:15, Mark Plas a ��crit :

Hello Christian,

 

" I don���t really like the name,"

 

Maybe you could call it #tupleDo:?

 

                #(1 2 3) tupleDo: [:a :b :c | ���]

 

Mark

 

 

Mark Plas

Software Engineer

T +32 2 467 34 30

mark.plas@mediagenix.tv

 

 

Nieuwe Gentsesteenweg 21/1

1702 Groot-Bijgaarden - Belgium

  www.mediagenix.tv

Directions to MEDIAGENIX

 

This e-mail and any files attached to it are confidential and intended only for the use of the individuals or entity to whom they are addressed. If you have received this e-mail in error, please notify the sender immediately.

From: Esug-list <esug-list-bounces@lists.esug.org> On Behalf Of Christian Haider
Sent: zaterdag 28 maart 2020 13:43
To: vwnc@cs.uiuc.edu; esug-list@lists.esug.org; amber-lang@googlegroups.com
Subject: [Esug-list] destructDo:

 

Hi,

 

I am using a nice little method #destructDo: for a while now and it feels good.

In VisualWorks:

SequenceableCollection>>destructDo: aBlock

                                "Evaluate aBlock with the receiver's elements as parameters.

                                aBlock takes its arguments from the receiver.

                                'ok'

                                #(1 2 3) destructDo: [:a :b :c | a + b + c]

                                #(1 2 3) destructDo: [:a :b | a + b]

                                #(1 2 3) destructDo: [:a | a]

                                #(1 2 3) destructDo: [42]

                                'not ok'

                                #(1 2 3) destructDo: [:a :b :c :d | a + b + c + d]

                                "

                                ^aBlock cullWithArguments: self asArray

 

In Amber:

SequenceableCollection>>destructDo: aBlock

                                ^aBlock valueWithPossibleArguments: self

 

In Pharo and other dialects, I don���t know, but should be as easy.

 

For example you can do

                (('2020-03-28' tokensBasedOn: $-) collect: #asNumber) destructDo: [:year :month :day |

                               Date newDay: day monthNumber: month year: year]

 

I like that the block is not the receiver (like with #valueWithArguments or #cullWithArguments), but the last argument.

 

Now the questions:

  • I am sure that others came up with this. Anybody knows?
  • What are you using for this pattern?
  • I don���t really like the name, but haven���t found anything better yet. Maybe #destructedDo: or just #destructed: or: #withPartsDo:��� maybe something shorter? Ideas?
  • What are you thinking about this?

 

Happy hacking,

                Christian

 



_______________________________________________
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org

 

 

_______________________________________________
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org

 

_______________________________________________
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org

 

_______________________________________________
Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org