# Source range 10 each each collect 10 Semicolons for object definitions

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46``` ```; Source. (A:((L:range(10)) each()) , B:(L each())) collect(A + B = 10) ; Semicolons for object definitions? Good. This reminds plain English: semicolons ; should be inserted before explanations, like in this sentence. ; But, in both English and Russian semicolons are often followed by whitespaces. (A: ((L: range(10)) each()) , B: (L each())) collect(A + B = 10) ; Okay. Why not L: range(10), A: (L each()) , B: (L each()), collect(A + B = 10) ; So now we really see that A and B are effectively the same thing. ; Next. each() selects anything from L at once. Why then "each"? L: range(10), A: (L any()) , B: (L any()), collect(A + B = 10) ; Or maybe L: range(10), A: any_from(L), B: any_from(L), collect(A + B = 10) ; Poor little method collect(). It does too much: pattern-matching, list conversion... ; Oh. L: range(10), A: any_from(L), B: any_from(L), C: select(A + B = 10), flatten(C) ; Or L: range(10), A: any_from(L), B: any_from(L), C: selection(A + B = 10), flatten(C) ; There remains only one problem. select() or collect()... what? "A + B = 10"?! ; How to "collect" an equality? ; Let me introduce you a "such ... that" operator. Let's call it "|". ; Wait... Gods... this reminds me lambdas. I'm sorry. L: range(10), C: selection(A: any_from(L), B: any_from(L) | A + B = 10), flatten(C) ; To show you why it is important, let me show you an example. ; Suppose I'm to take only that nodes of L that make 10 with any node of M. collect(L + M = 10) ; Nope, it will select nodes from both L and M collect(L = 10 - M) ; Hey, mathematically it is the same thing! collect(L + M = 10 && L) ; Unreadable. ; But Now! This looks almost obvious even in one operation! flatten(selection(A: any_from(range(10)), B: any_from(range(10)) | A + B = 10)) ; Almost jokingly. And one new method: the_same()! ; (I didn't invent it, I've just restyled an "!!" operation from UNIX shell) flatten(selection(A: any_from(range(10)), B: the_same() | A + B = 10)) ; Do you agree? ```