I quite like the chirurgical, strategic feel of the exposition. Denotes clear thinking, and/or multiple revisions.
When I work in some code I often spend too much time on reviewing and enhancing code in this way, but mine being a side project all that work (I’m not the best programmer by far) is either for future me or for no one, and often I end up feeling that I lost time for nothing.
But I like to spend time in making this kind of clean code {shrug}.
Totally agreed, my comment was just to add meaning in case others also wondered , not a criticism. Gotta love trans-language words. My friends used to say “go hands” whenever it was time to vamanos.
(And -monos is etymologically very transparent - it's just the first person plural ending -mos, familiar to everybody, with the first person plural reflexive pronoun nos suffixed onto it and eliding the -s of -mos.)
The image cannot be dispalied. I wish github only allowed Open Image Formats, but too late now since Microsoft owns them.
Lately I have been running into image/video files people at work create on their MACs that cannot be viewed in Linux. I wonder if that crap is carrying ofer into github.
when you pipe a set it's the same thing as calling union on each one, it creates a new set and puts all the variables in them:
so this:
border = north | south | west | east
is the same thing as:
border = north.union(south, west, east)
which is also:
border = set()
for border_set in [north, south, west, east]:
for state in border_set:
border.add(state)
it's just a new set with all the previous items in it. Since it's a set there is no doubles. for example, WA is in north and east, but only in border once, because there is no duplicates in a set.
to do it with lists you would need to make sure there was no doubles yourself. plus you wouldn't get the set operations later on, and would need similar loops to check things.
border = []
for state in north + south + west + east:
if state not in border:
border.append(state)
Sets are great any time you need to work with groups of unique things and see how they relate to each other. Since there is only one of each state, this is perfect use for them.
I just call the character a pipe, It's actually a "bitwise or". i think the reasoning is that it looks at each item in the two sets being compared and returns it if it is in either or both of the sets. Which functionally is the same thing as creating a union.
I usually avoid using bitwise operators because they get confusing, and the kind of stuff my team does rarely needs them. In this case I would have used union.
Given two binary numbers a and b, the set of bits set to 1 in a|b is the union of the set of bits set to 1 in a and the set of bits set to 1 in b. Likewise for & (bitwise and) and intersection. So using bitwise operators to represent set operations like this is not too big of a stretch.
If sets were a Python-only thing I'd say that it's too clever, but it's a concept that appears in many other environments: Typescript (unions), Datalog and other declarative logic languages, Haskell (I think) and other functional languages...
So python is implementing an existing paradigm, not trying to be clever inventing something new. I'm happy with that
I think you’re confusing sets with another concept. I don’t know much about those other languages you list but I believe python’s typing.Union is more similar to what you list. Sets are just unordered data collections with unique elements.
That kind of dramatic change usually only benefits people with nothing to lose or a distinct next-level gain to make.
Norvig definitely isn't in the first category and has many better avenues for gains than an attempted split of the US (think about who does potentially benefit from that).
Plus hackers love puzzles.
So it's not surprising that politics isn't what it was about.
I've read a lot of code. Peter Norvig's code operates at a different level to anything else I've ever read.
And he's been doing this a long time. I've read part of the way through "Paradigms of Artificial Intelligence Programming" which is from 1991, and uses much the same approach as in the OP, but with Common Lisp.
41 comments
[ 2.5 ms ] story [ 92.2 ms ] threadMaybe GitHub's rendering of ipynb files?
"Welcome to The Riddler. Every week, I offer up problems related to the things we hold dear around here: math, logic and probability."
When I work in some code I often spend too much time on reviewing and enhancing code in this way, but mine being a side project all that work (I’m not the best programmer by far) is either for future me or for no one, and often I end up feeling that I lost time for nothing.
But I like to spend time in making this kind of clean code {shrug}.
Spanish speakers are unlikely to make that mistake, though, because the ending -monos is regular for first-person plural reflexive imperatives. https://es.wiktionary.org/wiki/mirarse#Conjugaci%C3%B3n
(And -monos is etymologically very transparent - it's just the first person plural ending -mos, familiar to everybody, with the first person plural reflexive pronoun nos suffixed onto it and eliding the -s of -mos.)
https://en.wiktionary.org/wiki/chirurgisch
https://en.wiktionary.org/wiki/%CF%87%CE%B5%CE%B9%CF%81%CE%B...
https://en.wikipedia.org/wiki/Anton_Chigurh
Lately I have been running into image/video files people at work create on their MACs that cannot be viewed in Linux. I wonder if that crap is carrying ofer into github.
https://github.com/norvig/pytudes/raw/5e745c392772d150b41462...
Here's map4.png: https://github.com/norvig/pytudes/blob/main/ipynb/map4.png
There doesn't seem to be a 5 or 6.
Sets in Python are really cool when you can master them, but I do sometimes wonder if they are too clever, or just not evangelized enough.
so this:
is the same thing as: which is also: it's just a new set with all the previous items in it. Since it's a set there is no doubles. for example, WA is in north and east, but only in border once, because there is no duplicates in a set.to do it with lists you would need to make sure there was no doubles yourself. plus you wouldn't get the set operations later on, and would need similar loops to check things.
Sets are great any time you need to work with groups of unique things and see how they relate to each other. Since there is only one of each state, this is perfect use for them.edits throughout as I thought of other things.
I usually avoid using bitwise operators because they get confusing, and the kind of stuff my team does rarely needs them. In this case I would have used union.
edit: here are some of the docs
Bitwise operators: https://wiki.python.org/moin/BitwiseOperators
and how they work with sets: https://docs.python.org/3.10/tutorial/datastructures.html#se...
Plus the set docs have the methods with their corresponding operator: https://docs.python.org/3.10/library/stdtypes.html#set
I can see how it would be nice and concise, but I think the methods are easier to understand.
So python is implementing an existing paradigm, not trying to be clever inventing something new. I'm happy with that
https://en.wikipedia.org/wiki/Set_theory
Norvig definitely isn't in the first category and has many better avenues for gains than an attempted split of the US (think about who does potentially benefit from that).
Plus hackers love puzzles.
So it's not surprising that politics isn't what it was about.
And he's been doing this a long time. I've read part of the way through "Paradigms of Artificial Intelligence Programming" which is from 1991, and uses much the same approach as in the OP, but with Common Lisp.
Obviously his approach is the right way. Except they usually aren't obvious until you've read the explanation.
His 22 line spell checker[1] is a perfect example.
[1] https://norvig.com/spell-correct.html