00:00:35 i'm providing a non-monadic [BF] parseBF, is that good parsec style? :P 00:01:21 sure 00:04:39 also 00:04:40 case (parse program name code) of Left e -> error (show e) 00:05:58 that's one way 00:06:59 by the way, oerjan, is this a good way to cut down on overflow checks in compiled bf code: 00:07:03 >>><+ compiles to: 00:07:11 well, without >< reduction, ofc: 00:07:18 actually i would probably make it use a print statement and let the Right p -> part call the actual interpreter 00:07:28 "p++;p++;p++;p--;CHECKMEM;t[p]++;" 00:07:37 interpreter? :-) 00:07:42 why not p+=3; 00:07:50 or compiler 00:07:53 faxathisia: plz read 00:07:53 sorry :D 00:08:00 "well, without >< reduction, ofc:" 00:08:03 * oerjan has never written a real compiler 00:10:09 i recall that strictly speaking any of the p++ might fail if more than 1 beyond the allocated array... may not be a real problem 00:10:46 i.e. actual pointer arithmetic is undefined behavior in that case, possibly 00:10:53 Making some sort of Dungeons and Datas programs is hard. 00:11:06 It has to make sense to be of any interest! 00:11:37 Well, some sort of sense at least. 00:12:25 oerjan: oh well 00:12:29 oerjan: who cares :) 00:12:43 compiler goals: 1. be fast 2. don't use things that are machine-specific by design 00:12:45 that's it 00:23:06 -!- ehird` has left (?). 00:23:11 -!- ehird` has joined. 00:23:13 wedge :: String -> String -> String -> String 00:23:17 wedge :: String -> String -> String -> String 00:23:17 beautiful 00:24:34 eek 00:27:10 actually it's 00:27:12 wedge :: (Show a) => a -> String -> String -> String 00:30:02 oerjan: i CANNOT figure out the type errors i get with this: http://hpaste.org/4820 00:30:56 hm 00:31:26 what _are_ the type errors? 00:31:39 Couldn't match expected type `Char' against inferred type `String' 00:31:39 Expected type: BF -> [Char] 00:31:39 Inferred type: BF -> [String] 00:31:39 In the first argument of `map', namely `(indent . compile')' 00:31:39 In the first argument of `(++)', namely 00:31:39 `map (indent . compile') prog' 00:31:46 and: 00:31:50 Couldn't match expected type `Char' against inferred type `String' 00:31:51 Expected type: BF -> String 00:31:51 Inferred type: BF -> [String] 00:31:53 In the first argument of `map', namely `(indent . compile')' 00:31:54 In the first argument of `(++)', namely `map (indent . compile') b' 00:31:54 oops, sorry for spam 00:32:20 oh... 00:32:32 you want concatMap instead of map i think 00:32:46 ah, yes 00:36:39 oerjan: flatten [[1,2],[3,4]] -> [1,2,3,4] 00:36:49 in prelude? 00:37:01 concat 00:37:21 concatMap f l = concat (map f l) 00:38:03 heh, that IS concat 00:38:05 amusing 00:38:45 hm 00:38:49 gcc optimizes a+0 i hope 00:38:50 :P 00:39:05 one might assume 00:39:52 oerjan: what's that haskell function that acts as a filter? 00:40:00 that is, stdin->func->stdout 00:40:18 interact 00:43:24 gcc also optimizes x -= -x i hope :P 00:44:03 % wc -l mandelbrot.c 00:44:05 11471 mandelbrot.c 00:44:05 impressive 00:44:05 :P 00:44:09 exactly _where_ was your compiler going to do its optimizations you said? ;) 00:44:40 in the Optimize module 00:44:49 which ain't written yet 00:44:49 :) 00:44:53 3.63sec to execute 00:44:55 not too bad 00:45:45 oerjan: iterative optimization, too! 00:45:49 imperative pseudo-code: 00:46:29 while optimize(prog) != prog { prog = optimize(prog) } 00:46:38 there's probably a nice haskelly way to express that :P 00:48:49 oerjan: right? :P 00:49:05 iterate optimize somehow 00:49:31 thank you you are helpful 00:49:52 er, iterate is a function :) 00:50:16 that equality comparison may be expensive though 00:50:51 yeah, it would be like 00:50:58 let opt = optimize(prog) in ... 00:51:21 anyway, iterate useful for...? 00:51:33 well maybe this easier with explicit recursion 00:51:38 it seems to produce a list 00:52:19 you usually search the resulting list until you find the point you want 00:52:59 ah yes there is until 00:53:21 hm confusing definition 00:53:23 usage? 00:53:33 however it may need some cleverness to avoid calculating things twice 00:54:28 see #haskell 00:55:54 in principle until (\x -> x == optimize x) optimize would do _but_ it might calculate optimize twice 00:56:19 i can't see a way out of that 00:56:46 recursion is easier 00:57:20 :-) ok 00:57:53 untilEq f x | x == y = x 00:58:15 | otherwise = untilEq f y 00:58:27 where y = f x 00:59:30 optimizeFully p = case optimize p of p -> p x -> optimizeFully x 00:59:31 doesn't appear to exist 00:59:43 hm 00:59:45 no worky 00:59:46 :-) 01:00:00 unfortunately the of p binds a new variable 01:00:43 Maybe I'll start working on PSOX again on Monday.. 01:01:22 you _could_ do something with pairs but it wouldn't be any clearer than explicit recursion 01:01:44 or would it, hm 01:03:39 fst . head . dropWhile (uncurry (/=)) . tail . iterate (fst &&& optimize . snd) . (,) undefined 01:03:55 drunk on lambdabot, oerjan? 01:04:18 lambdabot? i did that in my head 01:04:27 heh, wow 01:04:37 i meant the pointless 01:04:39 :) 01:04:59 i expect @pl would produce something far worse 01:05:07 well yeah 01:05:36 @pl'ing is a rather esoteric thing to do :) 01:06:37 optimizeFully p = let opt = optimize p in if opt == p then p else optimizeFully opt 01:06:38 fugly! 01:06:39 :) 01:06:42 of course it's just a slightly more civilized abstraction elimination 01:06:53 No instance for (Eq Jill.Core.BF) 01:06:57 oshit 01:07:03 deriving (Eq) 01:07:15 yep 01:07:55 but as i said, i think that could be expensive, especially if optimizations happen only deeply 01:08:32 Chicken does it 01:09:41 comparing this step to the next, recursively? 01:09:46 i think so 01:10:05 oerjan: damn, optimizing BFSet will be hard with patmatching 01:10:13 Set/Inc/Read/Write ... BFSet 01:10:16 BFSet Inc... 01:10:17 etc 01:10:35 what's BFSet? 01:10:41 t[p+a] = b 01:10:44 note = instead of += 01:10:53 e.g. [-] is BFSet 0 0 01:10:57 [-]+ is BFSet 0 1 01:12:10 hm 01:12:39 for what values of n in BFLoop x [BFInc y n] can it be proved to be BFSet (x+y) n? 01:12:44 I think just 1, -1 01:12:58 err, 0 01:13:00 in the BFSet 01:13:37 if you assume a binary representation with wrapping on a fixed bitwidth 01:13:42 then any odd n will do 01:13:52 yes, they're chars 01:13:54 so 0..255 01:15:21 optimize (BFInc x a):(BFInc x b):xs = (BFInc p (a+b)):xs 01:15:22 parse error in pattern! 01:15:27 why :( 01:16:23 optimize ((BFInc x a):(BFInc x b):xs) = (BFInc p (a+b)):xs 01:16:32 actually 01:16:54 optimize (BFInc x a : BFInc x b : xs) = BFInc p (a+b) : xs 01:17:14 Conflicting definitions for `x' 01:17:15 In the definition of `optimize' 01:17:30 can't i use the same name for 'equal'? :( 01:17:34 nope 01:17:58 optimize (BFInc x a : BFInc x' b : xs) | x == x' = BFInc p (a+b) : xs 01:19:11 guards are ugly :) 01:19:24 ARE NOT 01:19:38 optimize (BFLoop x [BFInc x' n] : xs) | mod n 2 == 1 && x == x' = BFSet x 0 : xs 01:19:42 that is ugly 01:19:43 OTHERWISE! 01:20:05 hm..... you know 01:20:12 that gives me the feeling this code would be easier in lisp 01:20:22 it may help to include a line break 01:20:22 heh 01:20:23 why 01:20:33 oerjan: but where 01:20:43 before the | perhaps 01:20:49 so you can express the optimizations however you like (and hide a big confusing macro somewhere no noe looks) 01:20:56 line break + at least one space 01:21:08 (not that I'd do that!) 01:21:26 mod n 2 == 1 = odd n 01:24:46 p += 1; t[p+0] = 0; p += 1; t[p+0] = 0; 01:24:49 repeated loads of times 01:24:53 i have a feeling that's optimizable :P 01:25:13 that is, code X repeated N times = for (tmpvar=0;tmpvar bit tricky for a pattern match though 01:26:50 finding repeating subsections of a list, hm 01:29:59 hm if you consider sort . tails you get equal sublists nearby each other 01:30:04 heh 01:30:08 not much help 01:30:18 it could be the basis of an algorithm. 01:30:27 probably a bit expensive though 01:31:22 you could somewhat identify subfunctions that way 01:31:57 heh, now that IS interesting, but implausible 01:32:06 but finding repeating subsections would be useful. 01:32:14 i also want to identify 'if's 01:34:48 sheesh, gcc should have a -Ocs 01:34:52 optimize for compilation speed 01:34:56 this thing takes ab out 20 seconds to compile 01:35:23 oh, wonderful, it seems mandelbrot.b tape underflows forn o reason 01:35:50 hmm 01:35:51 does it? 01:35:58 oh! 01:36:00 duh 01:37:04 p = 0; 01:37:14 p += -1; if ((p+(-1))==0) { ... } 01:37:17 that should execute, right? 01:38:18 wait no 01:38:21 \damn 01:38:27 silly me 01:43:02 wtf, 9 seconds for mandelbrot 01:44:12 That's pretty fast! 01:45:12 Why have I not been working on PSOX?? 01:46:43 You've been thinking "I'll just do it later" for several days? 01:46:51 Slereah: No, I got 3 seconds before 01:47:07 That's still pretty fast. 01:47:22 Compared to the... roughly 3 hours per line I got on the Love Machine 9000. 01:47:36 9 seconds is the speed that BF interps get for mandelbrot.b 01:47:38 I compile to C! 01:48:13 hm, did i lose my network connection? 01:48:14 anyone? ping? 01:48:20 Pong. 01:49:54 Pøng 01:56:00 * ehird` just uses the OS' memory protection, for simplicity 01:56:03 -!- jix has quit ("CommandQ"). 01:56:14 And a sigsegv handler to expand 01:56:41 Now, who wants to tell me how to calculoate the page size in C... 01:57:09 I want to, I just don't know how to do it! 01:57:34 oerjan: Confusing isn't it! 01:58:10 what? 01:58:42 the low-elvel useful things that c can't do 01:58:59 Pöng 01:59:48 for some reason i wanna know how fast egobf is, please, ehird`, find it out for me :D 01:59:55 not that fast 01:59:58 not as fast as bf2c.hs 02:00:01 i have no idea why, one of my random obsessions 02:00:08 pretty good, though 02:00:18 mandelz? 02:01:06 iirc. about 3 seconds. 02:01:15 but it bus errors on this mac. 02:01:20 so: that's just a guess 02:03:32 but yeah: page size determination. 02:03:34 someone tell me how! 02:04:30 who runs unix? 02:04:34 oerjan? oklopol? 02:04:39 GregorR? Slereah? 02:04:54 sgeo? 02:05:03 ehird`? 02:05:11 necvermind 02:05:13 i figured it out 02:05:15 hm? 02:06:33 i run unix 02:06:43 but most of what i know i've learned from you. 02:07:28 * oklopol is very proud for actually having learned to use linux in just *six months* 02:10:21 woot 02:10:23 % time ./mandelbrot > /dev/null 02:10:23 ./mandelbrot > /dev/null 3.41s user 0.02s system 98% cpu 3.477 total 02:10:27 hooray for SIGSEGV 02:26:56 Aaaaargh 02:26:58 -!- Jontte has quit ("Konversation terminated!"). 02:27:17 It's hard to check an abstraction eliminator when you can't even do it by hand correctly! 02:27:58 Slereah: One check is shoving them through a type checkera 02:28:27 , 02:29:15 (is he correcting a grammar error or making a very complicated comma pun, we'll never know...) 02:29:43 maybe it was a ? without the shift! 02:30:10 I'm trying to correct one error of my Abstractor,. 02:30:33 -!- ehird` has quit. 02:30:58 Apparently, it doesn't like very much something of the form ^abc...(^xyz...)fgh... 02:31:21 Although even the successor function doesn't seem to work too well. 02:32:52 well deeply nested lambdas do blow up exponentially with the naive AE algorithm 02:35:08 Blow up as in "size increase" or "Make them wrong"? 02:35:18 size 02:35:56 That doesn't worry me too much, that's why I made a program. 02:36:14 it's the wrong expression I find worrying 02:36:32 Although I can't be too sure if it's the abstractor or the interpreter. 02:39:52 -!- calamari has quit ("Leaving"). 02:40:25 i would offer my eliminator but it's heavily tailored to unlambda (uses d and is careful about strictness) 02:42:02 -!- Sgeo has quit (Connection timed out). 02:42:31 Can you try this pred. function on unlambda, if you can copypasta on it? http://membres.lycos.fr/bewulf/Russell/Pred.txt 02:42:41 Just to see which program is the problem. 02:43:01 -!- Sgeo has joined. 02:44:32 well it's accepted and does nothing 02:45:01 and it is well-formed, because changing the final i to ! causes an error 02:45:48 hm... 02:46:47 Well, I try it with ``pred n `.xi 02:47:00 In a lazy evaluation, that is. 02:47:04 my optimizer simplifies it to ``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s`k`s`kkk`k``s`k`s`k`s`k`si``s`k`s`k`s``s`ksk``s`k`s`k`s`kk``s`k`s`kkk`k`kk`k`k`ki 02:47:28 It always only prints 1 x for all values of n on mine 02:50:52 um shouldn't that be ```pred n .x i ? 02:51:50 then it works nicely here 02:51:59 Hm. 02:52:03 Let me think. 02:52:40 with ``pred n `.xi you are applying `pred n to too few arguments 02:53:05 so it just passes on to evaluating `.xi itself i assume, and just once 02:53:07 `n`.xi seems to work though 02:53:18 it shouldn't 02:53:22 ... 02:53:25 Damn. 02:53:59 Where's my pen. 02:54:04 here is the 256 from my self-interpreter: ```s``s`kski 02:54:04 ```s``s`kski 02:54:04 ```s``s`kski 02:54:31 ``s``s`kski 02:55:21 with that, ```pred n .x i prints 255 x'es in the unlambda C (i think) interpreter 02:57:20 (^f^x.f(f(f(...f(x)...)))) (.xi) = ^x.(.xi)((.xi)((.xi)(...(.xi)(x)...))) no? 02:57:30 It should at least evaluate more than 1? 02:57:55 Although I'm not too sure what it would be in combinators. 02:58:25 er it takes 2 arguments 02:58:31 f and x 02:58:52 oh wait 02:59:51 Here's a run for `2`.xi : http://membres.lycos.fr/bewulf/Russell/2%20run.txt 03:00:27 hm... 03:00:45 you may be right. however: 03:01:20 ``pred n f may not expand to the same as `(n-1) f 03:01:31 Oh. 03:01:45 rather, it may expand to something which waits for another argument before even starting to copy f's 03:02:14 So f is evaluated first, and only one x is printed? 03:02:58 well... 03:03:12 the thing is, while expanding top-level, f is never evaluated 03:03:50 it is only when your interpreter gives up the top-level because there isn't anything more to evaluate there, that it gets down to the f 03:04:49 ```pred n .x i seems to work 03:05:46 Let's see how succ n fares. 03:06:56 Also seems to work! 03:07:16 Output isn't easy to deal with under any evaluation! 03:09:28 When I'm more enthusiastic, I should try to see the evaluation of ``pred n`.xi 03:09:31 i think I/O behaves more reasonably if you only evaluate those operations at top level. then it works almost like monads... 03:10:13 (in a lazy setting) 03:11:28 What is exactly meant by top level? 03:12:49 the top of the parse tree 03:13:06 or in your case, only the start of the string for finding operators 03:14:49 Rebooting the modem, brb. 03:15:27 Or maybe not, the connection seems to be back 03:15:47 Sort of. 03:18:57 I'd check the run of the predn`.xi, but it looks like this : http://membres.lycos.fr/bewulf/Russell/Pred%20run.txt 03:19:30 Although I could try in your optimized version. 03:20:27 It's more reasonably sized. 03:20:51 i haven't checked it, it just came out of ulify2.scm :) 03:21:57 Well, at least the predn.xi seems to print the right number of x's. 03:22:16 ah yes, yours contains things like ``s`kk`ks 03:22:23 which = `k`ks 03:22:35 Is that a conversion of some sort? 03:22:48 ``s`kf`kg = `k`fg 03:23:10 I should add it with the eta conversion. 03:23:40 except in unlambda you need to add d's to it 03:23:52 but somehow i didn't see any in the result you saw 03:24:21 (my optimizer also tries to remove d's again) 03:24:36 Well, it's made of only primitive combinators. I assume that the evaluation isn't very important without IO 03:24:58 it depends. it can still be non-terminating. 03:25:22 ? 03:25:58 if `fg doesn't terminate, then ``s`kf`kg cannot be simplified to `k`fg 03:26:03 in strict unlambda 03:26:33 Oh. 03:26:57 Wouldn't ``s`kf`kg be ``Sfg? 03:27:36 no 03:28:15 ```s`kf`kgz = ```kfz``kgz = ``fz`gz = `sfg? 03:30:00 = `fg 03:30:17 Oh right. 03:30:44 " maybe it was a ? without the shift!" <<< sorry, that'd be + 03:31:02 On what moonspeak keyboard are you typing? 03:31:21 if oklopol's keyboard is like mine it could be ; without the shift, though 03:31:30 mine also has + below ? 03:31:30 (Does this conversion have a name? It's just to look pretty in the code) 03:32:45 well when you do it directly on lambdas it's just ^x`fg = `k`fg instead of ``s`kf`kg 03:33:09 so it's a shortcut, which madore mentions on the unlambda page 03:33:17 (noting that it is unsafe in unlambda) 03:33:20 So just an artefact of the conversion. 03:33:28 *abstraction elimination 03:35:44 hmm, if it was ";", it was obviously a request to change the subject 03:35:47 or shut up 03:35:51 hmm 03:36:05 or "you make too long sentences, wrap it up" 03:36:12 okay, not that obvious :-) 03:36:45 did someone here link maddox' rants? 03:37:12 who's maddox? 03:39:09 http://maddox.xmission.com/ 03:39:51 i've written similar articles, although more, and of worse quality (or at least not better) 03:40:03 probably the reason i found them interesting 03:40:29 ```s`k`ab`k`cdk -> ```ab`cdk 03:40:32 Yes. 03:41:28 A much shorter result for pred! 03:41:37 um you're missing a `k 03:42:46 Slereah: did you paste the original link? asdf guess i need to press ctrl+f :'( 03:43:02 haha! 03:43:07 it was ya :) 03:44:26 oerjan : I guess that explain the infinite loop I got for pred 03:45:15 heh :) 03:46:53 Any other ways to reduce ski to ski? 03:48:26 Although the pred down to ``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s`k`s`kkk`k``s`k`s`k`s`k`si``s`k`s`k`s``s`ksk``s`k`s`k`s`kk``s`k`s`kkk`k`kk`k`k`ki is already pretty neat. 03:48:53 Seems to be the same as yours 03:51:58 yep, you now have the two main optimizations of mine 03:52:10 and the rest i think are unlambda-specific 03:52:36 Well, thanks. 03:53:18 you're welcome :) 03:53:41 Can a forkbomb cause lasting damage to a system? 03:53:52 I'm contemplating using a forkbomb to force myself off the computer 03:54:10 You could ask your mom to do that. 03:54:16 She'll gladly oblige. 03:54:21 "Get some fresh air!" 03:55:25 Do you have a particular way of finding those optimisation? 03:55:45 I'm thinking of trying it for some other combinators. 03:58:33 (And maybe combining the ski-unlambda translator, the abstractor and the interpreter to write programs in some unholy combination of SKI combinators, unlambda and lambda calculus!) 03:59:01 nah 04:05:28 -!- Sgeo_ has joined. 04:14:03 -!- _KS has quit. 04:15:18 -!- Sgeo has quit (Read error: 110 (Connection timed out)). 04:27:03 There's the unholy Frankenstein : http://membres.lycos.fr/bewulf/Russell/Lazylambda4.py 04:36:38 When I'm done with this, every damn letter will be a combinator! :o 04:44:38 lol i made a bit of a miscalculation when saying i have more articles than this guy, i now realize i haven't read more than 30%, thought i was finished :) 04:44:53 the scroll bar... it's just too complex. 04:45:38 There's 10 years of article! 04:45:39 s 04:46:27 Writing in that mix of calculi is more pleasant. 04:46:44 For instance, some sort of iszero checker : ```^n((n(^x`ki))k)(^a^b`a`ab)`.0i````.F.a.u.xi 04:46:56 Where (^a^b`a`ab) can be any number. 04:47:36 With some hodgepodge of ` and parenthesis just for pleasure! 04:49:47 Hm. 04:49:55 `.^i generates an error. 04:50:06 It thinks I want to use i as a lambda variable. 04:51:39 Either I remove the ^s ^k ^i checker or find some way around it. 04:53:42 .^ in general seems to be a nuisance. 04:53:46 it's too simplistic, not skipping .'s 04:54:02 ? 04:54:20 i mean, checking for the literal string ^s etc. anywhere 04:54:47 That's what it does. 04:55:05 But if there's `.^i, it will find the string ^i in it. 04:55:27 And think I'm trying to sneak in some ski as variables. 04:56:06 And since `fg has ^ in it, the Abstractor will try to abstract it, instead of leaving it alone. 04:56:15 perhaps you could put the check in something like wff instead? 04:56:24 I should make some function to differentiate .^ from ^ 04:57:01 don't forget you can have ..^ etc. 04:57:08 I know. 04:57:22 That's why I'm thinking of a function instead of a lazy ass workaround. 04:57:43 (I had plenty of similar problems on the Love Machine 9000!) 04:59:46 I should check for an odd number of . before ^ I guess. 05:12:15 Seems to work. 05:15:14 question: do you allow ^. ? 05:16:58 Let's see! 05:17:14 ^.^b. 05:17:22 Gives k. 05:17:39 It's a lambda smiley. 05:18:00 -!- Sgeo_ has quit (Remote closed the connection). 05:18:06 Although a (^x`.yi) expression seems to pose problem. 05:18:23 When it tries to abstract ^x.y 05:18:38 Not sure why 05:19:39 Oh. 05:19:45 well my question was because it could break your odd number of . 's rule 05:19:58 It thinks that ^x.y is actually two combinators. 05:20:01 . and y. 05:20:31 Printing functions are quite annoying to implement. 05:25:11 Found the error. 05:25:29 Just a number error in the T[^x.y] -> `ky 05:26:17 Let's see the ^. case. 05:26:57 ^...^s 05:27:42 It doesn't crash, but it's not that good either. 05:27:48 oh and not to forget ^^ :D 05:28:11 ^..^ gives i, ^...^s gives ``si`ks 05:28:16 I'm not even sure why. 05:28:30 ^^ makes some infinite loop. 05:28:50 Although ^^^ translates as i okay. 05:28:55 my suggestion is to disallow ^ and . as variables 05:29:07 That too. 05:33:24 Well, right now, the program will change all non-printing ( into ` (or delete them if they're before ^), delete all non-printing ), change all variables and combinators into lowercase, eliminate abstraction from the result and read the result as Unlambda would. 05:33:46 Any parsing pitfall in mind? 05:35:30 ( -> variable number of ` 's right? 05:36:16 I think so. 05:36:30 um ( before ^ shouldn't be deleted should it 05:36:45 or... 05:37:13 Well, the ^abc... abc... in parenthesis is just for a clear way to see the whole lambda expression if I want to write it. 05:38:21 It poses problems if I want to write something like `(^a^b`ba)np 05:38:24 Errr, `(^a^b`ban)p 05:38:31 however you could then have an error if the lambda expression stops before the corresponding ) 05:38:43 right 05:39:13 what about instead saying ( before ^ moves past the ^+variable? 05:39:55 then you could drop ` 's inside 05:39:55 -!- slereah_ has joined. 05:40:08 [06:39] Although I guess I could check the length of the lambda expression to delete or not the parenthesis 05:40:09 [06:39] What? 05:40:56 oerjan> however you could then have an error if the lambda expression stops before the corresponding ) 05:41:06 oerjan> right 05:41:26 oerjan> what about instead saying ( before ^ moves past the ^+variable? 05:41:38 oerjan> then you could drop ` 's inside 05:41:43 whew 05:41:45 That's what the "what?" was for. 05:42:52 `(^a^b`ban)p -> `^a^b(`ban)p -> `^a^b``banp 05:44:16 Well, except it should be ``^a^b`bap 05:44:37 huh? 05:44:48 Wait. 05:45:01 * slereah_ uses the power of mental thinking 05:45:37 `(^a^b`ban)p wouldn't be legal. 05:45:57 That's ^a^b`ban applied to p, but `ban lacks one apply. 05:47:00 it's legal in lambda calculus to be applied too little 05:47:17 um wait 05:47:25 the point i was saying was 05:47:32 (ban) = ``ban right? 05:47:38 Yes. 05:47:56 and in ordinary lambda calculus a ^ usually continues until the next ) 05:48:22 For instance. 05:48:26 so why not say that (^a^bban) = ^a^b``ban 05:48:45 Well, I could do that for all variables. 05:49:15 Replace n non-printing letters by ````...````abcd...xyz 05:49:54 although it may be weird if you mix things, hm 05:50:04 I mix many thing already. 05:50:14 since ^a without parentheses only takes one following expression 05:50:37 I don't know about weirdness, but it might be hard to check for accuracy. 05:50:49 That would be a whole lot of combinations to try. 05:51:26 well lessee 05:51:48 you could say ` introduces unlambda syntax and ( introduces lambda calculus syntax 05:52:08 The thing is, I'm mixing both. 05:52:15 yes 05:52:24 For instance if I'm lazy and just want to copypasta some expression. 05:52:43 so if a subexpression starts with ` or ( you change to the other 05:53:28 Actually, both notations are used for both. 05:53:33 it would be safe as long as what you paste either is parenthesized or is a single expression starting with ` 05:53:50 well they have ^ in common 05:59:31 Well, it can now differentiate s=s[:i]+s[i+1:] 05:59:32 i=i-1 05:59:33 Oop 05:59:46 `(^a^b`ban)p and ``(^a^b`ba)np 06:00:06 But I don't know what will happen if there's more lambda inside the parenthesis. 06:00:25 -!- Slereah has quit (Read error: 110 (Connection timed out)). 06:00:30 -!- slereah_ has changed nick to Slereah. 06:00:58 ah yes there could be trouble 06:01:15 (^aa^bba) for example 06:01:33 the ^b would probably scope only the b 06:01:38 I was thinking more of ((^aa)(^bb)a) 06:02:09 `^aa^bba 06:02:12 Hm. 06:02:19 that should be fine if the outer ( is handled first 06:02:28 turning into `` 06:02:29 I guess so. 06:02:41 What of (^aa(^bb)a)! 06:03:00 i think that's fine 06:03:49 -> ^a(a(^bb)a) -> ^a``a(^bb)a -> ^a``a^bba 06:03:50 Reads it as `^aa^bba. But it should be... What should it be, actually? 06:04:30 Doesn't read it like that. 06:04:38 It's `ii for it. 06:06:49 subtle stuff 06:06:50 But well, I guess it's not too important. 06:15:50 Hm. Would a combinator-to-text be something like iszero n [print char 0] [iszero pred(n) [print char1] [...]]]? 06:17:11 So something actually like (^x . iszero x [print char 0] [iszero pred(x) [print char1] [...]]]) n 06:18:22 there is a church numeral printer hidden in my deadfish-in-unlambda code 06:18:36 it might be using d though 06:19:09 I guess I could just generate it in python for ASCII chars. 06:19:33 oh you want num->ascii 06:19:52 Well, num->any set of char, actually. 06:20:12 ASCII works okay, especially since I want to do a _ combinator. 06:20:41 Awaits input from the keyboard, and then converts it to some ASCII Church numeral. 06:20:48 but i wouldn't use pred. i would use a church-encoded list of the chars 06:21:13 and then do `head ``n tail list 06:21:34 Ah yes. I should read the list function for lambda calc. 06:22:09 Might be useful later! 06:22:21 (define (cons x y) (lambda (k) (k x y))) (define (car cons) (cons (lambda (x y) x))) (define (cdr cons) (cons (lambda (x y) y))) 06:22:40 I can't really read Haskell. 06:23:10 * faxathisia doesn't understand this ^ notation :S 06:23:14 given that that was scheme, i believe you :D 06:23:31 Heh. 06:23:35 er, possibly CL 06:23:40 Scheme, Haskel, same thing! 06:23:52 ^ is just a fancy ASCII for lambda. 06:24:40 well to make a cons (pair of things), you can make a closure which takes a function an applies it to those args 06:24:48 cons = (^h t . ^k. (k h t)) 06:25:03 in fact haskell is closer 06:25:15 cons = \h t -> \k -> k h t 06:25:30 so to select the head, such that (head (cons a b)) = a, head = (^cons. (cons (^head tail . head))) 06:25:57 though sadly, church-encoded lists soon hit against the type system 06:27:17 Why is a pairing noted as "cons"? 06:27:28 old lisp tradition 06:27:36 A cons is a pair of things 06:28:06 like the link of a linked list 06:28:16 * Slereah wikis 06:28:19 Oh, construct. 06:28:34 http://en.wikipedia.org/wiki/Cons 06:28:46 But, pair has the same number of letters! :o 06:29:11 Is there a Lisp function called pair? 06:29:30 scheme has pair? 06:29:50 (pair? (cons 'x 'y)) ;=> #t 06:30:09 What is this moonspeak! 06:30:15 scheme 06:30:27 ;=> ? 06:30:27 ````^m^n^f^x``nf``mfx^f^x`f`f`f`f`f`fx^f^x`f`f`f`fx.xi 06:30:30 Yay, addition! 06:30:43 ; <- comment => <- evaluates to 06:30:56 ah 06:31:05 * faxathisia should probably shut up and stop confusing people 06:31:23 Well, this is #esoteric 06:31:41 If we weren't allowed to confuse, it would be pretty silent. 06:32:11 and then, what would the alligators do? 06:32:21 cross the road? 06:32:26 You are confusing me oerjan. 06:32:34 you don't say. 06:32:34 My lazy unlambda has one clear advantage on the love machine 9000. 06:32:41 speed? 06:32:44 I have a perfect name for it. 06:32:51 oh? 06:32:55 It will be called "Lazy bird". 06:33:14 Since its combinators will be the combinator birds from "To mock a mockingbird". 06:33:50 And it's a name I can post on Esolang without shame, unlike "Love Machine 9000". 06:34:31 Although I came up with a srs business name for it. 06:34:37 "NTCM" 06:34:53 n-tape choice machine. 06:35:39 Srpska Radikalna Stranka? 06:35:51 Lulwut? 06:36:01 srs 06:36:21 http://www.encyclopediadramatica.com/The_Internet_is_serious_business 06:38:21 * oerjan has a lightbulb go off 06:40:30 you mean srs is _not_ an acronym? doesn't sound like serious business to me. 06:40:52 Merely a contraction! 06:41:15 ah, a contradiction. 06:41:37 that splains it. 06:42:52 There's a dick that shouldn't be in your sentence. 06:43:49 my sentience is none of your business. 06:52:22 Fixed point combinators are not especially rare (there are infinitely many of them). Some, such as this one (constructed by Jan Willem Klop) are useful chiefly for amusement: 06:52:22 Yk = (L L L L L L L L L L L L L L L L L L L L L L L L L L) 06:52:22 where: 06:52:22 L = ?abcdefghijklmnopqstuvwxyzr. (r (t h i s i s a f i x e d p o i n t c o m b i n a t o r)) 06:52:25 Heh. 06:52:52 Let's see if I can make something similar! 07:01:50 Well, it might take a while. 07:02:34 It's doing the w's right now, and increasing in size! 07:02:50 I hope it eta-reduces a whole lot. 07:11:45 well 10 of the variables are not used 07:13:17 including w 07:13:23 ^a^b^c^d^e^f^g^h^|^j^<^l^m^n^o^p^q^$^t^u^v^w^x^y^z^r`r``````````````````````````th|$|$af|xedpo|ntcomb|nator is still running :o 07:18:05 http://membres.lycos.fr/bewulf/Russell/noyoucanthaveaneuralnetwork.jpg 07:18:07 Heh. 07:33:11 Hm. For the input ASCII -> Church numerals, what would be the best idea? 07:33:54 Just a correspondance number -> church numerals, or number->succ(succ(succ(...succ(KI)....)))? 07:37:58 I guess it's space against time. 07:45:53 succ(succ(...)) is easier to build up recursively 07:46:38 in case you need to use a table, like in unlambda 07:48:31 Yes, but won't it blow up for big numbers? 07:48:39 Lazy K seems to use such a table. 07:50:59 lazy K uses church numerals for I/O 07:51:41 you mean input in decimal digits? 07:52:11 No, just for any key. 07:52:16 From 0 to 255. 07:53:07 the table will be somewhat big i guess 07:53:26 do you use ?x input like unlambda? 07:53:46 oh wait 07:54:08 you don't really need all the numbers in a table 07:54:12 Just a _ combinator that will change into the Church integer. 07:54:48 oh so you do input ascii as church numerals 07:54:56 Yes. 07:55:16 so your question is not about how to use it, but what python should send into the program 07:56:35 you might use binary 07:56:50 adding 1 and multiplying by 2 should be simple enough 07:57:37 it might still get blown up when the program tries to analyze it, i suspect 07:58:58 Well, Lazy K has a table of ways to get short ASCII -> Church 07:59:02 I'll see how this fares. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:02:05 Hm. apparently, plenty of them have the combinator ``s`ksk 08:02:10 Which is the B combinator 08:02:47 2 is just ``sbi 08:25:35 -!- oerjan has quit ("Bye"). 10:14:31 -!- Hiato has joined. 10:14:38 Hello all 10:15:02 Can anyone help me with some Haskell quickly? 10:16:16 faxathisia? 10:17:33 show map Char.isLower "aBCde" 10:18:02 would that produce [True,False,False,True,True]? 10:23:27 -!- Hiato has left (?). 11:56:22 -!- timotiis has joined. 11:56:53 -!- faxathisia has quit ("Leaving"). 12:15:16 -!- RedDak has joined. 12:33:05 I think I'll just define the input as succ(succ(succ(...succ(KI)....))) 12:33:11 A table is too big. 12:49:33 But then again, the succ idea is painfully slow! 12:50:41 Aaaargh. 13:10:32 -!- jix has joined. 13:30:55 -!- sebbu2 has joined. 13:43:41 -!- sebbu has quit (Read error: 110 (Connection timed out)). 13:43:42 -!- sebbu2 has changed nick to sebbu. 13:56:15 -!- bsmntbombdood has quit (Read error: 110 (Connection timed out)). 13:57:11 -!- bsmntbombdood has joined. 14:24:37 -!- Hiato has joined. 14:24:45 Hello 14:27:01 can anyone help me with a Haskell exercise in Yet Another Haskell Tutorial? 14:27:08 it way hard 14:27:22 *its 14:30:00 * oklopol HELPs! 14:30:10 -!- lifthrasiir has quit (Read error: 104 (Connection reset by peer)). 14:30:57 "Exercise 3.5 We’ve seen how to calculate sums and products using folding functions.Given that the function max returns the maximum of two numbers, write a function using a fold that will return the maximum value in a list (and zero if the list is empty). So, when applied to [5,10,2,8,1] it will return 10. Assume that the values in the list are always ≥ 0. Explain to yourself why it works." 14:31:03 Can't get it 14:31:11 oh 14:31:17 but I guess I should check out #Haskell 14:31:27 i assumed i actually wouldn't be able to do it, but that's trivial ) 14:31:28 :) 14:31:39 oh, really? 14:31:49 I just don't get what the folds will need to do 14:31:54 but could you explain? 14:32:04 you have a list A B C D E .. Z, and you need the max. basically, a max takes two values and returns the maximum of the two 14:32:10 yes 14:32:25 because max is... i lack terms :-)... it does A m B = B m A 14:32:37 and all the other funny features like that 14:32:38 yes 14:32:43 you can just do the maxes in any order 14:32:49 yes, I see 14:33:02 so... A B C -> A (B C) -> (A B C) would be a way to get the max of A B and C 14:33:06 now... 14:33:12 fold takes a list, and a function 14:33:26 it then takes a certain pair of values in the list, and performs the operation 14:33:35 ooh... 14:33:39 I think I get it 14:33:41 then, it takes that pair, and performs the operator on that pair, and another value in the list 14:33:43 good 14:33:55 on a related note, i think i need to poo -> 14:34:05 foldr (max) 0 [balh]? 14:34:13 lol, sure, er... don't let me stop you 14:34:18 *blah 14:34:20 looks correct 14:34:26 except you don't need the parens 14:34:33 ok, cool 14:34:36 thanks oklopol 14:34:39 now go forth 14:34:41 and make doodo 14:34:45 *doodoo 14:34:48 :P 14:34:51 ah, indeed! -> 14:35:44 hrmm 14:35:46 yes, it works 14:35:54 but why does it say you need two folds? 14:36:46 and is the fold direction important? 14:37:29 nevermind, it says a fold 14:37:37 still, is the direction relevant? 14:38:15 -!- slereah_ has joined. 14:49:40 (A m B) cmp (B m A) 14:49:49 where m is max. 14:50:10 and cmp is "compare these with yer braines" 14:50:35 did you compare? 14:52:27 aaaaactually 14:52:40 i'm globbing crap here 14:52:59 (A m (B m C)) cmp ((A m )B m C) 14:53:03 ... 14:53:06 more crap 14:53:10 (A m (B m C)) cmp ((A m B) m C) 14:53:12 better. 14:53:43 now, take your brain, stuff that in, wait a mo, tell it to generalize, wait a mo, and hope for the best 14:54:01 lol 14:54:02 ok 14:54:05 I'll try 14:54:07 hehe 14:54:35 alrighty 14:54:37 makes sense 14:54:40 (ish) 14:54:42 Hooray 14:54:44 :) 14:55:01 I like Haskell 14:55:05 it's so... 14:55:06 er 14:55:13 for the lack of a better word 14:55:15 strange 14:55:16 the max-function is a socalled "bag" function 14:55:17 ;) 14:55:21 ? 14:55:26 meaning it conceptually takes a *set* of arguments 14:55:27 -!- Jontte has joined. 14:55:32 aha 14:55:33 you can give it's args in any order that is. 14:55:38 yes 14:55:39 just like + and xor too 14:55:40 I see 14:55:43 yip 14:55:47 and * 14:55:55 -!- Slereah has quit (Read error: 110 (Connection timed out)). 14:56:05 and of course set operations except set substraction. 14:56:06 yeah, also * 14:56:09 (*=X=times=multiplication) 14:56:22 yes 14:56:39 meh, I'll continue with the tut some other itme 14:56:39 that is a helpful thing to know about a function, or not 14:56:48 i just wanted to coin a term for it 14:56:55 He 14:57:08 as in Heh as in laughter ;) 14:57:54 Haskell is exactly like ad-maths class 14:57:59 piece wise functions 14:58:01 i actually guessed what you meant there! :) 14:58:04 compliments etc 14:58:06 with "he" 14:58:09 yay :) 14:58:50 i've actually been wanting to make a language with a type system for a long time... could have my dream of having a language where args are given in arbitrary order come true 14:58:58 basically, the only list would be the set 14:59:10 and you could only give unary args 14:59:11 that would be cool, but also, confusing :) 14:59:40 no no! basically you'd have a distinct type for everything, how ELEGANT! 15:00:03 lol... lisp with sets instead of lists xD 15:00:09 Ah, yes well if Char is Different from String which is Different from Array of Char 15:00:12 then cool :) 15:00:20 :-\ 15:00:27 actually 15:00:30 I don't know 15:00:33 it might be aweosme 15:00:34 oh, no, that's not enough... 15:00:36 i mean 15:00:44 catenating strings... 15:01:00 you need to make a LeftAppendor object and a RightAppendor object 15:01:08 w00t 15:01:12 I like that :) 15:01:17 :DD 15:01:20 annoying, painful, stupid - but awesome 15:01:22 :) 15:01:24 indeed! 15:02:02 i've been thinking i could take all these millions of stupid features i'd concocted over the years, remove them from oklotalk and make a new language for them 15:02:17 i mean, that's sometimes pretty nice 15:02:17 :) 15:02:39 like, you wanna have the program in the form oper func oper func oper func etc 15:02:43 Well, I don't really mind, as long as we get to _eventually_ see the langauge 15:02:47 and it _exists_ 15:02:50 ;) 15:02:55 because then you don't need parens then. 15:02:56 woow 15:03:01 that would be cool, yip 15:03:07 and it's nice an sequelz 15:03:18 now, if types make up the order of usage of argumens 15:03:22 *arguments 15:03:40 then you can almost always have execution be linear if it's conceptually linear 15:03:44 if you know what i mean... 15:04:00 I think I get it... 15:04:12 but im not too sure 15:04:15 hehe 15:04:19 talking about flow control?? 15:04:21 i'll try and find a weird example 15:04:23 yes 15:04:23 or time 15:04:28 oh 15:04:34 then I get what yoyu are saying 15:04:45 in a twisted kind of abstract sense... 15:04:52 okay, very stupid example, but anyway 15:05:21 yes, im all eyes 15:05:24 ;) 15:05:35 let's say you wanna do "A - (B - C)", but don't want the parens... 15:05:41 yes 15:05:57 A - B - lparam C 15:05:58 xD 15:06:04 lol 15:06:06 funky 15:06:08 and I like it 15:06:16 makes programming truly painful :P 15:06:16 OH, C IS AN LPARAM, THEN THE OTHER MUST BE RPARAM! 15:06:22 indeed! :D 15:06:39 good luck with the interpreter though 15:06:55 trying to make it run in linear time :X 15:07:10 hehe, actually i'd just really like to do static typing, so this might be a nice thingie to test with. 15:07:19 :) 15:07:24 wait 15:07:26 i've always had either dynamic or brainfuck typing 15:07:27 nontheless 15:07:31 good luck :P 15:07:36 (where everything is statically a number...) 15:07:37 Heh 15:07:44 understood 15:08:16 http://esoteric.voxelperfect.net/wiki/Betterave 15:08:25 But, unlike these three languages, it is not tape- nor stack-based. Instead, programs are written as expressions. Like Scheme, it has a prefix notation, but unlike Scheme, there are no parentheses; each operator knows how many arguments must follow it. Thus, for example, the parameters of an addition come after the "+" symbol. 15:08:28 yeah, it runs everything in linear time, of course... hmm, i think static typing isn't the hard part anymore 15:08:30 perhaps too late 15:08:40 oh, no 15:08:56 yaeh 15:08:59 1. that's completely different 2. i had that idea 3 years ago 15:09:03 it's nearly everything you were o about 15:09:04 and thought it was original 15:09:14 lol 15:09:14 well 15:09:16 it's called "polish notation", i learned then 15:09:17 it's similar 15:09:20 yes 15:09:25 like FALSE 15:09:26 oh, no, that's polish notation. 15:09:29 nope 15:09:35 wait 15:09:35 false is rpn, reverse polish notation 15:09:38 FALSE is rpn 15:09:50 lol, we both realised 15:09:56 stack-based, you might say 15:09:59 it took me 2 seconds longer :P 15:10:06 (5:09:58 PM) oklopol: false is rpn, reverse polish notation 15:10:07 (5:10:00 PM) Hiato: FALSE is rpn 15:10:16 i just typed slow :) 15:10:24 Heh, good excuse 15:10:31 ;) 15:11:44 1. that's completely different. 2. i had that idea. 3. years ago, when i was in lapland, i saw a reindeer eat its own shit 15:12:21 haha, Must have been a truly inspiring sight 15:12:25 ;) 15:12:35 oh, sorry, that's not true, i just added something :) 15:13:02 oh I see, so what you meant is: 1. i had that idea. 3 years ago, when i was in lapland, i saw a reindeer eat its own shit ? 15:13:05 i mainly ogled at girls last time i was in lapland :) 15:13:25 unsurprisingly, I am not surpirised 15:13:32 and that is a helathy habbit nontheless 15:13:38 *healthy 15:13:40 no, i wanted to change the "3 years ago" into "part 3. years ago..." 15:13:58 I know, I was merely toying with you mortal mid 15:14:00 *mind 15:14:03 or *mud 15:14:07 whicheever 15:14:09 and in that you did succeed! 15:14:21 Hooray! 15:14:30 oh, btw, i played a bit with the idea of pattern matching 15:14:44 oh, and? 15:14:53 sofar, quicksort looks unbelievably weird, but i found comfort in that the prolog one i found is very similar :D 15:15:11 Cool 15:15:14 i thought i had the world's stupidest and ugliest idea ever when i invented scramble 15:15:24 the function that randomly scrambles a list 15:15:31 but? 15:15:43 used for sorting, that is 15:15:47 It turned into OgroSort (random sorting) 15:15:54 prolog has "perm", i then found out 15:16:00 lol 15:16:01 shame 15:16:08 and permutation is just fancy talk for scrambling :) 15:16:11 I wrote a permuatation algortihm once 15:16:23 I called it TVPA 15:16:31 and permutation is just fancy talk for scrambling :) ... er sure 15:16:32 :) 15:16:37 oh, i'm not even disappointed anymore when i found my ideas already in use, 15:16:43 they always are 15:16:55 what a horrible and demaning experience 15:17:02 I would threaten 15:17:08 to kill kittens unless I was credited 15:17:10 :P 15:17:19 and i usually found out about them right after i've invented them (usually because of my own googling, but often also by randomly looking at #haskell or somethign) 15:17:27 heh 15:17:51 i actually then renamed Scramble into Perm 15:18:14 aha, I see 15:18:23 http://rafb.net/p/jRzJ6635.txt 15:18:25 which is kinda lame because i'm trying to keep the concepts of pattern matching and constraint programming separate :P 15:18:29 it's in delphi 15:18:32 or is it logic programming... 15:18:37 i mean that thing. 15:18:45 I don't have the faintest clue 15:19:27 That's a perfect demonstration of my horrible procedural style 15:19:41 which is why I want to become proficient in functional languages 15:19:46 ala Haskell 15:21:30 i don't get much of that 15:21:34 well, i don't get all of that 15:21:43 hrmm 15:21:50 well grab FPC or something 15:21:54 and Permute away :P 15:22:05 FPC = Free Pascal Compiler 15:22:14 which is what Lazarus IDE is 15:22:27 anyway 15:22:34 that's besides the point 15:22:38 the point is the style 15:22:41 :) 15:22:45 for k := 0 to sizeof(p)-1 do if PosRightGreater(k) then maxp := k; 15:22:54 ...does that find the max of a list? 15:22:58 nope 15:23:02 what it does is 15:23:13 finds the furthest possible number from the left hand side 15:23:20 which has a number graeter than it on it's right 15:23:25 *greater 15:24:48 i think that's quite a slow way to do it... 15:24:55 it's the only way I could think of... 15:25:01 but you are correct 15:25:05 it is slow 15:25:19 fast, but slow in terms of cycles per permuttation 15:25:30 start from the right 15:25:38 it takes about 0.5 secs to rubn through 8! permuataions, I think 15:25:42 yes 15:26:23 hmm... 15:27:15 oh, right, just iterate from right to left, store the first number as max, and when you find a number > max, return the index of that 15:27:29 first == last in the lsit 15:27:30 list 15:27:34 hrmm 15:27:36 just first because started from the end... 15:28:03 but that won't be in lexicographical order 15:28:10 at all 15:28:32 that will find the last index in the list for which there are no greater numbers on the left 15:28:39 *right 15:28:40 lol 15:29:07 wait 15:29:08 oh 15:29:12 let me think 15:29:13 -!- jix has quit (Read error: 60 (Operation timed out)). 15:29:13 ... 15:29:31 well 15:29:42 -!- jix has joined. 15:29:42 I think that that won't be too much faster than what I am doing 15:29:45 let's say you have [9 5 6 8], store 8 as max, then go until you find a number greater than it 15:29:52 that's 9 15:29:55 oh, it's faster 15:30:01 like this you go through half the list 15:30:01 im just saying 15:30:06 true 15:30:07 well 15:30:11 yes, I do start on the left 15:30:13 your way you go through the list for every element of the list 15:30:21 true 15:30:30 mine is O(n), yours O(n^2), unless i read the code entirely wrong 15:30:39 no, you are right 15:30:50 yes, it's definitely not linera 15:30:53 *linear 15:31:02 wait 15:31:04 I don't get it 15:31:10 with 15:31:13 what don't you get 15:31:17 [9 5 6 8] 15:31:20 8 is max 15:31:23 go left 15:31:28 9 is then max 15:31:35 then that will be wrong 15:31:41 what should it return? 15:31:49 it should, return, in this example 15:31:50 5 15:31:55 well, yeah 15:31:57 as 5 has something to its right 15:32:00 which is greater 15:32:02 but do you see the connection between the algos? 15:32:04 8 doesn't 15:32:09 kind of 15:32:12 okay 15:32:14 but not really 15:32:19 wait a second 15:32:25 i'll give the hint. 15:32:30 sure 15:32:45 my algo finds the last number that does *not* have a greater number on its right 15:33:02 now, every number after it in the list will have a certain property 15:33:04 do you know what? 15:33:08 yes 15:33:16 a number graeter than it on it's right 15:33:22 *greater 15:33:22 yes 15:33:27 do you see the connection? 15:33:31 but that still is one step away 15:33:32 yes 15:33:35 as I did before 15:33:37 because 15:33:38 it is so trivial i didn't consider them a separate algo at all. 15:33:46 I still need the largest possible number 15:33:53 hmm 15:34:11 largest possible number? 15:34:12 whut 15:34:31 sorry 15:34:35 not he largest possible 15:34:36 you see i have no idea what you are doing with this since i haven't read the code, i'm just telling you the best algo to do what you explained :) 15:34:39 the furthest possible 15:34:45 indeed 15:34:56 but 15:34:58 in that case 15:35:01 I now know 15:35:05 that everything save 8 15:35:18 is valid in the 9 5 6 8 15:35:33 "valid"? 15:35:41 so, I guess I can just chosser the one before it 15:35:49 valid = something greater on it's right 15:35:55 well 15:36:00 then it won't be the leftmost. 15:36:01 and nine 15:36:05 yes 15:36:07 the problem 15:36:08 ohhhhh 15:36:15 actually 15:36:17 no 15:36:19 indeed, mine doesn't quite solve it ;) 15:36:20 not the problem 15:36:24 but, it's a trivial change. 15:36:30 the problem is rightmost 15:36:36 and your's would report 9 15:36:41 instead of 6 15:36:47 you want the rightmost? :D 15:36:50 yes 15:36:52 you said leftmost earlier 15:37:03 oh, in that case, it even simpler than my original one 15:37:32 (5:36:11 PM) Hiato: valid = something greater on it's right 15:37:38 take the last of the list, go to the left unless the new number is smaller than the last number 15:37:49 oh yeah huh 15:37:53 that would be way easier 15:38:20 but 15:38:27 that would yield false results 15:38:29 because 15:38:38 in 9 5 6 8 15:38:45 we would stop on 8 15:38:50 as 6<8 15:38:50 **until 15:38:54 s/unless/until 15:38:55 xD 15:38:58 aha 15:38:59 lol 15:39:16 then we have another problem 15:39:22 in 9 5 6 8 15:39:25 we go left 15:39:28 and stop on 5 15:39:33 as 5<9 15:39:37 no 15:39:38 which is not part of the condition 15:39:47 ? 15:39:52 at 6, the new number (6) is smaller than the last number (8) 15:39:55 so we return 6 15:39:59 of the index of it. 15:40:01 *or 15:40:01 oh yeah 15:40:03 huh 15:40:04 thanks 15:40:16 that will decrease the CPU cycles 15:40:16 :) 15:40:37 I just then have to change the code a bit 15:40:42 to say if it is the 1st number 15:40:44 then we are done 15:40:50 it's a big algorithmic improvement, i recommend you read a bit about complexities in general 15:40:52 instead of if PosRightGreater returns false 15:41:02 yes, I would like to 15:41:38 since i'm fairly sure i'd've lolled my ass off if i didn't know who you are :) 15:41:51 programmers are sometimes like that 15:42:07 i mean, if i'd just seen that algo on the net 15:42:10 I'm not sure whether to take that as a compliment or insult 15:42:13 but thanks :) 15:42:14 hehe 15:42:25 yes, if you'd have seen it on the net 15:42:25 ... 15:42:39 i mean, without knowing whose it is. 15:42:49 yes (I'm listening :P ) 15:42:54 -!- RedDak has quit (Remote closed the connection). 15:42:57 (no worries, I won't take offense) 15:43:05 (it was stupid ;) ) 15:43:55 it's just you get a bit obsessed about complexities after being around them constantly 15:44:11 fair enough :) 15:44:19 what is it that you do? 15:44:21 an algorithm that obviously does what it does inefficiently is actually very funny after that. 15:44:40 Hehe, I can see where you're coming from 15:44:53 if you don't mind my previous question 15:45:02 would you answer it ;) 15:45:10 sometimes also because a tabsize of 8 instead of 4 is enough, though, people are pretty obsessed with prettiness of code too :) 15:45:15 oh 15:45:21 wonder what that was 15:45:45 "people are pretty obsessed with prettiness of code too :)" unfortunately true 15:45:51 Well 15:45:57 what is it that you do? 15:46:02 for a living, or whatever? 15:46:03 ;) 15:46:36 oh, i'm in high school, possibly failing it, taking a few courses from the uni on the side 15:46:52 nice 15:46:55 me too 15:47:04 they just let me on one course at a time :-( 15:47:06 well, im not sure about failing (:P) or courses 15:47:12 shame 15:47:13 well 15:47:25 I have my sincere doubts that you are failing :) 15:47:41 well, after the first few weeks of high school i realized it has nothing to offer me (or anyone non retard.) 15:47:51 so... haven't really done anything there. 15:47:57 i lack a few courses i should have 15:47:58 Hahah, so very (sadly) true :) 15:48:11 oh, I see 15:48:28 I go to school, to come home 15:48:33 it's that simple :) 15:49:08 i don't really go, since i have 4 hours of lectures a week 15:49:17 no courses in high school anymore, just the one course in cs 15:49:22 in the uni 15:49:24 nice :) 15:50:14 basically, a course about heaps. 15:50:17 :) 15:50:39 :D 15:50:55 different ways to keep them balanced, stuff you could explain in a few lines for those who've never heard about them :) 15:51:25 i've actually done this, a whole course about ordos, i taught them to a friend in a few nights. 15:51:58 ordos? 15:52:02 http://rafb.net/p/0YrGtq15.txt 15:52:03 orderz 15:52:06 O() 15:52:09 oh 15:52:14 Big O notation 15:52:20 check it out 15:52:23 its way smaller now 15:52:26 haven't tested 15:52:28 but hey 15:53:38 be back later 15:53:43 got to do some stuff 15:53:45 cheers 15:53:46 -!- Hiato has left (?). 15:54:16 8| 15:54:26 people can be so weird... leaving irc... 16:20:00 what's the shortest brainfuck interpreter in a language not spesifically designed for brianfuck? 16:20:04 brain... 16:20:30 and by specific design i mean stuff like a language that executes brainfuck code. 16:40:19 -!- oklopol has quit ("for the need to encumber"). 16:47:25 -!- oklopol has joined. 17:00:57 -!- oerjan has joined. 17:17:49 -!- ehird` has joined. 17:21:44 -!- helios24_ has joined. 17:21:58 -!- helios24 has quit (Read error: 113 (No route to host)). 17:24:37 -!- Hiato has joined. 17:24:48 Wassabi 17:25:24 no thanks, but it is a bit chili outside. 17:25:47 oklopol: no fair, i was going to... 17:25:47 Hehe 17:25:52 (finally, a chance to pun-answer that) 17:25:52 :) 17:26:08 Souther Hemisphere - Oh Yeah :D 17:26:17 although i did it a previous time so... 17:26:18 warm there? 17:26:22 oerjan: i know 17:26:24 Summer! 17:26:26 and i was sooo jealous :\ 17:26:28 I know orejan 17:26:30 :) 17:26:51 i read all teh logs, although i usually skip the long discussions over debugging something :D 17:27:11 Hah, I also try to 17:27:21 well not skip, but not read memorizingly 17:27:25 whenever I go to slleep 17:27:27 skim 17:27:39 I'm garunteed to miss out on the *actual* 17:27:41 discussion 17:27:59 yes, well I just do Ctlr+F 17:28:00 :P 17:28:03 in the logs 17:28:06 ah yes. how come you started asking haskell questions just when i left ;) 17:28:21 Couldn't help it :) 17:28:29 That's when the exercises got hard in the tut 17:28:29 the fold thing? 17:28:31 ;) 17:28:32 yip 17:28:44 although oklopol handled that well :) 17:28:55 thanks, i thought so too :P 17:29:11 Yes, I must hand it to him: Oklopol, you taught me folds in ~3 lines, and the whole tut didn't make sense (about them) 17:29:33 i couldn't add the insightful "BUT, you can also do that with a StateT monad, and it's much COOLER" oerjan could've added! 17:29:42 *though 17:29:47 hm... 17:29:53 StateT? 17:29:54 (not would've, but could've) 17:30:28 no, State is sufficent ;) 17:30:35 i'm not sure what a monad would have to do with a fold, but i'm fairly sure you can put a bit of monad to everything :-) 17:30:36 amm, err... ok 17:30:52 sure, whatever floats your boat oklopol :P 17:31:02 * oklopol has a monad fetish 17:31:07 aha 17:31:17 well that explains everything 17:31:23 naah 17:31:25 someone should write a haskell fibonacci that uses just monads 17:31:27 nothing else 17:31:27 pulling your leg(s) 17:31:30 mmmk 17:31:38 or actually... nearly anything you do with lists will be essentially folds at the bottom anyhow, even if you use monad functions 17:31:49 i guess 17:32:11 (from the little understanding i have about the subject) 17:32:17 sure (desperately searches the tutorial for what monads are) 17:32:30 Hiato: they may have left that out out of mercy ;) 17:32:45 oh, ok 17:32:49 Hiato: yeah, quickly look them up so you can have a conversation about them :) 17:32:49 or just considered IO 17:32:53 in which case: I'm not interested :P 17:33:26 naah 17:33:28 actually you must have at least one monad eventually: IO to do I/O 17:33:29 I am 17:33:34 in a twisted way 17:33:49 "monad? i'll check wikipedia" *minute* "ah, now i see what you meant by that seven lines of monadic line noise" 17:34:23 Yes.. er.. no... am... maybe 17:34:32 choose the more appropriate one 17:35:03 oklopol: chooses "am", for he is such an egois. 17:35:04 Ät 17:35:05 *t 17:35:07 *egoist 17:35:10 *typoist 17:35:15 also 17:35:20 * oklopol != ok+tab 17:35:21 xD 17:35:24 Lol :) 17:35:27 * oerjan wonders if Ät means something in finnish 17:35:32 FUCK, i'm failing a bit too much heree.. 17:35:38 "/me" != "ok+tab" 17:35:54 oerjan: @, or "at" is pronounced "ät" 17:36:19 although you rarely see it in use as such, since it looks awful, that's what "ät" would mean 17:36:24 * Hiato wonders if "/me" will come out right 17:36:47 well that's just borrowing english pronunciation i take 17:36:52 yes 17:37:06 Watter taal praat jy oklopol? 17:37:21 "what language do you speak?"= 17:37:21 ? 17:37:25 yes 17:37:27 correct 17:37:27 actually 17:37:32 and the winner is.... 17:37:38 i remember praat and jy from yesterday 17:37:43 so... shouldn't have had to ask. 17:37:44 :D nice 17:38:00 * oerjan actually got that since "prat" is norwegian too 17:38:05 Dutch I take it.... 17:38:08 cool 17:38:13 well it's sprache in german and prata is talk in swedish, it's not like it's hard to remember something you almost remember already 17:38:14 or is memory failing 17:38:23 almost certainly borrowed from dutch though 17:38:28 yip 17:38:29 Hiato: also, finnish. 17:38:40 ah yes, we went through this yesterday :P 17:38:44 well, i use english more, but finnish is my native language 17:38:44 weel orejan 17:38:47 i guess we did 17:38:53 * oerjan has read that the only native word starting with in norwegian is "på" 17:39:05 Afrikaans = 90% Duthc + 5% English + 5%Randomness 17:39:06 *with p, sheesh 17:39:09 starting with? :D 17:39:10 *Dutch 17:39:10 oh 17:39:13 what :o 17:39:21 wtf 17:39:25 that's sick :D 17:39:36 not really 17:39:42 because every time you learn a rule 17:39:54 there are more exceptions then are things that confomr :( 17:39:57 *conform 17:40:35 all i know about dutch is from porn 17:40:38 ah, just like english then :D 17:40:50 ahahahahaah 17:40:56 and to orejan 17:40:58 too true 17:41:03 took me years to learn English 17:41:07 they make very sucky erotic comedies. 17:41:13 heh 17:41:31 I'll take it you're the expert 17:41:34 oklopol 17:41:49 i can't really think of anything funnier than an ugly guy having sex with three girls in fast motion with carneval music on the background :) 17:42:00 expert? 17:42:03 in porn? 17:42:03 lol, true 17:42:11 yes, well Dutch pron that is 17:42:21 typo? 17:42:22 oh, well probably any kind 17:42:26 :) 17:42:28 Ah, I see 17:42:43 http://esoteric.voxelperfect.net/wiki/2006_Esolang_Contest 17:42:48 Holy Guacamole 17:42:57 there is no way 3/4 of the Esolangs out ther 17:43:05 can do any of "The Tasks" 17:43:14 someone weas on something real good :) 17:43:16 *waz 17:43:18 *was 17:43:20 *blah 17:43:58 oh they _can_, if they're turing complete 17:44:13 treu, but you know what I meant 17:44:19 what I meant is: 17:44:35 i mean, _someone_ wrote a mandelbrot generator in bf... 17:44:43 hehe 17:44:45 No single human (or multiple humans) has/have the capacity to concentrate for a long enough period of time 17:44:53 true. 17:44:54 Yeah, I saw that 17:45:07 It's not hard really 17:45:12 at least the maths part 17:45:12 nonsense. first, write the program for a turing machine, secondly, implement the turing machine in language of choice 17:45:17 I did one in ruby easily 17:45:26 meh 17:45:28 fin 17:45:30 *fine 17:45:32 timotiis: now that you put it that way, can't think of anything simpler. 17:45:33 the house wins 17:46:11 as i recall, a mandelbrot in basic was one of the first programs i ever wrote, long long ago 17:46:15 is Pikhq the resident Brainfuck god? 17:46:23 dbc is, i think. 17:46:29 oh, I see 17:46:54 pikhq is the author of pebble, i'm assuming he owns at brainfuck, although i don't know what he's done with it 17:47:04 Cool' 17:47:09 also, i know he's said "brainfuck is easy once you've used it a bit" 17:47:16 not in those words, but something along those line 17:47:16 s 17:47:24 :D 17:47:30 Lunacy I tell you :P 17:47:35 heh 17:47:37 http://rafb.net/p/OXHki823.html 17:47:40 there we are 17:47:41 well, it's true, it's not that hard ;) 17:47:43 the madelbrot set 17:47:45 in Ruby 17:47:48 my own script 17:47:50 very easy 17:47:51 hm i think the uuencode task might be the simplest... 17:48:00 maybe 17:48:04 im not sure though 17:48:13 sed is definitely difficult 17:48:19 in non-stringy languages 17:55:20 Wise man once say: "Mandelbrot Set make IRC silent, Phoenix set make noise" 17:56:16 what is the Phoenix set? 17:56:28 its alos an infintely repeating set 17:56:31 hrmm 17:56:34 a fractal too 17:56:38 let me get the link 17:58:06 http://www.jamesh.id.au/fractals/mandel/Phoenix.html 18:00:34 aye 18:00:48 not pretty, hence it makes noise :P 18:02:46 interesting note: "aye" means "no" in finnish 18:02:52 although it's written "ei" 18:02:56 cool 18:03:01 I learnt some finnish 18:03:04 :) 18:03:09 interesting note: "aye" means "egg" in german, although it's spelled "ei" 18:03:09 what is yes? 18:03:11 also 18:03:16 ei har jeg hørt slikt 18:03:24 heh, and some german 18:03:37 it's not pronounced the same, i failed :) 18:03:44 "yes" is "kyllä" 18:03:50 pronounced? 18:03:52 (i.e. ei means "not" in norwegian, although it's a bit rare) 18:04:02 wicked 18:04:19 Hiato: i'm not sure how to type how it's pronounced in finnish in english... 18:04:31 sure, no problem 18:04:41 "ej" in swedish. 18:05:06 wow 18:05:07 well 18:05:18 I won't remmeber half of these, but cool nonetheless 18:05:25 *remember 18:05:40 "kule" pronounced a bit like "dune" and then "la" as in the beginning of "lag" 18:05:50 kule la 18:05:59 very bad explanation :) 18:06:20 I think I get it though :) 18:07:06 you can't really explain the exact pronunciation like that, since everything is pronounced a bit differently 18:07:10 but it's close 18:07:22 cool, thanks nonetheless 18:07:24 anywhodel 18:07:25 brb 18:07:27 supper 18:07:35 well, not right back but hey 18:18:44 0x20FF33 18:19:08 2162483 18:28:34 no, toffee 18:28:37 0x20FF33 18:30:20 back 18:35:44 -!- calamari has joined. 18:38:26 oklopol: I've done a small amount of things in Brainfuck, yes. 18:38:27 ;) 18:40:14 you yourself have said dbc is the guru, i think. this is why i had no trouble putting him above you in the brainfuck-capability meter i have in my head 18:40:36 i used to be pretty good myself.. 18:40:39 i think 18:40:55 a million years ago, when i was able to program in other languages than python.- 18:41:46 I think I caught Eso-fever 18:41:49 ... 18:41:52 :( 18:42:10 I already want to make a new language, and I haven't even named the current one :( 18:42:15 :P 18:44:33 Doctor, is it curable? 18:55:23 No. 18:55:33 However, with longterm treatment, it can be managed. 18:55:45 (side effects include severe geekiness_ 18:55:46 ) 18:58:27 :D 18:58:33 er.. I mean :( 19:00:12 Alright, I need some _community_ (winces) suggestions for a name for my esolang so that I can write an interpreter and not feel guilty about thinking about my next one 19:00:26 its the funky obfuscated one 19:00:56 where helloworld is : {{>>~~~~{-<}~~~~~~~~~{-<-<}<<}:{>>{~~~~~~~~{<}~{>}}<<}\ ~>{{~{v}}>>>v{~}^<<<}/(<<<){[<<]}:>:{>>{~~~~~~~~{<<}~{>>}}<<}\ ~{>>{vvvvvvvv~~~~~~~~~~~~~~~}<<}~{>>{vvvv~~~~~~~~~~~~~}<<}~ {>>{^^^^^^^^^^~}<<}~{>>{v~~~~~~~{{<<}~}v{~}vvvvvvv{~{>>}}^^^^^^~~~ {{<<}~}vvvv{~{>>}}v~~~}<<}~<{{^^^}}~{>>{vvvvvv~{{<<}~{>>}}^^^^^^^~~~~~~~~~~~{{<<}~{v>}}^^^^^^}}/{{()}}{[<<<<]}:>:{{~v}}\} 19:01:20 and outputting T using Fibonacci is: {{>>}~~~~~~~~~~~{{-<~}<<} /{{(<){[<<]}}}:>:~{>>{<<}}~{<<{>>~<<}>>}~{<<{>>}}\{>>v}~{^}~~~~~{<}~ {<{~}v>}~} 19:02:21 * Hiato wonders if ever anyone will respond, appropriately 19:04:04 Hmm. . . 19:06:33 Phlegethon. 19:06:45 Nice name, does it mean anything? 19:07:11 It's the outer ring of the 7th level of hell in /The Divine Comedy/. 19:07:24 aha 19:07:24 The naming, obviously, inspired by Malbolge. 19:07:33 yes, I see :) 19:07:49 though this is actually _possible_ to programme in, well just 19:08:07 hrmm 19:08:09 well 19:08:19 in the absence of any other suggestions 19:08:22 I will say 19:08:28 I Like :) 19:08:28 The 7th level of hell is reserved for those violent against people and property. 19:08:34 and it will now be processed 19:08:38 Which you will be after coding in that. :p 19:08:49 lol :P 19:08:51 Nice 19:09:12 (Even though in my religion, there is no hell, but hey ;) ) 19:09:23 Plegethon 19:09:29 it has a nice ring to it 19:10:00 * Hiato contemplates naming it Plegethon 2, to suggest some kind of advancement 19:13:01 Perhaps though 19:13:12 something less...er for the lack of a better word, evil 19:14:07 like Fluffy Bunny Esolang :P 19:19:11 Generic evil: Inferno. 19:21:04 I like 19:21:16 I dub the language Inferno 19:21:32 for no apparent reason too ;) 19:33:29 -!- oerjan has quit ("Coffee"). 19:48:10 exists, hiato 19:48:41 inferno exists? or call it exists. I'm confused... 19:48:58 a language named that exists 19:49:02 damn 19:49:04 well an os named that with a language called limbo 19:49:07 but yeah :P 19:49:11 ok, undo the dub process 19:49:26 oh yeah, I think I even heard of it 19:49:27 :P 19:49:40 plan9-related 19:49:43 thanks ehird1 19:49:46 yeah 19:49:50 that's right 19:49:52 bell labs 19:49:52 ehird` 19:49:53 :P 19:49:58 woops 19:50:00 typos 19:50:01 http://en.wikipedia.org/wiki/Limbo_programming_language quite clean code actually 19:50:01 sorry 19:50:02 ;) 19:50:49 ok, so any suggestion s for a new name? 20:08:37 what about Citizen II 20:08:38 ? 20:09:40 nftlLEMONtafn 20:09:51 name for the language LEMON that's all for now 20:10:04 sorry, I dpnt speak fruit 20:10:08 *don't 20:10:49 ehird` : would you so kindly explain what that was about, feel free to decline ;) 20:10:57 that's the name 20:11:02 for what? 20:11:03 nftlLEMONtafn is what you should call your language 20:11:09 oh I see 20:11:14 standing for: "name of the languge LEMON that's all for now" 20:11:55 am.. thank you for your.. err.. generous contribution, we value all of our customers equally, please hold 20:11:58 ... 20:11:59 ... 20:12:00 ... 20:12:01 .. 20:12:06 Ok, I see 20:12:22 I felt inspired too :P 20:14:54 come on, esoteric names for esoteric languages 20:15:17 well, I think the LEMON one was a bit too far away from anywhere, really 20:15:22 I don't mind changing the name 20:15:29 but not to that ;) 20:16:10 actually, I quite like just notlLEMON 20:16:27 as in name of the language (is) LEMON 20:16:31 that's wicked 20:16:33 :D 20:17:17 give it a mutable name global between each interpreter for it 20:17:21 nftlLEMONtafn is good though 20:17:25 and add a few command to change the name 20:17:29 *commands 20:18:12 not sure I'm with you oklopol... ehird` the stuff after lemon looks kind of stupid though 20:18:41 cool though 20:18:50 heh 20:18:55 or rather meh 20:19:42 rather how's about just LEMON 20:20:33 Hiato: not with me as in don't agree that'd be awesome, or didn't understand what i meant? 20:20:45 didn't understand 20:20:48 (a word) 20:20:48 oh 20:20:56 what word? 20:20:58 mutable? 20:21:13 well, really the whole thing, but yes, mutable 20:21:13 if something is mutable that means you can change it. 20:21:17 aha 20:21:32 so what is the interchangeable global? 20:21:37 and what should it do 20:21:49 interchangeable=mutable (methinks) 20:22:45 nevermind 20:23:09 what do you mean " give it a mutable name global between each interpreter for it" 20:26:59 hmm 20:27:10 :) 20:27:34 basically, that the name of the language could be changed by a primitive in your language. 20:27:34 Hah, im not even so sure you knew what you meant :P 20:27:40 ooh 20:27:43 nice 20:27:49 I see 20:27:53 no, it's not nice, but it's an idea :) 20:28:11 no, it is nice, because (I say so :P ) I like it :) 20:28:30 haha, well, the problem is it's a bit hard to implement :D 20:28:41 Oh yeah, you got that right :D 20:28:43 it could change the name on the wiki page xD 20:28:48 aweomse 20:28:54 but I would need PSOX 20:28:58 well, actually would have to move the page to another location :D 20:29:04 * Hiato waits for SGEO to storm in... 20:29:10 true 20:29:22 should a language with the new name already exist, it would just give a runtime error. 20:29:24 ok log in->create a page with the template 20:29:30 and then update the name part 20:29:31 :D 20:29:37 heh 20:29:44 xD 20:29:44 Runtime error... amm 404 :P 20:30:04 and for starters you can name it The Language That Changes Its Own Name 20:30:17 yeah 20:30:23 but then voxelperfect would die 20:30:33 because everyone would execute progs 20:30:37 just for fun 20:30:44 :D 20:30:47 to see if "it lives up to its name" 20:31:32 currently though, it's LEMON 20:31:38 codename, that is 20:31:43 until further notice ;) 20:32:23 :P 20:39:55 no 20:39:56 no hiato. 20:40:02 lemon is a parser generator, qutie common 20:40:03 used by sqlite 20:40:10 and its accompaning input language 20:40:25 nftlLEMONtafn isn't taken! 20:40:41 i'd prefer nftlltafn 20:40:47 for nftlLEMONtafn 20:43:29 -!- pikhq has quit (Read error: 110 (Connection timed out)). 20:47:34 no 20:47:37 LEMON can stand for: 20:47:55 Language Eminating Monstrous Ontologies: nftlLEMONtafn 20:47:59 To recap: 20:48:12 nftlLEMONtafn = name of the language LEMON that's all for now 20:48:21 LEMON = Language Eminating Monstrous Ontologies: nftlLEMONtafn 20:48:27 it's like HURD 20:48:31 but cooler 20:49:44 alright 20:49:48 you have convinced me 20:49:53 it will be called 20:49:58 nftlLEMONtafn 20:50:03 rather 20:50:14 notlLEMONtafn 20:50:32 o=of /= f 20:50:35 -!- Tritonio_ has joined. 20:52:15 but 20:52:18 that is not final 20:53:05 Ontology is a study of conceptions of reality and the nature of being. 20:53:07 interetsing 20:55:42 though, if LEMON is taken, perhaps it would be better not to have it form part of the name 20:56:15 hello everyone and happy new year! 20:56:37 Hello Tritonio 20:56:46 and happy new year to you to 20:56:50 Tritonio_: happy easter! 20:57:02 (even though today is the 6th for me :P ) 20:57:11 happy new easter! 20:58:33 Hiato: you see Tritonio_ lives a few trips around the world away from you 20:58:41 he's just celebrating new years' 20:58:49 :D heh 20:59:14 No way, but hehe anyway 20:59:28 -!- pikhq has joined. 21:03:40 what about this for the name: 21:03:41 TEPLTIAOAUHAUA (The Esoteric Programming Language That Is Absurdly Obfuscated And Unfortunately Has An Unpronouncable Acronym) 21:04:02 unpronouncable acronym rips on INTERCAL (Language With No Pronouncable Acronym) 21:04:09 meh 21:04:16 even though I just though of it 21:04:24 ok, well, Ill try again 21:05:03 actually (believe it or not) I'm glad ehird` is looking out for these things, otherwise this language would be cheap. Thanks :) 21:05:14 :D 21:05:36 Should I go the funky Acronym route? 21:06:17 BLAH (This is not an acronym for the language) 21:06:32 or BLAH (Not An Acronym For the Language) 21:07:36 BLAH (Blatently Lazy Acronym, Hey?) 21:10:35 call it: ACRONYM, Recursive (Languge Without Self-Reference In The Name) 21:13:30 :D 21:13:53 NCTOAN (Nope, Couldn't Think Of A Name) 21:13:53 NAMELESS () 21:14:09 or N/A 21:14:22 -!- Tritonio_ has quit (Read error: 104 (Connection reset by peer)). 21:14:42 N/A (Not Applicable and Non-Acronym) 21:15:37 I like N/A 21:15:44 and ACRONYM 21:18:06 well done ehird` 21:18:13 Nononono 21:18:14 ACRONYM wins! :D 21:18:15 it's 21:18:18 ACRONYM, Recursive 21:18:19 :( 21:18:24 aww ok then :P 21:18:38 :) 21:18:55 congratulations and thank you :D :D 21:19:03 I like ACRONYM very much :D 21:19:55 thanks ehird` 21:19:56 :D 21:19:59 "You have a doomsday device? You have a doomsday device and you didn't tell me?" 21:20:02 "Frank! Frank, Frank. Boss. Of course I have a doomsday device. What do I look like, a sane person?" 21:20:14 timotiis: sam hughes!!! 21:20:44 ehird`: congratulations 21:20:53 ,o/ \o, \o/ 21:22:18 i found him on freenode once 21:22:24 he was away through 21:22:29 i think his nick was rashakil or similar 21:24:02 cool 21:32:07 -!- jix has quit ("CommandQ"). 21:33:06 -!- Jontte has quit ("Konversation terminated!"). 21:41:03 -!- Tritonio_ has joined. 21:41:14 -!- Tritonio_ has quit (Read error: 104 (Connection reset by peer)). 21:48:56 -!- calamari has quit ("Leaving"). 21:55:23 I like the angle of incidence 1l, why was it abandoned 21:55:37 don't make me take it onto myself to complete..... 21:55:43 *upon 22:10:31 Well, I finished th spec for 1L_AOI 22:12:21 http://rafb.net/p/VC26oA18.txt 22:15:23 Does anybody know Gregor Richards' email address 22:15:30 I want to contact him 22:16:23 No idea. But he's in the channel. 22:16:32 GregorR: You paying attention to IRC today? :p 22:16:33 GregoR 22:16:37 oh yeah, huh 22:16:46 well GregorR 22:17:03 I would like you to check out the brief 1L_AOI spec I wrote 22:17:05 and perhaps 22:17:23 give it your blessing and continue the wonderful project that is the 1L language 22:17:59 GregorR 22:18:00 ? 22:18:04 oh well 22:22:49 -!- Aardwolf has joined. 22:28:05 woops 22:28:11 made a mistake in the spec 22:29:06 it would have been impossible to do anything with 22:29:13 because of a catch 22 22:30:08 you need to be moving down to increase something, but in order to move down, you need to increase something, and the original direction was right 22:30:16 thus it would have been impossible :P 22:30:18 fixed now though 22:32:27 ok GregorR and anyone else interested, here is the corrected spec for my idea of 1L_AOI (Angle Of Incidence) 22:32:28 http://rafb.net/p/VMGMTC23.txt 22:33:50 cheers 22:33:52 -!- Hiato has quit ("Leaving."). 22:37:04 -!- oerjan has joined. 22:41:41 I should add the i combinator of iota to Lazy Bird. 22:41:48 As an archeopterix or something. 22:42:02 ooh 22:44:13 Is the i combinator thusly? ``s``si`ks`kk 22:46:42 Hm. I'm trying to find a simple lambda form, but I'm not sure there's one beside the definition. 22:47:06 i = .x.xsk 22:47:15 er, \x.xsk 22:47:34 Yes, but well, I need a form for the string rewriting. 22:48:10 -> ^x``xsk -> ``s``si`ks`kk 22:48:15 which is what you had 22:48:32 Unfortunately, it seems that ``````...````iabcd...xyz = ````...````askbcdef....xyz 22:49:16 I could rewrite all occurence of the combinator as ``s``si`ks`kk, but well, I'd rather find a quicker method 22:49:38 oh. 22:49:59 well the obvious thing is to rewrite `ix as ``xsk 22:50:34 Well, there's that. 22:50:59 Good enough I guess. 22:54:25 Although... 22:54:47 Since it's supposed to be unique, maybe I should switch s and k to their translation. 22:55:57 ``x`i`i`i`ii`i`i`ii 22:56:36 problem is, you then need to add rules to recognize the translations. 22:57:13 Well, the i combinator will be added to the program itself. 22:58:13 i mean, i = ^x``x`i`i`i`ii`i`i`ii is not enough to define it 22:58:19 The problem is, I'm not sure how it would play out since ``x`i`i`i`ii`i`i`ii uses the combinator itself 22:58:22 Yes, that. 22:58:59 Ah, iota defines it just as a lambda expression. 22:59:17 Well, I'll just do the ``xsk 23:01:39 On another matter, I defined _ as replacing it with the ASCII input with s="```s`k`s``s`ksk``s``s`ks``s`k`s`ks``s``s`ks``s`k`s`ks``s`k`s`kkk`kk`k`ki"+s 23:01:48 And s=`ki 23:02:00 But it is quite slow. 23:02:19 I think I'll have to finish the table, but so far, I didn't even reached A. 23:02:23 -!- timotiis has quit ("leaving"). 23:05:55 table? 23:07:27 Thusly : http://membres.lycos.fr/bewulf/Russell/Lazy%20Bird/Church%203.txt 23:08:48 i think 23 is too long, surely you can double and add 1 to the 11 version faster than that 23:10:20 your + is a bit deceptive i think 23:10:54 it assumes passing m and n as arguments, but for constructing numbers you would just put them in directly 23:11:48 Well, that's how I use my addition. 23:11:50 so ``+mn = ^f^x``mf``nfx = ^f``s`k`mf``s`k`nfi 23:12:03 In the lambda form 23:12:07 Easier to enter. 23:12:12 Just ``+ab 23:12:23 except then it is useless for constructing short numbers 23:12:31 succ *2 11 gives me ``s``s`ksk``s``s`ks``s`k`s`k``s`k``s``s`kski``sb``s``s`ks``s`k`s`k``s`k``sbi``sb``s``s`ks``s`k`s`k``s`k``sbi``sbik`kik`kik`ki 23:12:43 I use the Lazy K table to construct them. 23:13:16 ic 23:13:44 After shortening the 23, I get ``sb``s``s`ks``s`k`s`k``s`k``sbi``sb``s``s`ks``s`k`s`k``s`k``sbi``sb``s``s`ks``s`k`s`k``s`k``sbi``sbik`kik`kik`ki 23:13:50 Which is indeed shorter. 23:14:44 And ``23.xi prints the right number of x's. 23:15:22 oklopol: oklotalk! 23:15:32 Or simplify to `a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`ax with some dummy combinators. 23:18:49 oh right 23:19:15 the most obvious way to make this efficient would be to embed decimal notation... 23:20:22 it would even be possible to define #,0-9 such that ``#102 = church numeral 102 i think 23:20:33 although your 0 is already taken 23:21:11 # = church numeral 0, digit d = multiply by 10, add d 23:21:20 oh wait nonsense 23:21:46 it would have to be written ``201# for that 23:21:49 My 0 is already 0. 23:21:57 It's `ki. 23:22:06 thought so 23:22:13 = `sk 23:22:20 Also that. 23:22:54 (I made a Lazy Bird -> SK translator, in case I want it less readable) 23:36:03 -!- calamari has joined. 23:42:49 what's basically the biggest bf program out there? 23:42:54 it's 2mb lostkng.b right? 23:44:50 Probably. 23:55:06 -!- slereah_ has changed nick to Slereah. 23:56:14 Is a list of the form ``s``si`k[as many as size f the list - 1]``s``si`k[1]`k[2]`k[3][...]`k[n]? 23:56:17 there's an odd shortage of bf->machine code translators 23:56:28 Slereah: i know the lambdacalculus for it 23:56:36 CONS := \x y z. z x y 23:56:44 TRUE := \x y. x 23:56:47 FALSE := \x y. y 23:56:54 CAR := \x. x TRUE 23:56:59 CDR := \x. x FALSE 23:57:05 and have NIL := FALSE or similar 23:57:11 That's what I used. 23:57:17 maybe have NIL := CONS NIL NIL, with the y-combinator 23:57:17 :D 23:57:21 What's CAR-CDR-NIL? 23:58:05 I suppose CAR-CDR are the take first-second element