< 1164154777 0 :CakeProphet!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1164155662 0 :fizzie!unknown@unknown.invalid QUIT :Read error: 60 (Operation timed out) < 1164158562 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :LaTeX has arithmetic support? < 1164158570 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :News to me, because it would sure help my formulas out. < 1164158586 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I love latex < 1164158589 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :(I'm going to write a little prepocessor in Scheme to make that a bit easier on me, though.) < 1164158596 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :of course it has < 1164158629 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :It's so funny when someone sees my reports and is like "How did you do that?" < 1164158630 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I know LaTeX can graph functions and such for you... < 1164158633 0 :fizzie!n=fizban@sesefras.zem.fi JOIN :#esoteric < 1164158642 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hehe < 1164158642 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: really?! < 1164158648 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :My Physics teachers *adore* my LaTeX. < 1164158651 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :xor: Yeah, it can. < 1164158653 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :*teacher < 1164158664 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Well, he loves me using it. < 1164158664 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :my physics teacher is TERRIBLE < 1164158668 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :He likes me less. < 1164158676 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :And I like him much less than that even. < 1164158676 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I remember reading about that last time I flipped through a LaTeX manual < 1164158688 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :We just took a test, he graded it very badly < 1164158785 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :I hate the man in general. He teaches awfully, and will mean I'll probably have to study that much harder on the AP test. < 1164158800 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :He *ALWAYS* goes offtopic. Today it was about designers designing things for their gender groups. < 1164158807 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yep, mine too < 1164158813 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :teaches badly, doesn't go off topic < 1164158819 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I've had entirely too many shitty teachers in my school career. < 1164158851 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :And he feels like picking on me, for some odd reason. < 1164158855 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :every now and again, I get a really fantastic one, but most teachers are evil and/or incompetent. < 1164158868 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I need to go in and rub some stuff in his face < 1164158875 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :I need to kill mine. < 1164158877 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :About precision and accuracy < 1164158879 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :Sexist high-school teachers. Surprise! < 1164158899 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :He spends 2 WHOLE HOURS on idiocy and has a very ... odd ... view of what Calculus is. < 1164158914 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :My phsyics teacher is afraid of calculus < 1164158922 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Or, thinks we should be < 1164158929 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Example of Calculus from my Physics teacher: < 1164158981 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :``Using the data, you can chart the viscosity of the liquid in day 1, day 2, day 20, etc. Now take it to its limit [My Note: That's his favorite phrase], use Calculus. Using Calculus you can find out what the viscosity is on the 7th day 11th hour.'' < 1164158989 0 :Asztal!unknown@unknown.invalid PRIVMSG #esoteric :my high school physics teachers were good... I think. I can't remember. < 1164158992 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :My government teacher was insanely sexist. I was on numerous occasions tempted to prove to the class that she was a hypocritical numbskull, but I decided that remaining neutral in her eyes would be less dangerous than earning her hatred. < 1164158993 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Someone didn't tell our Physics teacher about fractional days. < 1164159006 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :What's scary is that he's teaching an AP class. < 1164159007 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :"keep your enemies so close they don't know they're your enemies" < 1164159030 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Hyper-feminists are fun in their oversighted stupidity. < 1164159078 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :the problem is that they tend to get away with sexism a bit more easily than men. < 1164159100 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :I agree. And I'm female, so :) < 1164159133 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :What irks me is when women call for equality, but then shamelessly use their ``We're weak! Help us!'' covetisms if they do something wrong/bad. < 1164159236 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :it's fairly frustrating that so many vehement feminists seem to want all the benefits of "perfect equality" without any of the negatives. In my book, discrimination is discrimination, wether it's "justified" or not. < 1164159262 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Exactly. < 1164159298 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I'm sure that not all feminists are hypocrites, but the most vocal ones really give the whole movement a bad name- not unlike most things. < 1164159346 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :Christianity, Atheism, Black people, White people, Men, Women, Democrats, Republicans... < 1164159387 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :it makes me want to become a hermit or something. < 1164159444 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :feminism is to womens rights as black nationalism is to black rights < 1164159466 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :heh- an excellent analogy < 1164159506 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Heh. True. < 1164159540 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Well also, the feminist movement has died down nowadays. So the self-proclaimed zealots tend to be the ones who want one-sided favoritism instead of equality. < 1164159591 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :very true < 1164159644 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Which brings to mind a parallel I made earlier about temporary hacker death. < 1164159698 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :That reminds me--I get to go talk to the programming teacher at my school < 1164159727 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :They teach telephony at our school... although on what language basis, I have absolutely no idea. < 1164159730 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :"OOP is the awnser! Long live Java!" < 1164159753 0 :myu!n=myu@s142-179-217-229.ab.hsia.telus.net JOIN :#esoteric < 1164159767 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Hey, Java isn't that bad. < 1164159776 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Especially considering C++ *shudder*. < 1164159779 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :there is seriously nothing wrong with Java as a language < 1164159789 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: c++ too < 1164159793 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :I think Java's stigma comes from this: < 1164159809 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :Not every language needs to be about speed or compiler efficiency < 1164159811 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION randomly says "LSL" < 1164159836 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :A) 99% of today's Java programmers can't code for poop because they've only been trained at one level of programming and have no real ``aptitude''. B) The implementations are very very ineffecient. < 1164159860 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :On the phone, he asks, "Has he tried an object oriented language like C++ or Java?" < 1164159883 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Java is good in that, it's readable for someone with C-only experience. < 1164159893 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :It definitely succeeds there, where C++ utterly fails. < 1164159903 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I'd say those are fair criticisms, as long as you bear in mind the advantages of Java < 1164159927 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I need some compelling arguments against C++ and Java for when I go in < 1164159948 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :Java nails cross-platform operation like virtually no other language, and that's certainly worth some hits on speed < 1164159950 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :I have a bunch of complaints against C++, but I don't mind Java that much. < 1164159966 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :What are your complaints against C++? < 1164160058 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :The syntax is horribly discontiguous with C syntax. The data abstractions are often overly abstract, much unlike its C counterpart. C++'s object system is useless overhead for an object system that only contains the cogs of objects (instances, constructors, destructors), C++ programmers infuriatingly choose to use C++ abstract-equivalents to perfectly good C counterparts. < 1164160065 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I just don't really like C or C++, because they really make it clear that they weren't designed for usability as much as the ability to compile to machinecode. That doesn't mean I won't ever use them, but there's a difference between coding for fun and coding for work. I'm never going to code in C/C++ for *fun*. < 1164160122 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :i think all the languages belonging to the C-family are poor languages.. c/c++/java/php/python etc < 1164160127 0 :Asztal!unknown@unknown.invalid PRIVMSG #esoteric :I hate: C++'s compilation model. < 1164160131 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :The standard library is immense immense. But this is also a criticism that applies to Java and CL too. < 1164160163 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :so guys, what do you think are the highest level languages? < 1164160170 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :pseudo code < 1164160176 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Well said :D < 1164160179 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I'd say that Java's API is a more useful "standard library" than what comes with C, even if you say that it's bloated. < 1164160194 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :human language. < 1164160229 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :why, telepathy of course :) < 1164160230 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Well, there's another point too. Java's API is still usable if you only read the basics and skim when you need more. C++'s isn't. < 1164160233 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :human language can be a bitch to express a program in < 1164160235 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :program specifications in English are effectively equivalent to sourcecode if they're detailed, they just need an extremely complex compiler (a human) to convert. < 1164160236 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :CL is somewhere in between. < 1164160242 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :yeah human language isn't very high level < 1164160251 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: I wholeheartedly agree < 1164160268 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :CL is so old, it makes no sense that CL would be one of the highest level languages these days heh :P < 1164160280 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :myu: Yep, it's crazy < 1164160284 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Forth is one of those languages that doesen't fit anywhere. < 1164160287 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :in my mind, the best single thing about Java is the fact that it's designed in a very uniform way. < 1164160290 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :50 years old, and still good < 1164160322 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :That too! C++ is a hodgepodge. std::tuple, std::pair, std::list, I mean... what the **** ? < 1164160339 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :yeah- one of the things that brings me pain when I code in C++/ < 1164160368 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :most C++ coders will respond "but I can do it with fewer characters than you can in Java!". < 1164160372 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :C is good for what it is -- effecient (although Pascal may be a bit better, and Forth is good for lower-than-C-higher-than-ASM level). < 1164160386 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Sure. After reading a 1000 page+ manual. < 1164160387 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Forth is just weird < 1164160396 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :I like Forth. < 1164160400 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I know < 1164160418 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :Java 5.0 I/O is *infinitely* better than it has been in the past, and even back then it wasn't too horrible if you understood what you were doing, < 1164160431 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :i'm a forth programmer, getting into ruby nowadays though < 1164160453 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Ruby is alright. Nothing too novel, but a good language as far as languages go. < 1164160468 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Scheme is probably my strongest language and is my Lingua Fortica. < 1164160473 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I just wish that fewere people would piss and moan when they're required to use a language they don't like. All languages have a time and a purpose, and whining doesn't make coding go any faster. < 1164160491 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :even tho i spent years with forth its so slow to code in.. takes so much time to figure out the simplest solution and to code the DSL etc < 1164160497 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ACTION spits water across the room at hearing the dreaded name "Ruby" < 1164160498 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :i imagine lisp coding is similarly slow < 1164160503 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :It's not. < 1164160505 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :ruby is very readable < 1164160516 0 :Asztal!unknown@unknown.invalid PRIVMSG #esoteric :I love it. < 1164160521 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Forth is slow only because you start from machine-level up. < 1164160556 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: i'm talking about proper forth coding, no words longer than 2 lines, no using 'pick', etc ;) < 1164160563 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hey, if you like Ruby, good for you... All I'm saying is that I've wrapped my brain around a lot of esolangs, and ruby made me want to take an icepick to my skull. < 1164160566 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :myu: Well, even then. < 1164160589 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :myu: And Forth does become a pain if you factor at more than 2 lines, IMO. < 1164160591 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :yeah, its from the machine-level up but i wonder why no programmers have really brought forth out of the lowlevel? < 1164160602 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Because it belongs in that arena. < 1164160606 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1164160616 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :How many other languages can you play around interactively at the char and byte level? < 1164160631 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :it'd be like asking why there aren't more interpreters for C. < 1164160637 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Quickly debug your driver code and rewrite it on the spot. < 1164160666 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Once you understand how to use a Lisp dialect correctly, you can code most things quickly. Especially because you can build your *own* abstractions instead of reading a 1000 page manual on monolothic ones. < 1164160672 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :fine, but forth is extendable, it can play in the HLL arena if it wants to < 1164160719 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :its essentially lisp, except postfix/stack-based instead of list-based :P < 1164160746 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hm. < 1164160748 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :my friends complained about lisp requiring them to think recursively, but i just have to think backwards from my forth thinking < 1164160756 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Of course, Lisp and Forth suffer from one fatal flaw (IMO) -- over-diversification. With the power to create your own abstractions, you get a fairly watered down standard. < 1164160766 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :yeah thats a good point < 1164160768 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :y'know- I've always wondered about this- what are the "atomic" primitives in LISP? < 1164160770 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Recursive thinking takes time to get into, at first. < 1164160782 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: car, cdr etc ? < 1164160795 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :is there a complete list somewhere? < 1164160823 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :or does everything boil down to BF with a bunch of parentheses and lambda operators? < 1164160841 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1164160905 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: In Scheme, you have the integer, the character, and the procedure. < 1164160926 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Variables are syntactic sugar for procedures. < 1164160947 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Strings are part of the basic standard, but aren't considered primitive (but it is a disparate data-type, unlike C). < 1164160952 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :well, what operators do you have access to at the lowest level? < 1164160964 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :(lambda) < 1164160971 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I know things like + and - are synthetic < 1164160992 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :*only* lambda? < 1164160994 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :In a true from-scratch Lisp, you use combinator logic to create everything. Church numerals for numbers, etc. < 1164161003 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1164161004 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I see < 1164161025 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Of course, for purposes of speed, that's suicide. < 1164161051 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you forgot symbols < 1164161061 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :yeah, I can understand the speed thing < 1164161068 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Well, that's not really an atom as much as the name for an atom. < 1164161089 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :In Lisp, everything is either a symbol or a procedure. Hmmm, maybe that is a more adequate answer. < 1164161108 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :that's why x86 CPU's all have math coprocessors integrally, rather than doing things like sines in software < 1164161113 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :And you have the extra syntactic capability to bind procedures to symbols. < 1164161122 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :(lambda) < 1164161183 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :(define blah 4) == (define blah (lambda () 4)), (define) syntactic extension for binding, blah -- a symbol, (lambda () 4) a procedure. < 1164161192 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :That's variable assignment for you. < 1164161201 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Of course, it's different in CL, which is a lot more impure. < 1164161232 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you mean (define (blah) 4) == (define blah (lambda () 4))) < 1164161250 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Errr, yes. < 1164161318 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I'm assuming CL means Common Lisp? < 1164161323 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Yes. < 1164161328 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ah, ok < 1164161355 0 :myu!unknown@unknown.invalid PRIVMSG #esoteric :i hear CL is a bastardization of the one true lisp and that all real lispers shouldn't be using CL < 1164161372 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :The division goes deep. < 1164161390 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Like Hindu-Pakistan, Taiwan-China, etc. < 1164161413 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but scheme is even further from the original lisp than CL is < 1164161429 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :the basics work the same < 1164161457 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I used a scheme interpreter to work through some beginning LISP tutorials. < 1164161474 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :CL is more programmer-pragmatic, but Scheme compared to CL is a lot like C compared to C++. One is lean, but requires more work, the other is fat, but requires less. < 1164161479 0 :GregorR-L!unknown@unknown.invalid QUIT :Read error: 113 (No route to host) < 1164161504 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :and, interestingly enough, LOGO is actually very similar in structure to LISP proper, although the syntax looks different < 1164161509 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Scheme is more ``pure'' from the Lambda Calculus perspective. < 1164161535 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :anyone here know LOGO? :D < 1164161536 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :And then you have Haskell :) < 1164161558 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: Was my first ever programming language. Back when I went to a private school. < 1164161592 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :when was this? < 1164161620 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :1-3rd grade, then I left. I came back, but they taught Pascal at that age. < 1164161667 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :I and a group of friends one day sneakily copied 6th grader programs to our floppies, stole them home, and read over their source and learned a bunch of new stuff. < 1164161678 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :That was interesting :) < 1164161681 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :argh. fucking public schools. My first experience with programming was in 6th grade when I found a macintosh version of QBASIC and tried punching in code from the back of my math book. < 1164161731 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :they really *need* to be teaching kids languages like LOGO or BASIC in elementary school. < 1164161934 0 :Arrogant!i=Paragon@161.orlando-09rh15-16rt.fl.dial-access.att.net JOIN :#esoteric < 1164161976 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :In a similar vein, I think we should take a note from advertising companies and drill things into people's brains from an extremely early age through repetition. F=Ma. For every action, there is an equal and opposite reaction. Sin(pi)=0, and so on. Comprehension can come later. < 1164162051 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :we need to improve our use of the first few years of jello-like malleability in our children's minds. < 1164162082 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :You can teach an old dog new tricks, but it's sure as hell easier to teach a puppy. < 1164162138 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :howdy, Arrogant, by the way. < 1164162470 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :apparently, I have killed this conversational thread. :/ < 1164162481 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ACTION crawls back inside his hermit-cave < 1164162651 0 :Asztal!unknown@unknown.invalid PRIVMSG #esoteric :да! < 1164164416 0 :Arrogant!unknown@unknown.invalid QUIT :"Leaving" < 1164164944 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :da? < 1164164951 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :nyet! < 1164164986 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :dadadadadadada < 1164164996 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :.gertrude < 1164165035 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :few words are as funny as 'nyet'. < 1164165048 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :i guess 'borscht' is another one. < 1164165105 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :isn't that borschtsch? < 1164165136 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :borschtshcshtshc < 1164165139 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :,maybe < 1164165277 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :wikipedia says no, then yes (in german) < 1164165644 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: How does that "lisp from only lambda" work? < 1164165667 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I've never understood that < 1164165769 0 :oerjan!unknown@unknown.invalid QUIT :"Good night" < 1164166105 0 :myu!unknown@unknown.invalid PART #esoteric :? < 1164166619 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :C, IMO, is a great portable assembler. < 1164166648 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :C is fun < 1164166661 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :xor: Lambda can be abused in fun ways. < 1164166670 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :example < 1164166695 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :define (CONS X Y) to be (LAMBDA (F) (F X Y)) < 1164166716 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Then CAR = (LAMBDA (X Y) X) and CDR = (LAMBDA (X Y) Y) < 1164166723 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :You see how that satisfies the requirements? < 1164166758 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :What's F? < 1164166771 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :huh? < 1164166777 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :(LAMBDA (F) (F X Y)) < 1164166778 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :you knwo hoe LAMBDA works, right? < 1164166781 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164166792 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :well, F is the variable that is bound by that lambds < 1164166826 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :But that function takes one argument < 1164166829 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :cons takes 2 < 1164166836 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :erm < 1164166848 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I'm not defining CONS to be that < 1164166859 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I'm defining (CONS X Y) to be that < 1164166870 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :ooooooh < 1164166884 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Therefore CONS is (LAMBDA (X Y) (LAMBDA (F) (F X Y))) < 1164166938 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :plus I fucked up the definitions of CAR and CDR < 1164166950 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164166976 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :CAR should be (LAMBDA (P) (P (LAMBDA (X Y) X))) < 1164166986 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :and CDR should be (LAMBDA (P) (P (LAMBDA (X Y) Y))) < 1164167018 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :oh, so cons returns it's contents < 1164167022 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :so you have (CAR (CONS A B)) = ((LAMBDA (X Y) X) A B) = A < 1164167041 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :xor: no, cons returns a function that takes another function and applies it to its contents < 1164167095 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :You represent any datastructure by a function that takes in another function and applies it to the members of the datastructure. < 1164167131 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :This is a *more* powerful concept than most modern languages have. < 1164167178 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :With lazy evaluation, it gives you properties for free, you just have to add them to the function that is created by the datastructure constructor. < 1164167215 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :but then it would be ((lambda (f) (f x y)) #'car) < 1164167223 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :You also get algebraic data type pattern-matching for free. You just take in multiple functions to apply to the contents of the datastructure, rather than just one. < 1164167235 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :xor: nonono, this is an L1, not an L2 < 1164167257 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :? < 1164167258 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :xor: oh, wait, yes < 1164167268 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :what is "it" < 1164167288 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :wait < 1164167292 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :ACTION thinks < 1164167309 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :It's a bit like CPS < 1164167341 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :A datastructure is something capable of passing the data in it to a function that know what to do with that data. < 1164167392 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :ahhh, I understand < 1164167548 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :clever < 1164167565 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :But how would you implement, for example, + < 1164167566 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :? < 1164168227 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :well... < 1164168233 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :you could make it primitive, or... < 1164168263 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :we consider "data Nat = Zero | Succ Nat" < 1164168270 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :this becomes: < 1164168341 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :"(ZERO) = (lambda (FZ FN) (FZ))" and "(SUCC N) = "(LAMBDA (FZ FN) (FN N))" < 1164168345 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :things are easy from there < 1164168414 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :aaagh < 1164168431 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :if tyou want a more efficient representation, you can read "every number has at most two digits" by this guy I know: http://www-old.cs.st-andrews.ac.uk/~eb/ < 1164168446 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :xor: you see how the Haskell declaration works, right? < 1164168464 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :no < 1164168466 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1164168483 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :A natural number is either zero or one more than anotehr natural number < 1164168491 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1164168511 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :And you know a bit of Haskell, right? < 1164168535 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :A tiny bit < 1164168538 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1164168555 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Do you know what "data" does? < 1164168605 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :a function that takes Nat and returns Zero | Succ Nat ? < 1164168613 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :erm, no < 1164168620 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :this will be tricky < 1164168633 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I have no idea how to explain algebraic data types to you. < 1164168650 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :do you know about C's "union" types? < 1164168654 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164168688 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :right, well you can consider "data" to declare something like a tagged union of structs. < 1164168775 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :in this case, n item of type "Nat" is *like* the union of a stucture containing no fields (tagged "Zero") or a structure containing 1 field (tagged "Succ") and that field contains a "Nat". < 1164168812 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1164168832 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :So the number of links in this chain is the number it represents < 1164168840 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :yeas < 1164168842 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1164168848 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :In english... < 1164168864 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :A natural number is either zero or one more than another natural number < 1164168869 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1164168884 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :but what about "(ZERO) = (lambda (FZ FN) (FZ))" and "(SUCC N) = "(LAMBDA (FZ FN) (FN N))" < 1164168890 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1164168960 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Well, since there are two possible types of contents for a Nat, the function that represents a Nat must take in two functions that say what to do in the two possible cases < 1164168989 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :a nat here is of the form (LAMBDA (FZ FN) ...) < 1164169048 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :To use a nat called N, you do the following call: (N ) < 1164169095 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(remember that CONS only has one possible casem so a cons was a function that took one other function as an argument) < 1164169144 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1164169147 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :but a nat takes two arguments that say what to do for the two possible cases of nat (zero and succ) < 1164169197 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :that's crazy < 1164169225 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :It is a mechanical translation from Haskell. And it seem very elegant to me. < 1164169240 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :It is < 1164169246 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :It's just something I've never seen before < 1164169291 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I haven;t really understood if before but it just clicked earlier today < 1164169311 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :is it sticking in your head? < 1164169319 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :or does it not quite stay? < 1164169353 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I think it makes sense < 1164169439 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Good, I'll explain why zero and succ work. zero is a "constructor", i.e. a function that creates a nat. zero returns the nat that takes in the zero-case handler (FZ) and the succ-case handler (FN) and just calls the zero-case handler, right? < 1164169474 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164169533 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :and SUCC takes in the FZ and FN, then calls FN with a single argument: the number it is the Succ of. < 1164169553 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(Succ = Successor, i.e. the "next" number) < 1164169565 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1164169603 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :so..., to construct plus... < 1164169621 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :plus take 2 arguments < 1164169632 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :wecase-analyse the first argument < 1164169648 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :wecase-analyse? < 1164169654 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :we case-analyse < 1164169661 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1164169702 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :plus of zero and foo is equal to foo. plus of (succ of bar) and baz is the succ of (plauss of bar and baz) < 1164169706 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :they're the two cases < 1164169729 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :that seem correct, right? < 1164169741 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I don't understand < 1164169746 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ok... < 1164169770 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :What is this called? < 1164169775 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :case analysis < 1164169785 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :no, this whole thing < 1164169789 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :duno < 1164169822 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I have read about the basics of it and it is all clicking into place as we go along < 1164169846 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Read what? < 1164169906 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :erm < 1164169911 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I can't remember < 1164169934 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :The term "lambda calculus" rings a bell < 1164169954 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :this is a standard set of tricks for representing data in the lambda calculus < 1164170028 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Well, I remember being told in a simplified fasion that algebraic data types are equivalent to functions in the manner above, and that you can represent any data with complicated functions, and the ADT for Nat is a well-known thing, but the lambdas for NAt I just worked out off the top of my head < 1164170056 0 :anonfunc!n=pimaniac@adsl-70-135-59-64.dsl.chi2ca.sbcglobal.net JOIN :#esoteric < 1164170056 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :ADT? < 1164170065 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :algebraic data type < 1164170070 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1164170088 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :to continue... you know that 0 + foo = foo, and (1 + bar) + baz = 1 + (bar + baz), right? < 1164170725 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164170756 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :well, plus is a function of 2 arguments: < 1164170777 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :It considers the two possible structures of the first argument first: < 1164170781 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :plus of zero and foo is equal to foo < 1164170787 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :plus of (succ of bar) and baz is the succ of (plauss of bar and baz) < 1164170836 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164170891 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :that is case-analysis of the first argument < 1164170946 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :now, to do case analysis of an argument, we make a function that says what to do in each case, then pass all those functions to the value we are analysing. < 1164170999 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1164171053 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :for example, to analyse a value (N) of type nat, we construct a function to say what to do in the zero case, and a function saying what to do in the succ case, and pass them to N < 1164171087 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :call N, right? < 1164171090 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1164171094 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :k < 1164171111 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :the zero-case handler must be a function of 0 arguments that returns the result for the zero case < 1164171133 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :and we know that if the first argument is zero, the result is just the second argument < 1164171172 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :so, for (PLUS X Y), the zero-case handler is (LAMBDA () Y) < 1164171365 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :right? < 1164171369 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164171426 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :and if the first argument is (SUCC N), the result is (SUCC (PLUS N Y)) < 1164171442 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I think < 1164171448 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :so the succ-case handler is (LAMBDA (N) (SUCC (PLUS N Y))) < 1164171480 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164171556 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :and putting these together: < 1164171611 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :PLUS = (LAMBDA (X Y) (X (LAMBDA () Y) (LAMBDA (N) (SUCC (PLUS N Y))))) < 1164171614 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :TADA! < 1164171632 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :wow < 1164171639 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :totally silly, too < 1164171691 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Do remember that I am discovering this as I chat to you, and my terminology is not standard. < 1164171701 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Of course, this might not be useful. < 1164171714 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :http://en.wikipedia.org/wiki/Church_numeral < 1164171772 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :But it is really simple to do once you know Haskell reasonably well, as a nice-enough subset of Haskell has a 1-to-1 correspondance with it < 1164171775 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :plus = (lambda (x y) (x (lambda () y) (lambda (n) (succ (plus n y))))) < 1164171778 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :plus = \ x y -> case x of { Zero -> y ; Succ n -> Succ (plus x y) } < 1164171790 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(with extra spaces added to make it line up) < 1164171812 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :oooh < 1164171826 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :well, I was definitely not teaching you church numerals < 1164171879 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I was teching you some other kind of numerals < 1164171974 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :if, however CH is a church numeral, then "my" notation can be constructed thus: (CH SUCC ZERO) < 1164171978 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :he < 1164171979 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :hehehe < 1164172010 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :and the opposite conversion is: < 1164172117 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :NAT-TO-CHURCH = (LAMBDA (N) (LAMBDA (F) (LAMBDA (X) (N (LAMBDA () X) (LAMBDA (M) (F (NAT-TO-CHURCH M)))))) < 1164172120 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :TADA! < 1164172123 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I think < 1164172151 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :this is a bit nasty because church numerals are traditionally curried < 1164172155 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :That's a lot of lambdas < 1164172157 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1164172176 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Well that was very interesting < 1164172208 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :If, however, we use a version of LAMBDA that curries, and assume that function-calling curries too, we get: < 1164172243 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(arranged for comprehensibility not brevity) < 1164172274 0 :Sgeo!unknown@unknown.invalid QUIT :"Ex-Chat" < 1164172276 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :NAT-TO-CHURCH = (LAMBDA (N) (LAMBDA (F X) (N (LAMBDA () X) (LAMBDA (M) F (NAT-TO-CHURCH M)))))) < 1164172929 0 :CakeProphet!n=CakeProp@h205.250.213.151.ip.alltel.net JOIN :#esoteric < 1164173042 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :xor: Read on the basics of Lambda Calculus. < 1164173082 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Learn the basic combinators and take a look at the Church Numerals (or, if you understood the Lambda Calculus, you should be able to reason out the Church Numerals already (I did)). < 1164173234 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :You can also be adventerous and implement Lambda Calculus in Lisp. You'll quickly see that, this way of dealing with Lisp is to Church's computational metaphor as BF is to Turing's computational method. < 1164173258 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :(Unlambda and BF is a more apt comparison here.) < 1164173329 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION doesn't quite get that analogy. < 1164173348 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Well, BF is pretty close to Turing's infinite tape. < 1164173682 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: That's what I will do < 1164173720 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :But lambda calculus in lisp would be nothing < 1164173914 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I think that the lambda calculus interprets turing machines rather more efficiently than turing machines interpret the lambda calculus < 1164173928 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :also, i have some idea of how to do the former sanely, but no the latter < 1164174653 0 :CXI!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164175288 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :That is true. And I have an idea about the former too. < 1164175417 0 :CXI!n=Sanity@c220-237-11-4.randw1.nsw.optusnet.com.au JOIN :#esoteric < 1164177325 0 :GregorR-L!n=GregorR-@c-71-193-149-252.hsd1.or.comcast.net JOIN :#esoteric < 1164181328 0 :wooby!n=alan@ny-lancastercadent4g1-3a-236.buf.adelphia.net JOIN :#esoteric < 1164182399 0 :clog!unknown@unknown.invalid QUIT :ended < 1164182400 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1164182405 0 :GregorR-L!unknown@unknown.invalid QUIT :"Leaving" < 1164183745 0 :puzzlet_!unknown@unknown.invalid QUIT :Read error: 113 (No route to host) < 1164184216 0 :puzzlet_!n=puzzlet@58.77.172.41 JOIN :#esoteric < 1164191196 0 :jix!n=jix@L6224.l.strato-dslnet.de JOIN :#esoteric < 1164195851 0 :ivan`!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164196638 0 :wooby!unknown@unknown.invalid QUIT : < 1164205233 0 :jix_!n=jix@L63c8.l.strato-dslnet.de JOIN :#esoteric < 1164205780 0 :jix!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1164206028 0 :CakeProphet_!n=CakeProp@h205.250.213.151.ip.alltel.net JOIN :#esoteric < 1164206232 0 :CakeProphet__!n=CakeProp@h205.250.213.151.ip.alltel.net JOIN :#esoteric < 1164206538 0 :CakeProphet___!n=CakeProp@h205.250.213.151.ip.alltel.net JOIN :#esoteric < 1164206640 0 :CakeProphet!unknown@unknown.invalid QUIT :Read error: 113 (No route to host) < 1164206641 0 :CakeProphet___!unknown@unknown.invalid NICK :CakeProphet < 1164207318 0 :CakeProphet_!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1164207622 0 :CakeProphet__!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1164207929 0 :CakeProphet!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164207931 0 :CakeProphet___!n=CakeProp@h205.250.213.151.ip.alltel.net JOIN :#esoteric < 1164207934 0 :CakeProphet___!unknown@unknown.invalid NICK :CakeProphet < 1164208011 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1164209782 0 :lindi-!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164210327 0 :lindi-!n=lindi@kulho150.adsl.netsonic.fi JOIN :#esoteric < 1164212194 0 :lindi-!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164212471 0 :lindi-!n=lindi@kulho150.adsl.netsonic.fi JOIN :#esoteric < 1164213143 0 :GregorR-L!n=GregorR-@192.55.60.43 JOIN :#esoteric < 1164213809 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :It appears that it is impossible to write a brainfuck interpreter in LaTeX. < 1164213813 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :String handling sucks. < 1164214123 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :I don't think LaTeX is TC, so of course not. < 1164214129 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :It is. < 1164214243 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :Well then it is possible. < 1164214275 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :Either it's TC, and therefore you can write a BF interpreter in it, or it's not, so you can't (or at least can't write a complete one) < 1164214319 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :Well, if the only package for string handling I can find doesn't work :/ < 1164214461 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :And if LaTeX wants to throw error messages that seem to be caused by something that doesn't exist... < 1164214482 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :to write a BF interpreter you need to be able to read string input. this has nothing to do with being turing complete, consider iota and jot. < 1164214624 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it might be that the required command is in the underlying TeX and not documented in LaTeX. < 1164214628 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :Oh yes, this is true - what I was referring to is really BF minus ".," < 1164214663 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :. is simple, , is harder. < 1164214668 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and i was referring to inputting the BF program itself. < 1164214672 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :One could use ! to separate them. < 1164215105 0 :sp3tt!unknown@unknown.invalid PRIVMSG #esoteric :The program and the input that is. < 1164216883 0 :tgwizard!n=tgwizard@c-103fe155.178-1-64736c10.cust.bredbandsbolaget.se JOIN :#esoteric < 1164216962 0 :cmeme!unknown@unknown.invalid QUIT :Remote closed the connection < 1164217020 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164217033 0 :cmeme!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164217089 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164217102 0 :cmeme!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164217181 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164217212 0 :cmeme!unknown@unknown.invalid QUIT :Remote closed the connection < 1164217243 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164218147 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :try TeX by Topic at http://www.eijkhout.net/tbt/. the chapter on token lists might be particularly useful. < 1164218229 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :from what the book says about the \read macro it might be hard to read input without matching brackets. < 1164218273 0 :cmeme!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164218321 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164218351 0 :cmeme!unknown@unknown.invalid QUIT :Remote closed the connection < 1164218382 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164218449 0 :cmeme!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1164218472 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :maybe something with the character category codes i see mentioned can fix that. < 1164218484 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164218514 0 :cmeme!unknown@unknown.invalid QUIT :Remote closed the connection < 1164218546 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1164218624 0 :oerjan!unknown@unknown.invalid QUIT :"Off to eat" < 1164227636 0 :Sgeo!n=Sgeo@ool-18bf61f7.dyn.optonline.net JOIN :#esoteric < 1164230109 0 :jix_!unknown@unknown.invalid QUIT :"Bitte waehlen Sie eine Beerdigungnachricht" < 1164231196 0 :Asztal!unknown@unknown.invalid QUIT :"Chatzilla 0.9.75 [IceWeasel 1.0.1b2] (kidding!)" < 1164231417 0 :GreaseMonkey!n=thematri@222-153-173-106.jetstream.xtra.co.nz JOIN :#esoteric < 1164235052 0 :Asztal!n=asztal@cpc1-stkn2-0-0-cust919.midd.cable.ntl.com JOIN :#esoteric < 1164238079 0 :tgwizard!unknown@unknown.invalid QUIT :Remote closed the connection < 1164238149 0 :sp3tt!unknown@unknown.invalid QUIT :Remote closed the connection < 1164238156 0 :sp3tt!n=sp3tt@80-162.cust.umeaenergi.com JOIN :#esoteric < 1164239533 0 :sp3tt!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out)