< 1177460518 0 :CakeProphet!unknown@unknown.invalid NICK :SevenInchBread < 1177463994 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :SevenInchBread! < 1177464241 0 :nazgjunk!unknown@unknown.invalid QUIT :Remote closed the connection < 1177465231 0 :pikhq!n=pikhq@c-75-70-41-174.hsd1.co.comcast.net JOIN :#esoteric < 1177465725 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :Gah! Darn Google Groups. < 1177465924 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :Luckily enough, I can get this down in three sentences. < 1177465942 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Do you think I should remove the special scope-reassignment of functions with assignment in Plof? < 1177465970 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: It occurs to me that I'm not actually using function reassignment much, and it may be more confusing than it's worth. < 1177465973 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Hmm. < 1177465985 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Given that I didn't know that was *there*. . . < 1177465989 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Haw < 1177465992 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :The idea is this: < 1177466016 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :var someObject = :[ /* content */ ]; someObject.newFunction = :{ /* this function will run in someObject's scope, not this one */ }; < 1177466040 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Oh. < 1177466055 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Um, that's actually useful. < 1177466058 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Unfortunately, the side effect is that I can't do things like: < 1177466067 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :It might be nice to use a different syntax, though. < 1177466070 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :var a = (x as function):{ var x2 = x; x2(); }; < 1177466089 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :(As x2 would have a different scope than x was intended to be called in) < 1177466104 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :var someObject = someObject : :[newFunction = :{ /* Here's your function. */ }]; < 1177466116 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Err. < 1177466121 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Remove the var bit. < 1177466140 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :That would have the same effect, but would change someObject, which would be bad if you had child objects of it. < 1177466203 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Hrm. < 1177466226 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :See the dilemma? :) < 1177466231 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yeah.\ < 1177466290 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :someObject.newFunction = someObject.:{};? < 1177466306 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Hmmmmmmmmmmmmmmm < 1177466317 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Explicitly specifying the scope of an object at definition time. < 1177466327 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yeah. It *may* work. < 1177466477 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Doesn't parse very cleanly with that syntax, but that's solvable. < 1177466502 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :It's a matter of getting a parsable syntax for it, after all. . . < 1177466527 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Just needs more colons ;) < 1177466550 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :someObject.newFunction = someObject:::{...}; < 1177466551 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1177466558 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Hahah. < 1177466562 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Overkill, no? < 1177467345 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :GregorR, hmmm.. so what's the problem now? < 1177467364 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :SevenInchBread: Just syntax. < 1177467437 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :well... it's pretty clear what it does.. < 1177467453 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :assigns a function to a variable in a different scope... < 1177467491 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :someObject.:{}; is difficult to parse as it is, since '.' and '{' are at the same precedence. < 1177467509 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Trying to figure out what to change to get syntax something like that without making parsing any more complex. < 1177467512 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :no I mean obj.func = :{blah} < 1177467516 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :OH < 1177467519 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :The problem there is this: < 1177467528 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :var a = (x as function):{ var x2 = x; x2(); }; < 1177467554 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...what's that do? < 1177467563 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :That's the question ;) < 1177467572 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ACTION isn't familiar with the syntax. < 1177467572 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Ideally, x2() would be the same as x(). < 1177467588 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Well, the problem is that that would reassign the scope. < 1177467599 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :But in that case, you don't want to reassign the scope. < 1177467602 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmmm... well.... what kind of scoping is it? global-by-default? < 1177467615 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Is ... what? < 1177467628 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I mean.... in what scope is x2 < 1177467645 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :By the current convention, x is in the scope that it was defined, and x2 is in the scope of function a. < 1177467658 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ah okay... Pythonesque? < 1177467677 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :....... not really :P < 1177467690 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :well... variables are implicitly local, or am I wrong? < 1177467706 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :They have the scope in which they were defined. < 1177467714 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1177467727 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I forget that we DECLARE our variables here. :) < 1177467837 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmm.... if you have a direct reference to the object... would it be much of a problem what scope you're in? < 1177467850 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ACTION might be misinterpreting the semantics... but eh. < 1177467941 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :If you want to make a function be in a prototype object, the function as-declared will not have a direct reference to the object upon which it is run. < 1177467989 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ah.... I see.... so you need a sort of implicit way to add members/attributes/whatever to the prototype. < 1177468000 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Exactly. < 1177468010 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Currently, that's easy because the scope will be reassigned. < 1177468017 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :But it causes problems elsewhere. < 1177468073 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :....could go with a good ol' self < 1177468106 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :self being the scope from which the function was accessed.... maybe? < 1177468149 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Umm, if I call someObject.foo(), I'm calling it from a scope which would not be an appropriate 'self' ... < 1177468161 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :makes swapping methods between objects easier.... since self always refers to the containing scope for that function. < 1177468183 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :no I mean.... make self implicitly the object from which foo was accessed < 1177468190 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :in that case... it would be someObject. < 1177468200 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :.....not sure how you would program that to make sense though < 1177468230 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure if that solves the base problem :P < 1177468252 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :heh, NOT SURE I KNOW THE BASE PROBLEM :) < 1177468309 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :var a = (x as function):{ var x2 = x; x2(); }; // as Plof is currently designed, this is useless, and worse, an equivalent can't be easily defined. < 1177468338 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...I don't understand the syntax... what's the colon for? < 1177468355 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Don't worry about that, just know that it's a function accepting a function as an argument. < 1177468406 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :oh... that's what's going on? < 1177468438 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :It's then assigning that function to its own variable, x2. But by the current definition, that changes the scope in which x2 will be run, so x2 won't work (as expected). < 1177468470 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :But the alternative makes adding functions to prototypes not work well. < 1177468485 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :so the problem sems to be.... you have a fairly simple way to designate where variables are READ... but not a clear way ro specify where they're WRITTEN. < 1177468516 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :............................. what? < 1177468569 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :>.> wait... doesn't declarations fix that? < 1177468620 0 :ihope!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1177468625 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :just find where the variable is declare... and that's the scope to assign it to? < 1177468627 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :I don't think the problem that you think is the problem is the problem X-P < 1177468641 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :That's what's done right now. < 1177468641 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :yeah.... the colon thing is probably throwing me off. < 1177468665 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :............................. OK, so I'll remove the colon, it's functionally equivalent :P < 1177468674 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :var a = (x as function){ var x2 = x; x2(); }; < 1177468679 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :.....but what does it DO god damnit < 1177468685 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I'm still not sure what that does. < 1177468692 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :It's irrelevant what it does in this case X_X < 1177468704 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :I don't want to add to the confusion of trying to discuss a totally unrelated problem. < 1177468721 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :>.> if I don't get the syntax... I can't decipher what's going on... < 1177468741 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :that example means nothing to me right now < 1177468751 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :There are no colons in that example! :P < 1177468770 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Is it "the colon thing" you don't understand, or the syntax in general? < 1177468818 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :.......the whole thing, apparently. < 1177468827 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I figured out the colon thing... thin and thick functions right? < 1177468858 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :....now I just don't know what that means... you've defined an anonymous function next to a type casted function? < 1177468895 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ah wait.... do function calls require parenthesis? If not.... then you're calling (x as function) with {stuff} as the only argument, yes? < 1177468924 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :um, i think he is defining a function with one argument, x < 1177468933 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :ACTION reappears. < 1177468940 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Like oerjan said. < 1177468962 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :OH < 1177468964 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :okay. < 1177468973 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :the (x as function) is part of the signature. < 1177468976 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Yes. < 1177468986 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I thought it was... something being evaluated just before the lambda. < 1177469003 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :SENSE HAS BEEN MADE < 1177469007 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Heh < 1177469035 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :As it is, when I assign x to x2, x2 gets the content of the function, but the scope when called will be different. < 1177469053 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :aaah.... dynamic scoping? < 1177469081 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Yeah. And it was necessary for me to do that for adding functions to objects to work properly. < 1177469081 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :this is bizarre. < 1177469086 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :But it has a nasty side-effect :( < 1177469106 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :is it possible to have lexical functions and dynamic functions? < 1177469115 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :or have lexical variables and dynamic variables perhaps? < 1177469121 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :a language without lexical scoping is not Properly Functional (TM) < 1177469143 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :well... it does... you can define var in function. < 1177469150 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ah... I see the problem. < 1177469164 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :the variables that are undefined in the function are... basically dynamically gotten. < 1177469170 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :The default scope of a function is the scope in which it was defined, e.g. lexical scoping. < 1177469180 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :But, as a functional language, Plof is Ridiculously Impure (TM). < 1177469181 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the problem is how to refer to variables of the current object. < 1177469193 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Yuh < 1177469204 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and something self-like might be cleaner. < 1177469213 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :....haha, that's what I suggested once. < 1177469223 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yeah, i was repeating < 1177469235 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric : /Getting/ self would be nasty at best. < 1177469240 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :(For the interpreter) < 1177469253 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I think having lexically defined or dynamically defined variables would be interesting. < 1177469263 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the python solution seems to work well. < 1177469281 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :not sure if it would work well in plof < 1177469287 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :and... it has its problems. < 1177469290 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :It's not really comparable. < 1177469294 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i don't necessarily mean all of it. < 1177469313 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :just the part about binding functions to methods with the x.f construction < 1177469317 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :like... you can't assign arbitrary functions to a Python object and expect them to work like methods. < 1177469348 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :which is something that is done a lot in plof < 1177469351 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well, you can do it to a class < 1177469361 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Plof has no classes. < 1177469388 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :yeah... wouldn't work out well..... hmmm... how does IO fix this dilemma? < 1177469392 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i suppose the problem is you might want to access unbound methods too < 1177469450 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :a function that doesn't access self is effectively unbound < 1177469465 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ok, simply have an assignment that tags a function as a method. < 1177469501 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :e.g., an assignment operator which changes scope. < 1177469512 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :eh.... for some reason it doesn't sound necessarily. < 1177469526 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :not all of the scope just the self < 1177469526 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :like there's a really simple way to just make it all work with one assignment operator. < 1177469560 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :couldn't all assignments with functions treat functions as methods? < 1177469583 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: As it is, functions defined within an object have a parent scope of the object, and so 'self' is unnecessary. It would be confusing for adjunct methods to require 'self', but internal methods not to. Also, it would mean you couldn't copy a method from one object to another. < 1177469594 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :....that's basically what Ruby does... a function is a method that simply never refers to self. < 1177469641 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmmm... you do an explicit self. < 1177469648 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :*could < 1177469657 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i know, but i think it would be problematic in any case. what if you copy to an object that has a different set of fields, some of which have the same name as globals? < 1177469659 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :but... meh... < 1177469675 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :I suppose I may have to *sigh* < 1177469698 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :what's the problem with making anonymous functions bound to the scope they get assigned to? < 1177469708 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmmm... oh... well < 1177469711 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :yeah... that would be weird < 1177469716 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that you then don't get closures. < 1177469718 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :var a = (x as function){ var x2 = x; x2(); }; < 1177469729 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :^ That's the problem with it :) < 1177469773 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure I understand... wouldn't x2 be called in the scope of the "module" (or whatever plof calls it) < 1177469799 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :... x2 is called in the scope of the function assigned to a. < 1177469842 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :which has access to... the global scope in which a is defined, right? < 1177469856 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Right. But 'x' was presumably defined in some other scope. < 1177469864 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :And will be expecting variables from it. < 1177469875 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :this resembles the lisp mess with lambda vs. function, doesn't it? < 1177469914 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is not familiar with that particular mess ... not very familiar with LISP. < 1177469932 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmmmm..... if x2 is lexically scoped, what's the problem? < 1177469937 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :lambda is dynamically scoped, function is lexical, i think < 1177469946 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :(you said they were lexically scoped... anyways) < 1177469947 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :SevenInchBread: x2 was assigned x. < 1177469965 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...ah < 1177469966 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :SevenInchBread: So x2 will be called with a's scope, rather than x's scope. However, the function is still x. < 1177470000 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :right... the interpreter would make no distinction between literal lambda assignment and variably expanded assignment. < 1177470005 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ah okay. < 1177470043 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...so, what's the difference between thin and thick functions again? < 1177470060 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :When you return from a function, it falls through all the thin functions and returns from the nearest thick function. < 1177470085 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :......??? < 1177470100 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :oooh < 1177470106 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :There are no blocks but functions. But if you do: < 1177470114 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :a return in a thin function...... returns from the thin function it's defined in. < 1177470119 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :er... thick < 1177470119 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Right < 1177470126 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :it's so you can do things like return in an if statement < 1177470131 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Exactly. < 1177470140 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Since you're really passing 'if' a function. < 1177470141 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmmm... sounds hackish to me... but eh. < 1177470154 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :It is hackish, but it's not as bad as what I had in Plof1 :P < 1177470164 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :It's the intersection between functional and imperative programming X_X < 1177470180 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :could you maybe do return if(whatever, {blah;blah;blah;return x}, {return whatever}); < 1177470196 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :have the if statement return the return value of the executed function. < 1177470209 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :What if you only want one side of the if to return? < 1177470227 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmmm, ah. < 1177470239 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Like I said, intersection between functional and imperative :) < 1177470259 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I thought thick and thin functions were something like ios blocks and methods.... < 1177470266 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :which largely fixes its scoping dillemma < 1177470290 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :They're sort of similar, but far more interchangeable. < 1177470320 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :what if you make it so only thick functions get reassigned scope? < 1177470349 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :heh... basically what if you make thin functions dynamical and thick functions lexical. :) < 1177470363 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no, the other way around < 1177470374 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...er, maybe... I don't quite remember. < 1177470387 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :var a = (x as thick):{ var x2 = x; x2(); }; // why shouldn't this work? < 1177470419 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :because a thick function becomes a method... < 1177470460 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmm... typecasting thin and thick functions sounds like tricky business. < 1177470463 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you could have automatic conversion between them. < 1177470509 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(x as thin) would mean, don't reassign scope for x < 1177470528 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Except that it would also mean that it's a thin function X_X < 1177470562 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yes, but encapsulation is trivial < 1177470595 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...heh, more importantly... why would you do that? < 1177470624 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :that example.... or is it just as a "doesn't it just make sense that it should work this way" example. < 1177470629 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :if we take the smalltalk option that return can only return from methods... < 1177470665 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :I don't want to make this distinction between "methods" and "functions," especially since there are plenty of global functions that return. < 1177470705 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :ah okay yeah... you want thick and thin functions to be largely interchangable thanks to type conversion < 1177470728 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :ACTION stabs himself to sleep. < 1177470786 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :heh.... this is nothing.... I had the insane idea of defining list-splits, attribute-access, and function calls with the same operator. < 1177470824 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :whitespace overloading anyone? < 1177470831 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :object attribute (called series of list (items with (subcalls)) huge parsing dillemma) < 1177470903 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...then I realized how stupid that would be < 1177470911 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :and then stole io's syntax. < 1177470981 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :actually that resembles some thoughts i have been having on ALPACA's syntax < 1177471009 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I suppose it's possible.... < 1177471016 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :if you have explicit parenthesis for function calls < 1177471019 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :....but I didn't < 1177471038 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :it was... quite strictly... "all functions are one argumented" < 1177471047 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...well, one or zero argumented < 1177471097 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you do know about combinatory logic, right? < 1177471106 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :yup < 1177471141 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I simplified things quite muchly with good-ol comma-separate lists. < 1177471172 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :and Smalltalkian keyword selector stuff. < 1177471266 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :[do stuff to things] if (x > 3) else [do (other stuff) to things] ....although if I figure out some crazy way to unify expressions with functions... I can make it look like < 1177471282 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :(do stuff to things) if (x > 3) else (do (other stuff) to things) < 1177471376 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :....actually I just figured out how... but it's a little unintuitive to explain the semantics. < 1177471382 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :the syntax looks sleek and sexy though < 1177471615 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :basically you have expression wrapped up in an expression object of sorts.... and if the message isn't defined on the expression, the expression is evaluated and it gets sent to the returned object. < 1177471628 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :super-laziness.... only evaluated WHEN NECESSARY < 1177471664 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :now if you let obj meth = meth obj, (i.e. objects applied to things reversely apply them back) and use currying, then attribute access and function application _can_ have the same syntax. < 1177471732 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :it kind of does. < 1177471821 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :functions are objects that accept one message, and puts it into the source code. < 1177471839 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :er rather... places it iin the executioon scope. < 1177471847 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :now if you interpret (a b c) as \f. f a b c, then you can make lists of attributes interpolate < 1177471873 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :and... since lists are single messages... (you, can, pass, multiple, arguments) < 1177471901 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :lazily evaluated arguments... at that... < 1177471950 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :eh, are we talking about the same thing? < 1177471958 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...not really < 1177471960 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric ::) < 1177471970 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Everything is an object! < 1177471970 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i was describing my ideas about ALPACA. < 1177471974 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :what are we talking about? < 1177471979 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :dunno < 1177472027 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ALPACA conditions, suitably generalized, sort of look like a list of attributes applied iteratively. < 1177472043 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but sometimes a function argument gets thrown in. < 1177472066 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :...not sure I follow < 1177472098 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :like ^ is an attribute to find the cell above the current one < 1177472208 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :except i don't think the original ALPACA allows you to iterate them - you have to stay within the 8-cell neighborhood. < 1177472224 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but that is what i mean by suitably generalized. < 1177472234 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :I'm trying to make creating objects suitably convient... because I think you could do a lot of nifty stuff with constructions... instead of the typical return-the-desired-value-immediately thing. < 1177472267 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*convenient < 1177472289 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :like (x + 1) if (x > 3) will return a structure of sorts that works like a typical expression... but with an added else method. < 1177472318 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :if the next message is defined on the expression... it's execute... otherwise the expression is evaluated and the message delegated to the return. < 1177472328 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :so... if you did... < 1177472343 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :$hello = (x + 1) if (x > 3) < 1177472348 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :you could then do < 1177472361 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hello else 3 < 1177472367 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :or just as easily hello + 53 < 1177472389 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :how lazy is haskell? < 1177472407 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :pretty lazy < 1177472448 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :everything is guaranteed to behave as if nothing is evaluated until it is needed. < 1177472448 0 :helios24!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1177472494 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, hmmm... does it preserve the evaluation... so it only evaluated once instead of everytime it's needed? < 1177472518 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :when is something needed? < 1177472518 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :in any reasonable implementation yes < 1177472543 0 :helios24!i=helios@gaia.quasar-net.de JOIN :#esoteric < 1177472552 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :although evaluating it _every_time_ happens to be equivalent except in speed, so strictly speaking that is legal too < 1177472555 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :depends on how you define the lanauge.... in the case of Sophia... it's whenever a message is passed to it. < 1177472670 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :in Haskell a value is needed when it is investigated by something that is itself needed. < 1177472705 0 :Sgeo!n=Sgeo@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1177472731 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :if a function call f x is needed, the function f will be. x may or may not be. < 1177472801 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :hmm... so nothing is evaluated until something that is being evaluated needs it to be evaluated in order for it itself to be evaluated? < 1177472817 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :....I worded that strangely. < 1177472838 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :indeed, starting from the Main.main function, which is the only thing automatically needed. < 1177472864 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :or from whatever you give interactively if using a repl < 1177472987 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :or rather, main is evaluated to an IO action, which is performed, which may cause further evaluations. < 1177472998 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :etc. < 1177473095 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :there are however a couple of functions to get around lazy evaluation. < 1177473152 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :seq a b pretends to need a, evaluating it, then evaluates b and returns it. < 1177473184 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and f $! x = seq x (f x) < 1177473319 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :also you can annotate record fields with ! so that they are automatically evaluated when the whole record is. < 1177473944 0 :SevenInchBread!unknown@unknown.invalid QUIT :Read error: 113 (No route to host) < 1177477042 0 :Sgeo!unknown@unknown.invalid QUIT :"Ex-Chat" < 1177479553 0 :oerjan!unknown@unknown.invalid QUIT :"leaving" < 1177484415 0 :FunnyMan3595!n=funnyman@198.147.197.158 JOIN :#esoteric < 1177484634 0 :FunnyMan3595!unknown@unknown.invalid PART #esoteric :? < 1177485559 0 :jix__!n=jix@195.37.106.60 JOIN :#esoteric < 1177486783 0 :fax!i=usr21415@80.193.211.68 JOIN :#esoteric < 1177486799 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1177487262 0 :jix__!unknown@unknown.invalid QUIT :"This computer has gone to sleep" < 1177487407 0 :jix__!n=jix@195.37.106.60 JOIN :#esoteric < 1177487999 0 :clog!unknown@unknown.invalid QUIT :ended < 1177488000 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1177489356 0 :jix__!unknown@unknown.invalid QUIT :"Bitte waehlen Sie eine Beerdigungnachricht" < 1177492921 0 :puzzlet_!n=puzzlet@122.46.188.21 JOIN :#esoteric < 1177493615 0 :puzzlet!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1177497136 0 :puzzlet_!unknown@unknown.invalid QUIT :zelazny.freenode.net irc.freenode.net < 1177497137 0 :sp3tt!unknown@unknown.invalid QUIT :zelazny.freenode.net irc.freenode.net < 1177497280 0 :puzzlet_!n=puzzlet@122.46.188.21 JOIN :#esoteric < 1177497280 0 :sp3tt!n=sp3tt@80-162.cust.umeaenergi.com JOIN :#esoteric < 1177499347 0 :ihope_!n=ihope@c-71-205-100-59.hsd1.mi.comcast.net JOIN :#esoteric < 1177499356 0 :ihope_!unknown@unknown.invalid NICK :ihope < 1177506644 0 :pikhq!unknown@unknown.invalid QUIT :Remote closed the connection < 1177506663 0 :pikhq!n=pikhq@c-75-70-41-174.hsd1.co.comcast.net JOIN :#esoteric < 1177510272 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION hav drewn a pikcher: http://compsoc.dur.ac.uk/~sc/art/langs.png < 1177510619 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :I love it!!!! < 1177510634 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :thats going on my wall as soon as I fing a printer < 1177510753 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :erm, ok < 1177510781 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :They vary between the languages themselves and their stereotypical users < 1177510805 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Perl and Java are based on people I know. < 1177510832 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :do APL and stuff < 1177510833 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1177510862 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :ACTION reads about epigram < 1177510869 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I am not sure what they should look like < 1177510884 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :APL is an anarchist < 1177510969 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :wow epigram looks interesting < 1177511008 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I know one of the main developers, otherwise I would not know about it. < 1177511045 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I recommend learning Haskell, then learning the GADT extension to haskell before trying to tackle Epigram. < 1177511075 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :I wrote a LOGO interpreter in haskell < 1177511080 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :but its the only program I wrote < 1177511607 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :online anywhere? < 1177511625 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :the fact that you can write that as your first program shows what a poerful language Haskell it :-P < 1177511629 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :*is < 1177511683 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :oh it is < 1177511703 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :http://fax.twilightcoders.net/files/LOGO.zip < 1177511709 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :I think its awful code < 1177511733 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :1 sec < 1177511740 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :this is the usermanual http://img293.imageshack.us/img293/449/logovz4.png < 1177511838 0 :ihope!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1177512005 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :I got really pissed off with the state of implementations of scheme < 1177512015 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :& went on a rampage & wrote this < 1177512029 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :in scheme48 I could use glut but not networking at the same time < 1177512113 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1177512427 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :looks great < 1177512436 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :thanks < 1177512446 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :OTOH, you got a head-start as you knew scheme and the libraries you were using < 1177512473 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I don't use {;} much. maybe once every few hundred lines to fit something all on one line < 1177512548 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I would have said "type M = ReaderT (Map String Float, Map String Function)" < 1177512549 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :I dunno I think that I wrote really bad haskell because I dont have any exp like writing things well < 1177512557 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :Whats that for? < 1177512600 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :M is what? < 1177512610 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :oh variables and functions < 1177512666 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :do you knw about monad transformers? < 1177512679 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :no :[ < 1177512695 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :I wanted to write a monad so I could make the turtle move 20 pixels per second < 1177512697 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :but I gave up by then < 1177512702 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :maybe ill do it sometime < 1177512867 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :M would allow you to have the current bindings available without haveing to explicitly pass them around so much < 1177512889 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :There's a tutorial about making a lisp interpreter that explains that sort of thing < 1177512908 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :oh yeah I skimmed the tutorial, I think ill read that properly then < 1177512927 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :its this? < 1177512927 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html < 1177513129 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :bbs < 1177513351 0 :jix__!n=jix@dyndsl-091-096-050-169.ewe-ip-backbone.de JOIN :#esoteric < 1177513673 0 :jix__!unknown@unknown.invalid NICK :jix < 1177513898 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1177513964 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :The problem with colonising other planets via STL means is that if you can build the damn colony ships there is no point sending them out of Earth orbit. < 1177514303 0 :fax!unknown@unknown.invalid PRIVMSG #esoteric :ACTION back < 1177514420 0 :crathman!n=chatzill@69.15.198.171 JOIN :#esoteric < 1177514482 0 :ihope_!n=ihope@c-71-205-100-59.hsd1.mi.comcast.net JOIN :#esoteric < 1177514490 0 :ihope_!unknown@unknown.invalid NICK :ihope < 1177515414 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1177515445 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :The Daily WTF is launching OMGWTF -- "The Olympiad of Misguided Geeks at Worse Than Failure Programming Contest" < 1177515585 0 :goban!unknown@unknown.invalid QUIT :Connection timed out < 1177516031 0 :ihope!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1177517834 0 :goban!n=goban@ip68-107-157-108.hr.hr.cox.net JOIN :#esoteric < 1177519185 0 :goban!unknown@unknown.invalid QUIT :Connection timed out < 1177519402 0 :sebbu!n=sebbu@ADijon-152-1-102-150.w81-50.abo.wanadoo.fr JOIN :#esoteric < 1177519912 0 :pikhq!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1177520080 0 :helios24!unknown@unknown.invalid QUIT :zelazny.freenode.net irc.freenode.net < 1177520081 0 :bsmntbombdood!unknown@unknown.invalid QUIT :zelazny.freenode.net irc.freenode.net < 1177520081 0 :SimonRC!unknown@unknown.invalid QUIT :zelazny.freenode.net irc.freenode.net < 1177520083 0 :bsmntbombdood!i=gavin@abacus.kwzs.be JOIN :#esoteric < 1177520084 0 :SimonRC!n=sc@bylands.dur.ac.uk JOIN :#esoteric < 1177520086 0 :helios24!i=helios@gaia.quasar-net.de JOIN :#esoteric < 1177520307 0 :pikhq!n=pikhq@c-75-70-41-174.hsd1.co.comcast.net JOIN :#esoteric < 1177522025 0 :goban!n=goban@ip68-107-157-108.hr.hr.cox.net JOIN :#esoteric < 1177523563 0 :goban!unknown@unknown.invalid QUIT :Connection timed out < 1177523581 0 :goban!n=goban@ip68-107-157-108.hr.hr.cox.net JOIN :#esoteric < 1177534871 0 :jix!unknown@unknown.invalid QUIT :"Bitte waehlen Sie eine Beerdigungnachricht" < 1177537121 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1177537639 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: those _are_ horns on the Cobol guy, right? < 1177537670 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wants to be a mix of the Scheme, Intercal and Epigram guy < 1177539227 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :erm < 1177539243 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :no < 1177539249 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :he just has a bad combover < 1177539264 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh :D < 1177539554 0 :goban!unknown@unknown.invalid QUIT :Connection timed out < 1177539771 0 :nazgjunk!n=htitan@wikipedia/Nazgjunk JOIN :#esoteric < 1177539802 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1177540155 0 :puzzlet!n=puzzlet@122.46.188.21 JOIN :#esoteric < 1177540194 0 :puzzlet_!unknown@unknown.invalid QUIT :Read error: 54 (Connection reset by peer) < 1177544143 0 :goban!n=goban@ip68-107-157-108.hr.hr.cox.net JOIN :#esoteric < 1177544786 0 :crathman!unknown@unknown.invalid QUIT :"ChatZilla 0.9.78.1 [Firefox 2.0.0.3/2007030919]"