# toy list processing problem: collect similar terms

41 views

### Xah Lee

Sep 26, 2010, 12:05:13 AM9/26/10
to
here's a interesting toy list processing problem.

I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing
the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
r) (5 s t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

a Mathematica solution is here:
http://xahlee.org/UnixResource_dir/writ/notations_mma.html

R5RS Scheme lisp solution:
http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
by Sourav Mukherjee

also, a Common Lisp solution can be found here:

anyone care to give a solution in Python, Perl, javascript, or other
lang? am guessing the scheme solution can be much improved... perhaps
using some lib but that seems to show scheme is pretty weak if the lib
is non-standard.

Xah ∑ xahlee.org

### Alexander Burger

Sep 26, 2010, 1:29:20 AM9/26/10
to
In PicoLisp:

(mapcar
'((X) (apply conc (cdr X)))
(group List) )

Cheers,
- Alex

### livibetter

Sep 26, 2010, 3:47:23 AM9/26/10
to
Here is mine for Python:

l = [[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q', 'r'],
[5, 's', 't']]
d = {}
for idx, items in [(e[0], e[1:]) for e in l]: d[idx] = d[idx] + items
if idx in d else items
print d.values()

Output:
[['a', 'b'], ['c', 'd', 'i', 'j'], ['e', 'f', 'k', 'l', 'o', 'p'],
['g', 'h'], ['m', 'n', 'q', 'r'], ['s', 't']]

### Arnaud Delobelle

Sep 26, 2010, 4:29:53 AM9/26/10
to

from itertools import groupby
from operator import itemgetter

l = [[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q',
'r'],
[5, 's', 't']]

[
[x for g in gs for x in g[1:]]
for _, gs in groupby(sorted(l), itemgetter(0))
]

--
Arnaud

### Dr.Ruud

Sep 26, 2010, 5:41:23 AM9/26/10
to
On 2010-09-26 06:05, Xah Lee wrote:

> I have a list of lists, where each sublist is labelled by
> a number. I need to collect together the contents of all sublists
> sharing the same label. So if I have the list
>
> ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q r) (5 s t))
>
> where the first element of each sublist is the label, I need to
> produce:
>
> output:
> ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

The input is a string on STDIN,
and the output is a string on STDOUT?

Use a hash:

perl -MData::Dumper -wle '\$Data::Dumper::Sortkeys = 1;
my \$t = "((0 a b) (1 c d) (2 e f) (3 g h) (1 i j)"
. " (2 k l) (4 m n) (2 o p) (4 q r) (5 s t))";

push @{ \$h{ \$1 } }, \$2 while \$t =~ /(\w+)([^)]*)/g; # gist

print Dumper \%h;
'

or an array:

perl -wle '
my \$t = "((0 a b) (1 c d) (2 e f) (3 g h) (1 i j)"
. " (2 k l) (4 m n) (2 o p) (4 q r) (5 s t))";

push @{\$a[\$1]},\$2 while \$t =~ /(\w+)\s+([^)]*)/g; # gist.1
print "((".join(") (",map join(" ",@\$_),@a )."))"; # gist.2
'

Or if the list is not just a string, but a real data structure in the
script:

perl -wle'
my \$t = [ [qw/0 a b/], [qw/1 c d/], [qw/2 e f/], [qw/3 g h/],
[qw/1 i j/], [qw/2 k l/], [qw/4 m n/], [qw/2 o p/],
[qw/4 q r/], [qw/5 s t/] ];

push @{ \$a[ \$_->[0] ] }, [ @\$_[ 1, 2 ] ] for @\$t; # AoAoA

printf "((%s))\n", join ") (",
map join( " ",
map join( " ", @\$_ ), @\$_
), @a;
'

Etc.

--
Ruud

### Jürgen Exner

Sep 26, 2010, 9:53:41 AM9/26/10
to
Alexander Burger <a...@software-lab.de> wrote:
>In PicoLisp:

What the f**** does PicoLisp have to with Perl?

jue

### Jürgen Exner

Sep 26, 2010, 9:54:17 AM9/26/10
to
livibetter <livib...@gmail.com> wrote:
>Here is mine for Python:

What the f*** does Python have to do with Perl?

jue

### Pascal J. Bourguignon

Sep 26, 2010, 10:24:46 AM9/26/10
to
Xah Lee <xah...@gmail.com> writes:

> here's a interesting toy list processing problem.
>
> I have a list of lists, where each sublist is labelled by
> a number. I need to collect together the contents of all sublists
> sharing
> the same label. So if I have the list
>
> ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
> r) (5 s t))
>
> where the first element of each sublist is the label, I need to
> produce:
>
> output:
> ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
>
> a Mathematica solution is here:
> http://xahlee.org/UnixResource_dir/writ/notations_mma.html
>
> R5RS Scheme lisp solution:
> http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
> by Sourav Mukherjee
>
> also, a Common Lisp solution can be found here:

It's too complex. Just write:

(let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
(2 o p) (4 q r) (5 s t))))

(mapcar (lambda (class) (reduce (function append) class :key (function rest)))
(com.informatimago.common-lisp.list:equivalence-classes list :key (function first)))

)

--> ((S T) (Q R M N) (G H) (O P K L E F) (I J C D) (A B))

--
__Pascal Bourguignon__ http://www.informatimago.com/

### Alexander Burger

Sep 26, 2010, 10:54:06 AM9/26/10
to
In comp.lang.lisp Pascal J. Bourguignon <p...@informatimago.com> wrote:
> It's too complex. Just write:
> ...

> (mapcar (lambda (class) (reduce (function append) class :key (function rest)))
> (com.informatimago.common-lisp.list:equivalence-classes list :key (function first)))

Still too complex! ;-)

### Sherm Pendley

Sep 26, 2010, 10:56:07 AM9/26/10
to
Jürgen Exner <jurg...@hotmail.com> writes:

It's Xah. He cross-posts in an attempt to start a language feud.

sherm--

--
Sherm Pendley
<http://camelbones.sourceforge.net>
Cocoa Developer

### Sherm Pendley

Sep 26, 2010, 10:56:48 AM9/26/10
to
Jürgen Exner <jurg...@hotmail.com> writes:

Xah is a cross-posting troll. Please don't feed the troll.

### Ben Morrow

Sep 26, 2010, 11:39:56 AM9/26/10
to

Quoth p...@informatimago.com (Pascal J. Bourguignon):

>
> It's too complex. Just write:
>
> (let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
> (2 o p) (4 q r) (5 s t))))

Unless you're going to talk about Perl, please take clpmisc out of the
xpost.

Ben

### John Bokma

Sep 26, 2010, 2:43:51 PM9/26/10
to
Jürgen Exner <jurg...@hotmail.com> writes:

Clueless fuck. I unsubscribed from comp.lang.perl.misc to avoid the
retards like you and now you come in via the backdoor. If you have a
problem with Xah report him with Google Groups and with his hosting
provider 1&1 like I do. Dreamhost kicked him out that way.

--
John Bokma j3b

Freelance Perl & Python Development: http://castleamber.com/

### Xah Lee

Sep 26, 2010, 5:03:40 PM9/26/10
to
On Sep 26, 7:56 am, Sherm Pendley <sherm.pend...@gmail.com> wrote:

> Jürgen Exner <jurge...@hotmail.com> writes:
> > Alexander Burger <a...@software-lab.de> wrote:
> >>In PicoLisp:
>
> > What the f**** does PicoLisp have to with Perl?
>
> It's Xah. He cross-posts in an attempt to start a language feud.
>
> Please don't feed the troll.

sorry i disagree. And please don't randomly accuse... I posted the
following in reply to Paul Rubin's very valuable post, to
comp.lang.python only. But since you cross-posted your accusation, and
there are about 3 other posts of similar nature accusing me cross-
posted to all groups, so am posting a response to all groups too.

--------------------------------------------------
Paul,

...

interested, you can read in the following:

• 〈Cross-posting &amp; Language Factions〉
http://xahlee.org/Netiquette_dir/cross-post.html

that.

i'll go over the solutions and post if i have anything interesting to
say. ☺ Possbly will select some to show on my site with credit of
course.

Xah ∑ xahlee.org

### Bakul Shah

Sep 26, 2010, 6:10:46 PM9/26/10
to
On 9/25/10 9:05 PM, Xah Lee wrote:
> here's a interesting toy list processing problem.
>
> I have a list of lists, where each sublist is labelled by
> a number. I need to collect together the contents of all sublists
> sharing
> the same label. So if I have the list
>
> ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
> r) (5 s t))
>
> where the first element of each sublist is the label, I need to
> produce:
>
> output:
> ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
...

> anyone care to give a solution in Python, Perl, javascript, or other
> lang? am guessing the scheme solution can be much improved... perhaps
> using some lib but that seems to show scheme is pretty weak if the lib
> is non-standard.

In Q (from kx.com)[1]:

x:((0; "a"; "b");(1; "c"; "d");(2; "e"; "f");(3; "g"; "h");(1; "i"; "j")
(2; "k"; "l");(4; "m"; "n");(2; "o"; "p");(4; "q"; "r");(5; "s"; "t"))
f:{each [,/] each [each [1 _]] x @ value group x[;0]}
f x

outputs

"ab"
"cdij"
"efklop"
"gh"
"mnqr"
"st"

Note that this is actually a pretty general solution in that *all*
the functions used in it operate on a variety of types.
- The label could be anything, not just an integer.
- What follows a label can be a list of anything.
- Everything, except for = (the group function), has to do with
*shaping* the output in the way you want. It is all basically
cut-n-paste or pulling apart your Lego blocks and constructing
a new toy from them! And most languages are really poor at that.
*This* is why proponents of various languages should pay attention
to such problems.

----
[1] In k3 (an older language from kx.com that you may be able to find
online), x is the same but f is as follows:

f:{,/'1_''x@=x[;0]}

### Jürgen Exner

Sep 26, 2010, 6:16:24 PM9/26/10
to
John Bokma <jo...@castleamber.com> wrote:
>Jürgen Exner <jurg...@hotmail.com> writes:
>
>> livibetter <livib...@gmail.com> wrote:
>>>Here is mine for Python:
>>
>> What the f*** does Python have to do with Perl?
>
>Clueless fuck. I unsubscribed from comp.lang.perl.misc to avoid the
>retards like you and now you come in via the backdoor. If you have a
>problem with Xah report him with Google Groups and with his hosting
>provider 1&1 like I do. Dreamhost kicked him out that way.

I have solved my problems with Xah years ago, that's what killfiles are
for. And I have no idea why you are bringing up Xah in your current
rant.

It was livibetter who without any motivation or reasoning posted Python
code in CLPM. If at least he had asked something like "How can I write
something similar in Perl?" or _ANYTHING_ that would have made this even
remotely meaningful for CLPM, then ok.
But he didn't. He just dumped 7 lines of Python code to CLPM and his
only comment was "Here is mine for Python". Yeah, great comment. Why
would anyone in CLPM possibly care about those 7 lines of Phython code?

jue

jue

### Rhodri James

Sep 26, 2010, 7:19:58 PM9/26/10
to
On Sun, 26 Sep 2010 23:16:24 +0100, Jürgen Exner <jurg...@hotmail.com>
wrote:

> I have solved my problems with Xah years ago, that's what killfiles are
> for. And I have no idea why you are bringing up Xah in your current
> rant.
>
> It was livibetter who without any motivation or reasoning posted Python
> code in CLPM. If at least he had asked something like "How can I write
> something similar in Perl?" or _ANYTHING_ that would have made this even
> remotely meaningful for CLPM, then ok.
> But he didn't. He just dumped 7 lines of Python code to CLPM and his
> only comment was "Here is mine for Python". Yeah, great comment. Why
> would anyone in CLPM possibly care about those 7 lines of Phython code?

Check the Newsgroups line: this is a standard Xah "cross-post to
everywhere in sight" troll. Hence (a) bringing up Xah, since he
originated this thread, and (b) livibetter not thinking to trim the
crossposts. Which you didn't either, I note.

The only downside to killfiles is that you have to pay attention or
you sometimes get bitten by this stuff.

--
Rhodri James *-* Wildebeest Herder to the Masses

### Ertugrul Söylemez

Sep 26, 2010, 7:41:37 PM9/26/10
to
Xah Lee <xah...@gmail.com> wrote:

> here's a interesting toy list processing problem.
>
> I have a list of lists, where each sublist is labelled by a number. I
> need to collect together the contents of all sublists sharing the same
> label. So if I have the list
>
> ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
> r) (5 s t))
>
> where the first element of each sublist is the label, I need to
> produce:
>
> output:
> ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
>

> [...]

>
> anyone care to give a solution in Python, Perl, javascript, or other
> lang? am guessing the scheme solution can be much improved... perhaps
> using some lib but that seems to show scheme is pretty weak if the lib
> is non-standard.

In Haskell the solution looks like this:

import qualified Data.Map as M
import qualified Data.Set as S
import Data.Map (Map)
import Data.Set (Set)

collect :: (Ord a, Ord k) => [Map k (Set a)] -> Map k (Set a)
collect = M.unionsWith S.union

Greets,
Ertugrul

--
nightmare = unsafePerformIO (getWrongWife >>= sex)
http://ertes.de/

### Ertugrul Söylemez

Sep 26, 2010, 7:47:59 PM9/26/10
to
Ertugrul Söylemez <e...@ertes.de> wrote:

> In Haskell the solution looks like this:
>

> [...]

And before anyone starts to rant, I didn't pay attention to where I'm
X-posting this stuff. Sorry for that. But on the other hand you could
say that I'm giving the Perl people (apparently the only people feeling
the urge to rant anyway) the chance to come up with a more elegant
solution. =)

### Mirko

Sep 27, 2010, 11:18:22 AM9/27/10
to
On Sep 26, 12:05 am, Xah Lee <xah...@gmail.com> wrote:

I am hijacking the following post and driving it to Cuba (the Monthy
Python fans will know what I refer to). I want to create a `reduce'-
like function that can handle similar problems.

Xah said:
> here's a interesting toy list processing problem.
>
> I have a list of lists, where each sublist is labelled by
> a number. I need to collect together the contents of all sublists
> sharing
> the same label. So if I have the list
>
> ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
> r) (5 s t))
>
> where the first element of each sublist is the label, I need to
> produce:
>
> output:
> ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
>

> stuffed deleted.

Here is my Common Lisp (and I only care about Common Lisp answers)
attempt to create a `reduce'-like function to handle this kind of a
problem (you will see that I am still struggling with the code and the
documentation).

(defun reduce-tagged (function sequence &key
(key-tag #'first)
(key-datum #'rest))
"Use a binary operation, `function' to combine a sequence of tagged
elements. like-tagged elements are `reduce'd according to `function'
and returned in a list ...

`sequence' is a sequence of tagged elements. reduce-m will reduce
like-tagged-elements.

If `key-tag' is supplied it is used to extract the element tag. If
`key-tag' is not supplied, the function `first' is used.

If `key-datum' is supplied, it is used to extract the element datum.
If `key-datum' is not supplied, the function `rest' is used.

"
(let ((hash (make-hash-table)))
(dolist (datum sequence)
(let ((tag (funcall key-tag datum))
(values (funcall key-datum datum)))
(multiple-value-bind (it present)
(gethash tag hash)
(if present
(setf (gethash tag hash)
(apply function (gethash tag hash) values))
(setf (gethash tag hash) values)))))
(let (result)
(dohash (key value hash)
(push (list key value) result))
result)))

Comments, improvements? I am looking for a general purpose function
like reduce that I
can apply in various situations.

Thanks,

Mirko

### Mirko

Sep 27, 2010, 11:40:45 AM9/27/10
to

Correction: the previous code used a non-portable clisp macro
`dohash' (looks nice, doesn't it?)

Here is the version with maphash:

(defun reduce-tagged (function sequence &key
(key-tag #'first)
(key-datum #'rest))
"Use a binary operation, `function' to combine a sequence of tagged
elements. like-tagged elements are `reduce'd according to `function'

`sequence' is a sequence of tagged elements. reduce-m will reduce
like-tagged-elements.

If `key-tag' is supplied it is used to extract the element tag. If
`key-tag' is not supplied, the function `first' is used.

If `key-datum' is supplied, it is used to extract the element datum.
If `key-datum' is not supplied, the function `rest' is used.

"
(let ((hash (make-hash-table)))
(dolist (datum sequence)
(let ((tag (funcall key-tag datum))
(values (funcall key-datum datum)))
(multiple-value-bind (it present)
(gethash tag hash)

(declare (ignore it))

(if present
(setf (gethash tag hash)
(apply function (gethash tag hash) values))
(setf (gethash tag hash) values)))))
(let (result)

(maphash #'(lambda(key value)

(push (list key value) result))

hash)
result)))

Mirko

### Mirko

Sep 27, 2010, 11:50:39 AM9/27/10
to
On Sep 27, 11:40 am, Mirko <mirko.vuko...@gmail.com> wrote:
> On Sep 27, 11:18 am, Mirko <mirko.vuko...@gmail.com> wrote:
>
>
>
> > On Sep 26, 12:05 am, Xah Lee <xah...@gmail.com> wrote:
>
> > I am hijacking the following post and driving it to Cuba (the Monthy
> > Python fans will know what I refer to).  I want to create a `reduce'-
> > like function that can handle similar problems.
>
> > Xah said:
>
> > > here's a interesting toy list processing problem.
>
> > > I have a list of lists, where each sublist is labelled by
> > > a number. I need to collect together the contents of all sublists
> > > sharing
> > > the same label. So if I have the list
>
> > > ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
> > > r) (5 s t))
>
> > > where the first element of each sublist is the label, I need to
> > > produce:
>
> > > output:
> > > ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
>
> > > stuffed deleted.
>
> > Here is my Common Lisp (and I only care about Common Lisp answers)
> > attempt to create a `reduce'-like function to handle this kind of a
> > problem (you will see that I am still struggling with the code and the
> > documentation).
>
> ... faulty code deleted

Aaand one more fix (apply -> funcall) (This version at least produces
a close
facsimile of the desired output)

(defun reduce-tagged (function sequence &key
(key-tag #'first)
(key-datum #'rest))
"Use a binary operation, `function' to combine a sequence of tagged
elements. like-tagged elements are `reduce'd according to `function'

`sequence' is a sequence of tagged elements. reduce-m will reduce
like-tagged-elements.

If `key-tag' is supplied it is used to extract the element tag. If
`key-tag' is not supplied, the function `first' is used.

If `key-datum' is supplied, it is used to extract the element datum.
If `key-datum' is not supplied, the function `rest' is used.

"
(let ((hash (make-hash-table)))
(dolist (datum sequence)
(let ((tag (funcall key-tag datum))
(values (funcall key-datum datum)))
(multiple-value-bind (it present)
(gethash tag hash)
(declare (ignore it))
(if present
(setf (gethash tag hash)

(funcall function (gethash tag hash) values))

### ccc31807

Sep 27, 2010, 4:43:37 PM9/27/10
to
On Sep 26, 12:05 am, Xah Lee <xah...@gmail.com> wrote:
> here's a interesting toy list processing problem.
>
> I have a list of lists, where each sublist is labelled by
> a number. I need to collect together the contents of all sublists
> sharing
> the same label. So if I have the list
>
> ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
> r) (5 s t))
>
> where the first element of each sublist is the label, I need to
> produce:
>
> output:
> ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

Here is a solution in Perl -- the verbose version. Please see my note
below.

SCRIPT:
use strict;
use warnings;
my %lists;

while (<DATA>)
{
chomp;
my (\$k, @v) = split(/ /, \$_);
push(@{\$lists{\$k}}, @v);
}

foreach my \$k (sort keys %lists)
{
print "\$k - @{\$lists{\$k}}\n";
}

exit(0);

__DATA__
0 a b
1 c d
2 e f
3 g h
1 i j
2 k l
4 m n
2 o p
4 q r
5 s t

OUTPUT:
>perl lists.plx
0 - a b
1 - c d i j
2 - e f k l o p
3 - g h
4 - m n q r
5 - s t

NOTE:
I assume that you want an idiomatic solution for the language. I have
therefore converted your data into a typical record oriented
structure. Perlistas don't use parenthesis. If you want a Lispy
solution, use Lisp. Further, Perl was made for exactly this kind of
problem, which is simple data munging, taking some input, transforming
it, and printing it out -- Practical Extraction and Reporting
Language. I know that some Lispers (R.G., are you reading?) will
object to a formulation like this: @{\$lists{\$k}}, but all this says
(in Perl) is to spit out the value contained in the hash element
\$lists{\$k} as an array, and is good idiomatic Perl, even if some
Lispers aren't quite up to the task of understanding it.

CC.

### Steven D'Aprano

Sep 27, 2010, 10:34:39 PM9/27/10
to
On Mon, 27 Sep 2010 08:18:22 -0700, Mirko wrote:

> Here is my Common Lisp (and I only care about Common Lisp answers)

Good for you. So why are you spamming other newsgroups with your CL
solution? Not once, but three times.

Replies to /dev/null.

--
Steven

### Seebs

Sep 27, 2010, 10:45:50 PM9/27/10
to
On 2010-09-26, J?rgen Exner <jurg...@hotmail.com> wrote:
> It was livibetter who without any motivation or reasoning posted Python
> code in CLPM.

Not exactly; he posted it in a crossposted thread, which happened to include
CLPM and other groups, including comp.lang.python.

It is quite possible that he didn't know about the crossposting. However,
while I would agree that this would constitute a form of ignorance, I'd think
that, especially with how well some newsreading interfaces hide that detail,
I don't think it's really worth getting angry over.

-s
--
Copyright 2010, all wrongs reversed. Peter Seebach / usenet...@seebs.net
http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated!
I am not speaking for my employer, although they do rent some of my opinions.

### John Bokma

Sep 27, 2010, 11:36:27 PM9/27/10
to
Seebs <usenet...@seebs.net> writes:

> On 2010-09-26, J?rgen Exner <jurg...@hotmail.com> wrote:
>> It was livibetter who without any motivation or reasoning posted Python
>> code in CLPM.
>
> Not exactly; he posted it in a crossposted thread, which happened to include
> CLPM and other groups, including comp.lang.python.
>
> It is quite possible that he didn't know about the crossposting.

Oh, he does. It has been Xah's game for years.

> while I would agree that this would constitute a form of ignorance, I'd think
> that, especially with how well some newsreading interfaces hide that detail,
> I don't think it's really worth getting angry over.

You think wrong. And Jurgen should have known better than to reply several
times (but like too many people in cplm he posts for posting's sake, the
main reason why I don't follow that group anymore).

Xah has been doing this for many years and most of his posts are just
made to drive traffic to his site (hence they are copy paste of articles
on his site + link(s) to his site). It's Usenet abuse, on purpose.

The reason it pisses off people is that nearly weekly it causes a lot of
noise in newsgroups that are really better off without the noise
(IMNSHO).

See my other post on how to deal with this spammer. If you've missed it:
report him for spamming, since that's what he does. It already made him
have to move hosting providers once. While it's not going to stop him,
it will cost him money. See:

While I am named in that article be assured that I was not the only one
contacting dreamhost (+10 for doing this, btw). Quite some people
contacted me via email that they also talked with Dreamhost. Just keep
reporting this spammer, and maybe 1and1 will kick it out.

### Seebs

Sep 28, 2010, 12:18:38 AM9/28/10
to
On 2010-09-28, John Bokma <jo...@castleamber.com> wrote:
> Seebs <usenet...@seebs.net> writes:
>> On 2010-09-26, J?rgen Exner <jurg...@hotmail.com> wrote:
>>> It was livibetter who without any motivation or reasoning posted Python
>>> code in CLPM.

>> Not exactly; he posted it in a crossposted thread, which happened to include
>> CLPM and other groups, including comp.lang.python.

>> It is quite possible that he didn't know about the crossposting.

> Oh, he does. It has been Xah's game for years.

But did "livibetter" know about it? I wasn't defending Xah, who is indeed
at the very least clueless and disruptive. But I was sort of defending
the poster who was accused of posting Python code in CLPM, because that
poster may not have understood the game.

### John Bokma

Sep 28, 2010, 12:34:22 AM9/28/10
to
Seebs <usenet...@seebs.net> writes:

fup set to poster

> On 2010-09-28, John Bokma <jo...@castleamber.com> wrote:
>> Seebs <usenet...@seebs.net> writes:
>>> On 2010-09-26, J?rgen Exner <jurg...@hotmail.com> wrote:
>>>> It was livibetter who without any motivation or reasoning posted Python
>>>> code in CLPM.
>
>>> Not exactly; he posted it in a crossposted thread, which happened to include
>>> CLPM and other groups, including comp.lang.python.
>
>>> It is quite possible that he didn't know about the crossposting.
>
>> Oh, he does. It has been Xah's game for years.
>
> But did "livibetter" know about it? I wasn't defending Xah, who is indeed
> at the very least clueless and disruptive.

Heh, he's not clueless, the problem is that he knows exactly what he's
doing. And like most spammers, very hard to get rid off.

> But I was sort of defending
> the poster who was accused of posting Python code in CLPM, because that
> poster may not have understood the game.

Ah, clear. Well, the problem is somewhat also in CLPM where people
somehow have to reply to messages like this :-(. And I am sure Xah
laughes his ass off each time it happens.

### Xah Lee

Sep 28, 2010, 1:39:31 PM9/28/10
to
On Sep 27, 9:34 pm, John Bokma <j...@castleamber.com> wrote:

> Seebs <usenet-nos...@seebs.net> writes:
>
> fup set to poster
>
> > On 2010-09-28, John Bokma <j...@castleamber.com> wrote:
> >> Seebs <usenet-nos...@seebs.net> writes:

> >>> On 2010-09-26, J?rgen Exner <jurge...@hotmail.com> wrote:
> >>>> It was livibetter who without any motivation or reasoning posted Python
> >>>> code in CLPM.
>
> >>> Not exactly; he posted it in a crossposted thread, which happened to include
> >>> CLPM and other groups, including comp.lang.python.
>
> >>> It is quite possible that he didn't know about the crossposting.
>
> >> Oh, he does. It has been Xah's game for years.
>
> > But did "livibetter" know about it?  I wasn't defending Xah, who is indeed
> > at the very least clueless and disruptive.
>
> Heh, he's not clueless, the problem is that he knows exactly what he's
> doing. And like most spammers, very hard to get rid off.
>
> > But I was sort of defending
> > the poster who was accused of posting Python code in CLPM, because that
> > poster may not have understood the game.
>
> Ah, clear. Well, the problem is somewhat also in CLPM where people
> somehow have to reply to messages like this :-(. And I am sure Xah
> laughes his ass off each time it happens.

Hi John Bokma,

can you stop this?

doesn't seems fruitful to keep on this.

if you don't like my posts, ignore them? i don't post in
comp.lang.python or comp.lang.perl.misc that often... maybe have done
so 5 times this year.

http://johnbokma.com/mexit/2010/08/15/
and there are really a lot beautiful photos.

this isn't bribery or something like that. I've been annoyed by you,
of course, but it's not fruitful to keep going on this.

Best,

Xah ∑ xahlee.org

### John Bokma

Sep 28, 2010, 2:13:27 PM9/28/10
to
Xah Lee <xah...@gmail.com> writes:

> can you stop this?

Can you stop crossposting? And if there is really, really a need to
crosspost, can you please set the follow-up to?

> doesn't seems fruitful to keep on this.
>
> if you don't like my posts, ignore them? i don't post in
> comp.lang.python or comp.lang.perl.misc that often... maybe have done
> so 5 times this year.

Which is enough to disrupt those groups for days.

> http://johnbokma.com/mexit/2010/08/15/
> and there are really a lot beautiful photos.

Thanks Xah. Like I wrote, your site /does/ have good information, it's
so sad that you somehow think it's necessary to spam Usenet to get
visitors. Or maybe you've another reason, don't know. But it /is/ Usenet
abuse.

> this isn't bribery or something like that. I've been annoyed by you,
> of course, but it's not fruitful to keep going on this.

Well, you annoy me, I annoy you. It's in your hands to make it stop.

1) remove all the excessive swearing from your site. If you have a
point, you don't need it. Your argument(s) without the swearing
should speak for themselves

2) Stop abusing Usenet. Instead focus on writing more good stuff on

1) & 2) will keep me from linking to your site, ever. And I am sure I am
not alone in this.

### w_a_x_man

Sep 29, 2010, 10:04:26 AM9/29/10
to
On Sep 26, 9:24 am, p...@informatimago.com (Pascal J. Bourguignon)
wrote:

> Xah Lee <xah...@gmail.com> writes:
> > here's a interesting toy list processing problem.
>
> > I have a list of lists, where each sublist is labelled by
> > a number. I need to collect together the contents of all sublists
> > sharing
> > the same label. So if I have the list
>
> > ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
> > r) (5 s t))
>
> > where the first element of each sublist is the label, I need to
> > produce:
>
> > output:
> > ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
>
> > a Mathematica solution is here:
> >http://xahlee.org/UnixResource_dir/writ/notations_mma.html
>
> > R5RS Scheme lisp solution:
> >http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_...

> > by Sourav Mukherjee
>
> > also, a Common Lisp solution can be found here:

>
> It's too complex. Just write:
>
> (let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
>               (2 o p) (4 q r) (5 s t))))
>
>   (mapcar (lambda (class) (reduce (function append) class :key (function rest)))
>            (com.informatimago.common-lisp.list:equivalence-classes list :key (function first)))
>
>    )
>
> --> ((S T) (Q R M N) (G H) (O P K L E F) (I J C D) (A B))
>
> --
> __Pascal Bourguignon__                    http://www.informatimago.com/

Ruby:

[[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q', 'r'],
[5, 's', 't']].
group_by{|x| x.first}.values.map{|x| x.map{|y| y[1..-1]}.flatten}

==>[["s", "t"], ["a", "b"], ["c", "d", "i", "j"],