←2011-05-17 2011-05-18 2011-05-19→ ↑2011 ↑all
00:06:11 -!- DoA-TheGreat has joined.
00:06:11 -!- DoA-TheGreat has left.
00:08:26 <oerjan> and his faithful dog DoB-Do
00:08:48 <oklofok> you think you're so cool
00:08:52 <oklofok> but let me tell you something
00:12:02 -!- Phantom_Hoover has quit (Remote host closed the connection).
00:13:22 <oerjan> btw i proved that every sequence in roman numeral look and say grows exponentially
00:13:32 <oklofok> you sneaky bastard!
00:13:41 <oklofok> :D
00:14:00 <oerjan> i'm not yet sure whether it always grows at a constant limit speed though
00:14:21 <oklofok> you can tell me later, i'm trying to get to work at a sensible time today
00:14:28 <oklofok> namely now
00:14:34 <oerjan> basically, the substring VIIIVIIIIVIIIVI always arises, and is self-replicating
00:15:17 <oklofok> cool
00:16:53 <quintopia> wait
00:16:59 <quintopia> where are the breaks in that sequence
00:17:13 <oklofok> breaks?
00:19:18 <quintopia> it could be 52434241 or 8986 or something else in between, depending on which standard you choose
00:19:32 <oklofok> oh
00:19:49 <oklofok> in that case there are no breaks
00:21:12 <oklofok> or actually there's a break before every letter
00:22:15 <oklofok> oerjan: can you tell me the details?
00:23:07 -!- Tritonio has quit (Ping timeout: 260 seconds).
00:26:34 <oerjan> quintopia: I II III IV V VI (VII VIII ...) are the numerals i use (the larger ones disappear after two-three iterations)
00:26:58 <oklofok> I II III IIII IVI IIIVII IIIIIVIII VIIVIIII IVIIIIVIVI IIIVIVIIVIIIVII IIIIIVIIIVIIIIVIIIIIVIII VIIVIIIIIVIVIIVVIIVIIII IVIIIIVVIIVIIIVIIIIVIVIIIIVIVI IIIVIVIIVIVIIIIVIIIIIVIVIIVIIIVIVIIVIIIVII IIIII(VIIIVIIIIVIIIVI)VIIVVIIVIIIVIIIIVIIIIIVIIIVIIIIVIIIIIVIII
00:27:16 <oerjan> yeah that looks right to start with
00:27:26 -!- azaq23 has joined.
00:27:36 <oklofok> and for V, the same thing happens + extre
00:27:39 <oklofok> *extra
00:27:39 <quintopia> oerjan: could you please put the breaks in as hyphens so i can tell the difference between 3 and 12?
00:27:43 <oerjan> maybe you pasted my quote from yesterday
00:27:55 <oklofok> oerjan: no i did that just now
00:28:03 <oerjan> quintopia: um they are melted together after each step
00:28:22 <oklofok> wasn't all too careful but anyhow easy to believe, now i just have to make sure you didn't lie about self-replicating
00:28:36 <oerjan> say IIIVII -> III-I I-V II-I -> IIIIIVIII
00:29:24 <oerjan> oklofok: note i needed to consider a few different environments, also i checked with a haskell program
00:29:26 <quintopia> I I-I I-II I-III IV-I I-I-I-V-I-I III-I-I-V-II-I etc.
00:29:51 <oklofok> ah environments
00:29:56 <oerjan> quintopia: um no other way around for some of those
00:29:58 <oklofok> it's not actually context-free is it...
00:30:42 <oerjan> oklofok: um what does that mean here...
00:31:17 <oklofok> oerjan: that a I doesn't actually evolve like that if there's something around it
00:31:33 <oklofok> but maybe it essentially does, i haven't thought about this
00:31:57 <oklofok> VIIIVIIIIVIIIVI IVIIIIIVIVIIVIIIIIVII IIIVVIIVIIIVIIIIVVIIVIII IIIIIIVIIIIVIIIIIVIVIIIVIIIIVIIII VIIIVIVIIVVIIVIIIVIIIIIVIVIIVIVI IVIIIIIVIIIVIIIIIVIIIIVIIIIIVVII(VIIIVIIIIVIIIVI)I aaaaaand we're there
00:32:27 <oerjan> oklofok: indeed. in fact that string i quoted is really |IIIVIIIIVIIIV| where the | signifies that if there is a letter on the other side it cannot be the same one
00:32:37 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:32:45 <oklofok> ah okay
00:33:28 <oerjan> oklofok: the clue here is that if you remove all initial V's after each step, it looks like you are _very_ likely to hit something beginning with that string eventually
00:34:41 <oklofok> idgi
00:35:04 <oerjan> and you can check that this is true for each of I, II, III, IV, IIV, ... IIIIIIV
00:36:33 <oklofok> not getting this at all man
00:36:35 <oklofok> not at all
00:36:43 <oerjan> oklofok: well to start with the beginning. the problem with this variation compared to ordinary look and say is that there are no atom boundaries (ignoring digits X, L etc. which don't matter after a few steps)
00:37:04 <Vorpal> 02:14:50 <oklofok> you can tell me later, i'm trying to get to work at a sensible time today
00:37:10 <oerjan> every sequence fluctuates between starting with I and starting with V
00:37:14 <Vorpal> that is 03:14:50 for him
00:37:15 <Vorpal> -_-
00:37:32 <oklofok> oerjan: yes
00:38:36 <elliott_> Vorpal: what about it
00:38:43 <oklofok> well actually i haven't done the case analysis but anyhow
00:38:48 <oklofok> Vorpal: morning work best of works
00:38:59 <Vorpal> hah
00:39:13 <oklofok> i have all the math to myself
00:39:15 <oerjan> well i did, V -> I immediately and I -> V in at most 6 steps iirc
00:39:27 <oklofok> VVVVV => VV
00:39:55 <oerjan> btw you can have at most 2 V's and 6 I's in sequence after the 3rd or 4th generation or so
00:40:06 <oklofok> ah yes
00:40:23 <oklofok> okay then i'm good
00:41:01 <oerjan> it follows that every block of V's turns into either IV or IIV. thus every block of V's _always_ interacts with the previous block
00:42:24 <oklofok> because if there's a five, then more I's before the V, and if there's an I, then more I's on the next generation
00:42:27 <oerjan> i therefore mostly merge them together, and treat my basic units as IV, IVV, IIV, IIVV, IIIV, IIIVV, IIIIV, IIIIVV, IIIIIV, IIIIIVV, IIIIIIV and IIIIIIVV
00:42:40 <oklofok> okay
00:42:57 <oerjan> with beginning and end of the whole string sometimes exempted
00:43:21 -!- Vorpal has quit (Read error: Operation timed out).
00:43:37 <oerjan> when we do this, we see that blocks can send information to the previous block, in the form of an extra V occasionally
00:43:48 <elliott_> oerjan: please tell me it's tc
00:43:52 <elliott_> i'll explode with happy
00:44:02 <oerjan> also only the blocks IIIIV and IIIIVV split into two blocks
00:44:13 <oklofok> how can they send an extra V?
00:44:17 <oerjan> elliott_: i don't know yet, i've just shown it must grow exponentially
00:44:23 <elliott_> just tell me anyway
00:44:34 <oerjan> well consider our fundamental example
00:44:58 <elliott_> just tell me anyway
00:45:18 <elliott_> tell me it's tc
00:45:27 <oerjan> |IIIV|IIIIV|IIIV| -> |IIIIIV|IV|IIV|IIIIIV| -> (V)|IIV|IIIV|IIIIVV|IIV|
00:45:36 -!- elliott_ has changed nick to elliott.
00:45:38 -!- elliott has quit (Quit: Leaving).
00:45:47 -!- elliott has joined.
00:45:50 <oklofok> elliott_: given four strings u, v, w and z it is RE-complete to tell whether z appears in the orbit of inf^u v w^inf
00:46:03 <oerjan> you see that the blocks with 5 or more I's at each step turn into something beginning with V, which is then merged with the previous block
00:46:09 <elliott> oklofok: no i just want oerjan to tell me that it's tc
00:46:11 <elliott> kthx
00:46:20 <oklofok> oerjan: can you copy my line for elliott
00:46:37 <oerjan> wat
00:47:15 <oklofok> oerjan: he doesn't like me telling him things
00:47:36 <oerjan> heh
00:47:50 <oklofok> oh yeah five ones does indeed send a V
00:48:04 <elliott> so I and V are the only characters right
00:48:16 <elliott> well, maybe if it's tc you need to insert others, but that's kinda bleh
00:48:19 <elliott> (into the initial string)
00:48:39 <oerjan> elliott: the others if you include them shrink quickly to single isolated digits
00:48:47 <elliott> so they're irrelevant good
00:48:56 <elliott> so you can make a nice pretty drawing program ;D
00:48:58 <oerjan> that can be treated as simply equivalent to V followed by an atom boundary
00:49:12 <oklofok> (also that's the sense in which 110 has been proven tc, in case someone missed the reference for some reason)
00:49:29 <oerjan> (these being the _only_ atom boundaries)
00:49:36 <oerjan> heh
00:50:54 <oerjan> oklofok: now notice that information can only flow leftward in this view
00:51:02 <oklofok> noted
00:51:52 <oerjan> which means that we don't need to worry about what's to the left in order to find out how the blocks themselves evolve. thus i experimented with throwing away the initial V's at each step
00:52:08 <oklofok> ppl can have poop children to their left and also send a new V to their leftmost block
00:52:12 <oklofok> *neighbor
00:52:44 <oklofok> alrighty
00:52:57 <oklofok> makes sense
00:53:03 <oklofok> now i wanna know how that 110 proof goes
00:53:54 <oklofok> so oerjan you know the polynomial hierarchy right
00:54:24 <oerjan> well slightly, it's P^NP, P^P^NP etc. isn't it, and maybe something above that too
00:54:26 <oklofok> a language is sparse if there are only at most p(n) elements of length at most n in it
00:54:45 <oklofok> actually it's P^NP^NP^NP^NP...
00:54:59 <oklofok> P^P^NP = P^NP
00:55:00 <oerjan> oh right
00:55:19 -!- copumpkin has joined.
00:56:12 <oklofok> so you define Sigma_0 = Pi_0 = P, and then Sigma_(i+1) = NP^Sigma_i, Pi_(i+1) = co-Sigma_i
00:56:25 <oklofok> the point of Pi's being clear once i explain the alternative view to this
00:56:26 <oerjan> i don't know the details of that 110 proof i just know it's based on finding gliders that interact the way you want, and making a tag system out of them that requires infinite chain of incoming gliders from both left and right
00:57:13 <oerjan> and there are diagrams of the gliders on the net
00:57:37 <oerjan> (probably on wikipedia, although there was a site that went into some detail of classification)
00:57:46 <oklofok> Sigma_i means you have i alternating quantifiers starting with existential, and Pi_i starts with universal, that is, we have an i-ary predicate, and in Sigma_i we guess the first word w_1, universally quantify over the next w_2, then guess the next and so on, and finally check the predicate for the original input and all the w_i
00:58:19 <oklofok> i-ary predicate that's a P language that is
00:58:51 <oerjan> yeah this fits into how QBF is PSPACE complete
00:59:10 <oklofok> in NP you guess a string of polynomial length, in Pi_1 you universally quantify over all strings of polynomial length, and in general there's alternation up to some length
00:59:50 <oklofok> it does, although i'm not sure in which exact sense
01:00:10 <oklofok> in any case, the polynomial hierarchy is just the union of the Sigma_i
01:00:24 <oerjan> i mean what you are doing is just bounding the number of quantifier switches in a QBF problem, i think
01:01:02 <oklofok> yes, but why does not bounding it give you PSPACE, is there a connection between PSPACE and PH?
01:01:08 <CakeProphet> haha, M-x rot13-other-window
01:01:12 <oklofok> more than just inclusion
01:01:15 <oerjan> (having the same quantifier several times in sequence doesn't increase the count)
01:01:46 <oerjan> well not bounding means having a polynomial rather than constant bound, i guess
01:02:02 <oklofok> we also define some intermediate classes, namely Delta_(i + 1) = P^Sigma_i, and Theta_(i + 1) = polynomial deterministic languages except you can do a logarithmic amount of queries to Sigma_i
01:02:31 <oerjan> don't they always
01:02:45 <oklofok> don't they always what? define intermediate classes? :P
01:02:58 <oklofok> in any case, now i can finally list some results
01:03:10 <quintopia> anyone here know offhand how SMBC is licensed?
01:03:12 <oerjan> generalize to the max
01:03:32 <oklofok> oerjan: sure, but i'm not just giving Theta for fun, i'm using it in a second
01:03:55 <oklofok> as we already know from my previous rants, if there is a sparse co-NP-hard or NP-hard language, then P = NP
01:04:06 <oklofok> that is, the polynomial hierarchy collapses to P
01:04:15 <oklofok> (by induction)
01:04:17 <oerjan> ok
01:04:20 <oklofok> however
01:04:38 <oklofok> this is for hardness w.r.t. many-one reductions or bounded truth table reductions only
01:04:43 <oklofok> familiar with those?
01:04:51 <oerjan> i have to go to bed very soon
01:05:06 <oklofok> well i'm not doing anything complicated, just giving neat results
01:05:14 <oklofok> :P
01:05:34 <oerjan> um as in you have five minutes
01:05:39 <oklofok> ah
01:05:45 <elliott> <oerjan> i don't know the details of that 110 proof i just know it's based on finding gliders that interact the way you want, and making a tag system out of them that requires infinite chain of incoming gliders from both left and right
01:05:48 <elliott> is it actually proven?
01:05:49 <oklofok> well are you familiar with those?
01:05:54 <elliott> I thought thirty was but not one-one-zero
01:05:56 <elliott> or am I mixing those up?
01:06:06 <oklofok> nothing is known about 30
01:06:09 <oerjan> elliott: probably mixing up, 110 was the famous proof...
01:06:12 <oklofok> and it's not the next on the list even
01:06:36 <oerjan> with patented wolfram inflation
01:06:37 <oklofok> 55 or something is the next one to be proven re-complete for the problem i just gave
01:06:51 <oklofok> it's the one with the dancing mushrooms
01:07:26 <oerjan> hm is that the totalistic one
01:07:33 <oklofok> oerjan: many-one reduction from L to L' means you have a deterministic polynomial time turing machine A s.t. w in L iff A(w) in L'
01:08:15 <oklofok> bounded truth table reductions mean you have some constant k such that you have a polynomial turing machine that can do exactly k queries to L', this amounts to just having a truth table
01:08:40 <oerjan> mhm
01:08:58 <oklofok> as for turing reductions, that is, having a sparse set S as the oracle, things get slightly more hairy
01:09:17 <oklofok> if there is a sparse NP-hard set S w.r.t. turing reductions
01:09:25 <oklofok> then PH = Sigma_2
01:09:32 <oklofok> (that is, NP^NP)
01:09:47 <oklofok> if there is a sparse NP-complete set S w.r.t. turing reductions
01:09:58 <oklofok> then PH = Omega_2
01:10:12 <oklofok> (logarithmic amount of queries to NP)
01:10:27 <oklofok> that is all
01:10:42 <oerjan> um i think you called Omega Theta above
01:10:49 <oklofok> yes i did, sorry
01:11:00 <oklofok> in my head it's the actual symbol
01:11:02 <oklofok> i misread
01:11:03 <oklofok> :P
01:11:06 <oerjan> heh
01:11:15 <oerjan> well thanks and good night
01:11:20 <oklofok> yup nighties
01:11:27 -!- oerjan has quit (Quit: leaving).
01:11:42 <oklofok> will give the actual proofs once i grasp them a bit better
01:12:35 <oklofok> for a sparse NP-complete set, the proof is not very hard, but for a hard one, it is not very complete. erm i mean it's pretty complicated.
01:27:14 -!- ralc has quit (Quit: Leaving).
01:32:06 <pikhq> My linear algebra professor is pretty quick on grading.
01:32:16 <pikhq> I've already got the grade on my final.
01:32:24 <pikhq> It was earlier today.
01:32:29 <monqy> "E"
01:32:46 <pikhq> monqy: ?
01:33:11 <monqy> never mind
01:37:40 <oklofok> our cellular automata exam was graded in about 30 minutes
01:37:49 <oklofok> then again there were like 5 people taking it
01:38:15 <pikhq> True, it does help when you're taking a class with a handful of other people.
01:38:39 <quintopia> i wish i could take that class. it sounds awesome.
01:38:42 <pikhq> Now just waiting on one more class's grade.
01:39:23 <oklofok> the cellular automata class was pretty awesome
01:41:54 <oklofok> lecture notes can be found at http://users.utu.fi/jkari/ca/, highly recommended
01:42:03 <oklofok> there aren't really any books on ca
01:43:04 <oklofok> and if someone says a new kind of science i'm going to explode :D
01:43:20 <pikhq> ais523 should write one.
01:43:24 <elliott> oklofok: try a new kind of science
01:43:26 <elliott> pikhq: ais does ca?
01:43:33 <oklofok> erm what does ais know
01:43:37 <pikhq> elliott: Well, he's done at least one at the behest of Wolfram.
01:43:50 <oklofok> the guy who wrote those lecture notes should write a book
01:44:04 <oklofok> i doubt ais knows even the basics of ca theory
01:44:21 <elliott> pikhq: eh?
01:44:23 <oklofok> although making specific ca's is of course a very useful skill
01:44:24 <elliott> two,three wasn't a ca
01:44:32 <oklofok> and i'm sure ais is very good at that
01:44:39 <pikhq> Oh, it wasn't? Thought it was a CA. Anyways.
01:44:48 <pikhq> I'm not sure why I said that, anyways.
01:45:43 <oklofok> i'm gonna say it too now, so you don't get too self-conscious
01:45:50 <oklofok> ais523 should write a book on ca.
01:46:20 <oklofok> okay maybe finally worky time ->
01:47:00 <CakeProphet> so are emacs regexp the same as perl's?
01:48:04 <elliott> CakeProphet: no
01:48:14 <elliott> emacs is older than perl i think anyway
01:48:15 <elliott> yes it is
01:48:23 <elliott> they're more like posix regexps
01:54:55 <quintopia> wow. swedes are the most likely to be immune to HIV? damn you again, swedes!
01:56:38 -!- augur has quit (Remote host closed the connection).
02:00:23 -!- CakeProphet has quit (Ping timeout: 246 seconds).
02:03:02 -!- augur has joined.
02:19:58 -!- CakeProphet has joined.
02:19:58 -!- CakeProphet has quit (Changing host).
02:19:58 -!- CakeProphet has joined.
02:21:05 <CakeProphet> Oh hey, a perl regex extension.
02:21:43 <CakeProphet> because, honestly, I don't really feel like learning an outdated regex syntax..
02:24:23 <Sgeo> How many regex syntaxes are there?
02:24:27 <elliott> its literally identical
02:24:30 <elliott> apart from \ before ( and ) i think
02:24:42 <pikhq> Sgeo: As many as there are implementations of regular expressions.
02:25:03 <quintopia> tbf pikhq, they all have the basics the same
02:25:14 <quintopia> * is always kleene star
02:25:21 <quintopia> [] is always a character class
02:25:22 <pikhq> Yeah, they do have a reasonable common subset.
02:25:42 <pikhq> Helps that they're all pretty much reimplementations of ed regexps.
02:26:01 <quintopia> and you could at least do matching of arbitrary r.e.s with that common subset
02:26:42 <CakeProphet> | requires escaping as well
02:27:08 <CakeProphet> and the \ special characters are pretty different.
02:28:17 <CakeProphet> and it doesn't seem to have lookaround.
02:33:54 <CakeProphet> awww, the link is broken. No perl regex in emacs seems to exist.
02:37:57 -!- augur has quit (Remote host closed the connection).
03:07:14 <pikhq> Y'know, the Nazis had the most *amazing* hubris.
03:11:00 <Sgeo> I'm going to write a language that compiles to LSL
03:11:24 <monqy> what's so great about lsl
03:11:33 <monqy> apart from it being used in second life
03:11:39 <Sgeo> That's the only thing good about it.
03:12:27 <monqy> the question now is what's so great about second life
03:14:03 <elliott> virtual world zomg
03:14:45 <monqy> and what could you possibly want to script in it
03:15:16 <elliott> hey Sgeo what's the function to form a range sequence in racket
03:15:18 <Sgeo> A helmet that takes you 340 trillion trillion trillion meters up
03:15:21 <elliott> (for ([i ???]) ...)
03:15:28 <Sgeo> in-range
03:15:36 <elliott> oh right that
03:15:50 <elliott> im making an HQ9+ interpreter dude
03:15:52 <Sgeo> You started making fun of me again when I was pulling my hair out looking for it
03:15:54 <monqy> why do you want to go 340 trillion trillion trillion meters up in second life
03:15:58 <elliott> Sgeo: yep
03:16:02 <elliott> except mine is better cuz its an actual racket language
03:16:08 <monqy> oh snap
03:16:13 <elliott> yeah
03:16:18 <monqy> I gave up on mine when it stopped being fun
03:16:26 <elliott> #lang reader "hq9+.rkt"
03:16:27 <elliott> HQ9+
03:16:30 <elliott> totally a valid program now
03:16:32 <elliott> if you install it globally
03:16:34 <elliott> #lang hq9+
03:16:35 <elliott> HQ9+
03:16:40 <elliott> it even exports the final accumulator as a module
03:16:47 <elliott> fuckin' integrated up the ass
03:17:00 <Sgeo> I still haven't really read about or absorbed the module system
03:17:32 <pikhq> Y'know what's better than Second Life?
03:17:34 <pikhq> *Minecraft*.
03:17:46 <Sgeo> pikhq, there's no scripting in Minecraft
03:17:58 <pikhq> Sgeo: There's Redstone. What else could you want?
03:18:25 <Sgeo> The ability for redstone to affect any change I want in the area around it
03:18:33 <pikhq> HEATHEN
03:18:49 <elliott> Sgeo: pistons
03:19:14 <elliott> racket's documentation is awesome
03:22:05 -!- augur has joined.
03:24:13 <elliott> hey Sgeo what's the function to concat n sequences
03:35:40 <Sgeo> Probably something ending in -append or -append*?
03:36:11 <monqy> is it stream-concat
03:36:28 <monqy> I dunno what a sequence is but
03:36:30 <elliott> it's stream-append
03:36:32 <elliott> erm
03:36:33 <elliott> sequence-append
03:36:39 <monqy> oh
03:36:51 <elliott> im just thinking now how to handle the ~elegance~
03:36:53 <monqy> that in-range thing said it made a stream I think??
03:37:10 <Sgeo> monqy, streams are sequences
03:37:36 <monqy> and I searched for stream concat and found stream-concat I guess
03:37:44 <monqy> maybe I should actually learn racket sometime
03:38:15 <Sgeo> stream-concat is in one of Racket's SRFI thingies
03:38:23 <monqy> srfi 41
03:38:38 <monqy> scheme request for implementation right
03:39:18 <elliott> begin (possibly implicit): bad syntax (illegal use of `.') in: (begin . #<void>)
03:39:19 <elliott> heh
03:39:23 <elliott> monqy: yes
03:39:44 <monqy> racket is intimidating
03:40:01 <monqy> so much standard library & other extra stuff
03:41:22 <monqy> things with # in them are especially spooky
03:42:35 -!- azaq23 has quit (Read error: Operation timed out).
03:43:56 <elliott> hmm
03:43:59 <elliott> does for actually result in anything
03:44:07 <Sgeo> What is it called when an anonymous function can access and read variables bound at the higher level, like a closure, but can't modify them such that the higher level sees the modification?
03:44:52 <elliott> oh, i need for/list
03:45:06 <monqy> even sgeo knew to use for/list
03:45:09 <elliott> Sgeo: can they still mutate the objects if they're mutable?
03:45:11 <monqy> you should learn from the master
03:45:12 <elliott> e.g. append to a list in a higher scope
03:46:05 <Sgeo> Hmm. Not sure. Let's say yes (Although I want to know the answer for no too)
03:48:17 <elliott> Sgeo: then python two scoping is what it is calle
03:48:17 <elliott> d
03:48:20 <elliott> aka terrible scoping
03:49:00 <Sgeo> Well, keep in mind that I am n00bishly trying to imagine how I'd compile a language with lambdas into a language without them
03:49:34 <Sgeo> I'd make a huge funcall() function, which would accept a string naming the function, a list of bindings for the "closure", and a list of arguments
03:49:34 <elliott> ok, everything works but Q as a FULL RACKET LANGUAGE
03:50:19 <elliott> or
03:50:21 <elliott> you could just
03:50:25 <elliott> transform scopes into mutable structures
03:50:32 <elliott> with pointers to their parent scopes
03:50:41 <elliott> and have a closure be code + scope
03:50:45 <monqy> why would you even want mutability
03:52:02 <monqy> oh right you probably can't optimize the lsl or whatever it is very well to make up for a pure functional language
03:52:17 <Sgeo> I don't think LSL has tail recursion. Easy fix: Functions (after being transformed into something vaguely-CPS-like) just return the next function, instead of calling it
03:52:40 <monqy> so trampolining?
03:52:44 <Sgeo> Yes
03:52:50 <Sgeo> iirc what trampolining is
03:53:23 <monqy> you could also do TCO on it if you have the necessary control structures
03:53:30 <monqy> (you probably don't)
03:54:38 <Sgeo> Well, my current vague plan is to go code with continuations -> intermediate language with first class functions in CPS -> LSL
03:54:53 <elliott> . hq9+.rkt:11:0: read: expected a `)' to close `('; indentation suggests a missing `)' before line 15; newline within string suggests a missing '"' on line 38
03:54:59 <monqy> -> hats that take you into the air
03:55:01 <elliott> Sgeo: Why do you need continuations
03:55:09 <elliott> Oh, I see.
03:55:20 <monqy> maybe it's useful for making hats or something
03:55:39 <elliott> Sgeo: did you actually understand what i said about scopes
03:56:20 <Sgeo> elliott, not.. really, no... but are you asking just to ask, or do you think it's relevant to why I want continuations (it isn't)
03:56:41 <elliott> Sgeo: i was asking because otherwise you're going to implement it terribly?
03:56:49 <elliott> but im actually surprised you've managed to not understand something that simple, gj
04:08:29 -!- elliott has quit (Ping timeout: 246 seconds).
04:09:09 -!- sebbu has quit (*.net *.split).
04:12:03 -!- sebbu has joined.
04:13:16 <pikhq> Fucking Linnaean taxonomy.
04:13:20 <pikhq> Why does anyone still use it?
04:15:39 <coppro> inertia
04:15:45 <pikhq> Fuck inertia.
04:16:04 <coppro> why is your country still serving me drinks in some unit called an 'ounce'
04:16:09 <coppro> not to be confused with an 'ounce'
04:16:22 <pikhq> Because we hate everyone outside the country.
04:16:36 <coppro> im in ur country
04:16:38 <coppro> working ur jobz
04:16:40 <pikhq> Incidentally, the unit is a "fluid ounce". Not to be confused with the "dry ounce" or the "ounce".
04:17:00 <pikhq> (note: dry ounce archaic)
04:26:54 <Sgeo> Oh, duh
04:26:58 <Sgeo> I understand what you said
04:27:52 <Sgeo> And e left
04:31:42 <Sgeo> I can't use native assignment
04:31:50 <Sgeo> Actually, I can't use much of native anything
04:32:09 <Sgeo> Can't use native while
04:32:27 <Sgeo> (At least, not at the continuation-using -> CPS level)
04:33:14 <monqy> who needs assignment
04:37:20 -!- augur has quit (Ping timeout: 252 seconds).
04:37:43 <Sgeo> LSL has a lot of issues. I'm not going to deviate that far from the host language
04:37:54 <Sgeo> I'm just fixing the most pressing issue I see.
04:38:13 <monqy> "no continuations"
04:38:21 <Sgeo> Yes.
04:39:12 <monqy> does it have first-class functions or proper closures or anonymous functions or anything? I imagine that would be a far more pressing issue
04:40:28 <Sgeo> No first class functions or closures or anonymous functions
04:40:38 <Sgeo> Those will be added, then continuations on top of that
04:40:55 <Sgeo> http://pastebin.com/2i0AfxhS how to make a thing that repeats what others say
04:41:03 <Sgeo> You can't just call a function that gets the last thing said
04:41:40 <Sgeo> Or call a function that takes a closure as a callback
04:41:54 <monqy> this is awful
04:42:10 * Sgeo agrees.
04:42:20 <Sgeo> Unless you were mocking me
04:42:27 <monqy> no this is legitimately awful
04:48:33 <Sgeo> Hmm, considering that I'm not going to implement "last thing said" but instead "next thing said"...
05:42:56 -!- NihilistDandy has joined.
05:47:55 -!- augur has joined.
06:33:13 <Sgeo> Um.
06:33:21 <Sgeo> Does trampolining require CPS?
06:34:31 <monqy> I think it requires tail calls so you'd need continuations if you want to do fancy stuff
06:34:47 <monqy> why do you ask?
06:35:49 <Sgeo> I was planning on making an intermediate language with TCO and first-class functions etc., but can't imagine how outside of a CPS style
06:36:22 <monqy> hint: convert to CPS
06:36:40 <pikhq> Yeah, just do the continuation-passing transform.
06:39:19 <Sgeo> Ok
06:39:25 * Sgeo has homework he needs to do rght now
06:39:31 <Sgeo> Instead of thinking about this
06:39:31 <Sgeo> :/
06:41:31 <Sgeo> Difficulty: I don't know where any of the papers are
06:43:56 -!- augur has quit (Remote host closed the connection).
06:47:50 <Lymia> CPS? Continuation Passing Style?
06:48:01 <Sgeo> Yes
06:53:09 <Sgeo> Do if, while, etc. get transformed into functions? I think they _might_
06:53:32 <Sgeo> I think so
06:54:08 <Sgeo> I should start writing down my thoughts. Or start doing homework, that might be better.
06:56:16 <monqy> what do you mean get transformed into functions
07:00:50 <Sgeo> As in, I make a while(somecode, someothercode, args-for-cps...) thing
07:01:34 <Sgeo> I can't leave a while(){} loop stay a native while(){} loop
07:02:27 -!- CakeProphet has quit (Ping timeout: 248 seconds).
07:02:28 <Sgeo> I'm wondering now if I should make an intermediary language with functional stuff but no TCO, and put TCO+CPS on top of it
07:03:54 -!- augur has joined.
07:04:10 -!- CakeProphet has joined.
07:04:45 <Sgeo> The important thing I think is that I can't do TCO without CPS or visa versa. Doesn't mean I can't do first-class functions without those.
07:06:04 <Sgeo> Then again, I ultimately need a funcall kind of function for the functional layer, and I don't want to make another on top of that just... hmmm
07:07:22 <monqy> pretty sure TCO just means you make tail calls use/replace the current call frame rather than making a new one (and keeping the old one around until you return, but since it's a tail call you won't be doing anything else, so keeping it around is useless)
07:08:08 <Sgeo> I know what TCO means, but I can't really implement it without trampolining, and to do trampolining I need CPS
07:08:09 <monqy> TCO goes nicely with CPS because iirc CPS means every call is necessarily a tail call
07:08:20 <monqy> well you don't need CPS but
07:08:28 <monqy> you'd only be able to do the trampolining on tail calls
07:08:33 <monqy> I think
07:08:37 <Sgeo> Hmm, hold on
07:08:54 <Sgeo> Um, right >.>
07:09:21 <Sgeo> For some reason, I was mentally applying trampolining to everything, including non-tail-calls
07:10:07 <monqy> as for while loops, you don't need them at all
07:10:14 <monqy> just use recursion
07:10:30 <Sgeo> My syntax is going to be LSL-like
07:10:35 <Sgeo> With obvious additions
07:10:43 <monqy> 1) why? (2) what does that mean
07:11:11 <Sgeo> 1) I want it to be easy for those used to LSL to use. 2) What do you mean, what does it mean? It means I'm not implementing a Scheme
07:12:08 <monqy> I mean does it seriously have major semantic ramifications
07:12:45 <Sgeo> I don't think so
07:12:54 <Sgeo> I am scrapping the stupid events in place of something else
07:13:01 <monqy> and I think the semantic differences between your language and LSL would be a lot more meaningful than syntax
07:13:25 <Sgeo> But my syntax will still have while loops.
07:13:27 <monqy> I personally wouldn't hold onto the old syntax for false familiarity
07:13:32 <monqy> why do you want while loops
07:13:34 <Sgeo> Even though I transform them into something else
07:14:01 <Sgeo> Because people know how to use them?
07:14:26 <Sgeo> Semantics of new language: LSL with first-class functions + TCO + Continuations
07:14:30 <Sgeo> Roughly
07:14:37 <monqy> I'm assuming people who want to use your language know something or two about those things
07:14:46 <monqy> and I'm assuming people who know those things know about recursion
07:15:05 <Sgeo> monqy, they might not. I'm hoping my sample code will amaze and astound
07:15:11 <Sgeo> >.>
07:15:27 <monqy> continuations are sort of not as easy to grasp as recursion
07:15:49 <Sgeo> monqy, but a standard library using them will be
07:16:22 <monqy> what about first-class functions, closures, &c., then
07:16:24 <Sgeo> "Hey, you can just get the next line that will be said in chat with: list line = cpsListen(0, "", NULL_KEY, "")"
07:17:04 <Sgeo> monqy, I'll mention those too. Anyone who wants to use them can use them.
07:17:08 <monqy> anyway, is while going to be specially handled by your compiler or just a macro
07:17:18 <Sgeo> Specially handled
07:17:23 <monqy> :(
07:21:26 <monqy> anyway you can implement it in terms of if and whatever recursion deal you use, so I wouldn't worry about it
07:22:50 <monqy> for if, I think the simplest way to do it is if you implement it as a primitive operation that takes a boolean and two continuations, and evaluates to the corresponding continuation
07:33:32 <Sgeo> `quote pregnant
07:33:35 <HackEgo> ​194) <alise> Gregor: You should never have got her pregnant. <Gregor> what whaaaaaaaaaaaat \ 195) <benuphoenix> the pregnant ones are usually taken already. \ 235) <Vorpal> (had real world issues) <Vorpal> (to deal with) <ehird> Vorpal's pregnant. <Vorpal> yes
07:35:43 -!- monqy has quit (Quit: hello).
07:38:28 <cheater79> `quote birth
07:38:30 <HackEgo> ​160) <calamari> anmaster gonna give him a birthday bj? <AnMaster> IF ONLY I COULD FIND MY PHONE \ 259) <fizzie> And to think: if only we wouldn't celebrate birthdays, there would be no birthday paradox, and we could get by with half as long hash functions. (What do you mean it doesn't work that way?) \ 350) <ZOMGMODULES>
07:38:58 <Sgeo> ZOMGODULES _what_?
07:39:09 <Sgeo> `quote 350
07:39:10 <HackEgo> ​350) <ZOMGMODULES> elliott: parents who put just "Chris" on a birth certificate are... like parents who put just "Bob" on a birth certificate.
07:39:26 <Sgeo> `pastequotes pregnant
07:39:28 <HackEgo> ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.25433
07:39:54 <Sgeo> `pastequotes birth
07:39:55 <HackEgo> ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.9871
07:40:14 <Sgeo> @tell Gregor Fix your `quote
07:40:14 <lambdabot> Consider it noted.
07:53:51 <fizzie> How was it broken now?
07:56:44 <fizzie> (Also that @tell is one of the worst bug reports ever.)
07:58:31 -!- oerjan has joined.
07:58:48 <Sgeo> fizzie, there's more to the birth stuff than shown n canenl
07:58:49 <Sgeo> channel
07:59:11 <Sgeo> @tell `quote birth doesn't show all birth quotes.
07:59:11 <lambdabot> Consider it noted.
07:59:17 * Sgeo facepalms
07:59:25 <Sgeo> @tell Gregor `quote birth doesn't show all birth quotes.
07:59:25 <lambdabot> Consider it noted.
08:00:47 <fizzie> Sgeo: I hardly think IRC's message length limit is Gregor's fault.
08:01:02 <Sgeo> But it could give some indication that it has been reached...
08:05:07 <fizzie> Even that is not really something the `quote command should worry about. (It doesn't do that wrapping to one line with \s either.)
08:05:44 <Sgeo> Well, HackEgo should worry bout it then
08:05:45 <Sgeo> about
08:07:03 <Lymia> `quote dead
08:07:04 <HackEgo> ​225) <Zuu> it seems that CUIL is dead \ 367) <oklopol> haha, god made one helluva blunder there :DS <oklopol> "WHOOPS HE AIN'T DEAD YET!" <oklopol> "luckily no one will believe him because christians are such annoying retards"
08:07:09 <Lymia> `quote hug
08:07:11 <HackEgo> ​314) <nddrylliog> back to legal tender, that expression really makes me daydream. Like, there'd be black-market tender. Out-of-town hug shops where people exchange tenderness you've NEVER SEEN BEFORE.
09:00:13 -!- oerjan has quit (Quit: Later).
09:06:33 <Patashu> I was reading that CA lecture from a while back and it got me thinking, anyone ever played around with hexagonal CAs?
09:06:54 <Patashu> you could use mirek's cellebration and the direction weighted rules to write one
09:07:26 <Patashu> although I suspect it wouldn't be too interesting without diagonals
09:08:42 <Patashu> hmm yeah, it'd be really claustrophobic
09:42:20 -!- Vorpal has joined.
10:22:06 -!- Phantom_Hoover has joined.
10:26:12 <Patashu> Anyone about
10:27:02 <Patashu> I'm messing around with some openGL for a university assignment, and I'm running into a really weird behaviour. Only half of my scene is receiving diffuse/specular light
10:27:47 <Patashu> Huh, my light is directional for some reason
10:27:52 <Patashu> I wonder what's doing it, because I never set it to be one
10:42:56 -!- aloril has quit (Ping timeout: 240 seconds).
10:58:01 <Patashu> oh
10:58:07 <Patashu> apparently all I had to do was specify normal vectors
10:58:42 -!- aloril has joined.
11:03:03 <fizzie> Do remember to enable GL_NORMALIZE or GL_RESCALE_NORMAL if you intend to use a modelview matrix that has scaling in it, to avoid non-unit-length-normal related lighting issues.
11:29:42 -!- FireFly has joined.
12:03:32 -!- BeholdMyGlory has joined.
12:12:13 <Patashu> alright, I'll do that
12:13:42 <Patashu> couldn't find GL_RESCALE_NORMAL so going with the first
12:31:33 -!- HolyBlood has joined.
12:33:01 <fizzie> The first is potentially slower. (But also works when the modelview matrix has nonuniform scaling.)
12:33:34 <fizzie> (Neither's needed if you don't scale at all and always provide unit-length normals.)
12:41:57 <Patashu> next part's going to be tough: I have to model the sydney opera house using NURBS
12:42:07 <Patashu> e.g. create something that, if you squint at it funny, looks like you were trying to make the sydney opera house
12:43:28 <Patashu> I know how to use nurbs as in what commands activate it in opengl, I don't know how to use nurbs as in 'if I want a shape like THIS then I set control points and knot vectors like THIS and dun'
12:45:51 <oklofok> "<Patashu> I was reading that CA lecture from a while back and it got me thinking, anyone ever played around with hexagonal CAs?" <<< in what sense?
12:46:02 <oklofok> 2d ca on a hexagona grid?
12:46:28 <Patashu> a CA that instead of having a chessboard topology has a hexagonal topology, yeah
12:46:35 <oklofok> each of those is easily seen to be conjugate to a normal 2d ca
12:46:45 <Patashu> but I thought about it for a bit and it was really...constrained, with 6 neighbours vs 8
12:46:46 <Patashu> really?
12:46:48 <oklofok> careful about the use of "topology" there
12:47:14 <oklofok> given that "topology" usually refers to the actual topology of the space of configurations
12:47:20 <oklofok> which is rather different
12:47:47 <oklofok> Patashu: usually CA can have an arbitrarily large neighborhood
12:48:17 <Patashu> yeah
12:49:15 <oklofok> and even if you don't have that, if F is an arbitrary CA with arbitrary nbhd size, you can find a subshift S and a CA G with a "radius 1" neighborhood operating on S such that (S, G) is conjugate to your CA F. conjugate means "is essentially the same CA" and subshift means you don't take all possible starting configurations, but a natural subset
12:49:44 <oklofok> that's probably a bit hard to internalize but i just gave an hour long lecture so not feeling particularly ranty
12:51:07 <oklofok> so what i just said was that the CA that only look at their nextdoor neighbors when deciding on the new state are essentially the same thing as all CA
12:51:20 <Patashu> humm...
12:51:25 <Patashu> because they're all turing complete, I guess?
12:51:40 <Patashu> so you can always find another CA that can compute the same things?
12:51:42 <oklofok> well not quite
12:51:46 <oklofok> rather your latter statement
12:52:28 <oklofok> well for instance consider this
12:52:36 <oklofok> you have a 1d ca that has neighborhood radius 3
12:53:02 <oklofok> so its local function, when deciding the new state at position x, looks at x-3, x-2, x-1, x, x+1, x+2 and x+3
12:53:21 <oklofok> now call the finite set of states S
12:53:41 <oklofok> (the states you use in the configurations, in game of life those S = {0, 1})
12:53:44 <oklofok> *-those
12:53:56 <oklofok> now we can construct another CA as follows
12:54:12 <oklofok> as the new states take S^6
12:55:00 <oklofok> now the idea is the new state of (x_1, ..., x_6)
12:55:26 <oklofok> can be computed by just looking at the left and right neighbor, and the old state of (x_1, ..., x_6)
12:56:21 <oklofok> when we think of the configuration ...(x_1, ..., x_6)(y_1, ..., y_6)(z_1, ..., z_6)... as being a "compressed" version of ... x_1 ... x_6 y_1 ... y_6 z_1 ... z_6 ...
12:56:25 <oklofok> does that make any sense?
12:57:03 <oklofok> i'll gladly explain notation if that's unclear
12:58:09 <Patashu> S^6 means you're having ^6 as many states, so you can represent all the possible combinations of x-3, x-2...etc in just one spot?
12:58:15 <oklofok> oh sorry
12:58:21 <oklofok> S^6 is just standard mathematical notation
12:58:23 -!- ais523_ has joined.
12:58:31 <oklofok> it means SxSxSxSxSxS where x is cartesian product
12:58:39 <Patashu> right
12:58:46 <Patashu> ah, set multiplication
12:58:52 <oklofok> so S^6 means we group 6 states into one.
12:58:54 <Patashu> right
12:58:55 <Patashu> yeah
12:59:01 <Patashu> interesting
12:59:14 <oklofok> when you've grouped 6 states into one, a rule with radius 3 only needs to look at the nextdoor neighbors
12:59:15 <ais523_> I didn't even realise there was a channel called #
12:59:23 <Patashu> you can have a channel called #
12:59:28 <ais523_> I might have made some sort of typo, as I ended up joining it automatically when I started this webclient
12:59:42 <ais523_> I'm not sure if anyone there was there deliberately, there were about 15 people
12:59:49 <oklofok> and yes, it's interesting, but things get WAY more interesting than that
12:59:59 <Patashu> it's probably set up as a hipster establishment
13:00:12 <Patashu> e.g. 'cool club for cool people who know that you can have channels called bizzare non-things'
13:02:51 <Patashu> *cool kats
13:02:56 <Patashu> couldn't leave that unharnassed
13:03:11 <oklofok> but in any case as i said the hexagonal grid is just the 2D CA, but in fact people have done research on CA running on weirdly shaped configurations, iirc the garden of eden theorem for instance has been generalized for all automatic groups by this famous blind guy
13:03:59 <oklofok> garden of eden theorem = CA is surjective iff it's locally injective
13:04:08 <oklofok> surjective meaning all configurations have a preimage
13:04:24 <oklofok> and locally injective meaning there cannot be two configurations that have the same image and only differ in a finite amount of cells
13:05:11 <oklofok> (and image of configuration c of course means G(c) where G is your automaton, and similarly for preimage)
13:05:57 <oklofok> automatic group = certain kind of group, not very restrictive afaiu
13:06:26 <Patashu> there are patterns in the game of life that collapse into the same thing, e.g. if you just add a random on cell out in the middle of nowhere
13:06:29 <Patashu> so it's not surjective
13:06:41 <oklofok> an infinite group is the natural place to run a CA, it means an infinite graph that looks the same no matter where you look
13:06:51 <oklofok> Patashu: yes!
13:06:56 <oklofok> exactly
13:07:10 <oklofok> and in fact it is very hard to show GoL is surjective without the garden of eden theorem
13:07:30 <oklofok> the smallest pattern without a preimage (proving nonsurjectivity) is of size more than 10x10
13:07:52 <oklofok> (and even after you find that it's certainly not easy to show it doesn't have a preimage)
13:08:12 <Patashu> it's kind of surprising it has to be that large
13:08:26 <oklofok> no one says it has to be large
13:08:31 <oklofok> sorry
13:08:33 <Patashu> I mean in the game of life
13:08:34 <oklofok> smallest KNOWN pattern
13:08:36 <oklofok> :P
13:08:51 <Patashu> yeah but I mean, you'd think there'd be a trivial example
13:09:14 <Patashu> what patterns in the game of life turns into an arbitrarily big square of on cells?
13:09:26 <oklofok> you would, but this is how it usually goes, hard to show nonsurjectivity, but easy to show local noninjectivity, which is proven to be equal to nonsurjectivity by the theory
13:09:34 <ais523_> what's the smallest pattern with no known preimage?
13:09:40 <Patashu> http://en.wikipedia.org/wiki/Garden_of_Eden_(cellular_automaton)
13:09:46 <ais523_> (that's different from the smallest known pattern with no preimage)
13:09:50 <Patashu> oh!
13:09:51 <Patashu> you're right
13:10:08 <oklofok> ais523_: it's easy to check whether something of size smaller than 10x10 has a preimage
13:10:19 <ais523_> via brute force?
13:10:21 <oklofok> so there probably isn't a known example of something we don't know a preimage for
13:10:23 <oklofok> ais523_: yes
13:10:29 <ais523_> ah, OK
13:10:34 <oklofok> *easy enough
13:10:56 <oklofok> Patashu: who's right?
13:11:02 <Patashu> the proof of the garden of eden theorem seems similar to the pigeonhole principle
13:11:21 <ais523_> it pretty much is, isn't it?
13:11:28 <oklofok> i've probably proven it here some time
13:11:33 <oklofok> but anyhow the 1D case is very easy
13:11:48 <ais523_> and the finite case is also very easy
13:11:59 <oklofok> the lecture notes i linked earlier have a very nice illustration of the proof for a 1D automaton
13:12:02 <oklofok> ais523_: what does that mean?
13:12:23 <oklofok> you mean CA running on a finite group? :D
13:12:30 <ais523_> oklofok: or on a finite playfield
13:12:33 <ais523_> e.g. Life on a torus
13:12:50 <oklofok> yeah then it's trivial that surjectivity = injectivity of course
13:12:55 <ais523_> ep
13:12:58 <ais523_> *yep
13:13:03 <ais523_> so the proof is even easier
13:13:07 <oklofok> and injectivity = local injectivity by definition
13:13:19 <oklofok> easier, yes, but that's just set theory
13:13:35 <oklofok> nothing CA specific about it
13:13:37 <ais523_> it might even be possible to prove in pure category theory
13:13:41 <oklofok> unlike the infinite cases
13:13:57 <Patashu> http://en.wikipedia.org/wiki/Day_%26_Night I've always found this to be a very cool CA
13:14:05 <Patashu> it's as vibrant as the game of life
13:14:09 <Patashu> and symmetric
13:14:36 <oklofok> yeah that's kind of pretty
13:14:43 <cheater__> ais523_: can C have monads?
13:14:50 <Patashu> if you download mirek's cellebration it has lots of examples for day and night
13:15:03 <Patashu> sparkers of lots of periods, spaceships, spaceship guns, novas...
13:15:06 <ais523_> cheater__: I think pretty much any language can, but in C they'd be so awkward to express in a functional way that it probably wouldn't be worth it
13:15:20 <oklofok> ais523_: the theorem that CA = continuous shift commuting functions on any playfield can be proven by just using category theory
13:15:39 <ais523_> yes, it sounds like the sort of thing that would eb
13:15:40 <ais523_> *be
13:16:07 <oklofok> every CA is obviously continuous and shift commuting, but the other direction was one of the first results in CA theory
13:16:15 <oklofok> nowadays considered trivial
13:16:26 <cheater__> ais523_: what would a monad do in an imperative language?
13:16:31 <ais523_> yep, I was thinking "isn't that obvious? oh right"
13:16:39 <cheater__> ais523_: let's make it easier and take an imperative, functional language like python
13:16:41 <ais523_> cheater__: control computation flow
13:16:50 <cheater__> yeah but like
13:16:51 <ais523_> here's a simple example that came up in my job recently
13:16:59 <cheater__> how would that look in python?
13:17:00 <cheater__> ok go on
13:17:01 <Patashu> why is it that in openGL you define normals on vertices, not surfaces...
13:17:06 <ais523_> suppose I have a set of constraints, and I want to transform them into a simpler set of constraints
13:17:13 <oklofok> ais523_: i doubt it's obvious to people who don't know the topology of the configuration space at least
13:17:15 <ais523_> some of the constraints are useless things like 0 <= 0 that I want to delete
13:17:16 <oklofok> do you know it?
13:17:23 <ais523_> oklofok: no
13:17:27 <ais523_> I realised it was only obvious in one direction
13:17:31 <oklofok> yeah
13:17:37 <cheater__> Patashu: because normals on higher-dimension cells are just interpolations.
13:17:45 <ais523_> cheater__: and some of the other constraints are things like xy = 0, which I want to transform into x = 0 and y = 0
13:17:50 <cheater__> whereas you can't interpolate when you go to a lower dimension.
13:18:08 <oklofok> the topology is such that continuity of G essentially means "if you change something in c, the image of G(c) only changes in a finite amount of places"
13:18:28 <cheater__> ais523_: you mean x = 0 or y = 0
13:18:31 <cheater__> ais523_: but ok, go on
13:18:36 <ais523_> cheater__: err, right
13:18:37 <oklofok> that's not quite what it means, but close enough
13:18:41 <ais523_> the actual example was more complicated
13:18:45 <ais523_> and it needs to be an and for this to work
13:18:46 <cheater__> yeah
13:19:08 <ais523_> let's say, xy <= z implies x <= z and y <= z, as I was working with positive integers at the time
13:19:12 <ais523_> I think that one's correct
13:19:24 <ais523_> so what I did, when I was writing in OCaml, was I wrote a function that took a constraint as an argument, and returned a list of constraints
13:19:25 <cheater__> it isn't
13:19:32 <ais523_> it is for positive integers, right?
13:19:36 <cheater__> nope
13:19:40 <ais523_> counterexample?
13:19:51 <cheater__> 1 <= 1, 2 > 1, 0.5 < 1
13:19:56 <Patashu> lol
13:20:02 <ais523_> since when was 0.5 a positive integer?
13:20:06 <Patashu> I like how this discussion has turned to the arbitrary examples being wrong therefore you are wrong
13:20:08 <cheater__> oh, *integers*
13:20:10 <cheater__> alright
13:20:21 <cheater__> yes, then it's obviously true :D
13:20:26 <cheater__> ok go on please
13:20:31 <ais523_> Patashu: nah, it's just trying to get things straight otherwise the examples wouldn't work well
13:20:34 <cheater__> let's take that example, it is correct
13:20:39 -!- azaq23 has joined.
13:20:41 <oklofok> Patashu: well that's called a counterexample
13:20:57 <oklofok> there was a universal quantifier in ais523_'s statement
13:21:03 <ais523_> now, I have this function, let's call it transformConstraints, which transforms 0<=0 into [] and xy<=z into [x<=z; y<=z]
13:21:12 <oklofok> so you just need a specific example for which it doesn't hold to disprove it
13:21:23 <ais523_> and what I do, is I apply it to every element of my constraints, so I write List.concat (List.map transformConstraints constraints)
13:21:31 <ais523_> and then I realised I'd written a monad
13:21:48 <ais523_> see, there's no actual reason for the constraints to be in a list, as the order isn't relevant
13:21:56 <oklofok> although after you made the connection GoL locally noninjective => GoL nonsurjective, maybe i shouldn't assume you're an idiot
13:21:56 <ais523_> so I could just as easily have used a set, or a multiset, or whatever
13:22:10 <Lymia> http://www.reddit.com/r/Logos/comments/hdzll/reddit_logos_for_the_72_hour_countdown_for_the/
13:22:30 <Patashu> The Bible Guarantees It!
13:22:36 <cheater__> ais523_: ok, go on
13:22:40 <ais523_> and I was basically writing a monad action there
13:22:49 <ais523_> I take a number of possible computation paths, and transform each into a set of others
13:23:11 <Lymia> Reddit better do this.
13:23:19 <ais523_> so, say, in the case of Maybe, if you get Nothing as input you produce Nothing as output, always, if you get Just x you produce either Just y or Nothing as output
13:23:32 <ais523_> in the case of List and Set, you can produce multiple outputs, each of which is then treated independently from then on
13:23:53 <ais523_> so in the List monad, you have concatMap as >>=, and \x -> [x] as return
13:24:36 <ais523_> that's just what I was doing in that OCaml code; if I couldn't transform a constraint I left it alone (i.e. calling return), if I could I returned 0 or 1 or more results, and I concatMaped them together
13:25:13 <ais523_> and so, if I was working in Haskell, I could just have transformed 0<=0 into mzero and xy<=z into x<=z `mplus` y<=z
13:25:19 <ais523_> and then it'd have worked in any MonadPlus at all
13:25:40 <ais523_> (the difference between MonadPlus and Monad is that in MonadPlus, there's also an operator `mplus` for combining multiple outputs)
13:25:48 <ais523_> * (return x<=z `mplus` return y<=z)
13:26:11 <ais523_> that way, I could have run transformConstraints in any MonadPlus at all, and it wouldn't be constrained to lists
13:26:29 <ais523_> so there, there's a situation where I used a monad in OCaml, and didn't even notice until after I'd written the program
13:26:49 <cheater__> so you could do it on trees too?
13:26:51 <ais523_> you could do exactly the same thing in Python, again quite easily by mistake
13:27:05 <ais523_> the problem with trees is that they don't quite have the same sort of structure
13:27:21 <cheater__> why?
13:27:23 <ais523_> all monads really do is add an "a before b" structure to expression evaluation; that's how the list knows which order it should end up in
13:27:27 <cheater__> actually no never mind
13:27:32 <cheater__> i don't want to know about trees
13:27:37 <cheater__> instead answer this:
13:27:43 <cheater__> <ais523_> I take a number of possible computation paths << you do?
13:27:48 <ais523_> if I'd instead written (return y<=z `mplus` return x<=z), it would output a diffeerent way round
13:27:57 <cheater__> what are these computation paths?
13:28:01 <ais523_> cheater__: well, I'm not just transforming one constraint, but many
13:28:09 <cheater__> yes, so?
13:28:16 <cheater__> where does that take us?
13:28:32 <ais523_> so the version of transformConstraint I wrote took only one constraint as an argument, and I had to pass it to concatMap in order to make it take more
13:28:40 <ais523_> but I really wanted to transform a list of constraints
13:29:05 <ais523_> and each of those can be thought of as a separate computation
13:29:22 <ais523_> because they're each treated independently
13:29:36 <ais523_> @hoogle set
13:29:36 <lambdabot> module Data.Set
13:29:36 <lambdabot> Data.Set data Set a
13:29:36 <lambdabot> Network.Browser setAllowBasicAuth :: Bool -> BrowserAction t ()
13:29:51 <oklofok> my homework is i have to prove predicates and implications form a lattice, in HOL
13:29:55 <ais523_> @hoogle x -> (Set x)
13:29:55 <lambdabot> Data.Set singleton :: a -> Set a
13:29:55 <lambdabot> Data.Set deleteMax :: Set a -> Set a
13:29:55 <lambdabot> Data.Set deleteMin :: Set a -> Set a
13:30:05 <oklofok> sexy
13:30:30 <ais523_> bleh, now I have to remember which of lift and liftM is which
13:30:31 <ais523_> I'll cheat
13:30:37 <ais523_> :t lift
13:30:38 <lambdabot> Ambiguous occurrence `lift'
13:30:38 <lambdabot> It could refer to either `Control.Monad.Error.lift', imported from Control.Monad.Error
13:30:38 <lambdabot> or `Control.Monad.Logic.lift', imported from Control.Monad.Logic
13:30:43 <ais523_> :t liftM
13:30:44 <lambdabot> forall a1 r (m :: * -> *). (Monad m) => (a1 -> r) -> m a1 -> m r
13:31:09 <ais523_> what's the Haskell function that takes a -> M x to M a -> M x?
13:31:36 <ais523_> @hoogle Monad M => (a -> M b) -> (M a -> M b)
13:31:36 <lambdabot> Did you mean: a -> M b -> M a -> M b /count=20
13:31:37 <lambdabot> Prelude (=<<) :: Monad m => (a -> m b) -> m a -> m b
13:31:37 <lambdabot> Control.Monad (=<<) :: Monad m => (a -> m b) -> m a -> m b
13:32:26 <ais523_> hmm, I'm confused now
13:32:52 <ais523_> > (=<<) singleton 4
13:32:52 <lambdabot> Not in scope: `singleton'
13:32:58 <oklofok> i'm a tired
13:32:58 <ais523_> > (=<<) Data.Set.singleton 4
13:32:58 <lambdabot> Not in scope: `Data.Set.singleton'
13:33:08 <ais523_> > (=<<) (\x -> [x]) 4
13:33:09 <lambdabot> No instance for (GHC.Num.Num [a])
13:33:09 <lambdabot> arising from a use of `e_14' at <inter...
13:33:37 <ais523_> :t Control.Monad.Logic.lift
13:33:38 <lambdabot> forall (m :: * -> *) a (t :: (* -> *) -> * -> *). (Control.Monad.Logic.MonadTrans t, Monad m) => m a -> t m a
13:33:55 <cheater__> LiftM2?
13:34:00 <cheater__> liftM2?
13:34:02 <ais523_> @hoogle (m m a) -> (m a)
13:34:02 <lambdabot> Control.Applicative unwrapMonad :: WrappedMonad m a -> m a
13:34:02 <lambdabot> Text.Regex.Base.RegexLike getAllMatches :: AllMatches f b -> f b
13:34:02 <lambdabot> Text.Regex.Base.RegexLike getAllSubmatches :: AllSubmatches f b -> f b
13:34:07 <cheater__> :t liftM2
13:34:08 <lambdabot> forall a1 a2 r (m :: * -> *). (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
13:34:22 <ais523_> cheater__: that and liftM are just wrapping a normal function into a monad
13:34:42 <ais523_> oh, I'm being stupid
13:35:02 <ais523_> what I'm looking for is id, because I forgot how monads worked
13:35:13 <cheater__> oh yeah it was =<<
13:35:14 <cheater__> anyways
13:35:18 <cheater__> oh right ok
13:36:32 <ais523_> > let f = (\x -> if x = 2 then [2,3] else [x]) in do {a <- f 4; f a}
13:36:32 <lambdabot> <no location info>: parse error on input `='
13:36:45 <ais523_> now I'm muddling Haskell and OCaml
13:37:08 <ais523_> :t if
13:37:08 <lambdabot> parse error (possibly incorrect indentation)
13:37:20 <ais523_> > let f = (\x -> (if (x = 2) then [2,3] else [x])) in do {a <- f 4; f a}
13:37:20 <lambdabot> <no location info>: parse error on input `='
13:37:27 <ais523_> > let f = (\x -> (if (x == 2) then [2,3] else [x])) in do {a <- f 4; f a}
13:37:27 <lambdabot> [4]
13:37:33 <ais523_> > let f = (\x -> (if (x == 2) then [2,3] else [x])) in do {a <- f 2; f a}
13:37:34 <lambdabot> [2,3,3]
13:37:36 <ais523_> there we go
13:37:52 <cheater__> > let f x = [2, 3] if x is 2 else [x] in do {a <- f 4; f a}
13:37:53 <lambdabot> <no location info>: parse error on input `if'
13:37:55 <ais523_> > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in do {a <- f 2; f a}
13:37:56 <lambdabot> No instances for (GHC.Num.Num (m a), GHC.Num.Num (m b))
13:37:56 <lambdabot> arising from a u...
13:38:05 <ais523_> > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in do {a <- f 2; f a} :: [Int]
13:38:06 <lambdabot> No instance for (GHC.Num.Num [GHC.Types.Int])
13:38:06 <lambdabot> arising from a use of `f' ...
13:38:07 <cheater__> > let f x = [2, 3] if x == 2 else [x] in do {a <- f 4; f a}
13:38:08 <lambdabot> <no location info>: parse error on input `if'
13:38:10 -!- azaq23 has quit (Read error: Connection reset by peer).
13:38:11 <cheater__> wtf.
13:38:16 <cheater__> > 2
13:38:17 <lambdabot> 2
13:38:21 <ais523_> > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in (do {a <- f 2; f a}) :: [Int]
13:38:22 <lambdabot> No instance for (GHC.Num.Num [GHC.Types.Int])
13:38:22 <lambdabot> arising from a use of `f' ...
13:38:26 <ais523_> > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in (do {a <- f 2; f a}) :: [Integer]
13:38:26 <lambdabot> No instance for (GHC.Num.Num [GHC.Integer.Type.Integer])
13:38:26 <lambdabot> arising from a ...
13:38:27 <cheater__> >2 if 2 == x else 3
13:38:32 <cheater__> >2 if 2 == 2 else 3
13:38:40 <cheater__> > 2 if 2 == 2 else 3
13:38:40 <lambdabot> <no location info>: parse error on input `if'
13:38:43 <ais523_> cheater__: it's if a == b then c else d
13:38:51 <ais523_> > if 2 == 2 then 3 else 4
13:38:51 <lambdabot> 3
13:38:58 -!- azaq23 has joined.
13:38:58 <ais523_> I got muddled because OCaml uses = not ==
13:39:02 -!- azaq23 has quit (Changing host).
13:39:02 -!- azaq23 has joined.
13:39:25 <ais523_> > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in map id (do {a <- f 2; f a})
13:39:26 <lambdabot> No instance for (GHC.Num.Num [a])
13:39:26 <lambdabot> arising from a use of `f' at <interact...
13:39:43 <ais523_> > let f = (\x -> (if (x == 2) then (2 `mplus` 3) else mzero)) in map id (do {a <- f 2; f a})
13:39:43 <lambdabot> No instance for (GHC.Num.Num [a])
13:39:43 <lambdabot> arising from a use of `f' at <interact...
13:40:07 <Patashu> wow, the rule 'Serviesttes' in mirek's cellebration produces beautiful patterns
13:40:24 <ais523_> oh, I forgot the return calls
13:40:33 <cheater__> go on ais523_
13:40:35 <ais523_> > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else mzero)) in map id (do {a <- f 2; f a})
13:40:36 <lambdabot> [2,3]
13:40:37 <ais523_> same mistake I made and corrected earlier
13:40:55 <ais523_> and, hmm, I expected [2,3,3] there
13:41:06 <ais523_> > let f = (\x -> (if (x == 2) then [2,3] else [x])) in map id (do {a <- f 2; f a})
13:41:07 <lambdabot> [2,3,3]
13:41:14 <ais523_> (the map id stuff is just to force it to interpret the output as a list)
13:41:23 <ais523_> oh, duh
13:41:30 <ais523_> > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in map id (do {a <- f 2; f a})
13:41:31 <lambdabot> [2,3,3]
13:41:35 <ais523_> > let f = (\x -> (if (x == 2) then [2,3] else [x])) in map id (do {a <- f 2; f a})
13:41:35 <lambdabot> [2,3,3]
13:41:46 <Patashu> Gnarl too
13:41:51 <ais523_> those two lines are identical, except that the second one (which is very similar to my OCaml) uses only lists
13:41:56 <ais523_> and the first can handle any MonadPlus
13:42:00 <cheater__> Patashu: is that available online somewhere?
13:42:12 <cheater__> or only as a windows app?
13:42:19 <ais523_> > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Maybe Int
13:42:20 <lambdabot> Just 2
13:42:34 <ais523_> see, Maybe can handle it, but only tracks one of the possible answers, because that's what Mabe does
13:42:40 <ais523_> > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int
13:42:41 <lambdabot> Not in scope: type constructor or class `Data.Set'
13:42:50 <ais523_> > import Data.Set; let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int
13:42:50 <lambdabot> <no location info>: parse error on input `import'
13:43:01 <cheater__> > let f = (\x -> (if (x == 2) then ([2] `mplus` [3]) else return x)) in map id (do {a <- f 2; f a})
13:43:01 <lambdabot> [2,3,3]
13:43:03 <ais523_> umm, what's the syntax in Haskell to use a particular library?
13:43:16 <cheater__> :m +Stuff
13:43:28 <ais523_> that's ghci syntax
13:43:32 <cheater__> dunno then
13:43:36 <cheater__> i suck at haskells
13:43:37 <ais523_> I mean in the language itself
13:43:49 <ais523_> > using Data.Set; let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int
13:43:49 <lambdabot> <no location info>: parse error on input `;'
13:44:30 <ais523_> oh, apparently it is "import"
13:44:56 <ais523_> > {import Data.Set; let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int}
13:44:57 <lambdabot> <no location info>: parse error on input `{'
13:45:16 <ais523_> > import Data.Set, let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int
13:45:17 <lambdabot> <no location info>: parse error on input `import'
13:45:25 <Patashu> cheater__, try http://psoup.math.wisc.edu/mcell/mjcell/mjcell.html
13:45:29 <ais523_> > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a})
13:45:30 <lambdabot> No instance for (GHC.Show.Show (m b))
13:45:30 <lambdabot> arising from a use of `M6596097177...
13:45:47 <ais523_> yep, that's what I expected
13:45:54 <ais523_> so what happened there was, I gave it a function that would run in any MonadPlus and didn't tell it which to use
13:46:08 <ais523_> and being Haskell, it happily calculated the function anyway and then didn't know how to display it onscreen
13:47:06 <ais523_> it does that quite a lot
13:47:11 <ais523_> > id
13:47:12 <lambdabot> Overlapping instances for GHC.Show.Show (a -> a)
13:47:12 <lambdabot> arising from a use of `...
13:47:23 <Patashu> hmm, I wonder if haskell supports openGL :P
13:49:33 -!- cheater__ has quit (Ping timeout: 252 seconds).
13:52:28 <Vorpal> I'm sure there are bindings
13:52:33 <Vorpal> and there is the FFI after all
13:53:20 <Vorpal> :t mplus
13:53:21 <lambdabot> forall (m :: * -> *) a. (MonadPlus m) => m a -> m a -> m a
13:53:29 <Vorpal> ais523_, what is MonadPlus?
13:54:37 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
13:57:04 <Patashu> :t MonadPlus
13:57:04 <lambdabot> Not in scope: data constructor `MonadPlus'
14:00:58 <Patashu> :t =>
14:00:59 <lambdabot> parse error on input `=>'
14:01:06 <Patashu> :t ==
14:01:07 <lambdabot> parse error on input `=='
14:01:10 <Patashu> :t (==)
14:01:11 <lambdabot> forall a. (Eq a) => a -> a -> Bool
14:01:13 <Patashu> :t (=>)
14:01:14 <lambdabot> parse error on input `=>'
14:01:37 <Vorpal> :t (>=)
14:01:37 <Patashu> hmm, can I not PM the bot with this stuff?
14:01:37 <lambdabot> forall a. (Ord a) => a -> a -> Bool
14:01:38 <Vorpal> maybe
14:01:42 <Vorpal> er
14:01:46 <Vorpal> yeah
14:02:02 <Vorpal> Patashu, you can run this in ghci
14:02:08 <Vorpal> so what would the use of that be
14:02:32 <Vorpal> :i MonadPlus
14:02:36 <Vorpal> hnm
14:02:38 <Vorpal> hm*
14:02:43 <Vorpal> I guess it doesn't do :i
14:02:49 <Vorpal> ?src MonadPlus
14:02:49 <lambdabot> Source not found.
14:02:55 <Vorpal> ?hoogle MonadPlus
14:02:55 <lambdabot> Control.Monad class Monad m => MonadPlus m
14:02:59 <Vorpal> ?hoogle mplus
14:02:59 <lambdabot> Control.Monad mplus :: MonadPlus m => m a -> m a -> m a
14:03:04 <Vorpal> ?src mplus
14:03:04 <lambdabot> Source not found. :(
14:03:29 <Vorpal> Prelude Control.Monad> :i MonadPlus
14:03:29 <Vorpal> class (Monad m) => MonadPlus m where
14:03:29 <Vorpal> mzero :: m a
14:03:29 <Vorpal> mplus :: m a -> m a -> m a
14:03:29 <Vorpal> -- Defined in Control.Monad
14:03:29 <Vorpal> instance MonadPlus [] -- Defined in Control.Monad
14:03:31 <Vorpal> instance MonadPlus Maybe -- Defined in Control.Monad
14:03:34 <Vorpal> well okay
14:09:23 -!- ralc has joined.
14:10:13 <ais523_> Vorpal: MonadPlus is basically the class of monads where it's a meaningful operation for an action to produce more or less than 1 result
14:10:30 <Vorpal> ah
14:10:30 -!- cheater__ has joined.
14:10:47 <ais523_> e.g. in List, there's no problem with producing multiple results from one calculation, they can just become multiple list elements
14:11:05 <ais523_> and in Maybe, it's fine for a computation to not produce a result as you can just put Nothing there and stop the calculation at that point
14:11:06 <cheater__> sorry i got disconnected
14:11:09 <ais523_> but in, say, IO, it would be meaningless
14:11:24 <cheater__> last thing i got was <Patashu> cheater__, try http://psoup.math.wisc.edu/mcell/mjcell/mjcell.html
14:11:30 <Vorpal> hm
14:11:47 <ais523_> cheater__: don't worry, we got sidetracked and didn't talk about anything relevant in between
14:12:03 <cheater__> ok so
14:12:07 <cheater__> what were you getting at?
14:12:18 <cheater__> that return is the same as constructing the monadic computation?
14:12:26 <cheater__> and that some things have mplus defined?
14:12:34 <ais523_> pretty much
14:12:51 <ais523_> composing return with a function makes it into a monad action that returns one result
14:13:04 <ais523_> the reason why monad actions are useful is that they don't necessarily have to be defined in terms of return
14:13:28 <ais523_> and mplus gives you a way to return more than one result (likewise, mzero to return no results)
14:13:42 <Vorpal> hm
14:13:53 <Vorpal> bbl, going to make food
14:14:27 <cheater__> how were you composing return?
14:14:50 <cheater__> <ais523_> and what I do, is I apply it to every element of my constraints, so I write List.concat (List.map transformConstraints constraints)
14:15:24 <cheater__> oh trasformConstraints was using return?
14:18:26 -!- azaq23 has quit (Ping timeout: 260 seconds).
14:24:05 -!- azaq23 has joined.
14:31:31 -!- copumpkin has joined.
14:36:41 <ais523_> cheater__: yes
14:36:52 <ais523_> in disguise in the OCaml program (where I wrote [a] rather than return a)
14:39:18 <Vorpal> back
14:59:53 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
15:09:42 -!- variable has changed nick to Guest75185.
15:24:19 -!- Guest75185 has changed nick to variable.
15:35:07 <cheater__> ais523_: could we make a monadic generalizer?
15:35:24 <cheater__> ais523_: say we have a computation which isn't monadic. the generalizer takes that and makes it monadic.
15:35:49 <ais523_> cheater__: in the trivial sense, yes, you can just compose the function with return
15:36:11 <ais523_> in general, though, not if you want to do anything that actually uses the monadic structure
15:36:19 <cheater__> such as?
15:36:20 <ais523_> because monads inherently have a notion of before and after
15:36:24 <ais523_> whereas functions don't
15:36:45 <cheater__> yeah that's fine
15:36:46 <cheater__> but like
15:37:00 <cheater__> many functions will just end up being >>= or something
15:37:15 <ais523_> well, it depends on what you mean by making a computation monadic in the first place
15:38:39 <ais523_> :t >>=
15:38:39 <lambdabot> parse error on input `>>='
15:38:44 <ais523_> :t (>>=)
15:38:45 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b
15:39:12 <ais523_> !src (>>=)::([a] -> (a -> [b]) -> b)
15:39:21 <ais523_> umm, wrong prefix
15:39:24 <ais523_> @src (>>=)::([a] -> (a -> [b]) -> b)
15:39:24 <lambdabot> Source not found. I am sorry.
15:39:30 <ais523_> @src (>>=):([a] -> (a -> [b]) -> b)
15:39:30 <lambdabot> Source not found. My mind is going. I can feel it.
15:39:33 <cheater__> i think you want a on both
15:39:45 <ais523_> :t concatMap
15:39:45 <lambdabot> forall a b. (a -> [b]) -> [a] -> [b]
15:39:48 <cheater__> hmm
15:39:57 <cheater__> oh right
15:41:29 <ais523_> in the case of my OCaml program, I just noticed that I'd written a concatMap, and that I was using lists a lot
15:41:40 <ais523_> and thought "hey, I think I wrote a monad action by mistake"
15:41:56 <ais523_> not that writing one of those is a bad thing, especially not in a program where that's the right thing to do
15:42:17 <ais523_> in Haskell, it would have been trivial to generalise to arbitrary monads at that point, which would help if I ever wanted to change to, say, sets
15:42:40 <cheater__> sets sound like a much better idea, tbh.
15:42:51 <ais523_> yep
15:42:59 <ais523_> the point is, though, that your program's polymorphic over all of them
15:43:08 <ais523_> which makes it more general
15:43:25 <ais523_> whether that's irrelevant, or massively useful, depends on precisely what you're doing
15:43:41 <ais523_> e.g. if you're writing a library, being polymorphic over monads is really good as it cuts down on the glue code your user will have to write
15:45:01 <cheater__> ya
15:45:09 <cheater__> but um
15:48:35 <cheater__> doing stuff that's too general can end up being a bad thing too, can't it
15:48:49 <cheater__> if it gets so general people can't think of the application you had in mind in the first place ...
15:49:03 -!- geology2 has joined.
15:49:12 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds).
15:49:14 -!- geology2 has changed nick to geology.
15:49:31 -!- elliott has joined.
15:49:39 -!- Phantom_Hoover has joined.
16:05:07 -!- geology has quit (Quit: ChatZilla 0.9.86.1 [Firefox 4.0.1/20110413222027]).
16:10:20 -!- rodgort has quit (Quit: ERC Version 5.3 (IRC client for Emacs)).
16:10:32 -!- rodgort has joined.
16:27:47 -!- CakeProphet has quit (Ping timeout: 260 seconds).
17:24:02 -!- oerjan has joined.
17:25:07 <elliott> hello oerjan
17:25:15 <oerjan> g'day
17:27:13 -!- oerjan has quit (Client Quit).
17:28:57 <elliott> bye oerjan
17:32:37 <cheater__> i'd quit too if you gave me a cold welcome like that
17:55:55 <Gregor> Name a vaguely-interesting web program that does not require https.
17:55:55 <lambdabot> Gregor: You have 9 new messages. '/msg lambdabot @messages' to read them.
17:55:59 <Gregor> ... wtf
17:56:58 <cheater__> Gregor: define "web program"
17:57:01 <Gregor> @tell oerjan egojoust hasn't been used in months, that code was known buggy.
17:57:01 <lambdabot> Consider it noted.
17:57:08 <cheater__> do you mean a "webapp" in the SaaS sense?
17:57:10 <Gregor> cheater__: Thing you found on the web that has some JS behavior :P
17:57:15 <cheater__> ok
17:57:30 <Gregor> Even www.google.com is a webapp, it's just not the most interesting one (arguably)
17:57:32 <cheater__> newgrounds
17:57:50 <elliott> <lambdabot> Gregor: You have 9 new messages. '/msg lambdabot @messages' to read them.
17:57:51 <elliott> wat...
17:58:19 <cheater__> Gregor: wolfgang lambda
17:58:23 <cheater__> Gregor: that's a good one
17:58:45 <cheater__> btw, unrelated but interesting: http://www.ludism.org/mentat/
17:59:04 <Gregor> Mmm, I think it has to be something people actually use too.
17:59:24 <elliott> Gregor: What are you asking for? :P
17:59:35 <Gregor> <Gregor> Name a vaguely-interesting web program that does not require https.
18:00:03 <elliott> Gregor: I know that.
18:00:12 <elliott> I just mean that the question is impossible to answer well without knowing why you're asking :P
18:00:26 <Gregor> I'm making benchmarks.
18:00:40 <elliott> I think you can actually access gmail over non-https...
18:00:46 <Gregor> Not any more.
18:00:51 <Gregor> I was going to see if I can tackle google docs, but it absolutely cannot be used without https either.
18:00:53 <elliott> Ah.
18:00:59 <elliott> Why can't you do https out of curiosity?
18:01:11 <Gregor> Because Node HTTP proxy + HTTPS = lol
18:01:28 <elliott> Hmmmmmmmmmmmmmm
18:01:30 <elliott> mmmmmmmm
18:01:31 <elliott> mmmmmmmmm
18:01:31 <Gregor> Browsers insist on the PROXY having a properly-signed blah blah blah bullshit key.
18:01:32 <elliott> mm
18:01:33 <elliott> mmmmmm
18:01:34 <elliott> mm
18:01:34 <elliott> mm
18:01:35 <elliott> m
18:01:35 <elliott>
18:01:42 <Gregor> Which means I need a key signed by e.g. Thawte for ... localhost.
18:01:56 <ais523_> TIL Markdown is "parsed" by regex
18:01:56 <elliott> Gregor: Isn't there that CA that everyone trusts that gives 'em out for free
18:01:59 <ais523_> no wonder it's so awful
18:02:09 <elliott> Gregor: Or you could use one of the mdfive 'sploits, though I doubt anyone trusts the relevant CA any more :)
18:02:10 <Gregor> elliott: Yes, but it won't give you a cert for LOCALHOST :P
18:02:17 <elliott> ais523_: Markdown-the-syntax isn't that awful
18:02:23 <elliott> ais523_: and most people don't use Markdown.pl
18:02:26 <ais523_> it is in some ways
18:02:34 <elliott> Yes, but it's not /that/ awful
18:02:45 <elliott> It's better than, e.g. DocBook :P
18:02:59 <elliott> Gregor: You could get a cert for lolthisispointedatmymachine.codu.org :P
18:03:03 <ais523_> I use a wiki that has markdown syntax sometimes
18:03:05 <Gregor> I spose ...
18:03:11 <ais523_> its internal links are something bizarre like [link]()
18:03:14 <elliott> Gregor: Man, I'm having trouble thinking of anything >_>
18:03:16 <elliott> I'm a total luddite
18:03:18 <ais523_> I might have that backwards in at least two different ways
18:03:20 <Gregor> But that's irrelevant, suffice to say it's a pain, I want non-https :P
18:03:23 <elliott> ais523_: That's just a hack around the fact that markdown doesn't have wikilink syntax :P
18:03:26 <elliott> It'll just be rewriting href="
18:03:27 <ais523_> yep
18:03:28 <elliott> It'll just be rewriting href=""
18:03:44 <elliott> ais523_: Well that's not Markdown's fault.
18:03:52 <ais523_> no, it isn't
18:04:07 <ais523_> although Markdown does have a tendency to be used in stupid ways; it's not its fault but it's still aggravating
18:04:22 <elliott> Gregor: Yeah, dunno.
18:04:29 <ais523_> single-* for italics is also an unfortunate design decision, it happens too often when the special meaning isn't desired
18:04:40 <ais523_> (even MediaWiki runs into trouble occasionally with '' in the middle of words)
18:07:16 <elliott> meh, it's better than _ for italics
18:07:20 <elliott> which Markdown also has
18:08:16 <ais523_> oh, right, ouch
18:09:59 <elliott> woiuldntit be aesoekme if oknc e yuioiu stesasdrtred tygpoijn a word yuoiu coudkktmn tkrase yuiore fingerds off thre keytjnbeeors
18:10:11 <elliott> yuou just hasdf to slide thejm arotiuhnd
18:15:06 <pikhq> elliott: You'll probably be glad to know that the FUSE branch of tup was merged.
18:15:22 <elliott> pikhq: I saw.
18:17:23 * pikhq has yet to get gittup to build.
18:20:39 <ais523_> elliott: I can't tel whether "coudkktmn" was meant to be "could" or "couldn't"
18:20:44 <ais523_> *can't tell
18:22:34 <elliott> couldn't
18:29:54 -!- elliott has quit (Ping timeout: 264 seconds).
18:30:01 -!- elliott has joined.
18:32:58 <pikhq> Error: Explicitly named file 'built-in.o' not found in subdir 24885.
18:33:11 <pikhq> (subdir 24885 refers to linux/drivers/watchdog)
18:33:25 <pikhq> (no, that does *not* have a Tupfile)
18:34:43 -!- cheater__ has quit (Quit: Leaving).
18:36:12 -!- cheater_ has joined.
19:09:18 <pikhq> http://www.gnu.org/software/automake/manual/html_node/Objects-created-both-with-libtool-and-without.html#Objects-created-both-with-libtool-and-without This has got to be the most revolting page I've read in a while.
19:10:40 <ais523_> pikhq: is that exploiting a bug in automake to work around a bug in libtool?
19:10:43 <ais523_> that's actually pretty hilarious
19:11:32 <pikhq> ais523_: Not really a *bug* as it is a very obscure feature.
19:12:07 <pikhq> ais523_: It's actually intentional that you get differing object filenames if you use per-target CFLAGS.
19:12:28 <pikhq> ais523_: It's just using per-target CFLAGS here that are not distinct from the normal CFLAGS.
19:14:35 <pikhq> Still, it is absolutely *astounding* how much crazy shit Autotools does just to work around deficiencies in the C build system.
19:16:35 <ais523_> that's its purpose
19:16:48 <ais523_> bundling up crazy shit into conveniently reusable m4 macros
19:17:04 <pikhq> Seems to me it would've been easier to just replace the C build environment. :P
19:17:21 -!- azaq23 has quit (Quit: Leaving.).
19:18:18 <pikhq> Admittedly, at the *time* there was no way they could get away with saying "Yeah, just use GNU everything", and now it'd be a bit impractical to rejigger GCC that extensively.
19:18:40 -!- oerjan has joined.
19:19:31 <oerjan> um
19:19:31 <lambdabot> oerjan: You have 1 new message. '/msg lambdabot @messages' to read it.
19:19:36 <oerjan> @messages
19:19:36 <lambdabot> Gregor said 1h 22m 35s ago: egojoust hasn't been used in months, that code was known buggy.
19:19:54 <oerjan> Gregor: i have no idea what quote of mine you would be referring to
19:20:07 <Gregor> Your long-winded message to me about egojoust having bugs.
19:20:21 <Gregor> Ohwait
19:20:23 <Gregor> lololol
19:20:27 <Gregor> Didn't read the timestamps.
19:20:30 <oerjan> heh
19:20:38 <Gregor> OK, so here's the question: Why did lambdabot tell me I had messages from three MONTHS ago.
19:20:42 <Gregor> Just today.
19:20:43 <pikhq> Imagine a world where the C compiler had some intelligence. Here is how you would build a program: "gcc main.c"
19:20:47 <elliott> well lambdabot was down for a while
19:20:49 <elliott> but not THAT long a while
19:21:35 <oerjan> maybe someone restarted lambdabot from backup
19:22:26 <Sgeo> Gregor, dd you aee my maessgae/
19:22:28 <Sgeo> Blag
19:23:03 <elliott> Gregor: dd you aee my maessgae
19:23:58 <Gregor> Sgeo: No?
19:24:35 <elliott> but dd you aee MY maessgae
19:24:35 <Sgeo> Gregor, HackEgo lines that are too long get cut off without any notfication that they're cut off
19:24:38 <Sgeo> See:
19:24:42 <Sgeo> `quote birth
19:24:43 <Gregor> Sgeo: Boo hoo.
19:24:44 <HackEgo> ​160) <calamari> anmaster gonna give him a birthday bj? <AnMaster> IF ONLY I COULD FIND MY PHONE \ 259) <fizzie> And to think: if only we wouldn't celebrate birthdays, there would be no birthday paradox, and we could get by with half as long hash functions. (What do you mean it doesn't work that way?) \ 350) <ZOMGMODULES>
19:24:47 <Sgeo> `pastequotes birth
19:24:49 <HackEgo> ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.6452
19:24:50 <elliott> We know.
19:24:58 <oerjan> ais523_: i mentioned to oklofok earlier that i at least have proved that roman numeral look and say must grow approx. exponentially
19:25:41 <ais523_> oerjan: that's not surprising, but it's good to have proved it
19:27:34 <elliott> " The best HTML5 is native to the operating system, so Web sites have the fewest translation layers to pass through."
19:27:35 <elliott> wat
19:27:50 <elliott> I think the IE team might actually originate from a different universe
19:28:31 <oerjan> html5 kernel mode ftw
19:28:43 <ais523_> oerjan: isn't that what Chrome OS is for?
19:28:51 <oerjan> heck if i know
19:29:15 <elliott> ais523_: Chrome OS is actually just Chrome on X on Gentoo
19:29:15 <ais523_> `pastequotes algebraic
19:29:16 <HackEgo> ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31004
19:29:25 <elliott> tweaked to be a bit more OS-like
19:29:28 <ais523_> elliott: did you see the latest Agora mishap, by the way?
19:29:32 <elliott> ais523_: which?
19:29:46 <ais523_> an errant search-and-replace made it so that every vote has to select either PRESENT, or two other options
19:29:54 <elliott> well, right
19:29:58 <ais523_> we're debating if it's really the case that every vote must be FOR+AGAINST
19:30:12 <ais523_> and if that would make the game unplayable
19:30:25 <ais523_> (Murphy thinks FOR+FOR is legal, G. thinks that plain FOR is legal because the rule now contradicts itself)
19:30:38 <elliott> AIAN would prevent it being unplayable
19:34:00 <ais523_> yep, but the problem with AIAN is that it triggers only if there are no workable dictatorship scams
19:34:05 <ais523_> and proving the absence of those is stricky
19:34:08 <ais523_> *tricky
19:34:20 -!- wareya_ has joined.
19:35:00 <elliott> ais523_: ugh, it should be tightened
19:36:40 -!- monqy has joined.
19:36:51 -!- wareya has quit (Ping timeout: 240 seconds).
19:38:24 <Sgeo> ais523_, what subject line(s)?
19:38:30 <Sgeo> I can't find it :/
19:39:41 <ais523_> Sgeo: BUS: Re: [Assessor] something
19:40:55 -!- TOGoS has joined.
19:41:01 <Sgeo> Found it, ty
19:41:47 -!- augur has quit (Remote host closed the connection).
19:42:39 <Sgeo> ais523_, did you see what Murphy said?
19:43:06 <ais523_> Sgeo: yes
19:43:18 <ais523_> different people seem to disagree on exactly what happened
19:43:28 <ais523_> although most people think it isn't fatally broken, they disagree as to why
19:44:15 <Sgeo> But at any rate, if it is broken, Assessor can just change the rules as long as no one disagrees
19:44:18 <Sgeo> iiuc
19:44:38 <oerjan> heh
19:44:38 <ais523_> oh, right
19:44:45 <ais523_> you mean ratifying false proposal results?
19:45:08 <ais523_> I think that unambiguously works, so AIAN isn't triggered
19:45:10 <elliott> that would be illegal, of course
19:45:14 <elliott> but good idea
19:45:27 <elliott> ais523_: it will be triggered if someone objects continuously, no?
19:45:28 <Sgeo> Not my idea, it's Murphy's. I think.
19:45:33 <elliott> because then a majority can't change the rules, still
19:46:09 <ais523_> elliott: it's not even technically illegal if you state, upfront, in the message that you're ratifying something that you think is incorrect
19:46:11 <Sgeo> "It doesn't trigger AIAN as long as "the Assessor announces some results
19:46:11 <Sgeo> and they're allowed to self-ratify" still works." -- Murphy
19:46:16 <ais523_> note that this is true even if you're allying
19:46:21 <ais523_> *you're lying
19:51:08 <oerjan> <ais523_> > {import Data.Set; [...] <-- import only works at module top level, which lambdabot doesn't support (you can try with EgoBot)
19:51:23 <elliott> ais523_: eh? it's illegal to ratify a knowingly incorrect document
19:52:11 <ais523_> elliott: unless you say it's illegal
19:52:26 <elliott> hmm really? okay
19:52:29 <oerjan> <ais523_> and being Haskell, it happily calculated the function anyway and then didn't know how to display it onscreen
19:52:31 <ais523_> there's an exception for if you explain that the document may be incorrect, and the general nature of the inaccuracy
19:52:50 <oerjan> technically it almost certainly discovered it couldn't display it before trying to calculate it
19:52:54 <ais523_> which was added for the case when you're ratifying a currently unknown gamestate, although it helps in using ratification as proposal too
19:52:59 <ais523_> oerjan: ah, did it calculate it anyway?
19:53:05 <ais523_> probably not because of laziness
19:53:23 <oerjan> ais523_: no, i'm saying it never started running because that error message is compile-time (type checking)
19:53:31 <ais523_> ah, OK
19:53:39 <ais523_> I forgot Haskell was compiled
19:53:44 <ais523_> especially as I normally use it from an interpreter
19:54:34 <oerjan> haskell is very compiled, it's just type inference which makes it not show all the time
19:54:57 <elliott> Does Haskell even define REPL semantics of any kind?
19:55:07 <oerjan> i don't think so
19:55:10 <elliott> It's only specified in terms of batch translation I think
19:55:14 <ais523_> oerjan: I did know Haskell was compiled, I just forgot
19:55:15 <elliott> (Full-world)
19:55:48 <elliott> ais523_: still, even interpreted haskell has to type-check first :)
19:56:14 <oerjan> yeah
19:57:29 * Phantom_Hoover gets bored, tries to convince people on Omegle that he is a representative of Omegle.
19:58:39 <elliott> "Please tell me your Omegle password."
19:58:40 <ais523_> Phantom_Hoover: was it you who did that in #minecraft?
19:58:46 <ais523_> also, what is Omegle?
19:58:50 <oerjan> i think ghci only added full import syntax in a relatively recent version
19:58:55 <Phantom_Hoover> ais523_, yes, it was.
20:01:33 <oerjan> <Patashu> hmm, I wonder if haskell supports openGL :P
20:01:54 <ais523_> that's like asking if INTERCAL supports ncurses
20:02:00 <oerjan> iirc that's precisely the graphics library included in the haskell platform
20:03:53 <elliott> ais523_: well, does it?
20:04:32 <ais523_> elliott: well, Funge-98 does, and there's an FFI between them
20:07:31 <oerjan> <ais523_> in Haskell, it would have been trivial to generalise to arbitrary monads at that point, which would help if I ever wanted to change to, say, sets
20:07:37 <oerjan> sets are not monads in haskell
20:07:53 <ais523_> they could be
20:08:06 <ais523_> mathematically, they're monads, and you can write the definitions easily enough
20:08:21 <oerjan> there is that tricky bit about needing Ord or at least Eq to be able to check equality of elements
20:08:31 -!- HolyBlood has quit (Ping timeout: 240 seconds).
20:08:35 <oerjan> which breaks the standard monad definition
20:09:00 <oerjan> because a monad needs to work for _all_ element types
20:09:14 <elliott> there's that blog post doing it
20:09:22 <elliott> with an alternative (iirc Oleg's) monad class
20:09:26 <elliott> multiple classes even I think
20:09:31 <ais523_> oerjan: oh, I see
20:09:42 <ais523_> mathematically, there's no issue with sets of functions
20:09:45 <ais523_> (and Eq is enough)
20:09:48 <elliott> http://www.randomhacks.net/articles/2007/03/15/data-set-monad-haskell-macros
20:10:20 -!- HolyBlood has joined.
20:10:47 * oerjan looks askance at HolyBlood and wonders if e is in the right channel
20:11:29 <elliott> ais523_: hmm, Timwi hasn't replied yet
20:11:44 <ais523_> he's probably waiting on a reply from Graue
20:11:44 -!- augur has joined.
20:11:50 <ais523_> and Graue has quite possibly deleted the email
20:12:03 <oerjan> wtf google's define: prefix isn't working any more
20:12:04 <elliott> http://esolangs.org/wiki/FileCode ;; /sigh
20:12:08 <elliott> ais523_: haha
20:12:20 <elliott> oerjan: wfm
20:12:25 <elliott> although it just shows it at the top
20:12:29 <elliott> you have to click "more" for more definitions
20:12:43 <elliott> ais523_: I wouldn't think Graue would delete it without sending a reply, but I might be wrong
20:12:52 <elliott> http://esolangs.org/w/index.php?title=Main_Page&curid=1&diff=22956&oldid=22297
20:12:54 <elliott> ais523_: please to be block
20:12:57 <ais523_> hmm, i don't know if I get FileCode at all
20:13:24 * elliott reverts
20:13:25 <oerjan> elliott: um i'm seeing a completely ordinary result page as if i had written just the word i search for alone
20:13:44 <elliott> oerjan: localised google?
20:14:05 <ais523_> elliott: blocked, autoblocked, prevented accounts being created from the same IP
20:14:05 <elliott> oerjan: What query, I'll see if I can replicate here
20:14:11 <oerjan> define:askance
20:14:43 <ais523_> also, I didn't know that the matrix of solidity thing was on the main page
20:14:49 <ais523_> how did that become a meme, anyway?
20:14:55 <elliott> esoterica person coming here
20:14:56 <elliott> `quote solidity
20:14:57 <HackEgo> ​329) <treederwright> enjoy being locked in your matrix of solidity
20:15:15 <ais523_> ah, I missed that
20:15:25 <elliott> it was pretty lol
20:15:28 <ais523_> it's a good one, anyway
20:16:02 <Phantom_Hoover> Hmm, I'll need to reconsider my Omegle strategy.
20:16:37 <Phantom_Hoover> I mean, saying I'm conducting a demographic survey for Omegle and asking for a/s/l is good and fine, but it doesn't really tell me if I've fooled anyone.
20:17:06 <oerjan> elliott: same on english version
20:17:39 <elliott> oerjan: what query?
20:17:49 <oerjan> define:askance i said
20:30:06 * Phantom_Hoover watches the IT Crowd.
20:45:00 -!- myndzi has quit (Remote host closed the connection).
20:47:49 <ais523_> yay, now we can \o/ without the fear of having legs added!
20:48:05 <Gregor> X-D
20:48:18 <pikhq> |
20:48:21 <pikhq> / \
20:48:23 <pikhq> CURSES
20:48:28 <pikhq> SO CLOSE
20:49:06 <oerjan> NOT CLOSE AT ALL
20:49:15 <elliott> pikhq: you forgot the penis
20:49:34 * oerjan swats pikhq for obviously trying to use the wrong kind of nick alignment -----###
21:10:49 <elliott> :t scanr tail
21:10:49 <lambdabot> Couldn't match expected type `b -> b' against inferred type `[a]'
21:10:49 <lambdabot> In the first argument of `scanr', namely `tail'
21:10:49 <lambdabot> In the expression: scanr tail
21:10:52 <elliott> :t scanr
21:10:53 <lambdabot> forall a b. (a -> b -> b) -> b -> [a] -> [b]
21:10:58 <elliott> hmm
21:11:16 <elliott> oerjan: [a,b,c,d] -> [[b,c,d],[c,d],[d]] how do
21:11:30 <Deewiant> > tails [a,b,c,d]
21:11:31 <lambdabot> [[a,b,c,d],[b,c,d],[c,d],[d],[]]
21:11:50 <Deewiant> > init . tails . tail $ [a,b,c,d]
21:11:51 <lambdabot> [[b,c,d],[c,d],[d]]
21:12:08 <elliott> Oh, thanks.
21:12:21 <elliott> > map (\(x:xs) -> (x,xs)) tails [a,b,c,d]
21:12:21 <lambdabot> Couldn't match expected type `[[t]]'
21:12:21 <lambdabot> against inferred type `[a] -> ...
21:12:27 <elliott> > map (\(x:xs) -> (x,xs)) . tails $ [a,b,c,d]
21:12:28 <lambdabot> [(a,[b,c,d]),(b,[c,d]),(c,[d]),(d,[]),*Exception: <interactive>:3:5-21: Non...
21:12:32 <elliott> > map (\(x:xs) -> (x,xs)) . init . tails $ [a,b,c,d]
21:12:33 <lambdabot> [(a,[b,c,d]),(b,[c,d]),(c,[d]),(d,[])]
21:12:46 <elliott> ?pl init . init
21:12:46 <lambdabot> init . init
21:12:48 <elliott> > map (\(x:xs) -> (x,xs)) . init . init . tails $ [a,b,c,d]
21:12:50 <lambdabot> [(a,[b,c,d]),(b,[c,d]),(c,[d])]
21:12:53 -!- HolyBlood has quit (Ping timeout: 246 seconds).
21:12:53 <elliott> That works.
21:12:56 <elliott> :t inits
21:12:57 <lambdabot> forall a. [a] -> [[a]]
21:14:21 <elliott> Map.elems has no predictable result order, right?
21:14:44 <Deewiant> \(x:xs) -> (x,xs) == head &&& tail
21:15:00 <Deewiant> Probably not
21:15:04 <elliott> Deewiant: That was just a test function.
21:15:07 -!- HolyBlood has joined.
21:21:01 -!- NihilistDandy has quit (Quit: leaving).
21:21:22 -!- NihilistDandy has joined.
21:22:48 <Phantom_Hoover> http://mspaintadventures.wikia.com/wiki/Weird_Time_Shit
21:22:54 <Phantom_Hoover> OOPS WRONG THING
21:26:37 <oerjan> > [(x, xs) | x:xs@(_:_) <- tails [a,b,c,d]]
21:26:38 <lambdabot> [(a,[b,c,d]),(b,[c,d]),(c,[d])]
21:28:20 <oerjan> elliott: for your @unpl needs ^
21:29:18 <Deewiant> > map (head &&& tail) . filter (not.null.drop 1) . tails $ [a,b,c,d]
21:29:19 <lambdabot> [(a,[b,c,d]),(b,[c,d]),(c,[d])]
21:32:05 <ais523_> haha, new in Perl 5.14 is the ability to name a package Foo::::Bar
21:32:26 <ais523_> although you're going to have to load it by hand unless your filesystem supports directories with zero-length names
21:32:28 <elliott> the patch:
21:32:41 <elliott> - if (strcmp(name, "Foo::::Bar"))
21:33:17 <TOGoS> was 'if (strcmp(name, "Foo::::Bar"))' srsly in the source?
21:33:23 <ais523_> TOGoS: no, elliott is joking
21:33:26 <ais523_> although it's a good joek
21:33:28 <ais523_> *joke
21:33:33 <TOGoS> oh thank gourd
21:34:02 <ais523_> I think even Vorpal would have realised that was a joke...
21:34:08 <elliott> who's TOGoS
21:34:10 <TOGoS> I had a hunch but, knowing Perl...
21:34:15 <elliott> and what's a gourd
21:34:19 <ais523_> <Vorpal> ais523, I don't get it
21:34:19 <elliott> oh, a plant
21:34:27 <elliott> ais523_: uncanny
21:34:47 <TOGoS> gourd is what you thank when you find out that some source code is not as ridiculous as it could be.
21:35:05 <TOGoS> then you shake it for good luck
21:35:08 <ais523_> in case you hadn't guessed, I'm reading the Perl 5.14 changelog
21:35:12 <ais523_> some of it looks useful, like s///r
21:44:51 <ais523_> also, I'm amused at Perl having versioned pragmas
21:45:17 <ais523_> (the pragmas are implemented as modules, and modules have version numbers, but it's crazy seeing things like "The overload pragma has been upgraded from 1.10 to 1.13.")
21:45:29 <elliott> haha
21:48:36 <ais523_> pluggable pragmata's a little bizarre as language features go
21:52:48 <oerjan> pragmatic plugs
21:52:50 -!- FireFly has quit (Quit: swatted to death).
22:01:34 * elliott reads the beautiful funge 9eight subset log
22:01:55 <elliott> (n % 2) by outputting to a file and inputting it again, so that you can do xor, so that you can write an adder
22:02:52 <ais523_> elliott: people were trying to find a minimal Funge-98-complete subset, without abusing fingerprints?
22:03:53 <elliott> ais523_: no, the topic came up of Funge-98 minus ninety-three
22:03:55 <ais523_> (if you do abuse fingerprints, you could just make a feral fingerprint named the null string, that did s/(/0/ on the program and then interpreted it as a program in the language Unary)
22:03:58 <elliott> i.e. all ninetythree instructions are gone
22:03:58 <ais523_> elliott: ah
22:04:08 <ais523_> both are interesting
22:04:16 <elliott> we couldn't figure out how to get the lowest bit of a number to write an adder with xor
22:04:24 <elliott> but then deewiant realised that the lower bit of its flag determines binary or text mode
22:04:26 <elliott> :D
22:05:24 <ais523_> how do you get the higher bits?
22:05:31 <elliott> dunno
22:10:12 -!- augur has quit (Remote host closed the connection).
22:10:15 -!- NihilistDandy has quit (Quit: leaving).
22:12:55 -!- elliott has quit (Ping timeout: 276 seconds).
22:20:09 * pikhq wonders how much time glibc spends to do literally nothing
22:20:15 <pikhq> (in its build)
22:20:58 <pikhq> Approximately "Can't tell because it's t3h borken"
22:21:55 <pikhq> make[2]: *** No rule to make target `../manual/errno.texi', needed by `../sysdeps/gnu/errlist.c'. Stop.
22:22:40 <ais523_> more Perl amusement: they went and changed the type that an API function returns
22:23:10 <ais523_> defending it partly by saying it was marked as "may change", which is fine, but also that they did a Google code search and found that nobody else was actually using it
22:26:32 <ais523_> I also love reading the lists of bugfixes, just because the bugs were so bizarre
22:27:16 <ais523_> e.g. sub { $_[0] = *foo }->($hash{key}); in 5.12 assigns the /string/ "*main::foo" to $_[0]
22:29:09 <Sgeo> http://www.reddit.com/r/todayilearned/comments/he4du/til_you_cant_drink_coke_in_space_it_makes_you/c1ur38k
22:29:16 <Sgeo> I have no words...
22:35:22 <pikhq> Okay, 5:30 for a build of glibc 2.13 from a clean dir...
22:36:47 <pikhq> 1:16 for a no-op build.
22:37:11 <pikhq> That is fucking ridiculous.
22:37:58 <coppro> minutes?
22:40:16 <pikhq> Yes.
22:40:41 <coppro> wow
22:41:07 <Phantom_Hoover> pikhq, still tuppin'?
22:46:39 <Phantom_Hoover> http://xkcdexplained.com/
22:46:43 <Phantom_Hoover> Aww, it stopped.
22:46:46 <Phantom_Hoover> Ages ago, too.
22:47:13 <Phantom_Hoover> "Today is the day the Author finally discovered a metaphor that perfectly combines his two greatest passions in life: technology and unidirectional relationships wherein a female is able to completely dominate him emotionally."
22:47:22 <Phantom_Hoover> So true. Godspeed, good analysts.
22:47:57 <Phantom_Hoover> "The more astute Reader will realize the true meaning of today’s comic: the Author is using his vast influence to encourage smart engineers around the world to create computer software that will talk nicely to him."
22:51:56 -!- BeholdMyGlory has quit (Remote host closed the connection).
22:54:20 <oerjan> I am sorry Randall, I cannot do that.
22:58:22 <Phantom_Hoover> "The Author hates women."
23:02:41 <Phantom_Hoover> "The Author saw the film Inception and it confused him. He decided to make a comic strip about himself and a squirrel as most visual learners tend to do when frustrated."
23:03:04 -!- Patashu has joined.
23:07:07 <pikhq> Phantom_Hoover: Definitely still tupping.
23:07:20 <Phantom_Hoover> *tuppin'
23:13:52 -!- HolyBlood has quit (Ping timeout: 260 seconds).
23:15:03 <Phantom_Hoover> "The newscaster is doing exactly that which he is being criticized for - letting people without college physics degrees voice their opinions."
23:17:55 -!- cheater79 has quit (Remote host closed the connection).
23:17:58 -!- HolyBlood has joined.
23:18:04 <Phantom_Hoover> I particularly like the ubiquitous jabs at Munroe's sexual politics.
23:18:31 -!- cheater79 has joined.
23:25:43 -!- augur has joined.
23:28:06 -!- copumpkin has quit (Ping timeout: 264 seconds).
23:32:43 -!- alegend45 has joined.
23:33:09 <alegend45> I want to make a programming language WORSE than Malbolge!
23:35:12 <alegend45> Whaddya' think?
23:41:05 -!- Phantom_Hoover has quit (Remote host closed the connection).
23:41:15 <Patashu> Why not make a class of arbitrarily more difficult languages
23:41:27 <Patashu> Then you'll have your work cut out for you
23:43:01 <alegend45> What do you mean?
23:43:06 <alegend45> A class?
23:43:55 <Patashu> Like how there are increasingly more inaccessible ordinals and notations for increasingly larger numbers like conway arrow notation and so on
23:44:07 <Patashu> Is there a permutation you can do to a language to make it harder?
23:44:37 <alegend45> Hmm...
23:44:46 <alegend45> Malbolge 2.0...
23:45:03 <alegend45> But how do I make it more difficult?
23:45:07 <Patashu> I'm picturing a language mutator that randomly applies the side-effect of a different operation to every operation you can do
23:45:11 <Patashu> so you can't do anything without mucking up something else
23:45:18 <Patashu> and if you try to fix that it messes up something else and so on
23:45:23 <Patashu> kind of like reverse engineering cryptography
23:45:29 <alegend45> Maybe more encryption?
23:45:59 <Patashu> Break this SHA-256 hash to continue programming?
23:46:15 <alegend45> O_O
23:46:21 <alegend45> I've got it!
23:47:05 <oerjan> we already have a hash-breaking esolang
23:47:15 <oerjan> shafuck or something
23:47:50 <oerjan> @hoogle m (a -> b) -> a -> m b
23:47:50 <lambdabot> Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
23:47:50 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
23:47:50 <lambdabot> Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b
23:47:54 <Patashu> bitcoinfuck
23:48:10 <Patashu> dang there are some weird ass operators in haskel
23:48:23 <oerjan> just not the one i want
23:50:45 <alegend45> But how exactly does Malbolge work? The wiki isn't very good at explaining it.
23:51:03 <Patashu> it's a ternary language with lots of arbitrary ternary bit-wise operators that aren't awfully useful
23:51:05 <Patashu> iirc
23:51:29 <Patashu> and doesn't the program counter move around randomly?
23:52:13 <oerjan> acually there are just two operators iirc
23:54:39 -!- jassumjas has joined.
23:55:01 <oerjan> no it doesn't move around randomly
23:55:21 -!- HolyBlood has quit (Ping timeout: 260 seconds).
23:55:56 <oerjan> however the previously executed instruction is encrypted after each step
23:56:15 <Patashu> aaah
23:56:30 <Patashu> polymorphic code }:)
23:56:33 <oerjan> except for jumps, for which the encryption hits the instruction before the target instead
23:57:15 <oerjan> (this exception for jumps supposedly makes things much easier to program)
23:58:48 -!- copumpkin has joined.
←2011-05-17 2011-05-18 2011-05-19→ ↑2011 ↑all