destructDo:

14 views
Skip to first unread message

Christian Haider

unread,
Mar 28, 2020, 8:42:33 AM3/28/20
to vw...@cs.uiuc.edu, esug...@lists.esug.org, amber...@googlegroups.com

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

 

Giovanni Corriga

unread,
Mar 28, 2020, 9:35:25 AM3/28/20
to Norbert Hartl, Mark Plas, vw...@cs.uiuc.edu, esug...@lists.esug.org, amber...@googlegroups.com
How about #consume: ?

Il giorno sab 28 mar 2020 alle ore 13:20 Norbert Hartl <nor...@hartl.name> ha scritto:
I think the name destructDo: comes from destructuring assignment. 


Norbert

Am 28.03.2020 um 14:15 schrieb Mark Plas <mark...@mediagenix.tv>:

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...@mediagenix.tv

 

<logomgxnew_3d44337b-2535-4d6a-9f5f-3fdd565513ca.png>

 

Nieuwe Gentsesteenweg 21/1

1702 Groot-Bijgaarden - Belgium

 <linkedin_75b9c4f1-6a2b-497c-aab8-df56fe16b8e3.png> <twitter_de4c3300-c6ab-4898-a962-b33ff662a322.png><Facebook-icon_6bef7545-f54e-4548-bfc4-1f07407f2642.png>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.

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

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

Christian Haider

unread,
Mar 28, 2020, 10:23:07 AM3/28/20
to Norbert Hartl, Mark Plas, vw...@cs.uiuc.edu, esug...@lists.esug.org, amber...@googlegroups.com

I chose the name because of the old Lisp “destructuring-bind”. But this is more powerful, because it does tree matching. This is just shallow.

I am not sure where the concept was invented first. It may have been Lisp.

 

 

Von: Norbert Hartl <nor...@hartl.name>
Gesendet: Samstag, 28. März 2020 14:20
An: Mark Plas <mark...@mediagenix.tv>
Cc: Christian Haider <christia...@smalltalked-visuals.com>; vw...@cs.uiuc.edu; esug...@lists.esug.org; amber...@googlegroups.com
Betreff: Re: [Esug-list] destructDo:

 

I think the name destructDo: comes from destructuring assignment. 

 

 

Norbert



Am 28.03.2020 um 14:15 schrieb Mark Plas <mark...@mediagenix.tv>:

 

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...@mediagenix.tv

 

<logomgxnew_3d44337b-2535-4d6a-9f5f-3fdd565513ca.png>

 

Nieuwe Gentsesteenweg 21/1

1702 Groot-Bijgaarden - Belgium

 <linkedin_75b9c4f1-6a2b-497c-aab8-df56fe16b8e3.png> <twitter_de4c3300-c6ab-4898-a962-b33ff662a322.png><Facebook-icon_6bef7545-f54e-4548-bfc4-1f07407f2642.png>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-lis...@lists.esug.org> On Behalf Of Christian Haider
Sent: zaterdag 28 maart 2020 13:43
To: vw...@cs.uiuc.edu; esug...@lists.esug.org; amber...@googlegroups.com
Subject: [Esug-list] destructDo:

 

Hi,

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

 

Johannes Brauer

unread,
Mar 28, 2020, 6:23:52 PM3/28/20
to Christian Haider, Norbert Hartl, Mark Plas, vw...@cs.uiuc.edu, esug...@lists.esug.org, amber...@googlegroups.com
Hello Christian,

the hint to Lisp is obvious. In Clojure (a modern Lisp-Dialect) destructuring (https://clojure.org/guides/destructuring) is used a lot.

Johannes

Dave Mason

unread,
Mar 29, 2020, 1:17:14 PM3/29/20
to amber-lang, Christian Haider, Norbert Hartl, Mark Plas, vw...@cs.uiuc.edu, esug...@lists.esug.org
I'd just call it `destructure:` it's not really doing a `do`

../Dave


--
You received this message because you are subscribed to the Google Groups "amber-lang" group.
To unsubscribe from this group and stop receiving emails from it, send an email to amber-lang+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/amber-lang/947D670F-0596-47FD-8BF0-49539986667B%40nordakademie.de.

Herby

unread,
Mar 30, 2020, 6:59:45 AM3/30/20
to amber-lang
Hi!

As #in: feeds single argument, maybe #allIn: ?

Herby
Reply all
Reply to author
Forward
0 new messages