←2007-01 2007-02 2007-03→ ↑2007 ↑all
2007-02-01
00:52:55 <bsmntbombdood> har har!
00:54:25 <bsmntbombdood> (define fibs (cons-stream 0 (cons-stream 1 (stream-add fibs (stream-cdr fibs)))))
01:06:29 -!- digital_me has quit (Read error: 104 (Connection reset by peer)).
01:11:08 -!- SevenInchBread has joined.
01:28:15 -!- nazgjunk has quit ("rawr. And, also: Bi-la Kaifa").
01:29:36 -!- wooby has joined.
01:30:36 <SevenInchBread> oh ho
01:30:39 <SevenInchBread> I just got a great idea.
01:30:40 <SimonRC> ug
01:31:39 <SimonRC> bsmntbombdood: you mean: "fibbs = 0:1:zipWith (+) fibbs (tail fibbs)"
01:31:46 <SimonRC> SevenInchBread: well?
01:31:52 <bsmntbombdood> yeah
01:32:18 <bsmntbombdood> no
01:35:29 <wooby> ahoy
01:37:27 -!- ihope has joined.
01:37:31 <SevenInchBread> hmm... is there anything more to the bitmap file format other than simply being a grid of bytes?
01:37:45 <ihope> Oops. Just a second.
01:37:47 -!- ihope has left (?).
01:37:54 -!- ihope-m has joined.
01:38:00 * ihope-m shows off his fancy new suffix
01:38:08 <ihope-m> (I had to leave to change, you know.)
01:38:10 <SimonRC> SevenInchBread: a grid of 32-bit words?
01:38:28 <SimonRC> we have enough bitmap-based langas already
01:38:38 <SimonRC> How about an SVG-based one?
01:38:54 <SevenInchBread> well... I was going with squares.
01:39:50 <SevenInchBread> the program is a series of black lines on a white background..
01:39:58 <SevenInchBread> or maybe a maze.
01:40:53 <SevenInchBread> where a pointer of some sort travels through the whitespace, constrained by black pixel walls, with other color pixels being instructions.
01:46:52 * SimonRC goes to bed
02:06:44 -!- digital_me has joined.
03:29:51 -!- wooby has quit.
03:47:31 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
04:00:24 -!- LeaLeaLea has joined.
04:12:27 -!- oerjan has joined.
04:51:29 -!- anonfunc has joined.
05:19:49 -!- Sgeo has quit ("Leaving").
05:35:37 -!- digital_me has quit (Remote closed the connection).
06:42:03 -!- oerjan has quit ("leaving").
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
09:17:55 -!- helios_ has joined.
09:18:19 -!- helios24 has quit (Read error: 113 (No route to host)).
09:21:34 -!- helios_ has quit (Client Quit).
09:21:44 -!- helios_ has joined.
09:22:06 -!- helios_ has changed nick to helios24.
09:42:25 -!- sp3tt has quit (zelazny.freenode.net irc.freenode.net).
09:42:25 -!- NK` has quit (zelazny.freenode.net irc.freenode.net).
09:42:25 -!- lament has quit (zelazny.freenode.net irc.freenode.net).
09:43:26 -!- NK` has joined.
09:43:32 -!- lament has joined.
09:43:40 -!- sp3tt has joined.
11:43:46 * SimonRC returns
12:53:03 -!- ihope-m_ has joined.
13:11:26 -!- ihope-m has quit (Read error: 110 (Connection timed out)).
13:18:21 <SimonRC> "Dear Microsoft: programs that can recognise novel words by sticking together known affixes to known root have been around for over 20 years. It's probably time to put one into Word. Love SimonRC"
13:18:25 <SimonRC> Word doesn't recognise "uninitialised".
13:18:25 <SimonRC> bah
13:27:38 <pgimeno> tried with 'z'?
13:27:47 <pgimeno> uninitialized
13:53:08 -!- Rugxulo has joined.
13:58:03 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]").
14:13:50 -!- Rugxulo has left (?).
14:26:02 <SimonRC> I have it set to UK
14:40:17 -!- tgwizard has joined.
14:52:37 -!- anonfunc_ has joined.
14:58:03 -!- anonfunc has quit (Read error: 110 (Connection timed out)).
15:04:03 -!- sebbu has joined.
15:07:37 <SimonRC> dear scholes i keep typn of for or n stuf plz fix kthxby
15:36:26 <oklofok> ya
15:42:17 <SimonRC> oops, that should have been "sholes"
15:42:19 <SimonRC> http://en.wikipedia.org/wiki/Christopher_Sholes
16:05:00 -!- anonfunc_ has quit.
16:22:36 -!- SevenInchBread has joined.
17:45:25 -!- NK` has changed nick to NK\.
17:52:07 -!- nazgjunk has joined.
18:08:57 -!- pgimeno has quit (Read error: 131 (Connection reset by peer)).
18:09:01 -!- pgimeno_ has joined.
18:09:07 -!- pgimeno_ has changed nick to pgimeno.
18:41:04 -!- sebbu2 has joined.
19:01:01 -!- sebbu has quit (Read error: 110 (Connection timed out)).
21:09:47 -!- nazgjunk has quit ("rawr. And, also: Bi-la Kaifa").
21:49:21 <SevenInchBread> wow...
21:50:04 <SimonRC> what/
21:50:06 <SimonRC> ?
21:50:33 <SimonRC> You discovered the newsgroup alt.fan.dragons?
21:51:52 <SevenInchBread> AST = eval("'" + LispCode.replace("'", "\'").replace("(", "'('").replace(")", "')'").replace(" ",","))
21:52:02 <SevenInchBread> I don't know why I never considered that.
21:53:07 <SimonRC> what's that for?
21:53:26 <SevenInchBread> Takes a raw string of Lisp code and makes an AST (I think)...
21:54:23 <SevenInchBread> might need to change replace(" ", ",") to a regex that matches any repetition of whitespace.
22:04:32 -!- SevenInchBread has quit ("haaaaaaaaaa").
22:11:47 -!- Sgeo has joined.
22:13:59 <oklofok> AST?
22:18:48 <SimonRC> abstract syntax tree
22:20:28 -!- SevenInchBread has joined.
22:25:38 <oklofok> i guessed it'd mean that but couldn't figure what it stood for :D
22:25:48 -!- oklofok has changed nick to oklopol.
22:25:52 <oklopol> olofok
22:48:56 -!- SevenInchBread has quit ("haaaaaaaaaa").
23:12:38 -!- sebbu2 has quit (Client Quit).
23:24:13 -!- SevenInchBread has joined.
23:24:38 -!- anonfunc has joined.
23:27:50 <SevenInchBread> hmm.. I need a "keyboard macro" program of some sort.
23:28:28 <SevenInchBread> for performing a series of actions as though I had typed it in on a keyboard.
23:28:38 <SevenInchBread> over and over...
23:28:57 -!- wooby has joined.
23:33:51 -!- ihope-m_ has changed nick to ihope.
23:37:16 <bsmntbombdood> SevenInchBread: C-x (
23:41:34 -!- tgwizard has quit (Connection timed out).
23:58:00 -!- ShadowHntr has joined.
2007-02-02
00:09:48 -!- ShadowHntr has quit (Read error: 104 (Connection reset by peer)).
00:41:06 -!- anonfunc has quit.
01:13:45 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)).
01:45:37 <bsmntbombdood> OH MY GOD IT WORKS
01:49:51 <bsmntbombdood> that is amazing
01:52:33 <bsmntbombdood> http://paste.lisp.org/display/36224
01:52:35 <bsmntbombdood> :D
01:54:17 <bsmntbombdood> no real scoping though
01:57:51 <bsmntbombdood> but it works!!
02:04:42 <bsmntbombdood> not quite turing complete yet, because there's no way to recurse
02:04:43 <SevenInchBread> a lisp interpreter?
02:04:48 <SevenInchBread> er.
02:04:48 <bsmntbombdood> yeah
02:04:52 <SevenInchBread> lispish interpreter?
02:05:09 <bsmntbombdood> yeah
02:05:20 * SevenInchBread has always wanted to make his own Lisp dialect.
02:05:23 <SevenInchBread> Common Lisp kind of sucks.
02:05:37 <bsmntbombdood> scheme doesn't ;)
02:06:00 <SevenInchBread> Yeah, scheme is nice and.... organized.
02:06:21 <SevenInchBread> or maybe a language inspired by smalltalk syntax.
02:06:38 <SevenInchBread> or maybe... a mix? :o
02:11:12 <SevenInchBread> ooh... this is scary
02:11:21 <SevenInchBread> http://i83.photobucket.com/albums/j316/adamadamadamamiadam/harharhar.jpg
02:14:35 <bsmntbombdood> a ha!
02:14:40 <bsmntbombdood> turing completeness acheived
02:14:43 <bsmntbombdood> in a hacky way
02:16:33 <bsmntbombdood> http://paste.lisp.org/display/36224#1
02:18:12 <bsmntbombdood> :D
02:18:39 <SevenInchBread> all things start off as hacks, my child.
02:28:21 <bsmntbombdood> iunno how to implement DEFINE
02:28:52 <SevenInchBread> hmmm.. it uses special rules.
02:29:03 <bsmntbombdood> ?
02:29:12 <SevenInchBread> you can define it a assignment of a lambda
02:29:31 <bsmntbombdood> yeah
02:29:34 <bsmntbombdood> but how?
02:29:51 <SevenInchBread> Scheme has macros yah?
02:29:56 <SevenInchBread> define is a macro.
02:30:03 <SevenInchBread> I think.
02:30:09 <bsmntbombdood> yeah
02:30:17 <bsmntbombdood> but how
02:30:56 -!- digital_me has joined.
02:31:12 <bsmntbombdood> I guess...update env with the value
02:31:15 <SevenInchBread> I forgot how you define macros... but I'm guessing the first parameter (the argument list) is evaluated as a list of symbols, with the second value being quoted and stored.
02:31:23 <bsmntbombdood> my lisp doesn't have macros
02:31:35 <SevenInchBread> define it in Scheme.
02:31:47 <bsmntbombdood> you can'y
02:32:09 <SevenInchBread> no I mean...
02:32:23 <SevenInchBread> update the env with ('define define)
02:32:30 <SevenInchBread> just use schemes define.
02:32:58 <bsmntbombdood> won't work
02:33:00 <SevenInchBread> you could always make a "macroless" Lisp that sticks to the purity of Lisp syntax.
02:33:05 <bsmntbombdood> because define's not a function
02:33:40 <SevenInchBread> (define) would just be a function that accepts a list of symbols and an arbitrary number of quored expressions.
02:33:50 <SevenInchBread> make it "Pure Lisp"
02:34:05 <SevenInchBread> actually... for pure lisp, I would just implement a lambda and a set function.
02:34:32 <SevenInchBread> lambda following the rules above... but without a name.
02:34:38 <bsmntbombdood> define is set
02:34:56 <SevenInchBread> make a new set then.
02:35:26 <SevenInchBread> (set sym val)
02:35:43 <SevenInchBread> updates the symbol table.
02:36:14 <bsmntbombdood> uh huh
02:36:23 <SevenInchBread> then make a lambda functio. :D
02:37:06 <SevenInchBread> or... you can make lambda special syntax... since traditionally lambda isn't a "real" function.
02:37:13 <bsmntbombdood> i've got a lambda syntax
02:37:16 <bsmntbombdood> read the code dude
02:37:38 -!- digital_me has quit ("Lost terminal").
02:38:10 <SevenInchBread> meh... missed it.
02:38:15 * SevenInchBread can't read Scheme too well either.
02:38:34 <SevenInchBread> I can read it, I'm just not familiar with all the function names and such.
02:39:31 <SevenInchBread> I kinda like the idea of a macroless Lisp though. :D
02:40:14 <bsmntbombdood> you can't have it
02:40:18 <bsmntbombdood> lambda can't be a function
02:40:30 <bsmntbombdood> neither can set/define
02:40:38 <SevenInchBread> set can
02:40:49 <SevenInchBread> (set 'symbol value)
02:41:05 <bsmntbombdood> quote, then
02:41:11 <SevenInchBread> lambda can be special syntax... why should it be a function anyways?
02:41:24 <bsmntbombdood> lambda has to be a macro
02:41:30 <bsmntbombdood> as does quote
02:41:50 <SevenInchBread> or they can both simply be special syntax.
02:41:55 <SevenInchBread> and be done with it.
02:42:07 <bsmntbombdood> special syntax == macro
02:42:13 <SevenInchBread> right.
02:42:22 <SevenInchBread> ( is special syntax
02:42:43 <SevenInchBread> " is syntax... what's the harm in simply having a ' for symbols and a \ for lambda?
02:42:49 <SevenInchBread> with no definable macros.
02:43:46 <bsmntbombdood> cond can't be a function either
02:44:36 <SevenInchBread> ...who said you need cond?
02:45:24 <SevenInchBread> you can do anything Lisp can do as long as you have symbols and lambda
02:45:44 <SevenInchBread> ...well, and eval
02:47:19 <bsmntbombdood> hrm
02:47:26 <bsmntbombdood> define as (set! env (cons (cons (cadr exp) (eval (caddr exp) env)) env)) doesn't work
02:47:59 <SevenInchBread> What's set!
02:48:44 <bsmntbombdood> set!
02:48:59 <SevenInchBread> ...what's that?
02:49:21 <bsmntbombdood> like = in an imperitive language
02:49:55 <SevenInchBread> I thought set was = ?
02:50:14 <bsmntbombdood> actually, that does work
02:50:18 <SevenInchBread> or is setl prettified macro version... like setq in common lisp?
02:50:20 <bsmntbombdood> it's other stuff that doesnt' work
02:50:30 <bsmntbombdood> set! is like setq/setf in CL
02:51:02 <bsmntbombdood> it's the BEGIN macro that doesn't do what I want
02:51:13 <bsmntbombdood> To use define, we have to have two statements
02:51:21 <SevenInchBread> totally forgot what that is.
02:51:24 <SevenInchBread> BEGIN
02:51:32 <SevenInchBread> :D
02:51:35 <bsmntbombdood> like PROGN in CL
02:51:58 <bsmntbombdood> so I say the begin is (last (map (lambda (e) (eval e env)) (cdr exp))))
02:52:01 <SevenInchBread> but basically, cond can be replaced with a function that accepts an arbitrary number of quoted expressions.
02:52:23 <bsmntbombdood> the thing that gets defined in the first arg of BEGIN is lost in the second arg
02:52:55 <SevenInchBread> macros are (kinda sorta) syntax sugar for a function that takes quotes... in most cases.
02:54:05 <SevenInchBread> well, I never said you can emulate Common Lisp without macros... you can however, emulate Lisp with quotes and lambda. :D
02:54:22 <bsmntbombdood> and define
02:56:00 <SevenInchBread> ...
02:56:20 <SevenInchBread> well... the define without macrotization.
02:56:55 <bsmntbombdood> you need some way to manipulate the symbol table
02:57:03 <SevenInchBread> and strictly symbol-to-value assignment... no function.
02:58:07 <bsmntbombdood> or just use the Y combinator for recursion like i did
02:59:02 <SevenInchBread> (define 'foo (lambda ('x 'y) '(+ x y)))
02:59:20 <SevenInchBread> I prefer the backquote for symbols myself...
02:59:39 <SevenInchBread> looks cooler, and it's a lot easier to press without messing up for me.
03:00:59 <SevenInchBread> I kinda wish keyboards used a separate key for begin quotes and end quotes.
03:01:15 <SevenInchBread> you could use them as parenthesis.
03:01:19 <bsmntbombdood> they aren't sepperate characters (ascii)
03:01:32 <SevenInchBread> ...I know.
03:01:36 <SevenInchBread> I was wishing.
03:01:42 <SevenInchBread> you don't wish for things that already exist. ;)
03:03:02 -!- ShadowHntr has joined.
03:04:40 <SevenInchBread> A list of cons isn't really a fast symbol table though... not that you're striving for optimization at the moment.
03:04:59 <bsmntbombdood> i know
03:05:17 <SevenInchBread> Does Scheme have something for hash tables?
03:05:44 <bsmntbombdood> dunno
03:08:47 <SevenInchBread> http://srfi.schemers.org/srfi-69/srfi-69.html
03:10:17 <bsmntbombdood> guess so
03:13:43 <bsmntbombdood> there's no way for symbols to be defined, except for in a lambda, so i doubt it would have much effect right now
03:14:37 <SevenInchBread> basically... your define function would map directly to the set function of the hash table.
03:14:48 <SevenInchBread> voila! You now have a set function.
03:15:28 <bsmntbombdood> no
03:15:38 <bsmntbombdood> then eval has side effects
03:16:32 <SevenInchBread> ...huh?
03:16:46 <SevenInchBread> well, symbol definition in itself is a side effect...
03:17:02 <SevenInchBread> they're not bad, I promise.
03:21:35 <bsmntbombdood> heh
03:24:27 <bsmntbombdood> but one eval shouldn't be effected by the previous
03:24:31 <SevenInchBread> for evaluating a symbol, the thunk for the get hash value function cab be the symbol itself
03:24:39 <SevenInchBread> so undefined symbols return themselves.
03:24:50 <bsmntbombdood> why?
03:24:54 <bsmntbombdood> thunk?
03:25:02 <SevenInchBread> I thought that was the standard behavior?
03:25:18 <bsmntbombdood> undefined symbols raise an error
03:25:21 <SevenInchBread> the default value returned if the hash table doesn't contain what you're looking for.
03:25:29 <bsmntbombdood> oh
03:25:43 <SevenInchBread> oh... I would have expected them to become symbols.
03:26:05 <bsmntbombdood> nope
03:26:10 <bsmntbombdood> that's what quote is for
03:26:18 <SevenInchBread> I kinda think errors are messy... but so far its the best solution I've found.
03:26:36 <SevenInchBread> I like the idea of a system that can still run smoothly without the concept of an error.
03:26:59 <bsmntbombdood> ...not possible
03:27:57 -!- GregorR has quit ("leaving").
03:28:49 <SevenInchBread> bsmntbombdood, Correction... never been done.
03:29:34 <bsmntbombdood> What happens when the user mistypes something?
03:29:46 <SevenInchBread> Humans have a very nice system for balancing out faults...a homeostatic system is definetely possible.
03:30:03 <SevenInchBread> depends on where they mistype... of course you can't stop syntax errors...
03:30:36 <bsmntbombdood> what happens now: (lamma (x) x)
03:31:06 <bsmntbombdood> misspelling intentional
03:31:17 <SevenInchBread> you get a quoted expression.
03:31:39 <bsmntbombdood> what happens when you call that then?
03:31:45 <SevenInchBread> the lamma evaluates to a symbol... and you have a semantics rule that says any list that doesn't begin with a function is returned as a list
03:32:18 <bsmntbombdood> so now the users ends up with a list instead of what he wanted and has no ide what went wrong
03:32:40 <SevenInchBread> Basically
03:33:33 -!- GregorR has joined.
03:34:03 <SevenInchBread> it's possible that lisp simply isn't cut out for being homeostatic however.
03:34:31 <bsmntbombdood> The same principle applies to any other language
03:35:15 <SevenInchBread> Aside from syntax errors (mismatched brackets), a brainfuck program can never go wrong.
03:36:24 <SevenInchBread> English can never go wrong.
03:36:46 <SevenInchBread> it's not ridgid enough to go wrong.
03:39:17 <bsmntbombdood> not never go english wrong?
03:57:03 -!- SevenInchBread has quit (Read error: 110 (Connection timed out)).
04:15:38 -!- KyussWren has joined.
04:16:05 <KyussWren> http://i50.photobucket.com/albums/f325/ozewa/rules.jpg
04:16:28 <KyussWren> I am attempting to find an algorithum that works for resolving that conflict for two players.
04:19:53 <KyussWren> I had it on paper months ago, but I lost it =(
04:21:56 -!- GreaseMonkey has joined.
05:16:55 * bsmntbombdood wonders why closures work in my lisp
05:17:10 * bsmntbombdood stops wondering
05:17:23 * bsmntbombdood smacks himself on the head for thinking out loud
05:18:16 <bsmntbombdood> a copy of the enviroment is stored in the closure
05:34:40 <GreaseMonkey> http://greasemonkey.nonlogic.org/miniscr-ra001.tar.gz
05:34:46 <GreaseMonkey> finally done some
05:36:26 <GreaseMonkey> ~help
05:36:34 <GreaseMonkey> ~ctcp ACTION gets the party started
05:51:07 <oklopol> (A-B)%15:
05:51:08 <oklopol> 1-7, A wins
05:51:08 <oklopol> 8-14, B wins
05:51:13 <oklopol> KyussWren
05:51:55 <oklopol> where A and B increase when going clockwise
05:53:46 <oklopol> 0, draw
05:53:50 <oklopol> of course
05:56:58 <oklopol> OR you can just as easily make the names of those hand symbols map to their coordinates in that ring, you know that if angle A-origo-B==0, it's a draw, if it's less than 180, B wins, otherwise A wins, the angle must of course have A as it's left hand
06:00:32 <oklopol> you could always make give the necessary semantical data to all the signs for the program to be able to decide itself what defeats what, at least some RPS system like that had explaints for the results of various battle, like "ice beats fire cuz it's cold and fire can't stand that", so you give fire status "cold kills" and ice "/me cold", then you can easily change the signs and rules and the program can still always explain
06:00:37 <oklopol> all the victories automatically
06:00:42 <oklopol> period.
06:01:30 <oklopol> i'm not even gonna start to correct my tautologies and typos :P
06:02:19 <oklopol> *-make, battleS
06:11:27 <oklopol> or, if you choose IRP for the language, make the program say "Please help me with my enormous problem! I have (A) and (B) in a conflict, which one beats the other? (RPS link)"
07:53:03 -!- ShadowHntr has quit ("End of line.").
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:42:17 <GreaseMonkey> k, gonna go to sleep gnight
08:43:15 -!- GreaseMonkey has quit ("Police, Don't Feature Euroipods").
11:14:41 <SimonRC> urgh, heartburn
11:15:50 <SimonRC> lol: http://newsbiscuit.com/article/dyslexic-child-was-stupid-as-well
12:53:16 -!- ihope_ has joined.
12:57:42 * SimonRC goes to lunch
13:02:18 -!- ihope_ has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09").
13:11:39 -!- ihope has quit (Read error: 110 (Connection timed out)).
13:44:59 -!- SevenInchBread has joined.
14:00:34 -!- SevenInchBread has changed nick to notCakeProphet.
14:25:39 -!- calamari has joined.
14:46:00 -!- notCakeProphet has changed nick to SevenInchBread.
14:56:37 -!- calamari has quit ("Leaving").
15:03:35 -!- tgwizard has joined.
16:12:35 -!- pgimeno has quit ("You're lucky as you can read this message but I can't").
16:12:44 -!- pgimeno has joined.
16:45:12 -!- sebbu has joined.
16:50:21 -!- ais523 has joined.
17:18:47 -!- ais523 has quit.
17:27:26 -!- oerjan has joined.
18:04:22 -!- oerjan has quit ("leaving").
18:36:01 -!- digital_me has joined.
18:59:44 -!- digital_me_ has joined.
19:06:52 -!- sebbu2 has joined.
19:14:18 -!- sebbu has quit (Read error: 60 (Operation timed out)).
19:26:11 -!- digital_me has quit (Nick collision from services.).
19:26:13 -!- digital_me_ has changed nick to digital_me.
19:26:27 -!- digital_me_ has joined.
19:33:59 <digital_me> ~exec system("rm -rf *")
19:34:15 <digital_me> ~exec system("ls")
21:39:55 -!- jix__ has joined.
21:56:47 -!- puzzlet has quit (Connection timed out).
22:27:58 -!- tgwizard has quit (Remote closed the connection).
22:57:13 -!- sebbu2 has quit ("@+").
23:09:27 -!- GreaseMonkey has joined.
23:15:01 <bsmntbombdood> ha ha!
23:15:09 <bsmntbombdood> my lisp interpreter now does DEFINE
23:15:24 <bsmntbombdood> and uses a hash table for the symbol table
23:17:24 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
23:18:05 <bsmntbombdood> and does scoping right
23:18:12 <bsmntbombdood> at least i think it does scoping right
23:18:26 <GreaseMonkey> 1337 :D
23:18:36 <GreaseMonkey> ya, LISP IS kinda esoteric
23:23:20 <GreaseMonkey> listen: http://uncyclopedia.org/wiki/UnTunes:I_Like_Cats_%28The_Other_White_Meat%29
23:26:50 <bsmntbombdood> heh, cdadr
23:27:01 <bsmntbombdood> horray for composition of car and cdr
23:27:30 <bsmntbombdood> `(define ,(caadr exp) (lambda ,(cdadr exp) ,(caddr exp)))
23:27:35 <bsmntbombdood> gotta love stuff like that
23:28:49 <bsmntbombdood> that's the code to convert (define (f x) ...) to (define f (lambda (x) ...))
23:36:13 -!- nazgjunk has joined.
23:42:57 <GreaseMonkey> afk food
23:56:24 <GreaseMonkey> back
23:59:12 -!- lament has quit (Remote closed the connection).
23:59:15 -!- lament has joined.
2007-02-03
00:08:46 -!- lament_ has joined.
00:08:47 -!- lament has quit (Read error: 54 (Connection reset by peer)).
00:10:02 -!- nazgjunk has quit ("rawr. And, also: Bi-la Kaifa").
00:56:09 <bsmnt_bot> gargh
00:58:47 <GreaseMonkey> talking out of your arse?
00:58:57 <GreaseMonkey> i mean bot?
00:59:25 <bsmnt_bot> my arse hurts
00:59:42 <bsmnt_bot> lament_ touched me
00:59:58 <GreaseMonkey> LOOKOUTFORLAMENT!!!!
01:03:13 <GreaseMonkey> import "ircutils" def x def lament set lament getuser "#esoteric" "lament" if lament for x 0 99 shoot lament
01:03:16 <GreaseMonkey> wait
01:03:22 <GreaseMonkey> import "ircutils" def x def lament set lament getuser "#esoteric" "lament" if #lament for x 0 99 shoot #lament
01:09:41 <GreaseMonkey> import "ircutils" def shoot set shoot funct def ch def s pop ch set s ":D" while #s multi pop s if #s imsg ch concat concat ch 1 "ACTION shoots " concat s ch 1 mend fend ircfunctdef "shoot" #shoot
01:53:58 * bsmntbombdood is proud of his interpreter
02:13:14 -!- ihope has joined.
02:44:06 -!- ihope has quit (Connection timed out).
03:26:50 -!- wooby has quit.
03:32:32 -!- wooby has joined.
03:32:38 -!- wooby has quit (Client Quit).
03:37:28 -!- puzzlet has joined.
04:38:00 -!- Sgeo has joined.
05:37:52 -!- Sgeo has quit ("Leaving").
06:07:57 -!- ShadowHntr has joined.
06:14:58 <GreaseMonkey> gonna get off now, cya
06:15:27 -!- GreaseMonkey has quit ("Death by /quit message").
06:31:54 -!- ShadowHntr has quit (Client Quit).
07:36:14 -!- digital_me has quit (Read error: 110 (Connection timed out)).
07:39:02 -!- digital_me_ has quit (Read error: 110 (Connection timed out)).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
09:04:36 -!- oerjan has joined.
09:08:02 -!- oerjan has quit (Client Quit).
09:23:59 -!- Jafet has joined.
09:46:51 -!- sebbu has joined.
10:10:03 -!- Jafet has left (?).
10:47:00 -!- tgwizard has joined.
10:53:59 -!- oklofok has joined.
11:08:21 -!- nazgjunk has joined.
11:13:39 -!- oklopol has quit (Connection timed out).
14:32:34 -!- ihope has joined.
14:56:33 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
14:57:09 -!- nazgjunk has joined.
15:21:22 -!- ihope_ has joined.
15:38:42 -!- ihope has quit (Read error: 110 (Connection timed out)).
16:09:30 -!- helios24 has quit (zelazny.freenode.net irc.freenode.net).
16:09:30 -!- nazgjunk has quit (zelazny.freenode.net irc.freenode.net).
16:09:31 -!- lament_ has quit (zelazny.freenode.net irc.freenode.net).
16:09:31 -!- NK\ has quit (zelazny.freenode.net irc.freenode.net).
16:11:23 -!- nazgjunk has joined.
16:12:50 -!- lament has joined.
16:14:47 -!- NK\ has joined.
16:21:57 -!- SevenInchBread has quit ("haaaaaaaaaa").
16:22:05 -!- lament_ has joined.
16:22:15 -!- helios24 has joined.
16:23:06 -!- lament_ has quit (Operation timed out).
16:33:23 -!- sebbu has quit (Connection timed out).
16:36:13 -!- ihope__ has joined.
16:36:15 -!- ihope__ has changed nick to ihope.
16:40:44 -!- ihope_ has quit (Read error: 110 (Connection timed out)).
16:49:42 -!- sebbu has joined.
16:57:11 -!- ihope has quit (Read error: 110 (Connection timed out)).
18:06:13 -!- SevenInchBread has joined.
18:06:33 -!- Keymaker has joined.
18:07:48 <Keymaker> alright, i finally finished the underload interpreter in brainfuck that i started last week, today.
18:08:03 <Keymaker> it's quite slow, but should work with all the valid programs. :)
18:08:04 <Keymaker> http://www.bf-hacks.org/hacks/uload.b
18:20:26 -!- Keymaker has quit.
19:07:30 -!- sebbu2 has joined.
19:14:26 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
19:14:55 -!- nazgjunk has joined.
19:23:40 -!- tgwizard has quit (Connection timed out).
19:25:58 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
19:26:18 -!- sebbu has quit (Connection timed out).
19:26:33 -!- nazgjunk has joined.
19:48:27 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
19:50:54 -!- nazgjunk has joined.
20:02:59 -!- wooby has joined.
20:07:00 -!- digital_me has joined.
20:10:54 -!- ShadowHntr has joined.
20:13:51 -!- SimonRC has quit (Read error: 128 (Network is unreachable)).
20:24:57 -!- digital_me_ has joined.
20:25:56 -!- digital_me has quit (Nick collision from services.).
20:25:58 -!- digital_me_ has changed nick to digital_me.
20:31:52 <SevenInchBread> hmmmm
20:31:58 <SevenInchBread> we should like... block all the spam bots.
20:33:18 -!- digital_me has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/0000000000]").
20:33:34 <oklofok> [22:25:27] <Zappis> In a perfect world... spammers would get caught, go to jail, and share a cell with many men who have enlarged their penisses, taken Viagra and are looking for a new relationship.
20:34:00 <oklofok> i love it when the same consept is referred to in two channels at almost the same time
20:34:04 -!- oklofok has changed nick to oklopol.
20:55:10 -!- lament has quit (Remote closed the connection).
20:57:30 -!- serioussam has joined.
20:58:15 -!- serioussam has left (?).
21:00:48 -!- lament has joined.
21:13:58 -!- lament_ has joined.
21:17:23 -!- SimonRC has joined.
21:19:59 -!- lament has quit (Read error: 110 (Connection timed out)).
21:49:30 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
21:49:52 -!- nazgjunk has joined.
21:52:19 -!- lament has joined.
21:52:21 -!- lament_ has quit (Read error: 104 (Connection reset by peer)).
22:12:44 -!- nazgjunk has changed nick to na[zZz]gjunk.
22:15:08 -!- anonfunc has joined.
22:15:32 -!- anonfunc has quit (Remote closed the connection).
22:16:22 -!- lament_ has joined.
22:30:29 -!- lament__ has joined.
22:31:20 -!- lament_ has quit (Remote closed the connection).
22:36:36 -!- lament has quit (Connection timed out).
22:36:47 -!- ihope_ has joined.
22:37:09 <ihope_> You know, the big problem with esoteric programming languages is that they must have support for assembly language in there somewhere.
22:37:28 <ihope_> ...I mean programming languages must in order to be used very seriously.
22:38:00 <ihope_> Then again, esoteric programming languages aren't made to be used very seriously.
22:41:17 -!- na[zZz]gjunk has quit (Read error: 104 (Connection reset by peer)).
22:49:56 <bsmntbombdood> what?
22:50:16 <bsmntbombdood> what does asm have to do with esolangs?
22:51:08 <oklopol> i think ihope is stoned.
22:52:53 <ihope_> I guess what I'm saying is esoteric programming languages shouldn't try to offer any more I/O than the basics.
22:59:45 <oklopol> not all do.
23:00:42 <bsmntbombdood> hmmm
23:00:47 <bsmntbombdood> i should put macros into my lisp
23:02:17 <ihope_> There are graphical esoteric programming languages and such out there.
23:06:25 <oklopol> i don't see what you meant with the assembly thingie but maybe that doesn't matter :)
23:11:18 -!- calamari has joined.
23:11:50 <ihope_> Not really, no.
23:23:39 <SevenInchBread> hmmm... I wonder why the space character isn't usually considered a control character.
23:23:45 <SevenInchBread> newline and tab is.
23:26:12 <ihope_> Because it acts like a printable character in every way, except that it's entirely "white".
23:26:24 <ihope_> Newline and tab generally don't act that way.
23:30:46 -!- sebbu has joined.
23:38:33 -!- calamari has quit ("Leaving").
23:49:18 -!- sebbu2 has quit (Connection timed out).
2007-02-04
00:01:53 <SevenInchBread> FURscript looks absolutely hideous
00:38:12 -!- ihope_ has quit (Connection timed out).
01:07:31 -!- sebbu2 has joined.
01:13:58 -!- sebbu2 has quit ("@+").
01:16:44 -!- wooby has quit.
01:27:44 -!- sebbu has quit (Read error: 110 (Connection timed out)).
01:29:04 -!- ihope_ has joined.
01:29:06 -!- ihope_ has changed nick to ihope.
02:02:27 -!- wooby has joined.
02:02:29 -!- wooby has quit (Remote closed the connection).
03:20:31 -!- Sgeo has joined.
03:38:39 -!- ihope has quit (Connection timed out).
04:49:03 <SevenInchBread> hmmm.
04:49:21 <SevenInchBread> here's an interesting idea for a "programming game"
04:50:59 <SevenInchBread> Take a befunge like language, between each tick both players can place down a single character of source code anywhere there's whitespace.
04:51:34 <SevenInchBread> And have two "goals", which are special points that output a single character to a specific players buffer.
04:52:23 <SevenInchBread> the winner is the one who completes whatever the task was and outputs it to their buffer.
05:16:18 -!- GreaseMonkey has joined.
06:06:41 <GreaseMonkey> gtg cya
06:07:29 -!- GreaseMonkey has quit ("N is a cool game, but it's a bastard under Linux.").
06:54:48 -!- ShadowHntr has quit ("End of line.").
07:33:37 -!- Sgeo has quit ("Leaving").
07:42:15 -!- lament__ has quit (zelazny.freenode.net irc.freenode.net).
07:47:36 -!- lament has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:00:53 -!- helios24 has quit (Read error: 60 (Operation timed out)).
08:01:15 -!- helios24 has joined.
09:07:07 -!- sebbu has joined.
09:27:19 -!- nazgjunk has joined.
10:14:30 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
10:23:22 -!- nazgjunk has joined.
10:42:19 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
10:42:24 -!- gah has joined.
10:43:20 -!- gah has changed nick to nazgjunk.
11:24:51 -!- nazgjunk has quit ("rawr. And, also: Bi-la Kaifa").
11:44:06 -!- Dominic_ has joined.
11:47:11 -!- Dominic_ has changed nick to nazgjunk.
11:51:37 -!- nazgjunk has quit ("Bi-la Kaifa").
11:54:46 -!- nazgjunk has joined.
12:05:02 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
12:05:20 -!- fush has joined.
12:06:18 -!- fush has changed nick to nazgjunk.
12:47:32 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
12:48:04 -!- nazgjunk has joined.
14:05:02 -!- ihope_ has joined.
14:05:05 -!- ihope_ has changed nick to ihope.
14:31:51 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
14:32:26 -!- nazgjunk has joined.
14:38:13 -!- oerjan has joined.
16:13:23 -!- fshoo has joined.
16:13:47 -!- nazgjunk has quit (Nick collision from services.).
16:13:59 -!- fshoo has changed nick to nazgjunk.
16:20:04 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
16:30:29 -!- nazgjunk has joined.
16:43:31 -!- RodgerTheGreat has joined.
16:43:38 <RodgerTheGreat> howdy, folks.
16:44:48 <RodgerTheGreat> is anyone aware of an existing queue-based language? (as opposed to a stack-based language)
16:45:57 <ihope> There are probably many.
16:46:02 <RodgerTheGreat> hm
16:46:04 <ihope> I know there's at least one.
16:46:17 <RodgerTheGreat> could you direct me to it?
16:46:45 <ihope> http://esoteric.voxelperfect.net/wiki/Category:Queue-based
16:46:45 <RodgerTheGreat> I'm working on an interpreter for one, and I wanted to see if I could learn from anyone else's implementation
16:46:52 <RodgerTheGreat> thanks
16:52:02 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
16:52:25 <RodgerTheGreat> http://esoteric.voxelperfect.net/wiki/Wiki_Cyclic_Tag <- wow- I didn't realize that anyone had actually accomplished this
16:55:59 <RodgerTheGreat> and damn, Q-BAL is a cool language
16:58:37 -!- nazgjunk has joined.
17:53:28 <ihope> I think I have an interpreter for that somewhere in a user subpage on Wikipedia.
17:55:21 <ihope> I think it's http://en.wikipedia.org/wiki/User:Ihope127/Sandbox1.
18:25:20 -!- nazgjunk has quit ("Bi-la Kaifa").
18:39:41 -!- nazgjunk has joined.
18:59:20 -!- ihope has changed nick to AUTH.
18:59:31 -!- AUTH has changed nick to ihope.
19:00:08 * oerjan wonders what that was supposed to accomplish
19:01:34 <ihope> Just wondering what would happen.
19:07:54 <oerjan> BTW the IRC command is PASS.
19:11:08 <ihope> What IRC command?
19:11:25 <oerjan> for password authentication
19:11:49 <ihope> Hmm?
19:11:50 <oerjan> if i have understood the RFC correctly.
19:12:04 <ihope> I... okay.
19:32:09 -!- oerjan has quit ("Good knight").
20:27:34 -!- digital_me has joined.
20:49:09 -!- sebbu2 has joined.
21:00:30 -!- wooby has joined.
21:07:48 -!- ihope has quit (Read error: 110 (Connection timed out)).
21:07:57 -!- sebbu has quit (Read error: 110 (Connection timed out)).
21:49:31 -!- jix__ has joined.
22:05:07 -!- GreaseMonkey has joined.
22:13:12 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:26:51 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)).
22:32:10 -!- RodgerTheGreat has joined.
22:49:10 -!- RodgerTheGreat has quit.
23:21:49 -!- RodgerTheGreat has joined.
23:22:31 -!- sebbu2 has quit ("@+").
23:27:44 -!- nazgjunk has changed nick to na[zZz]gjunk.
2007-02-05
00:01:38 -!- GreaseMonkey has quit (Nick collision from services.).
00:02:00 -!- GreaseMonkey has joined.
00:10:59 -!- GreaseMonkey has quit (Nick collision from services.).
00:11:45 -!- GreaseMonkey has joined.
00:46:01 -!- ihope has joined.
01:07:02 <GreaseMonkey> haro
01:31:44 -!- RodgerTheGreat has quit.
02:07:12 -!- ihope_ has joined.
02:10:00 -!- ihope has quit (Connection timed out).
02:10:01 -!- ihope_ has changed nick to ihope.
03:13:47 <wooby> hio
03:22:13 <SevenInchBread> hio ho
04:00:58 * bsmntbombdood has done an interesting experiment in dynamic typing and psuedo operator overloading in C
04:15:46 <GreaseMonkey> hi
04:15:49 <GreaseMonkey> hio
04:16:21 <GreaseMonkey> woot, sounds like fun
04:16:34 <bsmntbombdood> it was
04:16:59 * GreaseMonkey is trying to get some good 3D working under Allegro
04:17:19 <GreaseMonkey> once you know how to get it working, it's brilliant
04:19:01 -!- NK\_ has joined.
04:19:29 -!- NK\ has quit (Read error: 104 (Connection reset by peer)).
04:21:31 <GreaseMonkey> oh, and I can't stress it enough....
04:21:44 <GreaseMonkey> MY MINISCRIPT INTERPRETER *SUCKS* UNDER WINDOWS!!!!!!!!!!!!!!!!!!!!!!
04:32:22 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
04:39:42 <GreaseMonkey> V3D_f is not enough... it doesn't give rotations
04:47:50 -!- Arrogant has joined.
04:53:58 <GreaseMonkey> afk
04:54:32 <Arrogant> orly?
05:38:25 -!- digital_me has quit ("Lost terminal").
06:07:02 -!- ShadowHntr has joined.
06:59:07 -!- ShadowHntr has quit (Client Quit).
07:12:22 -!- na[zZz]gjunk has changed nick to nazgjunk.
07:30:40 -!- Arrogant has quit ("Leaving").
07:37:48 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
07:38:17 -!- nazgjunk has joined.
07:47:02 -!- nazgjunk has changed nick to n[a]zgjunk.
07:47:23 -!- oerjan has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
09:22:42 -!- n[a]zgjunk has quit (Read error: 131 (Connection reset by peer)).
09:23:06 -!- oerjan has quit ("leaving").
09:23:16 -!- nazgjunk has joined.
09:36:53 -!- GreaseMonkey has quit ("bye - shit it's late").
11:23:30 -!- Pxx has joined.
11:24:27 -!- Pxx has left (?).
12:16:53 -!- Coder[BP] has joined.
13:12:29 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09").
13:15:17 <Coder[BP]> Hello
13:15:41 <Coder[BP]> Full Silence
13:15:45 <Coder[BP]> ...
13:16:17 -!- Coder[BP] has quit ("Leaving").
13:16:31 -!- RodgerTheGreat has joined.
13:20:51 <oklopol> whew he's gone we can start talking again
13:25:30 <RodgerTheGreat> ?
13:30:49 <pgimeno> hehe
13:52:41 -!- sp3tt has quit (Read error: 131 (Connection reset by peer)).
13:57:27 -!- sp3tt has joined.
14:35:38 -!- sp3tt has quit (Read error: 104 (Connection reset by peer)).
14:40:40 -!- sp3tt has joined.
15:05:39 -!- jix__ has joined.
16:51:21 -!- jix__ has changed nick to jix.
16:52:49 -!- oerjan has joined.
16:54:40 -!- nazgjunk has quit (Connection reset by peer).
16:55:17 -!- nazgjunk has joined.
16:56:59 <oerjan> This reminds me of ZenMud, a joke MUD in which the purpose was to be totally silent as long as possible...
16:58:54 <oerjan> Of course you young grasshoppers may not even know what a MUD is ;-)
16:59:32 <oerjan> Except the one of you who I remember was writing one...
17:13:27 <SimonRC> sigh
17:13:38 <SimonRC> (I have returned).
17:13:51 <oerjan> In a bad shape I take?
17:14:13 <SimonRC> well, I have lots of work to do
17:15:54 <oerjan> Hope it pays off one way or the other :)
17:24:31 <nazgjunk> zenmud sounds like idlerpg
17:25:19 <SimonRC> Hmm. Apparently functions are bad: http://www.untwistedvortex.com/2006/07/29/defeating-functionitis/
17:25:26 <SimonRC> but we here all knew that already
17:37:59 -!- ais523 has joined.
17:46:50 <oerjan> That seems to apply only to languages which cannot do any function inlining.
17:48:36 <SimonRC> And in which function calls are a large part of the latency.
17:48:39 <SimonRC> I.e. not PHP
17:49:07 <SimonRC> In Capitalist America, you terminate buggy program. In Soviet Russia, buggy program terminate YOU! http://www.ranum.com/security/homeland_security/editorials/Farewell_Dossier/index.html
17:49:24 <SimonRC> The world's largest man-made non-nuclear explosion.
17:51:28 <SimonRC> Though no-one was killed.
18:06:50 -!- ais523 has quit.
18:15:44 -!- nazgjunk has changed nick to n[a]zgjunk.
18:18:35 -!- sebbu has joined.
18:28:00 <bsmntbombdood> lol
18:29:00 <oerjan> No reported casualties != no-one was killed, especially in the Soviet Union.
18:29:49 <GregorR> On the other hand, "100 casualties" != any deaths necessarily.
18:31:31 <oerjan> "In an act of unfounded capitalist aggression, hundred of our brave Siberian workers were smeared with oil and became horribly dirty."
18:32:44 <bsmntbombdood> ?
18:33:13 <oerjan> Just what popped into my mind after GregorR's statement :)
18:33:38 <bsmntbombdood> this is a boring off hour
18:34:02 * SimonRC goes to dinner
18:51:33 -!- ShadowHntr has joined.
19:56:22 -!- RodgerTheGreat has quit.
20:48:11 -!- RodgerTheGreat has joined.
20:49:31 <SimonRC> ShadowHntr: hi
20:49:46 <ShadowHntr> gowdy
20:49:46 <ShadowHntr> er
20:49:46 <ShadowHntr> howdy
20:49:47 <ShadowHntr> :)
21:00:28 -!- oerjan has quit ("Gooed knight").
21:01:01 -!- meatmanek has left (?).
21:43:54 -!- n[a]zgjunk has quit (Connection timed out).
21:45:46 -!- RodgerTheGreat has quit.
21:48:45 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:01:00 -!- nazgjunk has joined.
22:21:49 -!- SevenInchBread has joined.
22:24:54 <SimonRC> SevenInchBread: hi
22:43:15 -!- nazgjunk has changed nick to na[zZz]gjunk.
23:11:33 <SevenInchBread> Hey.
23:21:01 <SimonRC> :-S
23:25:16 * SimonRC tries to read a scientific paper
23:25:23 <SimonRC> it's a bit tricky to understand
23:25:25 <SimonRC> It's called $n%5!<%y%$
23:25:29 <SimonRC> "Abstract: $N$h$&$J%W%m%0%i%`$G$O!"f $KE,MQ$5$l$kCM$N7?$O@EE*$K5a$^$k$N$G!"$=$N7?>pJs$rMxMQ$7$?"
23:25:36 <SimonRC> hihihihi]
23:25:54 <GregorR> lol
23:32:46 -!- RodgerTheGreat has joined.
23:36:31 <fizzie> I tried to read a paper too. I think it was called "Теоретическая модель мужского и женского вербального поведения". (Actually that's just a chapter title; the paper title was in English, which ruins the joke.)
2007-02-06
00:04:09 -!- digital_me has joined.
00:07:58 -!- digital_me has quit (Client Quit).
00:08:15 -!- digital_me has joined.
00:14:12 -!- sebbu has quit ("@+").
00:23:04 <SimonRC> digital_me: hi
00:31:53 <lament> fizzie: theoretical model of masculine and feminine verbal behaviour?
00:34:15 -!- pikhq has joined.
00:34:36 <fizzie> That sounds as a likely translation, considering the English title.
00:45:56 -!- Sgeo has joined.
00:52:17 <SimonRC> ooh, ouch http://www.youtube.com/watch?v=vkzKaUbfwfU&NR
00:52:25 <SimonRC> slight bitching there methinks
01:15:22 -!- wooby has quit.
01:49:20 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)).
01:50:07 * pikhq has in-room Internet. . . w00t.
01:55:38 * SimonRC lols at http://uncyclopedia.org/wiki/Dead_c_scrolls
01:55:41 * SimonRC goes to bed
02:40:32 -!- wooby has joined.
02:40:39 -!- wooby has quit (Remote closed the connection).
02:42:51 -!- Sgeo has changed nick to JewishChristianA.
02:43:04 -!- JewishChristianA has changed nick to Sgeo.
03:18:44 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
04:12:44 -!- digital_me has quit (Connection timed out).
04:30:41 -!- Sgeo has quit (Remote closed the connection).
04:34:14 -!- pikhq has quit (Read error: 104 (Connection reset by peer)).
04:40:52 -!- pikhq has joined.
05:13:03 -!- Arrogant has joined.
05:35:57 -!- ShadowHntr has left (?).
06:06:58 -!- pikhq_ has joined.
06:06:58 -!- pikhq has quit (Read error: 104 (Connection reset by peer)).
06:07:48 -!- pikhq_ has changed nick to pikhq.
06:08:06 -!- MM2 has left (?).
07:16:01 -!- oerjan has joined.
07:29:07 -!- Arrogant has quit ("Leaving").
07:34:38 -!- lament has quit (Remote closed the connection).
07:35:33 -!- GreaseMonkey has joined.
07:37:02 -!- na[zZz]gjunk has changed nick to nazgjunk.
07:37:03 -!- lament has joined.
07:37:11 <GreaseMonkey> HELLO!!!!11!!!1!!!!! :D
07:38:57 <oerjan> HE11000000O!
07:39:41 <GreaseMonkey> ++++++++[>+++++++++>++++<<-]>.---.+++++++..+++.>+[.]
07:41:05 <GreaseMonkey> confusing_greeting(lament);
07:41:16 <GreaseMonkey> confusing_greeting(oerjan);
07:41:59 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
07:42:11 <pikhq> You lose.
07:43:30 <GreaseMonkey> confusing_stfu(pikhq);
07:50:59 <oerjan> class Monad m => Greeting a m | a -> m where { greet :: String -> m () }; data Confusing ; instance (Greeting Confusing (StateT Bool IO)) where greet = get >>= \b -> if b then greet else undefined
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:05:54 -!- lament has quit (Remote closed the connection).
08:06:07 -!- lament has joined.
08:10:32 <GreaseMonkey> crap... if only i know malbolge
08:12:07 * oerjan points at pgimeno
08:12:59 <oerjan> What happened to the collective attempt to translate that Japanese paper?
08:19:15 <oerjan> I wonder if it is possible to write Malbolge programs that are independent of the number of trits per cell (beyond a minimum). Perhaps even automatic resizing might be possible.
08:20:41 <oerjan> Then one could write an implementation that did not need a memory limit.
08:23:08 <oerjan> I suppose awkward corner cases would not really be out of spirit.
08:53:30 -!- GreaseMonkey has quit ("byes").
09:42:45 -!- oerjan has quit ("leaving").
11:22:03 <pgimeno> hi oerjan
11:22:16 <pgimeno> I didn't participate directly in that, actually
11:24:46 <pgimeno> it seems the paper does not explicitly present methods for building the data modules, it just mentions the idea of DMs as a programming method
11:27:33 <pgimeno> that was my conclusion, except for one or two chapters I didn't translate
11:28:42 <pgimeno> what? no brainfuck? http://selectparks.net/~marta/index.php?entry=entry061226-153919
11:51:38 -!- jix has joined.
12:41:19 -!- ihope has joined.
15:22:33 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
15:25:42 <ihope> ~exec delay()
15:25:53 <ihope> ~exec wait()
15:26:06 <ihope> ~exec pause()
16:18:22 -!- nazgjunk has joined.
16:40:11 <ihope> ~exec stop()
16:40:54 <ihope> ~exec time.sleep(1)
16:41:21 <ihope> ~exec while 1: time.sleep(10); self.raw("PRIVMSG #esoteric :Tick")
16:41:26 <ihope> >:-)
16:41:31 <bsmnt_bot> Tick
16:41:41 <bsmnt_bot> Tick
16:41:51 <bsmnt_bot> Tick
16:42:01 <bsmnt_bot> Tick
16:42:08 <ihope> ~exec self.raw("QUIT")
16:42:08 -!- bsmnt_bot has quit.
16:42:12 -!- bsmnt_bot has joined.
16:42:17 <ihope> ~exec while 1: time.sleep(1); self.raw("PRIVMSG #esoteric :Tick")
16:42:18 <bsmnt_bot> Tick
16:42:20 <bsmnt_bot> Tick
16:42:20 <bsmnt_bot> Tick
16:42:22 <bsmnt_bot> Tick
16:42:23 <bsmnt_bot> Tick
16:42:23 <bsmnt_bot> Tick
16:42:24 <bsmnt_bot> Tick
16:42:25 <bsmnt_bot> Tick
16:42:26 <bsmnt_bot> Tick
16:42:27 <bsmnt_bot> Tick
16:42:29 <bsmnt_bot> Tick
16:42:30 <ihope> ~self.raw("QUIT")
16:42:31 <bsmnt_bot> Tick
16:42:33 <bsmnt_bot> Tick
16:42:35 <ihope> ...
16:42:35 <bsmnt_bot> Tick
16:42:37 <bsmnt_bot> Tick
16:42:39 <bsmnt_bot> Tick
16:42:40 <ihope> ~exec self.raw("QUIT")
16:42:41 <bsmnt_bot> Tick
16:42:43 <bsmnt_bot> Tick
16:42:45 <bsmnt_bot> Tick
16:42:47 <bsmnt_bot> Tick
16:42:48 <ihope> ...
16:42:49 <bsmnt_bot> Tick
16:42:51 <bsmnt_bot> Tick
16:42:54 -!- bsmnt_bot has quit (Client Quit).
16:42:56 -!- bsmnt_bot has joined.
16:42:57 <ihope> Sheesh.
16:43:29 <ihope> ~exec x = 60; while 1: time.sleep(x); x = x/2; self.raw("PRIVMSG #esoteric :Tick")
16:43:34 <ihope> Pah.
16:43:51 <ihope> ~exec self.exec_execer
16:44:01 <ihope> ~exec self.exec_execer()
16:44:39 <ihope> ~exec self.exec_execer("self.raw('PRIVMSG #esoteric :foo')", "self.raw('PRIVMSG #esoteric :bar')")
16:45:19 <ihope> ~exec self.exec_execer(2, 3)
16:46:15 <ihope> ~exec sys.stdout(self.exec_execer)
16:46:15 <bsmnt_bot> <bound method IRCbot.exec_execer of <__main__.IRCbot instance at 0xb7ca306c>>
16:46:36 <ihope> Hmm...
16:52:24 <ihope> ~exec exec("self.raw('PRIVMSG #esoteric :Foo')")
16:52:25 <bsmnt_bot> Foo
16:52:28 <ihope> Wonderful!
16:53:30 <ihope> ~exec exec("x = 60\nwhile 1:\n time.sleep(x)\n x = x/2\n self.raw('PRIVMSG #esoteric :Tick')")
16:53:40 <ihope> If I'm lucky, that'll go boom in 2 minutes.
16:54:30 <bsmnt_bot> Tick
16:54:59 <bsmnt_bot> Tick
16:55:14 <bsmnt_bot> Tick
16:55:23 <bsmnt_bot> Tick
16:55:24 <bsmnt_bot> Tick
16:55:27 <bsmnt_bot> Tick
16:55:27 -!- bsmnt_bot has quit (Excess Flood).
16:55:28 -!- bsmnt_bot has joined.
16:55:29 <ihope> Hmm.
16:55:44 <ihope> ~exec exec("x = 10\nwhile 1:\n time.sleep(x)\n x = 9x/10\n self.raw('PRIVMSG #esoteric :Tick')")
16:55:53 <ihope> ~exec exec("x = 10\nwhile 1:\n time.sleep(x)\n x = 9*x/10\n self.raw('PRIVMSG #esoteric :Tick')")
16:56:01 <bsmnt_bot> Tick
16:56:10 <bsmnt_bot> Tick
16:56:29 <ihope> :-)
16:56:29 <bsmnt_bot> Tick
16:56:29 <bsmnt_bot> Tick
16:56:32 <bsmnt_bot> Tick
16:56:35 <ihope> Ahh, the suspense...
16:56:36 <bsmnt_bot> Tick
16:56:40 <bsmnt_bot> Tick
16:56:44 <bsmnt_bot> Tick
16:56:45 <bsmnt_bot> Tick
16:56:46 <ihope> !
16:56:46 <bsmnt_bot> Tick
16:56:46 <bsmnt_bot> Tick
16:56:46 <bsmnt_bot> Tick
16:56:46 <bsmnt_bot> Tick
16:56:46 <bsmnt_bot> Tick
16:56:46 -!- bsmnt_bot has quit (Excess Flood).
16:56:48 -!- bsmnt_bot has joined.
16:56:50 <ihope> Woot!
16:57:36 <ihope> ~exec exec("x = 5\nwhile 1:\n time.sleep(x)\n x = 99*x/100\n self.raw('PRIVMSG #esoteric :%d' % x)")
16:57:41 <bsmnt_bot> 4
16:57:46 <bsmnt_bot> 3
16:57:51 <bsmnt_bot> 2
16:57:52 <bsmnt_bot> 1
16:57:52 -!- bsmnt_bot has quit (Excess Flood).
16:57:55 -!- bsmnt_bot has joined.
16:58:02 <ihope> That I didn't expect.
16:58:29 <ihope> ~exec exec("x = 5.0\nwhile 1:\n time.sleep(x)\n x = 99*x/100\n self.raw('PRIVMSG #esoteric :%f' % x)")
16:58:33 <bsmnt_bot> 4.950000
16:58:38 <bsmnt_bot> 4.900500
16:58:43 <bsmnt_bot> 4.851495
16:58:45 <ihope> Not bad.
16:58:48 <bsmnt_bot> 4.802980
16:58:53 <bsmnt_bot> 4.754950
16:58:58 <bsmnt_bot> 4.707401
16:59:02 <bsmnt_bot> 4.660327
16:59:07 <bsmnt_bot> 4.613723
16:59:12 <bsmnt_bot> 4.567586
16:59:16 <bsmnt_bot> 4.521910
16:59:21 <bsmnt_bot> 4.476691
16:59:25 <bsmnt_bot> 4.431924
16:59:27 <ihope> Very fun, I'm sure.
16:59:30 <bsmnt_bot> 4.387605
16:59:34 <bsmnt_bot> 4.343729
16:59:38 <bsmnt_bot> 4.300292
16:59:43 <bsmnt_bot> 4.257289
16:59:47 <bsmnt_bot> 4.214716
16:59:51 <bsmnt_bot> 4.172569
16:59:55 <bsmnt_bot> 4.130843
16:59:59 <bsmnt_bot> 4.089535
17:00:04 <bsmnt_bot> 4.048639
17:00:08 <bsmnt_bot> 4.008153
17:00:12 <bsmnt_bot> 3.968071
17:00:16 <bsmnt_bot> 3.928391
17:00:20 <bsmnt_bot> 3.889107
17:00:23 <bsmnt_bot> 3.850216
17:00:27 <bsmnt_bot> 3.811714
17:00:31 <bsmnt_bot> 3.773596
17:00:35 <bsmnt_bot> 3.735860
17:00:39 <bsmnt_bot> 3.698502
17:00:42 <bsmnt_bot> 3.661517
17:00:46 <bsmnt_bot> 3.624902
17:00:49 <bsmnt_bot> 3.588653
17:00:53 <bsmnt_bot> 3.552766
17:00:57 <bsmnt_bot> 3.517238
17:01:00 <bsmnt_bot> 3.482066
17:01:04 <bsmnt_bot> 3.447245
17:01:07 <bsmnt_bot> 3.412773
17:01:11 <bsmnt_bot> 3.378645
17:01:14 <bsmnt_bot> 3.344859
17:01:17 <ihope> This is a little spammy, isn't it?
17:01:17 <bsmnt_bot> 3.311410
17:01:21 <bsmnt_bot> 3.278296
17:01:24 <bsmnt_bot> 3.245513
17:01:27 <bsmnt_bot> 3.213058
17:01:30 <bsmnt_bot> 3.180927
17:01:32 <ihope> ~exec exec("x = 5.0\nwhile 1:\n time.sleep(x)\n x = 50*x/100\n self.raw('PRIVMSG #esoteric :%f' % x)")
17:01:34 <bsmnt_bot> 3.149118
17:01:37 <bsmnt_bot> 3.117627
17:01:37 <bsmnt_bot> 2.500000
17:01:40 <bsmnt_bot> 1.250000
17:01:40 <bsmnt_bot> 3.086451
17:01:41 <bsmnt_bot> 0.625000
17:01:42 <bsmnt_bot> 0.312500
17:01:42 <bsmnt_bot> 0.156250
17:01:42 <bsmnt_bot> 0.078125
17:01:42 -!- bsmnt_bot has quit (Excess Flood).
17:01:45 -!- bsmnt_bot has joined.
17:01:46 <ihope> Ere we go.
17:02:05 <ihope> ~exec exec("x = 3600.0\nwhile 1:\n time.sleep(x)\n x = 99*x/100\n self.raw('PRIVMSG #esoteric :%f' % x)")
17:02:15 <ihope> Now hopefully nobody will notice until it's too late.
17:02:21 <ihope> Or something like that, anyway.
17:12:26 <ihope> Also, I resemble this remark: "16:28:32 <SimonRC> Epigram is clearly a programmming language, even though it is not generally recursive, and htus not Turing-Complete." http://tunes.org/~nef/logs/esoteric/06.12.19
17:14:31 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
17:14:50 -!- nazgjunk has joined.
17:31:58 <SimonRC> ihope: dude, that was, like, ages ago
17:32:14 <ihope> Yes, it was.
17:32:21 <SimonRC> so why bring it up now?
17:32:32 <ihope> I just now noticed it.
17:32:39 <SimonRC> ah, ok
17:32:45 <SimonRC> why were you reading such old logs
17:33:10 <ihope> I was looking for the bsmnt_bot source code.
17:33:52 -!- FabioNET has joined.
17:42:49 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
17:43:08 -!- nazgjunk has joined.
18:02:04 <bsmnt_bot> 3564.000000
18:04:20 <SimonRC> I think I just found the most useless use of $1M: http://www.geostationarybananaovertexas.com/
18:04:23 <SimonRC> yes, the URL is accurate
18:11:52 <GregorR> By "useless" ...
18:11:53 <nazgjunk> lmao
18:11:57 <GregorR> You of course mean "brilliant"
18:12:07 <nazgjunk> fucking amazing
18:17:24 <lament> that's beautiful
18:17:25 <ihope> You know, the whatchamacallit is really pretty pointless.
18:17:45 <ihope> ~exec exec("x = 900.0\nwhile 1:\n time.sleep(x)\n x = x/2\n self.raw('PRIVMSG #esoteric :%f' % x)")
18:17:49 <ihope> Much better.
18:18:08 <ihope> ...Wait, no, can I undo that?
18:18:09 <ihope> :-P
18:18:40 <ihope> ~exec while 1: time.sleep(10); self.raw("PRIVMSG #bsmnt_bot_errors :Test")
18:19:03 <ihope> ~exec self.raw = 3
18:19:16 <SimonRC> wibble
18:19:16 <ihope> Woot!
18:21:21 <ihope> ~exec exec('def raw(self, message):\n message += "\\r\\n"\n x = self.socket.send(message)\n while x < len(message):\n message = message[x:]\n self.socket.send(message)')
18:21:34 <ihope> ~exec self.raw("PRIVMSG #esoteric :*boom*")
18:21:38 <ihope> Aww.
18:22:11 -!- bsmnt_bot has quit (Remote closed the connection).
18:22:15 -!- bsmnt_bot has joined.
18:22:46 <ihope> Wonderful!
18:22:52 <ihope> And not bad, at that.
18:33:21 <bsmntbombdood> foo
18:33:26 <bsmntbombdood> what did you do
18:35:04 <bsmntbombdood> just kill the proccess instead of the whole bot
18:38:07 <bsmnt_bot> 450.000000
18:38:47 <ihope> Dunno.
18:39:10 <ihope> How do I kill just the process?
18:39:24 <bsmntbombdood> ~kill
18:39:55 <ihope> Methinks I'm looking at an older version of the bot's source code...
18:40:05 <bsmntbombdood> and you can get the source at http://bsmntbombdood.mooo.com/chroot_ircbot.py
18:45:40 <bsmnt_bot> 225.000000
18:45:53 <bsmntbombdood> ~ps
18:45:56 <bsmnt_bot> 0: 'exec("x = 900.0\\nwhile 1:\\n time.sleep(x)\\n x = x/2\\n self.raw(\'PRIVMSG #esoteric :%f\' % x)")', 1367.23 seconds
18:45:58 <bsmntbombdood> ~kill 0
18:48:12 -!- oerjan has joined.
18:48:58 <bsmntbombdood> ihope: ^
18:54:20 <ihope> Ah, right.
18:55:05 <ihope> But ~exec self.raw("QUIT") is more fun!
18:55:47 <ihope> And besides...
18:55:52 <ihope> ~exec self.do_kill = 0
18:56:13 <bsmntbombdood> ...
18:56:27 <ihope> ~exec self.do_exec = 0
18:56:34 <ihope> Not that I haven't done that before.
18:57:17 -!- sebbu has joined.
18:57:20 <bsmntbombdood> ...
19:00:07 <ihope> ...
19:01:35 <bsmntbombdood> ...
19:01:35 <ihope> I advise you to ~quit.
19:01:39 <bsmntbombdood> why?
19:01:51 <ihope> Uh... good question.
19:01:53 <bsmntbombdood> ~ps
19:01:54 <bsmnt_bot> None
19:01:56 <ihope> Never mind, then.
19:02:15 <ihope> Meanie.
19:02:21 * ihope bursts into tears and runs away
19:05:31 <ihope> Hmm...
19:06:03 <ihope> ~ctcp #esoteric VERSION
19:06:39 <ihope> ~ctcp #esoteric VERSOIN
19:06:51 <ihope> ~ctcp #bsmnt_bot_errors VERSOIN
19:06:59 <ihope> Mm-hmm.
19:09:40 <bsmntbombdood> foo
19:10:56 <ihope> You know, all this chroot stuff is a little silly, don't you think?
19:11:01 <ihope> Why not use sudo -u instead?
19:11:17 -!- sebbu2 has joined.
19:12:10 <SimonRC> ihope: because chroot restricts the touchable stuff in an easy-to-understand manner.
19:12:39 <ihope> I take it sudo -u doesn't, then.
19:12:59 <SimonRC> it restricts you to a certain user, which is a bit more complicated
19:13:33 <oerjan> sudo -u still permits you to read every file that is world readable on the computer
19:13:43 <ihope> World readable?
19:13:44 <bsmntbombdood> ihope: uhhh no
19:13:51 <bsmntbombdood> What's sudo -u?
19:14:09 <ihope> That specifies the user to run as.
19:14:24 <ihope> It'd be a bad idea to plain old sudo chroot_ircbot.py.
19:14:27 <oerjan> as in, not restricted to be readable by only a single user
19:14:30 <ihope> Well, sort of.
19:14:37 <ihope> oerjan: what files are those, then?
19:14:45 <bsmntbombdood> oh
19:14:51 <bsmntbombdood> that would be stupid
19:15:13 <ihope> Running it as a different user would be stupid?
19:16:29 <oerjan> it would include common files of course, but might also include some private files dependent on bsmntbombdood's setup
19:17:40 <oerjan> if his user directory is world readable, and he has forgotten to protect some files
19:18:20 <bsmntbombdood> yeah
19:18:29 <bsmntbombdood> perms on the whole machine would have to be perfect
19:18:30 <ihope> Maybe I can get a shell account somewhere and convince the admin to add an extra user and give me sudo access to it...
19:19:06 <bsmntbombdood> why?
19:20:10 <bsmntbombdood> just add a bot on my bot
19:22:11 <ihope> ~exec self.raw("PRIVMSG #esoteric :OMG")
19:22:11 <bsmnt_bot> OMG
19:22:15 <ihope> OMG.
19:22:53 <ihope> Wonderful!
19:23:24 <bsmntbombdood> omg
19:27:09 <ihope> ~exec IRCbot("foobar", "ihope_bot", "nope", "ihope", "Now 100% Real", 6667, "#esoteric", True, ["#esoteric"], "#", True)
19:29:54 -!- sebbu has quit (Read error: 110 (Connection timed out)).
19:30:53 <bsmntbombdood> no
19:31:10 <bsmntbombdood> assign that to self.ihope or whatever
19:31:46 <ihope> ~exec self.ihope = IRCbot("foobar", "ihope_bot", "nope", "ihope", "Now 100% Real", 6667, "#esoteric", True, ["#esoteric"], "#", True)
19:32:04 <bsmntbombdood> ~exec self.ihope.listen
19:32:07 <bsmntbombdood> ~exec self.ihope.listen()
19:32:22 <ihope> Hmm.
19:32:32 <bsmntbombdood> "foobar"?
19:32:35 <ihope> ~exec self.ihope = IRCbot("irc.freenode.net", "ihope_bot", "nope", "ihope", "Now 100% Real", 6667, "#esoteric", True, ["#esoteric"], "#", True)
19:32:39 <bsmntbombdood> no
19:32:45 <bsmntbombdood> no dns inside the chroot
19:32:47 <ihope> Good catch, there...
19:32:52 <ihope> Pff.
19:33:04 <bsmntbombdood> yeah, i know
19:34:22 <bsmntbombdood> http://www-formal.stanford.edu/jmc/weierstrass.html
19:34:27 <bsmntbombdood> err, wrong paste
19:34:45 <bsmntbombdood> "85.188.1.26"
19:35:07 <ihope> ~exec self.ihope = IRCbot("71.205.100.59", "ihope_bot", "nope", "ihope", "Now 100% Real", 6667, "#esoteric", True, ["#esoteric"], "#", True)
19:35:12 <ihope> ~exec self.ihope.listen()
19:35:33 <ihope> Hmm.
19:36:17 <bsmntbombdood> dunno
19:36:54 <ihope> Oh, of course.
19:37:21 <ihope> ~exec self.ihope = IRCbot("85.188.1.26", "ihope_bot", "nope", "ihope", "Now 100% Real", 6667, "#esoteric", True, ["#esoteric"], "#", True)
19:37:33 <ihope> ~exec self.ihope.listen()
19:37:36 -!- ihope_bot has joined.
19:38:19 <bsmntbombdood> thar ya go
19:38:20 <ihope> ~exec self.ihope.bsmnt = self
19:38:33 <ihope> #exec self.bsmnt.raw("QUIT")
19:38:33 -!- bsmnt_bot has quit.
19:38:34 -!- ihope_bot has quit (Read error: 131 (Connection reset by peer)).
19:38:36 -!- bsmnt_bot has joined.
19:38:41 <ihope> Pff. I want my money back.
19:38:45 <bsmntbombdood> what?
19:38:47 <ihope> :-P
19:39:04 <bsmntbombdood> ...
19:39:07 <ihope> ~exec self.ihope = IRCbot("85.188.1.26", "ihope_bot", "nope", "ihope", "Now 100% Real", 6667, "#esoteric", True, ["#esoteric"], "#", True); self.ihope.listen(); self.ihope.bsmnt = self
19:39:10 -!- ihope_bot has joined.
19:39:35 <ihope> #exec self.bsmnt.ihope.bsmnt.ihope.bsmnt.ihope.raw("PRIVMSG #esoteric :Foo!")
19:39:43 <ihope> Greh.
19:39:55 <bsmntbombdood> uuuh no
19:39:57 <ihope> #exec self.bsmnt.raw("PRIVMSG #esoteric :Foo!")
19:40:06 <ihope> Mmh.
19:40:13 <ihope> #exec self.raw("PRIVMSG #esoteric :Foo!")
19:40:13 <ihope_bot> Foo!
19:41:11 <ihope> #exec self.raw("NICK ihope_")
19:41:11 -!- ihope_bot has changed nick to ihope_.
19:41:27 <ihope> #exec self.raw("JOIN #math #haskell #compsci #tapthru")
19:41:41 <ihope> That didn't work, did it?
19:42:46 <ihope> #exec self.raw("PRIVMSG #math :Ello.")
19:43:12 <ihope> #exec self.raw("PRIVMSG #math :>:-)")
19:44:10 <ihope> #exec self.raw("QUIT")
19:44:11 -!- ihope_ has quit.
19:47:57 <oerjan> Channels in JOIN must be comma separated
19:48:14 <ihope> Pff.
19:50:07 <ihope> ~exec self.ihope = IRCbot("80.32.164.76", "FOLLYbot", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen(); self.ihope.bsmnt = self
19:50:16 <ihope> ~exec self.ihope.listen()
19:50:21 <ihope> ...wait...
19:57:15 * oerjan is still waiting :)
19:58:06 <ihope> You can stop waiting now.
19:58:38 <oerjan> whew
19:59:52 * SimonRC once did 'ifdown eth0; ifup eth0' over ssh.
20:00:00 <SimonRC> That was slightly scary.
20:00:08 <ihope> What happened?
20:00:15 <SimonRC> it worked
20:00:32 <ihope> What did it do?
20:01:30 <SimonRC> well, it disconnected the connection I was connected by, then re-connected it.
20:01:41 <oerjan> i guess it would not have worked on separate lines :)
20:01:45 <SimonRC> and fortunately the re-connection bit worked
20:02:00 <SimonRC> oerjan: indeed, unless it was really laggy
20:34:30 -!- FabioNET has quit (Read error: 145 (Connection timed out)).
20:45:15 -!- oerjan has quit ("leaving").
20:51:20 -!- FabioNET has joined.
21:15:17 -!- pikhq has quit (Read error: 113 (No route to host)).
21:39:40 -!- GreaseMonkey has joined.
21:40:43 <ihope> ~exec self.ihope = IRCbot("80.32.164.76", "FOLLYbot", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen(); self.ihope.bsmnt = self
21:41:49 <GreaseMonkey> ~ihope
21:42:05 <GreaseMonkey> wtf was that for?
21:42:56 <ihope> Wtf was what for?
21:43:28 <GreaseMonkey> uhh...?
21:43:38 <GreaseMonkey> the exec self.ihope = IRCbot("80.32.164.76", "FOLLYbot", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen(); self.ihope.bsmnt = self
21:43:44 <GreaseMonkey> what was that for?
21:44:19 <ihope> Just trust me when I say it did something.
21:44:40 <lament> for i = 1 to infinity; print i; end for; print "Done!"
21:45:12 <ihope> ~exec for i = 1 to infinity; print i; end for; print "Done!"
21:47:11 <lament> for i = infinity to 1; print i; end for; print "Done!"
21:47:26 -!- GreaseMonkey has quit ("brb rebooting router").
21:47:43 <lament> this prints all powers of 2:
21:48:02 <lament> x = 1; while x != -1; print x; x = x * 2; end while;
21:48:17 <lament> print "Done!"
21:52:08 <ihope> x = 1; while 1: print x; x = x * 2
21:52:22 -!- fizzie has quit (Read error: 145 (Connection timed out)).
21:52:24 <ihope> Also, print (iterate (*2) 1)
21:52:30 -!- GreaseMonkey has joined.
21:53:53 <lament> ihope: that won't terminate. My program does!
21:54:06 <ihope> Pff.
21:54:23 <ihope> Also, print (iterate (*2) 1 :: [Int])
21:54:28 <ihope> That one *might* terminate!
21:54:35 <ihope> ...Wait.
21:55:01 <lament> but mine prints all powers of 2 before terminating!
21:55:08 <ihope> As if...
22:05:43 -!- SevenInchBread has joined.
22:18:06 <GreaseMonkey> HC7IB
22:18:11 <GreaseMonkey> nvm
22:19:47 <ihope> #exec self.raw("NICK lambdabot\r\nJOIN #lobby")
22:19:56 <ihope> ...No, that won't work, will it?
22:20:24 <ihope> ~exec self.ihope.raw("NICK :lambdabot_\r\nJOIN #lobby")
22:23:50 -!- wooby has joined.
22:35:37 -!- FabioNET has quit ("A domani...").
23:13:27 -!- sebbu2 has quit (Client Quit).
23:15:44 -!- KyussWren has quit.
23:20:04 * SimonRC likes http://www.boxturtlebulletin.com/Articles/000,015.pdf
23:20:05 <SimonRC> "The Hetrosexual Adgenda: Exposing the myths"
23:21:27 <lament> eww heterosexuals
23:23:20 <GreaseMonkey> OMGWTFBBQ!!!!!!
23:31:38 -!- nazgjunk has quit ("Bi-la Kaifa").
2007-02-07
00:18:37 -!- SevenInchBread has quit (Read error: 104 (Connection reset by peer)).
00:35:03 <GreaseMonkey> afk
00:36:25 <ihope> OMGWTFAFK!
00:41:56 -!- SevenInchBread has joined.
01:29:59 <GreaseMonkey> i have a seven-inch-bread
01:33:00 <ihope> I have a three-and-a-half-inch floppy.
01:33:12 <ihope> A bunch of them upstairs, that is.
01:46:40 <SevenInchBread> I've always wanted to officially change 3 1/2 inch floppy disk to 3 1/2 inch floppy dick.
01:54:50 <ihope> Woot!
01:55:12 <GreaseMonkey> i'd rather go seven-inch
02:01:21 <ihope> Girls generally would.
02:01:39 <GreaseMonkey> actually 3.5i is quite compact
02:08:13 -!- ihope_ has joined.
02:14:21 -!- ihope has quit (Read error: 145 (Connection timed out)).
02:44:59 * bsmntbombdood reads "Recursive Functions of Symbolic Expressions and their Computation by Machine (Part I)"
03:36:25 * SimonRC contemplates the amazing mystery that computability theory was thought about before there were any computers.
03:37:06 <SimonRC> And LISP was thought about when 16k was a lot of RAM and 20kHz was a hig clock speed (number pulled out of arse).
03:37:46 <SimonRC> Actually LISP was never originally intended to be seen by a computer.
03:38:21 <SimonRC> but McCarthy wrote EVAL for LISP in LISP, and a guy realised that it could actually be implemented.
03:43:10 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
03:59:25 <GreaseMonkey> interesting
04:03:54 <bsmntbombdood> yeah
04:06:32 <bsmntbombdood> there's gotta be a better way to do garbage collection than the method described in this paper
04:13:29 -!- ericmurray has joined.
04:15:04 -!- ericmurray has quit (Client Quit).
04:25:24 * SimonRC goes
05:26:26 -!- GreaseMonkey has quit (Read error: 60 (Operation timed out)).
05:28:29 -!- Arrogant has joined.
06:08:12 -!- wooby has quit.
06:47:43 -!- ShadowHntr has joined.
07:29:30 -!- GreaseMonkey has joined.
07:40:19 -!- pgimeno has quit (Read error: 110 (Connection timed out)).
07:42:16 -!- ShadowHntr has quit (Client Quit).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:17:01 -!- oerjan has joined.
08:29:27 <GreaseMonkey> hi
08:31:19 -!- Arrogant has quit ("Leaving").
08:48:12 <GreaseMonkey> getting off, gnight
08:49:11 -!- GreaseMonkey has quit ("I'm the douche who made that colour hax for gusanos") ("orly").
09:25:36 -!- oerjan has quit ("leaving").
11:54:16 -!- pgimeno has joined.
12:35:12 -!- jix has joined.
13:09:29 -!- jix has quit ("This computer has gone to sleep").
13:23:38 -!- pikhq has joined.
14:03:48 -!- pikhq has quit (Read error: 110 (Connection timed out)).
15:43:32 -!- jix has joined.
16:20:43 -!- FabioNET has joined.
17:17:11 -!- pikhq has joined.
17:21:35 * SimonRC laughs: http://www.waterfall2006.com/Refuctoring.pdf
18:20:25 -!- sebbu has joined.
18:27:37 <bsmntbombdood> heh
18:29:44 -!- oerjan has joined.
19:10:35 -!- sebbu2 has joined.
19:29:27 -!- sebbu has quit (Success).
20:10:20 -!- nazgjunk has joined.
20:22:35 -!- helios24 has quit (Remote closed the connection).
20:41:33 -!- helios24 has joined.
20:55:38 -!- ShadowHntr has joined.
20:58:37 <SimonRC> _Jesus Christ Vampire Hunter_ FTW!
21:04:56 -!- FabioNET has quit ("A domani...").
21:07:01 -!- FabioNET has joined.
21:10:40 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
21:11:04 -!- nazgjunk has joined.
21:35:32 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:04:15 -!- pikhq has quit (zelazny.freenode.net irc.freenode.net).
22:04:27 -!- pikhq has joined.
22:22:39 -!- nazgjunk has quit ("Bi-la Kaifa").
22:22:56 -!- oerjan has quit ("leaving").
22:53:23 -!- Sgeo has joined.
22:54:01 -!- RodgerTheGreat has joined.
22:54:09 <RodgerTheGreat> happy now, SimonRC?
22:54:35 <SimonRC> only asking
22:55:00 <bsmntbombdood> .
22:55:54 <RodgerTheGreat> lol
23:00:36 -!- calamari has joined.
23:21:47 -!- oklofok has joined.
23:32:19 -!- oklopol has quit (Connection timed out).
23:40:51 -!- oklofok has quit (Read error: 110 (Connection timed out)).
23:43:26 -!- SevenInchBread has joined.
23:52:33 -!- FabioNET has quit ("very googd night").
23:55:48 -!- oklopol has joined.
23:59:59 <SevenInchBread> whooo...
2007-02-08
00:00:55 -!- sebbu2 has quit ("@+").
00:02:52 <SevenInchBread> hmmm.... egobot could use a Thue interpreter.
00:02:55 * SevenInchBread makes one.
00:02:59 <SevenInchBread> !help
00:24:47 -!- ShadowHntr has quit (Client Quit).
00:40:56 -!- pikhq has quit (Read error: 110 (Connection timed out)).
01:01:53 <ihope_> *Writing* a Thue interpreter?
01:01:58 <ihope_> Surely there already is one.
01:02:03 <ihope_> And besides, Thubi's better :-p
01:02:10 <ihope_> s/p/P/
01:17:51 <SevenInchBread> yes well... Thue interpreters take all of ten minutes. :)
01:18:04 <SevenInchBread> but I've already been diverted to a fungeoid of my own.
01:18:30 <SevenInchBread> I feel dirty though... because I'm using C-style arrays in Python to represent the program.
01:18:35 <ihope_> Gasp!
01:18:38 <ihope_> Is that a bad thing?
01:18:46 <SevenInchBread> Not really.
01:19:07 <SevenInchBread> It fits the task... fairly well... and I'm assuming it's faster (being a direct wrapper over C stuff)
01:21:23 <bsmntbombdood> I wonder if there's a straightforward way to compile lambda calculus into C
01:22:05 <bsmntbombdood> or SKI
01:22:11 <SevenInchBread> This is a pretty neat language so far... I'll reveal it once I'm done with the interpreter.
01:22:53 <ihope_> bsmntbombdood: 'course there is.
01:22:56 <ihope_> I mean, well.
01:23:04 <ihope_> Uh...
01:23:16 <bsmntbombdood> like...
01:23:18 <ihope_> Well, you need closures.
01:23:26 <ihope_> You need a way to represent trees in C.
01:23:42 <ihope_> Find me one of those, then we'll talk.
01:24:22 <bsmntbombdood> tree as in sexp?
01:25:46 <bsmntbombdood> that's easy, struct { void* right, left}
01:26:35 <SevenInchBread> yup.
01:30:02 <bsmntbombdood> ihope_: ...
01:30:43 <ihope_> That's a tree with either S or K at each leaf?
01:31:01 <bsmntbombdood> sure
01:31:17 <bsmntbombdood> no
01:31:38 <bsmntbombdood> struct leaf {leaf *right, left; int func; }
01:31:59 <bsmntbombdood> that's a tree with either S or K at each leaf
01:33:46 <bsmntbombdood> so....
01:34:10 <bsmntbombdood> I don't need an actual implementation, just how to do it...
01:36:43 <ihope_> Well, lemme think.
01:36:58 <ihope_> C doesn't have first-class functions, does it?
01:37:11 <bsmntbombdood> yeah it does
01:37:18 <ihope_> It does?
01:37:22 <bsmntbombdood> yeah
01:37:51 <ihope_> Well, I guess you still have the issue of closures.
01:38:04 <ihope_> Unless C supports currying more nicely.
01:38:33 <bsmntbombdood> assume it does have closures
01:38:52 <ihope_> Assume what has closures?
01:38:55 <bsmntbombdood> C
01:38:58 <ihope_> Assume C has currying, you mean?
01:39:08 <bsmntbombdood> sure
01:39:28 <ihope_> Should we go so far as to assume C is lazy?
01:39:32 <bsmntbombdood> no
01:39:45 <ihope_> Okay, lemme think...
01:40:29 * ihope_ ponders thunks
01:41:34 <ihope_> ~exec s = lambda x: lambda y: lambda z: lambda: x(z)(y(z))(); k = lambda x: lambda y: lambda: x(); sys.stdout(s(k)(3)(4))
01:41:34 <bsmnt_bot> <function <lambda> at 0xb7cabbfc>
01:42:28 <ihope_> ~exec s = lambda x: lambda: lambda y: lambda: lambda z: lambda: x(z)()(y(z)())(); k = lambda x: lambda: lambda y: lambda: x(); sys.stdout(s(k)()(3)()(4)())
01:42:37 <ihope_> Not callable?
01:42:41 <ihope_> ~exec s = lambda x: lambda: lambda y: lambda: lambda z: lambda: x(z)()(y(z)())(); k = lambda x: lambda: lambda y: lambda: x(); sys.stdout(s(k)()(k)()(4)())
01:42:48 <ihope_> Mmh.
01:42:57 <ihope_> ~exec s = lambda x: lambda: lambda y: lambda: lambda z: lambda: x(z)()(y(z)())(); k = lambda x: lambda: lambda y: lambda: x(); sys.stdout(s(k)()(k)()(self.raw)())
01:43:09 <ihope_> Um.
01:43:15 <ihope_> ~exec s = lambda x: lambda: lambda y: lambda: lambda z: lambda: x(z)()(y(z)())(); k = lambda x: lambda: lambda y: lambda: x(); sys.stdout(s(k)()(k)()(lambda: 3)())
01:43:16 <bsmnt_bot> 3
01:43:19 <ihope_> There we go.
01:43:31 <ihope_> ~exec s = lambda x: lambda y: lambda z: lambda: x(z)(y(z))(); k = lambda x: lambda y: lambda: x(); sys.stdout(s(k)(3)(lambda: 4))
01:43:31 <bsmnt_bot> <function <lambda> at 0xb7cabbfc>
01:43:35 <ihope_> Yeah.
01:43:53 <ihope_> So take the one that worked and translate that into C.
01:44:03 <bsmntbombdood> those extra lambdas are for lazyness?
01:44:07 <ihope_> Yep.
01:44:33 <ihope_> I think I managed to do it better once before, but oh well...
01:44:42 <ihope_> ...actually, lemme see here.
01:44:50 <ihope_> ~exec s = lambda x: lambda y: lambda z: lambda: x(z)(y(z))(); k = lambda x: lambda y: lambda: x(); sys.stdout(s(k)(3)(lambda: 4)())
01:44:59 <ihope_> ~exec s = lambda x: lambda y: lambda z: lambda: x(z)(y(z))(); k = lambda x: lambda y: lambda: x(); sys.stdout(s(k)(lambda: 3)(lambda: 4)())
01:45:09 <ihope_> Yeah.
01:45:16 <ihope_> Go with the one that worked.
01:45:26 <bsmntbombdood> s = lambda x: lambda y: lambda z: lambda: x(z)(y(z))(); k = lambda x: lambda y: lambda: x();
01:45:29 <bsmntbombdood> that?
01:49:03 <ihope_> Yep.
01:49:12 <ihope_> No, not that.
01:49:18 <ihope_> The one that returned 3.
01:49:50 <ihope_> Actually...
01:49:54 <bsmntbombdood> s = lambda x: lambda: lambda y: lambda: lambda z: lambda: x(z)()(y(z)())(); k = lambda x: lambda: lambda y: lambda: x();
01:49:57 <bsmntbombdood> ?
01:50:06 <ihope_> Yes, that ridiculity.
01:51:24 <bsmntbombdood> damnit
01:51:26 <bsmntbombdood> error: ‘func_t’ declared as function returning a function
01:53:21 <ihope_> Darn different notations for all this stuff.
01:54:16 -!- oklopol has quit (Success).
01:54:21 <bsmntbombdood> ok, i'm lost
01:54:27 <ihope_> I'm confusing myself.
01:54:46 <ihope_> Then again, I've been doing it all wrong, surely.
01:55:31 -!- oklopol has joined.
01:55:40 <ihope_> ~exec s = lambda x: lambda: lambda y: lambda: lambda z: lambda: x(z)()(y(z)())(); k = lambda x: lambda: lambda y: lambda: x(); sys.stdout(s(s(k)()(k)())()(s(k)()(k)())()(lambda x: lambda: 3))
01:55:40 <bsmnt_bot> <function <lambda> at 0xb7cabcdc>
01:55:46 <ihope_> ~exec s = lambda x: lambda: lambda y: lambda: lambda z: lambda: x(z)()(y(z)())(); k = lambda x: lambda: lambda y: lambda: x(); sys.stdout(s(s(k)()(k)())()(s(k)()(k)())()(lambda x: lambda: 3)())
01:56:04 * ihope_ makes a funny face
01:56:15 <ihope_> See? I'm confused.
01:57:19 <ihope_> C is not what I'd call the best programming language in the world.
01:57:33 <ihope_> I have not yet seen anything I can call the best programming language in the world.
01:58:00 <ihope_> Well, okay, *maybe* Z-notation.
01:58:06 <bsmntbombdood> what's that
01:58:33 <ihope_> A program description language, I think.
01:58:44 <ihope_> Catch you later. It's suddenly bedtime, as they say.
02:00:35 -!- ihope_ has quit (Read error: 131 (Connection reset by peer)).
02:06:50 <bsmntbombdood> ok...i've got delays working
02:07:50 <bsmntbombdood> only...27 lines of code
02:12:01 -!- calamari has quit ("Leaving").
02:14:32 <bsmntbombdood> actually...i don't think i need ti
02:18:25 <SimonRC> Heh, my lecturer has mucked up "respectively" in the homework.
02:19:02 <SimonRC> He askes us to give a refutation if the clause is satisfiable and a satisfying assignment if it isn't.
02:41:24 <bsmntbombdood> ...
02:49:57 -!- oklopol has quit (Read error: 110 (Connection timed out)).
02:53:49 <SimonRC> bsmntbombdood: it should be the other way round.
03:16:36 -!- oklopol has joined.
03:32:21 -!- ShadowHntr has joined.
04:09:40 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
05:11:42 -!- GreaseMonkey has joined.
05:30:29 -!- Arrogant has joined.
05:43:39 -!- Sgeo has quit ("Leaving").
06:42:26 -!- oklofok has joined.
06:42:34 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
06:57:14 -!- ShadowHntr has quit ("End of line.").
07:01:43 -!- oklopol has joined.
07:02:40 -!- oklofok has quit (Read error: 104 (Connection reset by peer)).
07:03:32 -!- sebbu has joined.
07:24:31 -!- oklofok has joined.
07:25:19 -!- oklopol has quit (Read error: 110 (Connection timed out)).
07:25:20 <SimonRC> :-S
07:28:07 <Arrogant> #esosleeping
07:33:24 <GreaseMonkey> you shoulda joined that and saw who came on :D
07:34:31 <SimonRC> :-S
07:38:21 <Arrogant> Nah.
07:40:19 <GreaseMonkey> you don't live up to your name then
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:16:48 <GreaseMonkey> gonna go, cya
08:18:05 -!- GreaseMonkey has quit ("buy viagra buy xanax buy... [VIRUS REMOVED]").
08:28:54 * SimonRC goes
08:32:59 -!- RodgerTheGreat has quit.
08:33:32 -!- RodgerTheGreat has joined.
08:41:27 -!- oklofok has quit (Read error: 110 (Connection timed out)).
08:47:30 -!- oklopol has joined.
09:22:33 -!- wooby has joined.
09:32:51 -!- oerjan has joined.
10:13:54 -!- wooby has quit.
10:37:13 -!- Arrogant has quit ("Leaving").
11:08:59 -!- jix has joined.
11:42:18 -!- oerjan has quit ("leaving").
11:57:56 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
12:33:44 -!- helios24 has quit (Read error: 110 (Connection timed out)).
12:45:48 -!- jix has joined.
13:03:23 -!- sebbu2 has joined.
13:07:34 -!- kxspxr has joined.
13:10:48 -!- sebbu has quit (Read error: 60 (Operation timed out)).
13:12:09 -!- kxspxr has quit (Client Quit).
13:16:20 -!- kxspxr has joined.
13:22:10 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
13:32:25 -!- kxspxr has left (?).
13:53:36 -!- helios24 has joined.
13:58:35 -!- kxspxr has joined.
16:09:27 -!- sebbu2 has changed nick to sebbu.
16:16:44 -!- helios24 has quit ("Leaving").
16:19:38 -!- FabioNET has joined.
17:06:02 -!- tgwizard has joined.
17:58:00 <oklopol> <bsmntbombdood> that's easy, struct { void* right, left}
17:58:20 <oklopol> you probably mean struct { void *right, *left}
18:04:40 -!- nazgjunk has joined.
18:14:22 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
18:14:42 -!- nazgjunk has joined.
19:07:42 -!- sebbu2 has joined.
19:08:41 -!- FabioNET has quit ("A domani...").
19:15:39 -!- digital_me has joined.
19:16:53 -!- FabioNET has joined.
19:26:47 -!- sebbu has quit (Read error: 110 (Connection timed out)).
19:31:39 <bsmntbombdood> oklopol: yeah, that's what i mean
19:40:06 <oklopol> You are lying. struct { void *right, *left; }; is what you meant
19:41:29 <SimonRC> ug
19:42:13 <oklopol> rar
19:44:14 <bsmntbombdood> graf
19:53:52 -!- oerjan has joined.
20:26:35 <SimonRC> hi
20:26:45 <oerjan> ho
20:30:27 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
20:30:47 -!- fush has joined.
20:31:03 -!- fush has changed nick to nazgjunk.
21:07:44 -!- Arrogant has joined.
21:34:11 -!- Sgeo has joined.
21:38:55 -!- GregorR has quit (Nick collision from services.).
21:59:44 -!- FabioNET has quit ("A domani...").
22:17:51 -!- sebbu has joined.
22:26:22 -!- coredmp has joined.
22:28:11 -!- Arrogant has quit (Read error: 54 (Connection reset by peer)).
22:28:37 -!- coredmp has left (?).
22:29:23 -!- tgwizard has quit (Remote closed the connection).
22:34:09 -!- sebbu2 has quit (Read error: 110 (Connection timed out)).
22:39:50 -!- sebbu has quit (Client Quit).
22:48:14 -!- fruitbag has joined.
22:49:18 <oerjan> hm?
22:50:06 <lament> yes! hm!
22:50:34 <bsmntbombdood> foo
22:51:36 <oerjan> ~exec sys.stdout("bar")
22:51:36 <bsmnt_bot> bar
22:52:42 <bsmnt_bot> baz
22:53:17 <bsmnt_bot> qux
22:57:11 <fruitbag> I have two great names if I am ever to do my own programming languages.
22:57:24 <fruitbag> Either the Baggage programming language, or Turing.
22:57:30 <bsmntbombdood> lame
22:57:47 <oerjan> I believe Turing is already taken, don't know about Baggage
22:57:52 -!- ShadowHntr has joined.
22:58:14 <oerjan> BTW don't you mean Babbage?
22:58:18 <lament> Turing would be ridiculously confusing
22:58:29 <bsmntbombdood> yeah
22:58:40 <lament> since you have to call the language used to programs turing machines something...
22:59:12 <fruitbag> Ooops
22:59:14 <fruitbag> Yes, oerjan.
22:59:16 <fruitbag> Babbage
22:59:19 <fruitbag> What a stupid mistake...
22:59:28 <fruitbag> I knew the spelling, but that was a slip.
22:59:57 <fruitbag> bsmntbombdood: why lame?
23:00:41 <bsmntbombdood> bwxcauce
23:03:55 <oerjan> Hey, the Babbage language almost exists and is esoteric :)
23:04:06 <fruitbag> It does, oerjan?
23:04:07 <fruitbag> How so?
23:04:30 <oerjan> http://www.tlc-systems.com/babbage.htm
23:05:57 <lament> of course, once again, babbage is a confusing name
23:06:11 <lament> since you have to call the language used to program the analytic engine somehow
23:06:28 <oerjan> No, that is Ada.
23:06:30 <lament> it doesn't have a name
23:06:55 <fruitbag> Man... esoteric.
23:07:15 <fruitbag> What's the most interesting esoteric programming language you pople have used?
23:08:02 <lament> i'm not a pople :(
23:08:56 <fruitbag> People * ;w
23:09:10 <lament> hard to say what's the most interesting
23:09:13 <fruitbag> Unlambda looks interesting.
23:09:26 <oklopol> i wrote quicksort in english yesterday
23:09:32 <oklopol> that was quite esoteric
23:09:34 <oerjan> well, i like Unlambda, obviously
23:09:35 <lament> different langs are interesting for very different reasons
23:11:00 <lament> eg smetana is interesting because it seems so completely pointless; and wireworld is interesting because there's a pretty computer implemented it in; and unlambda is interesting because it eats your brain; and jot is interesting because every number is a valid program.....
23:11:36 <oklopol> i think wireworld was more interesting before the computer to be honest
23:11:43 <oklopol> i used to play with it before that :<
23:11:48 <fruitbag> ```s``s``sii`ki : `k.*``s``s`ks : ``s`k`s`ks``s`ks``s`k`s`kr``s`k`sikk : `k``a`ksk
23:12:00 <fruitbag> ^ print Fib numbers
23:12:15 <oklopol> !fds ```s``s``sii`ki : `k.*``s``s`ks : ``s`k`s`ks``s`ks``s`k`s`kr``s`k`sikk : `k``a`ksk
23:12:17 <fruitbag> Unlambda is great.
23:12:19 <oklopol> make it! :P
23:12:54 <oklopol> what has been done with unlambda?
23:12:57 <oklopol> everything?
23:13:12 <oklopol> that's the most complex i've seen or heard about :\
23:13:13 <lament> and fugue is interesting because it's in music notation, and irp is interesting because it's so silly, and befunge is interesting because it's so pretty yet fairly easy to use, and kayak is interesting because it's so... quantum :)
23:13:39 <oerjan> What, you haven't seen any of the Unlambda self-interpreters?
23:13:41 <lament> and thue is interesting because it eats your brain very gently
23:13:52 <oklopol> oerjan nope
23:14:15 <fruitbag> For the mathematician, Unlambda may be interesting.
23:14:51 <lament> for a mathematician, lazy-k would probably be preferrable to unlambda.
23:14:52 <oklopol> the mathematician on ork?
23:14:56 <oklopol> *in
23:15:10 <oerjan> Mine is at http://oerjan.nvg.org/esoteric/interpreter.unl
23:15:43 <lament> i find unlambda UNinteresting because it's too difficult.
23:15:45 <bsmntbombdood> oerjan: lol
23:16:10 <bsmntbombdood> I don't understand unlambda
23:16:19 <oklopol> you should put the functions in place or?
23:16:25 <oklopol> is it just like that?
23:16:35 <oerjan> Huh?
23:16:40 <oklopol> hmm
23:16:43 <oklopol> nm :=)
23:17:18 <fruitbag> lament: difficult is interesting.
23:17:20 <oklopol> whitespace makes no difference there right?
23:17:21 <fruitbag> I disagree.
23:17:26 <fruitbag> Whatever is difficult is more interesting....
23:17:32 <fruitbag> That's what I've found out.
23:17:43 <lament> oerjan: wow, you actually wrote that by hand?
23:18:00 <oklopol> oh, forgot to say, oerjan, that's fucking sick :\
23:18:12 <fruitbag> You people should code in Intercal
23:18:18 <fruitbag> Intercal!
23:18:18 <lament> fruitbag: why?
23:18:31 <fruitbag> lament: great stuff.
23:18:48 <lament> ookay
23:18:49 <oerjan> Yep :)
23:19:07 <oerjan> I have coded in Intercal. An Unlambda interpreter :D
23:19:14 <lament> oerjan: not bad, i don't think many people do taht
23:20:19 <fruitbag> I have an interesting on an esoteric programming language...
23:20:22 <oerjan> http://oerjan.nvg.org/esoteric/intercal/
23:20:32 <fruitbag> What about a programming language based on electronic circuits?
23:20:49 <bsmntbombdood> it's called VHDL
23:20:52 <bsmntbombdood> :P
23:21:39 <lament> oerjan: oh, heh, i remember looking at one, years ago
23:21:45 <lament> oerjan: *at that one
23:22:23 <lament> nice use of PLEASE statements
23:22:35 <oerjan> Why thank you.
23:23:18 <fruitbag> If I were ever to do a programming language, I'd call it `Ramanujan'.
23:23:57 <lament> If I were ever to do a programming language, I'd call it "Your pants".
23:24:30 <lament> "I'm an expert in your pants"
23:24:45 <lament> "Now take this code and re-write it in your pants"
23:26:15 <oerjan> Heh, a search for "Ramanujan programming language" instead leads to the Unlambda page
23:30:19 <fruitbag> Well, good tlaking here.
23:30:22 <fruitbag> Later for now...
23:31:31 -!- digital_me_ has joined.
23:31:41 <lament> oh no! it's me, but digital!
23:32:13 * lament examines how few bits they digitized me to
23:33:17 <lament> jesus christ, no wonder audiophiles prefer vinyl.
23:34:59 <oklopol> oh please tell us
23:41:44 -!- fruitbag has left (?).
2007-02-09
00:29:42 -!- oerjan has quit ("leaving").
00:44:47 -!- SevenInchBread has joined.
00:47:49 -!- anonfunc has joined.
00:51:57 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
00:52:04 -!- death has joined.
00:53:21 -!- death has changed nick to nazgjunk.
00:57:23 -!- nazgjunk has quit ("Bi-la Kaifa").
01:06:37 -!- kxspxr has quit.
01:16:58 -!- EgoBot has joined.
01:22:19 -!- GregorR has joined.
02:12:28 <bsmntbombdood> heh, fuzzy booleans
02:51:25 -!- anonfunc has quit.
03:47:51 -!- SevenInchBread has quit ("haaaaaaaaaa").
03:49:34 <bsmntbombdood> hmph
03:49:46 <bsmntbombdood> in a lazy evaluation system, when do things get evaluated
03:49:47 <bsmntbombdood> ?
04:06:57 -!- ShadowHntr has quit (Client Quit).
04:53:42 -!- anonfunc has joined.
05:25:54 <oklopol> when they need to be..?
05:32:48 -!- digital_me_ has quit ("Lost terminal").
05:37:45 -!- Arrogant has joined.
05:39:26 <bsmntbombdood> oklopol: yeah...
05:39:29 <bsmntbombdood> but when
05:52:22 -!- digital_me has quit (Connection timed out).
06:01:04 -!- Sgeo has quit ("Leaving").
07:07:08 -!- Arrogant has quit ("Leaving").
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:10:44 -!- RodgerTheGreat has quit.
08:11:22 -!- RodgerTheGreat has joined.
08:43:45 -!- anonfunc has quit.
08:43:51 -!- anonfunc has joined.
08:45:10 -!- anonfunc has quit (Client Quit).
10:17:58 -!- oerjan has joined.
10:20:07 <oerjan> bsmntbombdood: awake?
10:43:50 -!- oerjan has quit ("Apparently not").
11:34:51 <SimonRC> My univeresity seems to have comissioned the building of two doors that lead into midair.
11:35:10 <SimonRC> The look much more like doors than like windows.
11:35:33 <SimonRC> But they are on the first and second floors, not the ground floor
11:36:14 <SimonRC> Where they are placed makes it impossible to attach a fire escape to them that would reach the ground.
11:36:42 <SimonRC> as they are on a walkway that goes over a road.
11:37:50 <SimonRC> and they aren't giong to connect to something else, as there is nothing to connect to except an office that is only 10sec walk away anyway.
11:37:54 <SimonRC> WTF WTF WTF
12:27:40 * SimonRC luncherises.
12:47:42 -!- sebbu has joined.
14:00:18 -!- jix__ has joined.
14:07:23 <SimonRC> hm
14:40:32 -!- RodgerTheGreat has quit (zelazny.freenode.net irc.freenode.net).
14:40:33 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net).
14:40:35 -!- bsmnt_bot has quit (zelazny.freenode.net irc.freenode.net).
14:40:37 -!- cmeme has quit (zelazny.freenode.net irc.freenode.net).
14:40:58 -!- RodgerTheGreat has joined.
14:40:58 -!- bsmnt_bot has joined.
14:40:58 -!- puzzlet has joined.
14:40:58 -!- cmeme has joined.
14:55:26 <SimonRC> whoa, psychadelic, maan.
14:55:28 <SimonRC> http://www.albinoblacksheep.com/flash/mario-remix.php
15:02:12 -!- jix__ has changed nick to jix.
15:02:18 <jix> :)
15:10:38 -!- tgwizard has joined.
15:27:53 <SimonRC> hi
16:03:20 <jix> :) :)
16:03:25 <jix> :|
16:09:16 -!- nazgjunk has joined.
16:24:44 <SimonRC> jix: ?? http://www.teuton.org/~stranger/code/emoticon/emoticon.html
16:25:02 <jix> nope...
16:25:13 <jix> :) :) because i have a girlfriend now
16:25:31 <jix> :| because i won't see her the next 2 days
16:26:14 <SimonRC> HEREIC!
16:26:20 <SimonRC> * HERETIC!
16:26:43 <jix> ?
16:26:45 <SimonRC> Bah, I don't seem to want a girlfreind much
16:26:57 <SimonRC> you're supposed to be a geek
16:27:39 <jix> well i fell in love so...
16:28:00 <jix> and i prefer spending time with her over programming etc....
16:32:37 <SimonRC> ah dear
16:32:41 <SimonRC> we must cure him
16:33:12 <SimonRC> geeks are supposed to have paraphilias not fall in love.
16:33:15 <SimonRC> :-)
16:37:52 <GregorR> I repel women in the most literal sense imaginable.
16:40:27 <SimonRC> Maybe I'm just envious of jix.
17:08:57 -!- nazgjunk has quit (Read error: 131 (Connection reset by peer)).
17:09:27 -!- nazgjunk has joined.
17:11:13 <SimonRC> mh
17:24:48 <jix> :/
17:26:40 <jix> hmm start.sh wird also ignoriert
17:26:50 <jix> wrong channel
17:27:21 <SimonRC> bah
19:16:41 -!- FabioNET has joined.
19:20:17 <SimonRC> Mmmm, explosion: http://www.i-am-bored.com/bored_link.cfm?link_id=21881
19:23:18 <RodgerTheGreat> cool
19:26:52 <SimonRC> but fake, I htink
19:28:06 <RodgerTheGreat> possibly an ad
19:39:09 <SimonRC> well duh
19:39:26 <SimonRC> It's called "viral advertising".
19:40:23 <SimonRC> Actually, I think all online ads should be released to be redistributed freely as long as they are unmodified.
19:40:56 <SimonRC> I mean, every time the ad is watched the company benefits, and they don't charge for it, so it is quite tough to object.
19:48:26 -!- FabioNET has quit (Remote closed the connection).
20:04:57 -!- oklopol has quit (Read error: 110 (Connection timed out)).
20:26:04 -!- oklofok has joined.
20:28:10 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
20:28:19 -!- UpTheDownstair has joined.
21:02:05 -!- tgwizard has quit (Remote closed the connection).
21:17:00 -!- kxspxr has joined.
21:24:41 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:36:40 -!- oerjan has joined.
21:44:58 -!- Arrogant has joined.
21:47:05 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)).
21:47:16 -!- nazgjunk has joined.
22:33:42 <bsmntbombdood> oerjan: am now
22:34:28 -!- Arrogant has quit ("Leaving").
22:36:14 <bsmntbombdood> SimonRC, what's your university?
22:37:43 <oerjan> bsmntbombdood: What kind of lazy evaluation is it you want to know about?
22:38:02 <bsmntbombdood> I'm trying to write a lazy lisp interpreter
22:40:18 <oerjan> Complete lazyness means evaluating an expression the moment something needs to be known about its actual value.
22:40:43 -!- ihope has joined.
22:41:07 <bsmntbombdood> how do we know when something needs its exact value?
22:41:22 <oerjan> However, if the language is pure you can also evaluate an expression earlier as long as it terminates - Haskell compilers do this for efficiency, using what is called strictness analysis.
22:42:01 <oerjan> *terminates or is guaranteed to be used
22:42:49 <bsmntbombdood> How do we know when to create a delay, and when to force it?
22:44:27 <oerjan> Well, basically you can make every expression a delay
22:44:49 <oerjan> (Avoiding it is just an efficiency matter)
22:44:56 <bsmntbombdood> to call (foo x y), we give foo two delays, right?
22:44:57 <ihope> I hereby nominate myself for the position of Esoteric Operating System Project Leader, accept the nomination, vote for myself, close the vote, and claim the position.
22:45:16 <oerjan> Yep
22:45:35 <bsmntbombdood> but then what about ((lambda (x) (foo x) bar)
22:45:41 <bsmntbombdood> foo gets (delay (delay bar))
22:45:54 <ihope> I then resign and hold an election for the next leader.
22:46:34 <oerjan> You don't need to delay variables - assume their contents are already delayed as needed
22:47:26 <oerjan> so foo just gets bar, which may contain a promise
22:48:18 <bsmntbombdood> hrm
22:48:54 <oerjan> or put another way, x is a binding not an expression
22:49:28 -!- crathman has joined.
22:50:22 <bsmntbombdood> we do we create a delay then?
22:51:25 <oerjan> for ((lambda (x) (foo x)) bar) i would assume (delay ((lambda (x) (delay (foo x))) bar)
22:52:17 <oerjan> that seems to be the same as delaying everything, then removing delay around variables
22:52:26 <SimonRC> bsmntbombdood: the one specified in my hostname of course!
22:52:53 <bsmntbombdood> dur
22:52:59 <SimonRC> yes
22:53:11 <SimonRC> hint: go to that domain
22:54:12 <oerjan> of course special forms may need special handling
22:55:18 <SimonRC> I would look up graph-reduction
22:56:59 * SimonRC lols at a paper abstract:
22:57:01 <SimonRC> "To tag or not to tag: that is the question:
22:57:01 <SimonRC> Whether 'tis faster in the cache to suffer
22:57:01 <SimonRC> The delays of tagless nodes,
22:57:01 <SimonRC> Or break the pipe no more
22:57:03 <SimonRC> And make a branch that hits the cache.
22:57:06 <SimonRC> To load, to jump;
22:57:09 <SimonRC> To jump: perchance to stall; Ay, there's the run."
22:57:14 <SimonRC> hehehe
22:57:45 <oerjan> i remember in GHC's STG machine, forcing is only done in case statements.
22:58:04 <SimonRC> bsmntbombdood: Read some papers on implementing lazy functional languages.
22:58:30 <bsmntbombdood> like?
22:58:31 <SimonRC> oerjan: or equivalents, like ifs, guards, or any pattern-matching
22:58:36 <oerjan> The paper on STG for example
22:58:38 <SimonRC> bsmntbombdood: STFW
22:58:50 <SimonRC> http://portal.acm.org/citation.cfm?id=99385&coll=portal&dl=ACM
22:58:55 <oerjan> yes, but those are all made into case statements in the STG language
22:59:36 <oerjan> (spineless tagless G-machine)
22:59:49 <SimonRC> indeed
23:00:02 <SimonRC> bsmntbombdood: specifically, see google Scholar
23:00:09 <SimonRC> there are some freely-available versions
23:00:20 <oerjan> it's probably the most efficient lazy language machine around
23:00:56 <oerjan> or maybe i just bought its hype :)
23:01:01 <SimonRC> well...
23:01:31 <SimonRC> the paper I quoted above is about how the cache-misses tend to negate the benefits of no tag checking
23:01:40 <oerjan> seeing as how it is the only lazy language machine i know thoroughly
23:04:55 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
23:04:57 -!- UpTheDownstair has joined.
23:05:06 <oerjan> ACM portal is useless to me
23:05:36 <oerjan> there isn't even a free abstract - but I remember reading some free article on it
23:30:30 -!- crathman has quit (Read error: 110 (Connection timed out)).
23:37:23 -!- UpTheDownstair has quit ("Bi-la Kaifa").
2007-02-10
00:05:25 -!- ihope_ has joined.
00:14:09 -!- ShadowHntr has joined.
00:20:25 -!- Sgeo has joined.
00:23:21 -!- ihope has quit (Read error: 110 (Connection timed out)).
01:24:28 -!- oerjan has quit ("leaving").
01:26:27 -!- ihope_ has quit (Read error: 54 (Connection reset by peer)).
01:31:15 -!- sebbu2 has joined.
01:47:20 -!- oklofok has quit (Connection timed out).
01:50:09 -!- sebbu has quit (Read error: 110 (Connection timed out)).
01:56:35 -!- sebbu2 has quit (Client Quit).
02:04:19 -!- oklopol has joined.
02:28:49 -!- oklofok has joined.
02:29:06 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
02:29:46 -!- kxspxr has quit.
03:05:27 -!- oklofok has quit (Read error: 104 (Connection reset by peer)).
03:05:40 -!- oklopol has joined.
03:28:49 * SimonRC goes to bed
03:49:48 -!- oklopol has quit (Read error: 110 (Connection timed out)).
03:50:46 -!- oklopol has joined.
04:36:53 -!- SevenInchBread has joined.
04:47:03 -!- crathman has joined.
05:29:44 <Sgeo> G'night all
05:44:36 -!- oklofok has joined.
05:44:48 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
06:03:49 -!- oklofok has quit (Read error: 110 (Connection timed out)).
06:13:24 -!- Sgeo has quit ("Leaving").
06:22:54 -!- oklopol has joined.
06:51:19 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
06:51:34 -!- oklofok has joined.
07:10:37 -!- ShadowHntr has quit ("End of line.").
07:16:25 -!- RodgerTheGreat has quit (Remote closed the connection).
07:17:08 -!- RodgerTheGreat has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:06:12 -!- RodgerTheGreat has quit.
08:25:11 -!- oklopol has joined.
08:25:45 -!- oklofok has quit (Read error: 104 (Connection reset by peer)).
09:21:22 -!- nazgjunk has joined.
10:01:48 -!- RodgerTheGreat has joined.
10:02:47 -!- RodgerTheGreat_ has joined.
10:06:11 -!- sebbu has joined.
10:20:03 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)).
10:20:47 -!- jix__ has joined.
10:58:06 -!- sebbu2 has joined.
11:06:29 -!- sebbu has quit (Read error: 145 (Connection timed out)).
11:20:23 -!- tgwizard has joined.
11:57:54 -!- nazgjunk has quit ("Bi-la Kaifa").
12:09:38 -!- sebbu2 has changed nick to sebbu.
13:42:22 -!- SevenInchBread has quit (Read error: 104 (Connection reset by peer)).
13:42:38 -!- SevenInchBread has joined.
13:59:13 -!- Sgeo has joined.
16:55:35 -!- nazgjunk has joined.
17:29:56 -!- crathman_ has joined.
17:35:40 -!- crathman__ has joined.
17:36:22 -!- crathman__ has quit (Remote closed the connection).
17:46:02 -!- crathman has quit (Read error: 110 (Connection timed out)).
17:49:41 -!- crathman has joined.
17:52:44 -!- crathman_ has quit (Connection timed out).
18:29:12 -!- crathman has quit (Read error: 104 (Connection reset by peer)).
18:29:46 -!- crathman has joined.
18:50:23 -!- ihope has joined.
19:23:52 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat.
19:41:59 -!- calamari has joined.
19:43:54 * ihope types "one plus one" into Google and ends up with "two"
19:44:21 <ihope> Aww, but "two divided by four" gives "0.5".
19:44:45 <ihope> Hmm. "one plus 1" and "one + 1" both also give "two"/
19:45:05 <ihope> But "1 plus 1" and "1 + 1" give "2".
19:45:40 <ihope> By the way, this was all sparked by my typing "6 billion * 15" into Google and getting "ninety billion".
19:46:38 * ihope types in "three million nine hundred fifty-four thousand two hundred sixteen plus one"
19:56:09 <oklopol> i seldom use any other calculator than google
19:56:48 <oklopol> i don't have to strip off units and it even translates them to a composite unit if necessary
20:14:35 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
20:16:50 -!- nazgjunk has joined.
21:27:35 -!- Arrogant has joined.
21:41:13 -!- digital_me has joined.
21:48:59 -!- Arrogant has quit ("Leaving").
22:43:15 <SimonRC> h
22:45:27 <bsmntbombdood> j
22:55:20 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:55:41 -!- oerjan has joined.
22:56:47 -!- nazgjunk has changed nick to nazgyunk.
22:57:23 -!- nazgyunk has changed nick to nazgjunk.
23:02:08 <SimonRC> klyubn?
23:05:59 <ihope> Yay, NetHack!
23:06:07 <ihope> Also, it's yulkjhnb.
23:07:20 <SimonRC> ITYM hykulnjb
23:09:56 <ihope> Let's say it's both.
23:10:37 <ihope> Hey, hykulnjb goes clockwise...
23:11:01 <SimonRC> what about it?
23:13:58 <ihope> It goes clockwise.
23:20:57 -!- RodgerTheGreat has quit.
23:25:23 -!- RodgerTheGreat has joined.
23:26:22 -!- pgimeno has quit (Read error: 104 (Connection reset by peer)).
23:33:42 -!- tgwizard has quit (Remote closed the connection).
23:41:10 -!- cmeme has quit (Read error: 131 (Connection reset by peer)).
23:42:56 -!- pgimeno has joined.
23:43:37 -!- crathman has quit (Read error: 104 (Connection reset by peer)).
23:43:38 -!- cmeme has joined.
23:43:43 -!- crathman_ has joined.
23:43:45 -!- crathman_ has changed nick to crathman.
23:46:21 -!- crathman has quit (Client Quit).
23:52:21 <bsmntbombdood> barg
23:52:33 <bsmntbombdood> seems like the halting problem should be possible
23:53:22 <ihope> Hmm?
23:53:29 <oerjan> ahem?
23:53:32 <ihope> Despite a proof of the contrary?
23:53:43 <bsmntbombdood> yeah
23:53:51 <ihope> Why?
23:53:54 <bsmntbombdood> i dunno
23:54:10 * oerjan readies his gun to shoot holes in bsmntbombdood's arguments
23:54:23 <bsmntbombdood> I don't have any arguments
23:55:14 <oerjan> that's good because i don't have a gun
23:55:51 <bsmntbombdood> (define (f) 1)
23:55:56 <bsmntbombdood> easy to see that f halts
23:56:19 <bsmntbombdood> (define (f) (cond ((= 0 1) (f)) (else 1)))
23:56:21 <bsmntbombdood> likewise
23:57:11 <ihope> Neither of those is recursive.
23:57:25 <oerjan> (define (f) (cond ((exists odd perfect number) (f)) (else 1))) - not so easy
23:57:49 <bsmntbombdood> ihope: the second one is
23:57:58 <oerjan> actually turn that around
23:58:07 <ihope> Well, yeah, I guess.
23:58:10 <ihope> But oerjan's...
23:58:23 <oerjan> (define (f) (cond ((exists odd perfect number) 1) (else (f))))
23:58:42 <bsmntbombdood> well, we obviously need to know what exists returns
23:58:59 <oerjan> but we can rephrase that as:
23:59:46 <bsmntbombdood> to see if that halts we see if EXISTS halts, then if it does, find what it returns
23:59:51 <oerjan> (define (f n) (cond ((perfect n) 1) (else (f (+ n 2))))) (f 3)
2007-02-11
00:00:44 <oerjan> that is equivalent
00:00:50 <oerjan> essentially
00:00:55 <ihope> Tell me whether or not this Haskell program halts: main = print $ head $ filter perfect [1,3..] where perfect x = sum (divisors x) == x; divisors x = [ y | y <- [1..x-1], x `mod` y == 0 ]
00:01:07 <ihope> Or the program I meant to write, if that isn't the right one :-P
00:01:39 <bsmntbombdood> well, we know it's impossible, so this is stupid
00:02:13 <ihope> Yeah.
00:02:42 <oerjan> true, but this shows that the halting problem is somewhat connected to the existence of undecidable theorems
00:02:45 <bsmntbombdood> what about programs that don't use halt
00:03:40 <bsmntbombdood> the proof on wikipedia uses halt on a program that uses halt
00:04:12 <ihope> If Turing-machines can solve the halting problem, then "Turing machines that don't use halt" isn't Turing-complete.
00:04:26 <bsmntbombdood> i know
00:04:59 <oerjan> although i rather suspect that "this program uses halt" is undecidable, or even undefinable
00:05:22 -!- ihope_ has joined.
00:05:32 <oerjan> because you cannot decide whether a program is equivalent to halt
00:05:44 <ihope_> But since Turing machines can't solve the halting problem, "Turing machines that don't use halt" is simply all Turing machines. :-)
00:05:46 <oerjan> (even assuming it exists)
00:06:59 <bsmntbombdood> who proved that two lambda expressions couldn't be proven equivalent?
00:07:41 <oerjan> don't remember, let me see in wikipedia
00:09:10 <bsmntbombdood> Church
00:09:18 <oerjan> ah, it's Rice's theorem
00:09:35 <oerjan> ok maybe Church proved a special case
00:19:19 <ihope_> Isn't that equivalent to the halting problem?
00:19:55 <ihope_> Also, \x.x and \x.xx can't be proven equivalent. Q.E.D.
00:20:17 <oerjan> it's proven by reduction to the halting problem.
00:20:29 <oerjan> see the wikipedia page
00:21:13 <oerjan> well in _that_ case it was the Church-Rosser theorem.
00:21:49 <oerjan> which showed that _some_ expressions couldn't be proved equivalent
00:22:58 -!- ihope has quit (Read error: 110 (Connection timed out)).
00:23:19 <oerjan> i thought you meant who proved that it couldn't be decided whether two given expressions were equivalent
00:23:57 <oerjan> (as in being the same function)
00:27:16 <ihope_> ...What?
00:27:28 <oerjan> what what?
00:27:38 <ihope_> How many definitions of equivalence are there?
00:27:57 <SevenInchBread> five
00:28:06 <bsmntbombdood> bannana-grape
00:28:08 <oerjan> there is beta equivalence, beta/eta equivalence
00:28:36 <oerjan> but the Church-Rosser theorem is needed to prove each of them consistent
00:29:05 <oerjan> without it, maybe \x.x and \x.xx _could_ be turned into each other
00:29:09 <ihope_> bsmntbombdood: bananas and grapes are obsolete. Please upgrade to Cantor normal form.
00:29:15 <ihope_> :-P
00:29:22 <bsmntbombdood> cantor normal form?
00:29:47 <oerjan> cantor normal form is essentially positional notation in base omega
00:30:17 <oerjan> omega^(omega+1) + omega^1*3 + omega*3 + 5, for example
00:30:41 <oerjan> eh, *omega^2*3
00:30:51 <ihope_> Like polynomials, sort of.
00:31:00 <bsmntbombdood> whoosh
00:31:20 <ihope_> omega^a*b + omega^c*d + omega^e*f...
00:31:34 <oerjan> omega = the ordinal of the natural numbers, the first infinite one
00:31:41 <ihope_> Where a, c, e, etc. are ordinal numbers and b, d and f are natural numbers.
00:31:57 <ihope_> Bananas and grapes form a subset of the ordinal numbers, I mean.
00:32:32 <oerjan> up to omega*2, isn't it?
00:32:46 <ihope_> Something like that. I don't know.
00:33:50 <oerjan> as in, the bananas are the first omega ordinals and the grapes the next omega ordinals
00:33:59 <oerjan> or maybe it was the other way around
00:34:23 <ihope_> The other way around, I think.
00:35:08 <ihope_> Also, ordinal numbers aren't cardinal numbers. :-)
00:35:34 <oerjan> of course.
00:36:35 <oerjan> (when you know it)
00:37:55 <ihope_> Obvious iff you already know.
00:38:50 <oerjan> well, it doesn't take _that_ long to realize that omega+1 and omega have the same cardinality
00:38:55 <SevenInchBread> ....
00:39:03 <SevenInchBread> none of this makes any sense to me.
00:39:04 <SevenInchBread> at all.
00:39:08 <bsmntbombdood> me too
00:39:30 <oerjan> hm...
00:39:38 <ihope_> Essentially, an ordinal number is what I tried to get at with grapes and bananas.
00:40:06 <oerjan> do you know what a total order is?
00:40:17 <ihope_> Me?
00:40:19 <bsmntbombdood> grapes and bannanas?
00:40:23 <oerjan> no the others
00:40:33 <SevenInchBread> ooooh
00:40:37 <ihope_> bsmntbombdood: you're the one who said banana-grape. :-P
00:40:41 <SevenInchBread> ordinal - the contents of a set.
00:40:44 <oerjan> i assume you know since you know what ordinals are
00:40:44 <SevenInchBread> cardinal - the size of a set
00:40:59 <oerjan> not quite
00:41:12 <bsmntbombdood> ihope_: i was just talking about fruit
00:41:18 <oerjan> ordinal = the order type of a (well-) ordered set
00:41:54 <ihope_> Informally, an ordinal number is a set of ordinal numbers such that each of its elements' elements is an element.
00:42:10 <SevenInchBread> ...
00:42:11 <ihope_> Examples: 0 is defined as the empty set, 1 as {0}, 2 as {0,1}, 3 as {0,1,2}, etc.
00:42:13 <oerjan> that's even more confusing
00:42:22 <oerjan> the von Neumann ordinals
00:42:27 <ihope_> Not if you have no idea what an order type is :-P
00:42:28 <SevenInchBread> that's a recursive definition
00:42:33 <ihope_> Well, yes, it is.
00:42:36 <SevenInchBread> an ordinal number is a set of ordinal numbers...
00:42:42 <bsmntbombdood> {0,{0}}?
00:42:47 <ihope_> bsmntbombdood: yep.
00:42:51 <bsmntbombdood> {0,{0,{0}}}?
00:42:57 <bsmntbombdood> what's the point?
00:43:07 <ihope_> {0,{0},{0,{0}}}.
00:43:09 <SevenInchBread> I just failed Algebra 2... to give you an idea of my current level of math skills.
00:43:15 <oerjan> ouch
00:43:18 <SevenInchBread> I haven't even touched set theory... besides what I've read of it.
00:43:22 <bsmntbombdood> ouch
00:43:31 <bsmntbombdood> ihope_: what's that?
00:43:33 <ihope_> The point is that you have infinite ordinal numbers as well: omega, the first infinite ordinal number, is {0,1,2,3,4,5,6,7,8...}
00:43:34 <SevenInchBread> well... that was from laziness.
00:44:38 <bsmntbombdood> kinda like church numerals
00:44:45 <ihope_> Then the next ordinal number, omega+1, is {0,1,2,3...omega}, and omega+2 is {0,1,2,3...omega, omega+1}, omega+3 is {0,1,2,3...omega, omega+1, omega+2}.
00:45:11 <bsmntbombdood> that doesn't make sense
00:45:15 <ihope_> omega+omega or omega*2, then, is {0,1,2,3...omega, omega+1, omega+2, omega+3...}
00:45:33 <oerjan> yeah - they are used in set theory to get the natural numbers in the same way that church numerals are used to get them in lambda calculus
00:45:47 <ihope_> bsmntbombdood: is there a certain part of it that doesn't make sense, or is it just generally confusing?
00:46:04 <bsmntbombdood> the omega part
00:46:51 <ihope_> Well, omega is what you get when you go past all the natural numbers.
00:47:04 <oerjan> omega is the set of all the finite ordinals, itself infinite
00:47:08 <bsmntbombdood> what's this called so i can look it up?
00:47:14 <ihope_> An ordinal number contains all the ordinal numbers you've gone past.
00:47:25 <ihope_> bsmntbombdood: what's what called?
00:47:39 <bsmntbombdood> this ordinal-omega stuff
00:47:45 <oerjan> (transfinite) ordinal numbers
00:48:04 <bsmntbombdood> ok i have to go to dinner
00:48:38 <oerjan> btw there is a trick to remove the recursivity from the definition
00:49:21 <ihope_> An ordinal number is a set whose elements are subsets of it, and which is totally ordered under the "is an element of" operation.
00:50:29 <oerjan> i think you may want well-ordered
00:51:09 <ihope_> Totally ordered is sufficient, isn't it?
00:51:20 <oerjan> or maybe not - you get that from the axiom of foundation
00:52:34 -!- sebbu has quit ("@+").
00:53:14 <oerjan> i think it is sufficient but using well-ordered allows you not to bother with things like x = {x}
00:53:17 <ihope_> You mean the axiom of foundation has a use?
00:53:48 <oerjan> yep, without it x = {x} would be an ordinal by your definition
00:54:51 <ihope_> Wouldn't x = {x} be well-ordered anyway?
00:55:04 <oerjan> eh - good point
00:55:52 <oerjan> so you actually need to assume explicitly that x is well-founded
00:56:14 <oerjan> if you don't have the axiom of foundation
00:56:29 <oerjan> in which case total probably suffices for the order
01:02:03 -!- nazgjunk has quit ("Bi-la Kaifa").
01:33:31 * SimonRC reads up
01:35:16 * SimonRC decides that if he had a mutant power, he would be a Turing Oracle.
01:35:28 <SimonRC> (able to predict if any give Turing Machine halts)
01:38:58 <SimonRC> Hmm, bananas and grapes.... http://www.catb.org/jargon/html/O/one-banana-problem.html
01:39:16 <oerjan> This, naturally, would permit you to find out whether any mathematical hypothesis is a theorem, and by binary search to find its proof.
01:39:57 <ihope_> SimonRC: I've seen that before... :-)
01:40:07 <SimonRC> read that whole website!!!!!!
01:40:22 <ihope_> I want to be a Turing Oracle...
01:40:57 <SimonRC> failing that, you *really* must read appendix B: http://www.catb.org/jargon/html/appendixb.html
01:41:04 <SimonRC> appendix A rocks too
01:41:21 <SimonRC> oerjan: yeah, fun
01:42:29 <oerjan> actually... there might be some problems if the length of the proof is described with the Ackermann function :)
01:42:54 <oerjan> which certainly must be true for some theorems
01:43:07 <ihope_> Hmm...
01:43:18 <SimonRC> BTW, I can't see how to express that puzzle about whether "f n = if even n then f (n/2) else f (n*3+1)" always hits one for eveny starting Natural n as a halting problem
01:43:41 <ihope_> Give me a series of theorems whose proofs are longer than the corresponding values of the Ackermann function. :-)
01:44:06 <oerjan> indeed, it would seem to be in the next grape or banana
01:44:17 <SimonRC> incidentally, the busy-beaver numbers are uncomputable (in the genersal case)
01:44:18 <ihope_> SimonRC: n `div` 2, remember.
01:44:27 <SimonRC> it is pseudocode
01:44:44 <ihope_> It does a remarkably good job of being Haskell.
01:44:59 <ihope_> :-P
01:45:19 <oerjan> the question of whether _one_ number halts on 3n+1 is a halting problem.
01:45:23 <SimonRC> Haskell is almost pseudocode
01:45:40 <ihope_> There are programming languages much better than Haskell.
01:45:42 <SimonRC> oerjan: indeed
01:45:46 <SimonRC> ihope_: e.g.?
01:45:47 <ihope_> I just don't know of any. :-P
01:45:51 <SimonRC> :-(
01:46:15 <ihope_> Well, no decently fast implementations for any.
01:46:57 <SimonRC> So what are the slow ones?
01:47:02 <ihope_> I could take first-order logic, extend it to a programming language, and execute programs by brute force.
01:47:20 <ihope_> Brute-forcing proofs isn't very fast.
01:48:34 <oerjan> lessee, forall x exists n such that x_n = 1, the switch between forall and exists indicates that each loop may go up a level in the halting hierarchy
01:49:27 <SimonRC> ah, this suddenly sound familiar from my compuability theory lectures
01:49:35 <SimonRC> the "switch between forall and exists" part
01:49:44 <ihope_> Foralls and existses are nice.
01:49:46 <oerjan> yeah, it's the same as for the polynomial hierarchy
01:49:53 <SimonRC> yeah, that thing
01:49:54 <ihope_> Also known as forsomes. :-)
01:49:58 <SimonRC> fuck fuck fuck fuck fuck
01:50:08 <SimonRC> excuse the language
01:53:07 * oerjan suddenly wonders if there is an esoteric language named SOAP
01:53:47 <oerjan> nah, just an operating system
01:53:48 <ihope_> SOAP is going to be a platform for an esoteric operating system, if people ever start following my orders.
01:54:12 <ihope_> oerjan: please throw dextrose tablets at bsmnt_bot.
01:54:12 <oerjan> when Malbolge freezes over, in other words
01:54:24 <ihope_> Pff, I can do that.
01:54:31 <ihope_> ...Wait...
01:54:44 <oerjan> dextrose?
01:54:58 <ihope_> The usable form of glucose.
01:55:11 <oerjan> ~exec sys.output("Give me sugar!")
01:55:22 <oerjan> ~exec sys.stdout("Give me sugar!")
01:55:22 <bsmnt_bot> Give me sugar!
01:55:36 * ihope_ throws dextrose tablets at bsmnt_bot
01:55:55 <oerjan> I have forgotten it _every_ time except once
01:56:05 <ihope_> :-)
01:58:40 <SimonRC> ~exec sys.dlete("/")
01:58:46 <SimonRC> *cough*
01:59:06 <ihope_> ~exec sys.delete("/")
02:05:35 <SimonRC> I was deliberately not doing that
02:06:16 <SimonRC> BTW, is doing (do + ing) supposed to be spelt the same as doing (onomatapoea)?
02:06:57 <oerjan> you _do_ know that ihope is easily tempted with bsmnt_bot.
02:07:41 <oerjan> no, the latter must be spelt dhoeyng'x
02:11:09 <ihope_> D'oing.
02:13:49 <oerjan> Darn. I want to be able to combine infinite cyclic datastructures with mutable references in Haskell.
02:15:48 * ihope_ throws dextrose tablets at oerjan
02:16:08 <oerjan> yummy
02:16:18 <ihope_> IORef!
02:16:21 <ihope_> Or is it IOref?
02:16:47 <oerjan> i know, but it doesn't quite work
02:17:46 <oerjan> i cannot get an IO action to refer cleanly to an IORef which is defined later
02:18:16 <ihope_> I see.
02:19:29 <oerjan> unsafeInterleaveIO gives infinite datastructure of mutable references but not cyclic ones
02:20:24 <oerjan> and unsafePerformIO has badly defined semantics
02:31:38 <bsmntbombdood> what about bsmnt_bot ?
02:31:50 <bsmntbombdood> ihope_: you fale
02:32:07 <ihope_> ~exec throw(dextrose_tablets, bsmntbombdood)
02:32:13 <ihope_> Darn.
02:32:38 <bsmntbombdood> ~exec raise "Dextrose_tablets", "smntbombdood"
02:33:08 <ihope_> ~exec def self.dextrose(x): raw("PRIVMSG #esoteric :\001ACTION throws dextrose tablets at %s\001" % x)
02:33:15 <ihope_> Pff.
02:33:29 <ihope_> ~exec self.dextrose = lambda x: bot.raw("PRIVMSG #esoteric :\001ACTION throws dextrose tablets at %s\001" % x)
02:33:42 <ihope_> ~exec self.dextrose("bsmntbombdood")
02:33:43 * bsmnt_bot throws dextrose tablets at bsmntbombdood
02:33:52 * ihope_ throws dextrose tablets at bsmnt_bot
02:33:55 <ihope_> Not bad.
02:34:14 <bsmntbombdood> why the obbsesion with dextrose?
02:36:50 <oerjan> now they tell me at #haskell there is a fixIO.
02:42:02 <ihope_> A what?
02:42:05 <bsmntbombdood> esr is crazy
02:42:08 * ihope_ throws dextrose tablets at bsmntbombdood
02:43:42 <oerjan> fixIO :: (a -> IO a) -> IO a
02:44:00 <oerjan> to make cyclic IO actions depending on their result
02:44:48 <bsmntbombdood> cps is weird
02:45:00 <oerjan> also used with the mdo recursive monad notation
02:46:20 * oerjan invents sinistrose
02:47:24 <oerjan> being the opposite of dextrose.
02:48:13 <ihope_> mdo?
02:48:20 <ihope_> Like do, except with monads?
02:48:51 <oerjan> do is with monads
02:49:10 <oerjan> mdo vs. do is like letrec vs. let in scheme
02:49:48 <ihope_> I know nothing about Scheme.
02:50:03 <bsmntbombdood> scheme pwns haskell
02:50:47 <oerjan> in do, variables introduced with <- can only be used in later statements. in mdo they can be used in the whole mdo statement
02:50:57 <oerjan> *variables = bindings
02:51:22 <ihope_> I now know one thing about Scheme.
02:51:43 <oerjan> no you don't
02:51:48 <ihope_> Oh.
02:52:08 <oerjan> bsmntbombdood is lying :)
02:52:19 <bsmntbombdood> code as data, man!
02:52:21 <ihope_> Also, I take it this doesn't work: mdo {putStrLn x; x <- getLine}
02:52:38 <ihope_> bsmntbombdood: :-P...wait, what?
02:52:44 * ihope_ ponders
02:52:50 <bsmntbombdood> what?
02:52:54 <SevenInchBread> data as code dude!
02:53:00 <bsmntbombdood> that's why scheme is better than haskell
02:53:04 * ihope_ decides "data as code" was... darn, SevenInchBread beat me to it
02:53:12 <oerjan> nope, that would hang
02:54:25 <SevenInchBread> Well... Lisp homoiconicity makes "data as code" as well.
02:54:28 <SevenInchBread> it works both ways.
02:54:42 <bsmntbombdood> yeah
02:54:50 <bsmntbombdood> sexp!
02:54:57 <SevenInchBread> since Lisp code is just like... a parse tree.
02:56:18 <bsmntbombdood> sexp
02:59:36 <SimonRC> zzzzz
02:59:39 * SimonRC goes to bed
03:01:50 <SimonRC> oerjan: look at "mdo". It is sugar that works on any instance of MonadLoop (i.e. most Monads).
03:02:01 <SimonRC> oh, wait, you did
03:02:55 <bsmntbombdood> (> scheme haskell)
03:03:33 <SimonRC> LISPoids: code is data. Haskell: computations are data
03:03:40 <SimonRC> notice the difference
03:03:44 <SimonRC> anyway
03:03:46 <ihope_> Scheme == Haskell
03:03:46 <SimonRC> zzzzzzz
03:04:01 <oerjan> (> scheme) haskell
03:04:08 <ihope_> :-D
03:04:08 <SimonRC> lol
03:04:10 <SimonRC> zzzzzzz
03:04:22 <bsmntbombdood> sex-pee
03:04:32 <ihope_> Oh dear.
03:04:49 <ihope_> Isn't that that... stuff?
03:05:05 <bsmntbombdood> ?
03:05:16 <bsmntbombdood> what stuff
03:05:31 <bsmntbombdood> (> scheme haskell) <== sex-pee
03:05:46 <ihope_> Eew.
03:06:01 <oerjan> (> scheme) haskell <== sex-tion
03:07:03 <bsmntbombdood> '(...) <=== sex-pee
03:07:27 <bsmntbombdood> original LISP with mex-pees was ugly
03:07:56 <bsmntbombdood> ihope_: s-expression
03:07:58 <bsmntbombdood> s-exp
03:08:00 <bsmntbombdood> sexp
03:08:04 <bsmntbombdood> sex-pee
03:13:39 <bsmntbombdood> mccarthy the urophiliac
03:25:24 -!- ihope_ has quit (Connection timed out).
03:42:09 -!- oerjan has quit ("leaving").
04:03:43 -!- RodgerTheGreat has quit.
05:18:41 -!- ShadowHntr has joined.
05:24:29 -!- RodgerTheGreat has joined.
05:29:56 -!- RodgerTheGreat has quit (Read error: 113 (No route to host)).
05:30:53 -!- calamari has quit (zelazny.freenode.net irc.freenode.net).
05:30:53 -!- oklopol has quit (zelazny.freenode.net irc.freenode.net).
05:30:53 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
05:30:53 -!- SimonRC has quit (zelazny.freenode.net irc.freenode.net).
05:30:53 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net).
05:30:53 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
05:31:37 -!- RodgerTheGreat has joined.
05:31:57 -!- calamari has joined.
05:31:57 -!- oklopol has joined.
05:31:57 -!- GregorR has joined.
05:31:57 -!- SimonRC has joined.
05:31:57 -!- tokigun has joined.
05:31:57 -!- sekhmet has joined.
05:33:38 -!- RodgerTheGreat_ has joined.
05:33:52 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)).
05:34:53 -!- RodgerTheGreat_ has quit (Client Quit).
05:35:57 -!- RodgerTheGreat has joined.
05:36:03 -!- RodgerTheGreat has quit (Client Quit).
05:37:19 -!- RodgerTheGreat has joined.
05:40:22 -!- RodgerTheGreat has quit (Client Quit).
05:41:12 -!- RodgerTheGreat has joined.
05:44:11 -!- RodgerTheGreat has quit (Client Quit).
06:02:36 -!- digital_me has quit (Connection timed out).
06:18:33 -!- calamari has quit ("Leaving").
06:25:13 -!- ShadowHntr has quit (Connection timed out).
06:52:29 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
07:05:19 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)).
07:05:25 -!- anonfunc has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
09:12:27 -!- sebbu has joined.
10:56:01 -!- jix has joined.
10:58:18 -!- sebbu2 has joined.
11:06:39 -!- sebbu has quit (Read error: 60 (Operation timed out)).
11:10:14 -!- puzzlet has quit (Remote closed the connection).
11:11:22 -!- puzzlet has joined.
11:23:38 -!- anonfunc has quit (Read error: 60 (Operation timed out)).
11:35:15 -!- anonfunc has joined.
11:56:02 -!- helios24 has joined.
12:03:18 -!- nazgjunk has joined.
12:08:14 -!- ihope_ has joined.
12:08:24 -!- ihope_ has changed nick to ihope.
12:16:48 -!- tgwizard has joined.
12:22:59 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
12:23:20 -!- nazgjunk has joined.
12:37:35 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
12:37:40 -!- UpTheDownstair has joined.
12:38:08 -!- UpTheDownstair has changed nick to nazgjunk.
12:44:57 -!- sebbu has joined.
12:50:01 -!- sebbu2 has quit (Read error: 60 (Operation timed out)).
14:15:42 -!- helios24 has quit ("Leaving").
15:38:30 -!- UpTheDownstair has joined.
15:38:47 -!- UpTheDownstair has quit (Read error: 54 (Connection reset by peer)).
15:55:45 -!- nazgjunk has quit (Read error: 110 (Connection timed out)).
15:57:48 -!- SevenInchBread has joined.
16:04:31 -!- nazgjunk has joined.
17:03:29 -!- flagitious has joined.
17:18:33 -!- RodgerTheGreat has joined.
17:19:03 -!- RodgerTheGreat_ has joined.
17:27:30 -!- RodgerTheGreat has quit (Read error: 60 (Operation timed out)).
17:27:54 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat.
18:34:16 -!- ihope has quit (Read error: 110 (Connection timed out)).
19:12:23 -!- ihope_ has joined.
19:12:35 -!- ihope_ has changed nick to ihope.
19:22:47 -!- SevenInchBread has quit (Read error: 110 (Connection timed out)).
19:29:28 -!- digital_me has joined.
20:05:08 -!- GregorR has changed nick to _D6Gregor1RFeZi.
20:17:38 * ihope throws dextrose tablets at _D6Gregor1RFeZi
20:18:28 -!- SevenInchBread has joined.
20:30:57 -!- ShadowHntr has joined.
21:01:30 -!- sebbu2 has joined.
21:20:17 -!- sebbu has quit (Connection timed out).
21:23:16 -!- Arrogant has joined.
21:34:38 -!- oerjan has joined.
21:47:47 * oerjan still wonders what the dextrose tablets are about.
21:48:14 <_D6Gregor1RFeZi> Same 'ere.
21:48:40 <_D6Gregor1RFeZi> Presumably they're placebos, but maybe I'm supposed to believe that they'll demangle me.
21:48:41 <bsmntbombdood> ~exec self.dextrose(" oerjan ")
21:48:42 * bsmnt_bot throws dextrose tablets at oerjan
21:48:57 <oerjan> wow
21:49:44 <oerjan> well dextrose is not a placebo when it comes to energy
21:50:21 <bsmntbombdood> ~exec self.dextrose(" _D6Gregor1RFeZi ")
21:50:21 * bsmnt_bot throws dextrose tablets at _D6Gregor1RFeZi
21:50:35 <ihope> Why the spaces?
21:50:41 <bsmntbombdood> tabe completion
21:50:42 <ihope> ~exec self.dextrose("_D6Gregor1RFeZi")
21:50:42 * bsmnt_bot throws dextrose tablets at _D6Gregor1RFeZi
21:50:53 <ihope> Oh.
21:52:02 -!- Arrogant has quit ("Leaving").
21:53:23 <bsmntbombdood> ~ctcp oerjan VERSION
21:54:11 <oerjan> hm... did anything happen?
21:54:28 <bsmntbombdood> yeah
21:54:42 <oerjan> i didn't see any incoming ctcp
21:54:44 <bsmntbombdood> :orwell.freenode.net 505 bsmnt_bot :Private messages from unregistered users are currently blocked due to spam problems, but you can always message a staffer. Please register! ( http://freenode.net/faq.shtml#privmsg )
21:54:53 <oerjan> oh.
21:55:00 <oerjan> anyhow i'm on irssi too
21:56:12 <oklopol> what is the tab character in html? :P
21:56:47 <oerjan> ~exec sys.stdout(r"^ *(.*[^ ]) *$" % " testing ")
21:57:22 -!- Sukoshi has joined.
21:57:33 <Sukoshi> Hey y'all.
21:57:36 <bsmntbombdood> long time no see Sukoshi
21:57:41 <Sukoshi> I know.
21:57:43 <Sukoshi> :)
21:57:56 <Sukoshi> Any Lex/Yacc wizards here?
21:58:01 <Sukoshi> Or, just Lex/Yacc users?
21:58:09 <bsmntbombdood> I've used em before
21:58:20 <oerjan> i have tried it
21:58:24 <Sukoshi> Can you use ( ) as grouping to group | ?
21:59:57 <oerjan> doesn't seem like it from "info bison"
22:01:48 <Sukoshi> Is it BNF?
22:02:00 <Sukoshi> Because I want to specify the exact repititions of something.
22:02:21 <oerjan> i guess that doesn't work because there would be no uniform way to refer to the matched tokens
22:03:50 <oerjan> you'll just have to define some helping tokens
22:04:25 <Sukoshi> I'm writing a parser for the BT bencoding, by the way.
22:05:00 <oerjan> i don't remember that one
22:05:12 <Sukoshi> I'll link it, and my Yacc file.
22:05:31 <Sukoshi> If you'd be so kind as to take a look at it and confirm if it would match correctly.
22:07:46 <Sukoshi> If this doesen't work, I write it myself. It's faster/less headache.
22:07:57 <Sukoshi> Woe to the not-pointer-arithmetic-endowed then.
22:08:16 <bsmntbombdood> pointer arithmetic is fun
22:08:25 <Sukoshi> I know, but not everyone can follow it.
22:08:44 <Sukoshi> That's why I'm choosing to use yacc/lex.
22:10:05 <oerjan> as far as i understand, | just defines a new rule with the same left side
22:10:26 <Sukoshi> It also works as or.
22:10:34 <Sukoshi> a | b != | a b
22:11:11 <oerjan> well that's what i said
22:11:46 <oerjan> a | b are two separate rules, not an expression
22:12:02 <Sukoshi> Oh, I see. Yeah.
22:12:50 <oerjan> basically it has to be this way because otherwise $1 ... $n would not refer to well-defined tokens in the rule action
22:13:05 <Sukoshi> Uggh. Now I have to decide how the C code works with the grammar.
22:13:11 <oerjan> that's my guess anyhow
22:13:51 <oerjan> where is that link you promised?
22:14:01 <Sukoshi> Well, my grammar is written up.
22:14:08 <Sukoshi> But, I have to add C code to it now.
22:15:23 <Sukoshi> http://www.anysize.org/~sukoshi/benc_parse.l http://www.anysize.org/~sukoshi/benc_parse.y
22:15:35 <Sukoshi> Havas unun bonan tempon kun tiujun.
22:15:38 <Sukoshi> *tiujn
22:16:10 <Sukoshi> *Havos :P
22:16:50 <oerjan> Dankas vin. (Maybe.)
22:17:03 <Sukoshi> Estas mian plezuron.
22:17:08 <bsmntbombdood> ?
22:17:24 <bsmntbombdood> what's this a parser for
22:17:29 <oerjan> If I got that correct it was nearly pure luck
22:17:32 <Sukoshi> Bencoding data.
22:17:38 <Sukoshi> oerjan: The ``vin'' is superfluous.
22:18:32 -!- _D6Gregor1RFeZi has changed nick to _ZN6Gregor1REd.
22:18:53 <Sukoshi> http://wiki.theory.org/BitTorrentSpecification <-- Read.
22:18:55 <bsmntbombdood> torrents?
22:18:59 <Sukoshi> Yeah.
22:20:09 -!- _ZN6Gregor1REd has changed nick to GregorR.
22:20:30 <bsmntbombdood> there's no benc_int
22:20:44 <Sukoshi> Guh. I knew I missed something.
22:21:25 <Sukoshi> benc_int: BEGINT NUMBER END ;
22:21:54 <bsmntbombdood> also you don't do anything with the values
22:22:14 <Sukoshi> <Sukoshi> Well, my grammar is written up. <Sukoshi> But, I have to add C code to it now.
22:22:25 <bsmntbombdood> oh
22:22:40 <bsmntbombdood> yacc should build a parse tree implicitly to give to you after parsing
22:22:52 <oerjan> that STRDATA rule is going to break I think.
22:23:15 <bsmntbombdood> yeah
22:23:25 <Sukoshi> Then I need to delimit it.
22:23:33 <oerjan> because it is confused with anything else
22:23:45 <oerjan> i don't quite see why you need a lex stage
22:24:09 <Sukoshi> I guess.
22:24:10 <oerjan> hm... scratch that.
22:24:28 <bsmntbombdood> yacc needs a lexer
22:24:30 <Sukoshi> But I would like to make yytext a union later on.
22:24:38 <Sukoshi> Oh?
22:26:13 <bsmntbombdood> i'm interested to see how to use that parser
22:26:16 <oerjan> the length-encoding of strings doesn't fit into a regular language definition, or context-free for that matter.
22:26:30 <Sukoshi> A custom parser then?
22:27:48 <oerjan> i am sure there is some lex rule to gulp up a fixed number of characters
22:27:59 <oerjan> *rule=method
22:28:31 <oerjan> but you need to take the number:string parsing entirely in lex
22:28:42 <bsmntbombdood> yeah
22:28:56 <Sukoshi> Oh, I see.
22:29:09 <bsmntbombdood> a string will eat up the rest of the input
22:29:10 <oerjan> which shouldn't be too difficult
22:29:52 <Sukoshi> Wait. How would you suggest I do this?
22:30:07 <Sukoshi> If I don't return the NUMBER token, then the grammar can't use NUMBER.
22:30:33 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:31:16 <oerjan> you don't need the yacc stage to know that number:string has a substructure
22:31:34 <Sukoshi> Oh, durr.
22:31:41 <bsmntbombdood> how would you do that?
22:32:02 <oerjan> so just remove NUMBER and let STRING be the whole thing
22:32:13 <oerjan> or STRDATA
22:32:16 <Sukoshi> But true, how would you do it?
22:32:51 <bsmntbombdood> regexes can't match stuff like that
22:36:43 <oerjan> you can use the input() directive.
22:38:03 <Sukoshi> Can you give me an example?
22:38:20 <bsmntbombdood> what, input() reads characters in?
22:38:54 <oerjan> yep, so you could use a for loop with input() to read the required number of characters into a buffer
22:39:09 <Sukoshi> Exmpl plz :P
22:39:22 <bsmntbombdood> read()
22:40:02 <bsmntbombdood> no
22:40:09 <oerjan> i don't see any read() in the flex info
22:40:20 <bsmntbombdood> i was mistaken
22:40:33 <bsmntbombdood> "input Reads a byte from yyin"
22:40:46 <SimonRC> Wait, are we still talking about parsing BT strings here?
22:40:56 <bsmntbombdood> yea
22:40:57 <oerjan> that's the idea
22:41:02 <SimonRC> hmm
22:41:08 <SimonRC> I would use a monadic parser for that
22:41:18 <SimonRC> but yacc doesn't do monadic parsers
22:41:35 <bsmntbombdood> so you have [0-9]+: as the regex, then read in the correct number of bytes with input()
22:41:56 <oerjan> right
22:42:27 <Sukoshi> Where does the call to input() go? Lexer?
22:42:31 <bsmntbombdood> yeah
22:42:44 <SimonRC> Now a better question: Why the hell did they invent their own data encoding rather than using a standard one?
22:42:56 <bsmntbombdood> like what?
22:42:58 <Sukoshi> Their bencoding is brain-damaged.
22:43:12 <SimonRC> I can see they have there a subset of the functionality of ASN.1
22:43:27 <SimonRC> There are plenty of tools that will spit out very fast ASN.1 parsers
22:44:11 <SimonRC> It has such amazing features as being able to send the start of some data before knowing how long it is.
22:44:15 <Sukoshi> My theory is that it was a quick hack in Python.
22:44:45 <bsmntbombdood> meh
22:45:11 <oerjan> it would be a quick hack with Parsec :)
22:46:51 <oerjan> there might be another way to do it using yymore() and states
22:50:34 <oerjan> *states=start conditions
22:50:54 <bsmntbombdood> parsing is screwed up
22:51:50 <oerjan> oh wait.
22:52:06 <oerjan> the i lex rule also needs to include the number
22:52:40 <bsmntbombdood> no it doesn't
22:53:19 <oerjan> yes it does, otherwise there will be no way for lex to distinguish the number from the start of a string encoding
22:53:34 <bsmntbombdood> it doesn't need to
22:53:57 <oerjan> yes it must because it has to handle the string encoding specially
22:54:10 <oerjan> wait...
22:54:15 <bsmntbombdood> yacc just needs the tokens
22:54:41 <oerjan> it _could_ distinguish a number according to whether it is followed by :
22:54:48 <bsmntbombdood> yeah
22:55:11 <oerjan> but lex does need to know the length of the string somehow
22:56:00 -!- tgwizard has quit (Remote closed the connection).
22:56:14 <oerjan> including it in the i rule would cause earlier error detection
22:56:44 <oerjan> in the case of something like i100:
22:56:51 <bsmntbombdood> error detection is for pussies
22:57:48 <oerjan> in any case i end up with the feeling this grammar is far too simple for lex/yacc use, especially when it doesn't fit directly
22:58:22 -!- nazgjunk has changed nick to na[zZz]gjunk.
22:58:36 <oerjan> recursive descent and a switch statement might even be shorter
22:59:07 <oerjan> *would almost certainly be shorter
23:01:35 <oerjan> in fact it is practically designed to be trivial in that way
23:01:56 <bsmntbombdood> what's that?
23:02:37 <oerjan> just a simple: read the next character, switch on it to decide what to do
23:02:51 <bsmntbombdood> oh, yeah
23:03:20 <bsmntbombdood> would be pretty simple
23:08:11 * bsmnt_bot throws dextrose tablets at bsmntbombdood
23:10:54 <oerjan> one more thing - the lex parser doesn't handle negative numbers for i
23:22:24 <SimonRC> methinks that a predictive parser would be what you wanted.
23:23:22 <SimonRC> In fact, I suspect that bittorent was built before the protocol was properly written down, so there is certainly a simple parsing algorithm: that which is used by the original client.
23:24:37 -!- pikhq has joined.
23:25:18 <SimonRC> hi
23:25:33 <SimonRC> you are just in time for a predictive parsing vs. yacc flamewar
23:26:12 <bsmntbombdood> what's a predictive parser?
23:29:29 <oerjan> yacc is fine if your grammar is L(AL)R(1) but not LL(1)
23:29:56 <oerjan> but this one is nearly LL(1) at the character level
23:30:39 <SimonRC> bsmntbombdood: a parser that always knows what token type will come next.
23:30:42 <SimonRC> I think
23:30:46 <SimonRC> read the Dragon Book
23:31:21 <bsmntbombdood> how is that possible
23:31:52 <oerjan> Correction: knows what token something is after reading the first subtoken
23:32:03 <pikhq> Hear ye, hear ye! Read the Wiki!
23:32:10 <pikhq> You will sound more competent & wise.
23:32:14 <SimonRC> oerjan: maybe that, whatever
23:32:46 <oerjan> i.e. LL(1) if it is context-free
23:32:48 <SimonRC> anyway, it is a subset of most other serious parser types
23:33:08 <SimonRC> but Pascal can be parsed predictively IIRC
23:33:34 <oerjan> yes, Niklaus Wirth is known for making his grammars simple LL(1)-like
23:34:41 <oerjan> and in another note, these parsers/languages are usually the ones that one can create by hand without too much effort
23:34:55 <oerjan> using recursive descent
23:36:21 <SimonRC> Ah, of course, pascal parsers were traditionally written in Pascal, weren't they?
23:37:02 <oerjan> i think so
23:37:39 <oerjan> i think Wirth's idea was that the grammar _should_ be simple enough to write a parser manually
23:38:13 <oerjan> but of course i am as usually using my vague memory to sound competent & wise :)
23:38:33 <oerjan> *usual
23:39:43 <oerjan> but then i have always enjoyed parser theory
23:39:52 * pikhq uses an external memory enhancement at times
23:40:31 <oerjan> how many years before Wikipedia plugs directly into the brain?
23:42:22 <pikhq> With Ratpoison and Conkeror, it's close enough already.
23:43:53 -!- sebbu2 has quit ("@+").
23:45:54 -!- GregorR has changed nick to _D6Gregor1RFeZi.
23:48:21 <pikhq> Is that valid Malbolge, Gregor?
23:48:46 <SimonRC> Fe is iron and Zi is zirconium, IIRC
23:51:29 <bsmntbombdood> i'm writing a bencode parser in python
23:52:12 <pikhq> Hexadeuterium monogregor monoR moniron monozirconide?
23:53:19 <_D6Gregor1RFeZi> :P
23:53:51 <bsmntbombdood> i can't figure out how to do lists without backing up
23:53:52 <_D6Gregor1RFeZi> Seems like an unlikely chemical forumula.
23:54:05 <oerjan> map (`mod` 94) $ zipWith (+) [0::Int ..] $ map (fromEnum) "_D6Gregor1RFeZi"
23:54:18 <oerjan> gives [1,69,56,74,24,12,15,24,28,58,92,81,19,9,25]
23:54:30 <pikhq> Yeah.
23:54:31 <_D6Gregor1RFeZi> Fascinating.
23:54:42 <oerjan> which means it is probably not legal Malbolge
23:54:44 <pikhq> Hmm.
23:55:00 <pikhq> It's *perfectly* valid Brainfuck, though.
23:55:08 <pikhq> Although it's equivalent to a null program. . .
23:55:09 <_D6Gregor1RFeZi> Doesn't do much though :P
23:57:19 <_D6Gregor1RFeZi> Nobody can guess what it is? :(
23:57:44 <bsmntbombdood> ok, got lists, it's ugly though
23:57:45 <oerjan> is it an esoteric language?
23:57:51 <_D6Gregor1RFeZi> Nope
23:58:44 <oerjan> i guess with the Gregor in it it is not a chemical formula either
23:59:02 <_D6Gregor1RFeZi> Nope
23:59:08 <oerjan> what is ugly?
23:59:17 <pikhq> It's Gregorium.
23:59:20 <_D6Gregor1RFeZi> Obviously none of you mess with name mangling much :P
2007-02-12
00:00:20 <oerjan> D6 could be a roleplaying reference
00:00:46 <pikhq> *Could* be.
00:00:47 <oerjan> no clue
00:00:53 * pikhq rolls 5000d20
00:00:56 <pikhq> :p
00:01:26 <_D6Gregor1RFeZi> It's the name of the D function int Gregor.R(real) mangled.
00:01:58 <bsmntbombdood> done
00:02:17 <SimonRC> _D6Gregor1RFeZi: yes, that looks correct now
00:02:38 <oerjan> ok that means _ was the only part i nearly understood :)
00:02:59 <bsmntbombdood> http://pastebin.ca/351161
00:03:06 <bsmntbombdood> 50 lines
00:04:40 <pikhq> _D6Gregor1RFeZi: Sorry; I don't do C++.
00:04:48 <pikhq> I mean. . .
00:04:58 <pikhq> I don't look at C++'s mangled names.
00:05:05 <_D6Gregor1RFeZi> It's D, not C++
00:05:29 <pikhq> Hmm. . . I thought D used one of the name mangling schemes made for C++. . .
00:05:48 <SimonRC> so, _D means the D language, 6Gregor means Gregor, 1R means R, F = float, Z = int, and I don't know about e and i/
00:05:50 <_D6Gregor1RFeZi> It's similar, but certainly not the same. D's name mangling is made for D.
00:06:28 <SimonRC> Haskell can spit out some interesting mangled names in its linker error messages.
00:06:40 <_D6Gregor1RFeZi> Gotta love mangling :P
00:07:50 <bsmntbombdood> that was easier than i thought
00:08:07 <bsmntbombdood> it would have been a lot cleaner if python files had ungetc
00:09:14 <pikhq> Well, at least it's got a consistent mangler; removes the issues that C++'s lack of standard mangling schemes produces. . .
00:10:04 <_D6Gregor1RFeZi> pikhq: C++'s mangling is standardized ... just nothing complies to the standard :P
00:11:05 * SimonRC boggles at the C code that ghc emits:
00:11:09 <SimonRC> typical extract:
00:11:11 <SimonRC> R1.p = (P_)(W_)&GHCziBase_unpackCStringzh_closure;
00:11:35 <_D6Gregor1RFeZi> Heheheh
00:13:09 <SimonRC> BTW, what about my proposed analysis of your name?
00:14:27 <bsmntbombdood> Sukoshi: looks like a custom parser is the way to go
00:14:45 <_D6Gregor1RFeZi> SimonRC: I'm actually not sure about "FeZi" - I just got the mangling name by compiling the appropriate file :P
00:15:02 <ihope> Mangling! Fun.
00:15:26 <oerjan> well FeZi has to encode int and real somehow, doesn't it?
00:15:37 <bsmntbombdood> "ldi1e2:ab3:abci56e1:gli2ei3eeei42ee" <-- fun
00:15:56 <bsmntbombdood> that is [{1: 'ab', 'abc': 56, 'g': [2, 3]}, 42] bencoded
00:17:07 <bsmntbombdood> i like bencode
00:17:47 <_D6Gregor1RFeZi> oerjan: yeah.
00:17:58 <_D6Gregor1RFeZi> oerjan: And the fact that one of them is a parameter, and the other is a return type.
00:21:33 <oerjan> i guess we need you to go and compile a different function :)
00:34:50 -!- pikhq_ has joined.
00:35:21 <pikhq_> Grr. . .
00:35:25 -!- pikhq has quit (Read error: 104 (Connection reset by peer)).
00:35:31 <pikhq_> STOP TURNING OFF THE CABLE MODEM, DAMN IT!
00:35:33 -!- pikhq_ has changed nick to pikhq.
00:38:04 <bsmntbombdood> heh
00:40:28 <bsmntbombdood> Sukoshi: A yacc parser for bencode is way too much
00:47:17 <bsmntbombdood> oerjan: what kind of parser is the one i wrote?
00:47:31 -!- digital_me has quit ("Lost terminal").
00:48:53 <oerjan> looks like pretty straightforward recursive descent predictive parser
00:52:04 -!- ShadowHntr has quit (Client Quit).
00:57:23 -!- kxspxr has joined.
00:57:52 <oerjan> hi
01:10:28 <SimonRC> SETI: A 99.999% chance of being a waste of effort and a 0.001% chance of destroying the entire Human race.
01:10:31 <SimonRC> :-P
01:11:37 <oerjan> either they don't exist, they already know we are here, or we wouldn't want them to?
01:12:48 <RodgerTheGreat> bbl
01:13:54 <oerjan> basically the chance that two civilizations should develop and not be millions of years apart in time is minimal
01:14:02 <bsmntbombdood> asdf
01:14:40 <oerjan> and if they are millions of years apart then the first one will have colonized the galaxy or destroyed itself before the other one arises
01:16:34 <bsmntbombdood> or the're just intorverts
01:18:09 <oerjan> hm...
01:20:22 <oerjan> there was this book i read about alien life that suggested maybe interstellar travel was _so_ awkward no civilization actually bothered to do it
01:21:07 <oerjan> alas, there is always another option, including the one we haven't thought of
01:22:23 <SimonRC> I think this just about sums up the present day: http://en.wikipedia.org/wiki/Image:Population_curve.svg
01:22:26 -!- RodgerTheGreat has quit (Read error: 60 (Operation timed out)).
01:22:44 <SimonRC> ignore the actual units of the y-axis or even what it's measuring
01:23:33 <oerjan> perhaps. it doesn't show the fact that the growth is now decelerating
01:23:58 <SimonRC> I don't mean for population particulary.
01:24:14 <SimonRC> An exponential growth curve should be the logo for the 21st century
01:24:58 <oerjan> http://en.wikipedia.org/wiki/Technological_singularity
01:24:58 <SimonRC> Well, in _Orion's Arm_, there is a quite nice explanation using wormholes and time dilation that predicts that as long as intelligent civilisations are reasonably distant from one another, they will encounter one another while all having the about same tech level.
01:25:04 <SimonRC> reddit#
01:25:45 <oerjan> reddit#?
01:26:05 <SimonRC> I have read that already
01:26:27 <ihope> The growth is decelerating?
01:26:48 <bsmntbombdood> heh
01:26:49 <oerjan> yes it has been predicted that it will stabilize around 9 billions or so
01:26:54 <bsmntbombdood> logistic
01:26:56 <ihope> You mean the growth is going down, or it's actually slowing down?
01:27:09 <oerjan> slowing down
01:27:24 <ihope> But it's currently above zero?
01:27:28 <bsmntbombdood> what caused the two dips in the 1000's?
01:27:32 <oerjan> yes
01:27:37 <ihope> And, of course, the population is above zero as well?
01:27:41 <bsmntbombdood> one is the great plague
01:27:43 <oerjan> one of them is certainly the Black Death
01:28:01 <ihope> ...Yes, I should have known the fact that growth is above zero as well...
01:28:25 <oerjan> ihope: do you know about differentiation?
01:28:35 <bsmntbombdood> oh nice the've actually got the data for analyis
01:28:40 <ihope> Yep.
01:28:57 <ihope> Derivatives and integrals... and limits. Calculus is fun.
01:29:12 <bsmntbombdood> what about?
01:29:48 <ihope> What about what?
01:29:53 <bsmntbombdood> calculus
01:29:57 <oerjan> so i am saying that the second derivative of population wrt. time is negative
01:30:06 <ihope> Fun.
01:30:48 <bsmntbombdood> i forget how to tell gnuplot to fit a curve
01:32:13 <ihope> What about calculus is fun, you mean, then?
01:32:19 <bsmntbombdood> no
01:32:50 <bsmntbombdood> disregard my comment
01:35:20 <bsmntbombdood> wtf
01:35:26 <bsmntbombdood> "Undefined value during function evaluation"
01:37:47 -!- pikhq has quit (Read error: 110 (Connection timed out)).
01:38:09 <bsmntbombdood> anyone know gnuplot?
01:38:57 <_D6Gregor1RFeZi> Sort of
01:39:00 -!- digital_me has joined.
01:39:05 -!- pikhq has joined.
01:39:10 <bsmntbombdood> f(x) = a/(b + exp(-1*c*x))
01:39:14 <bsmntbombdood> fit f(x) "/tmp/popdata" via a, b, c
01:39:22 <_D6Gregor1RFeZi> Not that well.
01:39:23 <bsmntbombdood> => Undefined value during function evaluation
01:39:52 <ihope> bsmntbombdood: that almost looks like Haskell.
01:40:15 <bsmntbombdood> digital_me: do you know?
01:48:04 <bsmntbombdood> garg
01:48:54 -!- digital_me has quit ("brb").
01:49:09 -!- digital_me has joined.
01:51:11 <bsmntbombdood> oh damn
01:51:15 <bsmntbombdood> the values are too big
01:52:04 <oerjan> exponential of large numbers?
01:52:09 <bsmntbombdood> yeah
01:52:13 <bsmntbombdood> :(
01:52:19 <oerjan> actually that shouldn't matter
01:52:25 <bsmntbombdood> only goes up to like 6000...
01:52:29 <oerjan> since the exponent is negative
01:52:41 <bsmntbombdood> yeah :/
01:53:19 <oerjan> can you do if then else?
01:53:53 <bsmntbombdood> don't think
01:53:55 <oerjan> it would be reasonable to define exp(-6000) as 0
01:54:03 <bsmntbombdood> i'll just divide everything by 1000
01:54:10 <bsmntbombdood> wow, that's a terrible fit
01:54:53 <oerjan> right
01:55:54 <bsmntbombdood> this curve fitting sucks
01:58:12 <bsmntbombdood> oh, i can do conditionals
02:04:12 <bsmntbombdood> according to this model, in about 2700, the world population will go to 53,000 million, then by 2800 be -120,000 million
02:04:41 <oerjan> negative?
02:04:49 <bsmntbombdood> yeah
02:05:34 <oerjan> well i guess if we learn to control antimatter :)
02:07:16 <bsmntbombdood> it's barely changing my initial parameters :/
02:08:18 <oerjan> perhaps your function is not suitable for least squares estimation or whatever gnuplot uses
02:08:35 <bsmntbombdood> what should i use?
02:09:13 <oerjan> i don't know
02:11:40 <bsmntbombdood> there's a big population spike at -400
02:12:56 <bsmntbombdood> the growth from -700 to -400 was the biggest for a long time
02:14:42 <bsmntbombdood> untill like 1600
02:14:51 <bsmntbombdood> then it just goes crazy
02:15:55 <oerjan> and those two happen to be around the first and second golden ages of science...
02:16:31 <oerjan> except that with the timing...
02:17:13 <oerjan> the first population increase may have caused the age of philosophy while the second was _caused_ by the age of science
02:17:47 <bsmntbombdood> -700 to -400 was a golden age of science?
02:18:01 <oerjan> well, -400 or so
02:18:07 -!- ihope has quit (Connection timed out).
02:18:38 <oerjan> with aristotle, euclid and everything.
02:19:19 <oerjan> of course i mean philosophy as an analogy of science
02:20:34 <bsmntbombdood> there was another jump at -4900
02:21:57 <oerjan> i don't think you can deduce that much
02:22:32 <bsmntbombdood> well, it looks pretty major when graphed
02:22:53 <bsmntbombdood> only with a log scale though
02:23:34 <oerjan> i mean, the numbers in the table are only accurate to the nearest million
02:23:45 <oerjan> *accurate=given
02:24:31 <oerjan> there may have been a jump from -5000 to -4000 but there is no way to say exactly when the growth started from the table
02:25:03 <bsmntbombdood> yeah
02:25:06 <oerjan> and there was a doubling in the next millennium
02:26:03 <oerjan> and each of the two next ones
02:26:45 <oerjan> and then more than tripled from -1000 to 0
02:27:02 <bsmntbombdood> heh, i tried to fit it using a sixth order polynomial. it failed.
02:27:16 <oerjan> so i'ld say the -5000..-4000 was pretty tame in comparison
02:27:59 <oerjan> probably that was when most of people shifted to agriculture
02:28:51 <oerjan> and then it grew exponentially until the potential for that technology was used up
02:29:47 <bsmntbombdood> Singular matrix in Invert_RtR!
02:54:34 -!- kxspxr has quit.
04:10:10 -!- GreaseMonkey has joined.
04:11:03 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
04:21:53 -!- digital_me has quit ("leaving").
04:40:06 -!- oerjan has quit ("leaving").
04:55:14 -!- RodgerTheGreat has joined.
04:55:30 <RodgerTheGreat> 'sup?
04:56:28 <bsmntbombdood> pus
05:01:20 <RodgerTheGreat> antibiotics would be a good idea
05:03:27 <bsmntbombdood> the antibiotic alternative
05:13:36 <_D6Gregor1RFeZi> Anybody want to help me redesign Plof?
05:13:46 <GreaseMonkey> why, what's crap about it?
05:14:12 <_D6Gregor1RFeZi> There's a functions-that-return-deep vs functions-that-return-shallow problem.
05:14:24 <_D6Gregor1RFeZi> eg if returns deep, but normal functions return shallow.
05:15:07 <_D6Gregor1RFeZi> Lemme rephrase that:
05:15:15 <_D6Gregor1RFeZi> The 'if' function, for example, returns deep, but normal functions return shallow.
05:15:30 <GreaseMonkey> what's the diff between "deep" and "shallow"?
05:15:50 <_D6Gregor1RFeZi> An example: If you do this: a = { if(condition, { return 1; }); };
05:15:59 <_D6Gregor1RFeZi> Then that inner return ought to return out of the a function.
05:16:04 <_D6Gregor1RFeZi> Even though it's several layers in.
05:16:13 <_D6Gregor1RFeZi> That's a deep return.
05:16:20 <GreaseMonkey> oh ok
05:16:34 <GreaseMonkey> weird, plof looks kinda like tomato
05:16:36 <pikhq> Hmm.
05:16:42 <GreaseMonkey> but implemented
05:16:48 <pikhq> Plof kicks ass.
05:17:03 <_D6Gregor1RFeZi> pikhq: Except for the return problem, which makes for some VERY ugly builtin functions :P
05:17:03 <pikhq> Although it does have a major issue (that being that it's not done).
05:17:08 <GreaseMonkey> though in tomato, to return something:
05:17:16 <pikhq> _D6Gregor1RFeZi: Yeah. . .
05:17:26 * pikhq contemplates a Plofish way to do that. . .
05:17:29 <GreaseMonkey> douche@(foo!4,bar!4) = { foo+bar; };
05:17:35 <_D6Gregor1RFeZi> I think I need some kind of nomenclature to differentiate them, but that would increase the confusion involved in writing Plof by quite a bit :(
05:17:56 <GreaseMonkey> so how does while return?
05:18:10 <_D6Gregor1RFeZi> Deep as well.
05:18:21 <GreaseMonkey> k
05:19:02 <GreaseMonkey> a@(condition) = { if({condition}, { 1; }); };
05:19:16 <GreaseMonkey> that is quite weird how plof has its similarities to tomato
05:19:30 <_D6Gregor1RFeZi> Hmmmm ... combination of an explicit way to note something as a deep-return function, then a way to catch returns from shallow-return functions.
05:19:36 <GreaseMonkey> i admit plof was made first
05:20:12 <GreaseMonkey> how about the last "dropped" value returns it?
05:20:29 <_D6Gregor1RFeZi> ... ?
05:20:47 <GreaseMonkey> dropped value, as in:
05:20:50 <GreaseMonkey> a+b;
05:20:56 <GreaseMonkey> you don't set it
05:20:59 <GreaseMonkey> i mean
05:21:06 <GreaseMonkey> you don't set a variable to it
05:21:37 <_D6Gregor1RFeZi> That doesn't really solve the problem :P
05:22:00 <GreaseMonkey> THEN, you can return that shallow, and then the outer function will return that value
05:23:30 <GreaseMonkey> Did you know that Firefox is already compatible with XHTML2.0?
05:24:05 -!- calamari has joined.
05:28:23 <_D6Gregor1RFeZi> I'm starting to go in a big loop on my deep-return stuff :P
05:28:38 <_D6Gregor1RFeZi> I keep whittling it down in my head, and then I end up right back where I am already.
05:29:01 <_D6Gregor1RFeZi> I think the unfortunate return mechanism is just implicit to the language design.
05:29:22 <_D6Gregor1RFeZi> e.g. any language which uses functions like Plof does will need to have a complex return system.
05:40:22 <bsmntbombdood> can't you just have implicit returns?
05:40:44 <bsmntbombdood> i mean, like functional languages?
05:40:58 <pikhq> bsmntbombdood: This is a functional language.
05:41:17 <_D6Gregor1RFeZi> It's mostly functional, but functions can have a list of statements instead of an expression.
05:41:27 <_D6Gregor1RFeZi> As such, the implicit return concept sort of breaks down.
05:41:42 <bsmntbombdood> you'll never beat lisp
05:41:45 * bsmntbombdood goes
05:41:52 <pikhq> That just makes it an odd functional language, Gregor.
05:41:58 <_D6Gregor1RFeZi> Lisp has already been beaten, bsmntbombdood :P
05:42:04 <bsmntbombdood> NEVAR!!!!!!!!
05:42:05 <_D6Gregor1RFeZi> pikhq: True.
05:43:27 <bsmntbombdood> did you fix arrays yet?
05:43:58 <_D6Gregor1RFeZi> Arrays do woik
05:44:40 <bsmntbombdood> how?
05:45:01 <_D6Gregor1RFeZi> a = array(1, 2, 3); a[2] = 4; a[] = 7;
05:45:20 <bsmntbombdood> cool
05:45:29 <bsmntbombdood> so operator overloading?
05:45:43 <_D6Gregor1RFeZi> No - that's another reason I want to reorganize it.
05:45:46 <bsmntbombdood> wait, a[] = 7; ?
05:45:58 <_D6Gregor1RFeZi> bsmntbombdood: That's concatenation.
05:46:14 <bsmntbombdood> :/
05:46:31 <bsmntbombdood> overload + for that
05:46:46 <pikhq> Expose a method of overloading operators.
05:46:46 <_D6Gregor1RFeZi> What's wrong with a[] = 7
05:46:49 <_D6Gregor1RFeZi> = can't be overloaded because of how objects work, + can't be overloaded because it already has a meaning in terms of objects.
05:46:56 <pikhq> :p
05:46:59 <bsmntbombdood> fugly
05:47:06 <_D6Gregor1RFeZi> Anything else could be overloaded, but it doesn't make sense to allow -, * or / to be overloaded given that + can't be.
05:47:12 <pikhq> Although yes, yes. . .
05:47:12 <bsmntbombdood> a[] = 7 doesn't make sense
05:47:31 <_D6Gregor1RFeZi> bsmntbombdood: It's how PHP does it, and I find it totally intuitive there :)
05:47:41 <pikhq> object3=object + object2; makes a huge, new object. . .
05:47:48 <bsmntbombdood> php sure is a symbol of elegance
05:47:54 <_D6Gregor1RFeZi> pikhq: Yeah.
05:48:41 <bsmntbombdood> how do you add numbers, then?
05:48:46 <_D6Gregor1RFeZi> +
05:49:05 <bsmntbombdood> yuck
05:49:09 <pikhq> _D6Gregor1RFeZi: Are you going to think of a way of doing command line arguments?
05:49:16 <pikhq> bsmntbombdood: Numbers aren't classes.
05:49:22 <_D6Gregor1RFeZi> pikhq: I'm hoping so ^^
05:49:24 <bsmntbombdood> yuck again
05:49:35 <bsmntbombdood> that's gross
05:49:36 <GreaseMonkey> afk food
05:49:42 <_D6Gregor1RFeZi> WTF bsmntbombdood, are you a Java programmer? Shaddap.
05:49:55 <bsmntbombdood> java?
05:50:22 <pikhq> [func=(a as int){println("Foo");}]
05:50:22 <_D6Gregor1RFeZi> In Java, everything is an Object, but they allow gigantic exceptions to their rules of operator overloading to make that work.
05:50:44 <bsmntbombdood> everything isn't an object in java
05:51:12 <pikhq> Int foo = new(Int);, I believe, is valid Java.
05:51:25 <_D6Gregor1RFeZi> X_X
05:51:43 <bsmntbombdood> java is yucky
05:51:51 <pikhq> (I don't do Java, so take that with a grain of salt)
05:52:45 <_D6Gregor1RFeZi> pikhq: I'm thinking about changing + for objects to something else, and thereby allowing overloading of everything but =
05:53:01 <_D6Gregor1RFeZi> Maybe :
05:53:08 <bsmntbombdood> why not overload =?
05:53:28 <_D6Gregor1RFeZi> bsmntbombdood: a = [ foobar ]; b = a; c = b; d = [ bleh ];
05:54:00 <_D6Gregor1RFeZi> bsmntbombdood: Which is to say, it's ambiguous.
05:54:04 <pikhq> Suggestion. . .
05:54:26 <pikhq> Class and function definitions use a new operator, :=?
05:54:32 * bsmntbombdood gones
05:55:03 <_D6Gregor1RFeZi> pikhq: Hmmmmmm ... I sort of don't like the inconsistency that would create.
05:55:38 <pikhq> Yeah. . .
05:56:35 <_D6Gregor1RFeZi> >_^
05:58:42 <_D6Gregor1RFeZi> I'm thinking about making programming language design my specialty for grad school.
05:58:59 <pikhq> Heheh.
06:02:09 -!- RodgerTheGreat has quit.
06:02:50 -!- RodgerTheGreat has joined.
06:06:34 <GreaseMonkey> back
06:10:32 <GreaseMonkey> nice idea
06:10:45 <GreaseMonkey> <_D6Gregor1RFeZi> I'm thinking about making programming language design my specialty for grad school.
06:46:11 -!- flagitious has quit ("Leaving").
07:10:48 -!- na[zZz]gjunk has quit ("Bi-la Kaifa").
07:30:04 -!- Sukoshi has quit (Read error: 110 (Connection timed out)).
07:33:13 -!- Sukoshi has joined.
07:33:35 -!- Sukoshi has quit (Remote closed the connection).
07:34:14 -!- Sukoshi has joined.
07:41:56 -!- Arrogant has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:25:47 -!- cmeme has quit ("Client terminated by server").
08:25:58 -!- cmeme has joined.
08:27:44 -!- puzzlet has quit (Remote closed the connection).
08:27:52 -!- puzzlet has joined.
08:33:12 -!- GreaseMonkey has quit ("nighty everyone").
09:30:21 -!- calamari has quit ("Leaving").
11:02:35 -!- kxspxr has joined.
11:05:51 -!- kxspxr has quit (Client Quit).
11:06:31 -!- Arrogant has quit ("Leaving").
12:02:44 -!- ihope_ has joined.
12:02:56 -!- ihope_ has changed nick to ihope.
12:22:32 -!- ihope has quit (Connection timed out).
14:40:31 <SimonRC> # I'm being followed by /etc/shaddow # -- by /bin/cat stevens
14:49:58 -!- nazgjunk has joined.
14:56:26 -!- helios24 has joined.
14:57:44 <SimonRC> hi * 2
14:58:31 <bsmntbombdood> _D6Gregor1RFeZi: why?
15:19:04 -!- helios24 has quit ("Leaving").
15:19:06 -!- helios24 has joined.
15:20:20 * SimonRC goes
15:30:38 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
15:41:37 -!- helios24 has quit ("Leaving").
15:41:40 -!- helios24 has joined.
15:44:18 -!- nazgjunk has joined.
15:51:20 -!- helios24 has quit (zelazny.freenode.net irc.freenode.net).
15:51:21 -!- anonfunc has quit (zelazny.freenode.net irc.freenode.net).
16:00:24 -!- anonfunc has joined.
16:01:22 -!- helios24 has joined.
16:01:41 -!- anonfunc has quit (Client Quit).
16:17:00 -!- FabioNET has joined.
16:25:22 -!- _D6Gregor1RFeZi has changed nick to GregorR.
16:57:46 -!- nazgjunk has quit ("Bi-la Kaifa").
17:03:58 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)).
17:33:32 -!- nazgjunk has joined.
17:48:14 -!- kxspxr has joined.
17:59:20 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
17:59:45 -!- nazgjunk has joined.
18:01:40 -!- RodgerTheGreat has joined.
18:07:11 -!- nazgjunk has quit ("Bi-la Kaifa").
18:17:11 -!- jix__ has joined.
18:17:54 -!- jix__ has changed nick to jix.
18:24:32 -!- sebbu has joined.
18:40:16 -!- calamari has joined.
18:45:55 -!- _FabioNET_ has joined.
18:46:18 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)).
18:48:02 -!- FabioNET has quit (Read error: 145 (Connection timed out)).
18:49:58 -!- digital_me has joined.
18:57:43 -!- RodgerTheGreat has joined.
19:07:43 -!- Arrogant has joined.
19:12:51 -!- helios24 has quit ("Leaving").
19:15:13 -!- helios24 has joined.
19:35:57 -!- wooby has joined.
19:35:57 -!- wooby has quit (Remote closed the connection).
19:38:47 -!- helios24 has quit (Remote closed the connection).
19:45:30 -!- helios24 has joined.
19:45:30 -!- calamari has quit ("Leaving").
20:08:16 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)).
20:44:46 -!- helios24 has quit ("Leaving").
20:46:32 -!- tgwizard has joined.
21:01:17 -!- RodgerTheGreat has joined.
21:01:31 -!- sebbu2 has joined.
21:11:32 -!- oerjan has joined.
21:18:19 -!- ihope_ has joined.
21:18:34 -!- ihope_ has changed nick to ihope.
21:18:57 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:19:13 -!- nazgjunk has joined.
21:21:17 -!- sebbu has quit (Read error: 110 (Connection timed out)).
21:21:17 -!- sebbu2 has changed nick to sebbu.
21:27:21 -!- RodgerTheGreat has quit.
21:27:23 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
21:27:26 -!- UpTheDownstair has joined.
21:31:16 -!- UpTheDownstair has changed nick to nazgjunk.
21:45:51 -!- UpTheDownstair has joined.
21:46:08 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
21:46:11 -!- UpTheDownstair has changed nick to nazgjunk.
21:57:21 -!- nazgjunk has quit ("i seriously need some sleep -_- guh.").
21:59:59 -!- kxspxr has quit.
22:00:42 -!- RodgerTheGreat has joined.
22:08:15 -!- pikhq has quit (Read error: 110 (Connection timed out)).
22:13:50 -!- puzzlet has quit (Read error: 104 (Connection reset by peer)).
22:15:45 -!- _FabioNET_ has quit ("A domani...").
22:27:09 <oerjan> Interestingly there was recently mention of deep vs. shallow return on Lambda the Ultimate
22:27:21 <oerjan> GregorR: ^
22:27:51 <GregorR> Hm
22:28:50 <oerjan> my impression was that shallow return made most sense if the language distinguished methods from closures
22:29:19 <oerjan> the discussion was in the context of lexical scoping
22:30:09 <oerjan> while deep return made most sense if there were only one kind of functions
22:30:28 -!- puzzlet has joined.
22:30:44 <bsmntbombdood> no me understando
22:30:47 <oerjan> but i thought of one possibility: you could allow labels on blocks, to return from them by name
22:31:01 <bsmntbombdood> CL does that
22:31:07 <oerjan> (the last in the context of your plof question)
22:31:40 <oerjan> so does perl i think
22:31:53 <oerjan> another P-language :)
22:33:53 <oerjan> does plof have lexical scoping?
22:38:34 -!- Arrogant has quit ("Leaving").
22:53:47 <ihope> "No me understando"? Sheesh, even GregorR's Spanish is better than that.
22:53:50 <ihope> :-P
22:54:07 <oerjan> heck even mine :)
22:54:13 <oerjan> i think
22:54:23 <bsmntbombdood> heh
22:55:11 <oerjan> at least you got the verb ending right :)
22:56:38 <ihope> oerjan: pff. Can you translate "I would have been to like it if he hadn't been wanting to eat" into Spanish?
22:57:06 <ihope> Actually, no.
22:57:19 <ihope> "I would have been to like it if it weren't for his wanting to eat."
22:57:34 <oerjan> can you translate that into English first? :)
22:58:08 <oerjan> and no, i doubt i could go beyond the present tense without googling somewhat
22:58:18 <ihope> "I would have been to like it" is perfectly good and understandable English, isn't it?
22:58:24 <ihope> BabelFish translation: "Habría sido como a él si no estaba para el suyo que deseaba comer."
22:58:51 <ihope> BabelFish back-translation: "He would have been like a he if it were not for his that wished to eat."
22:59:31 <oerjan> perhaps but it is excessive for English, it reads almost like Douglas Adams' wioll haven been
22:59:58 <ihope> Can you say those last three words again?
23:00:31 <oerjan> my memory may be shaky but those were part of his mock grammar for time travellers
23:01:39 <ihope> Did he actually include "would have been to" in there somewhere?\
23:02:31 <oerjan> no
23:02:51 <ihope> A Google search for "I would have been to" yields things like "I couldn't talk about it to anybody, I would have been to ashamed."
23:03:16 <ihope> Aha! "I would have been to see Himmler or Hitler on the very first day; on the very same day."
23:03:19 <oerjan> which is a misspelling of "too"
23:03:53 <ihope> Yes.
23:04:07 <oerjan> but "be to see" is an undividable phrase, isn't it?
23:04:56 <oerjan> i am sure there may be occasions when you need that precision, but:
23:05:05 <ihope> Also, "I would have been to like it if it weren't for his wanting to eat." through Lost in Translation with Chinese, Japanese and Korean enabled produces "_ way I, because this material, with which contat of sees, we wished, poss est did not know _"
23:05:14 <ihope> Is it undividable?
23:05:37 <oerjan> for most cases you would do just as well with "I would have liked it" etc.
23:07:05 <oerjan> "be to see" certainly does not have the usual future implication of "be to"
23:07:58 <oerjan> eh, wait
23:08:38 <oerjan> actually i find that Hitler quote ambiguous in that respect
23:09:19 <oerjan> it would depend on context
23:10:48 <oerjan> But in "Have you been to see him?" it would be a phrase
23:11:31 <oerjan> or at least a different kind of construction
23:11:41 <ihope> I see.
23:11:49 <oerjan> anyhow, you are the native speaker here
23:11:55 <ihope> So like "gone to see"?
23:12:03 <oerjan> yeah
23:28:12 -!- sebbu has quit ("@+").
2007-02-13
00:02:04 -!- Sgeo has joined.
00:23:31 -!- ShadowHntr has joined.
00:28:31 -!- tgwizard has quit (Remote closed the connection).
00:40:48 <Sgeo> AFK
00:41:05 <bsmntbombdood> MAN LOVE RULES OK
00:42:15 <oerjan> TIME FLIES LIKE AN ARROW
00:42:28 <oerjan> FRUIT FLIES LIKE A BANANA
00:42:39 <bsmntbombdood> HILLARY FOR PRESIDENT
00:45:28 <oerjan> FOR A HILLARIOUS PRESIDENT
00:45:31 <Sgeo> back
00:46:05 <bsmntbombdood> COUNTRY WESTERN IS RUBBISH
00:46:18 <bsmntbombdood> http://youtube.com/watch?v=G6MJVzXbqRU
00:46:44 <oerjan> WESTERN COUNTRIES ARE BULLISH
00:48:25 <bsmntbombdood> MAN LOVE RULES OK
00:48:36 <SimonRC> THE OLD MAN THE BOATS
00:48:49 <bsmntbombdood> CAPITAL LETTERS ON MY HAT
00:48:59 <SimonRC> _Top Gear_ are great
00:49:06 <SimonRC> *is
00:49:13 -!- ihope has quit (Read error: 110 (Connection timed out)).
00:49:20 <bsmntbombdood> never heard of it
00:49:27 * SimonRC explains...
00:49:35 <bsmntbombdood> except for that clip
00:50:05 <SimonRC> For you Americans out there, _Top Gear_ is a sitcom about 3 guys whose job is to review and rate cars...
00:50:42 <SimonRC> there are genuine car reviews in the show, but much of it is about the stuff they get up to by claiming expenses off their employer.
01:02:20 <SimonRC> Ok, so I lied.
01:02:46 <SimonRC> It is actually supposed to be a car-reviewing show, and only incidentally a sitcom.
01:03:26 <oerjan> now that is what YOU think
01:14:18 * SimonRC suddenly wonders why people have pets. Yer stereotypical objective being would see it as a waste of effort for no appaent gain.
01:14:32 <SimonRC> Humans know different though...
01:14:36 <bsmntbombdood> companionship?
01:15:16 <oerjan> your stereotypical objective being would exterminate humans and replace them by more efficient robots
01:16:02 <SimonRC> bsmntbombdood: yeah, but don't other humans give that?
01:16:09 <bsmntbombdood> no
01:16:13 <bsmntbombdood> pets never bitch at you
01:16:15 <SimonRC> oerjan: I was looking for a more sensible answer.
01:16:29 <oerjan> have i ever been known to be sensible?
01:16:35 <SimonRC> sigh
01:17:23 <oerjan> there is probably less effort with a pet than with humans
01:17:39 <bsmntbombdood> yeah
01:17:48 <bsmntbombdood> food and a place to sleep and a pet is happy
01:18:07 <SimonRC> hmm, yeah
01:19:17 <bsmntbombdood> to live with a human, it has to like you
01:20:36 <SimonRC> Same for animals I would have thought.
01:21:10 <SimonRC> Ah, but there are plenty of species that are more friendly than humans.
01:21:16 <SimonRC> individually, at least.
01:21:53 <bsmntbombdood> yeah
01:22:08 <oerjan> animals are less complicated
01:22:18 <bsmntbombdood> a dog is going to like you even if no chick will give you a chance
01:22:31 <bsmntbombdood> unless your a total fuckhead
01:22:57 <SimonRC> yeah, ok
01:25:23 <SimonRC> The question came up because I was wondering why something of superhuman intelligence would keep humans as pets.
01:26:28 <oerjan> you writing an sf story?
01:28:06 <SimonRC> not exactly
01:28:14 <SimonRC> ...
01:28:42 <oerjan> hm... would a superintelligent being be able to make humans enjoy being its pets?
01:28:56 <SimonRC> depends on the definition of "pet"
01:29:00 <SimonRC> and on the humans
01:29:17 <oerjan> i suppose so, since humans worship gods
01:30:04 <oerjan> for that matter, maybe we already are pets
01:30:16 <SimonRC> ... If you look after them, give them the correct environment (including other humans of course) and work that they enjoy, they will be perfectly happy.
01:30:36 <SimonRC> plus insome ways you will understand them better than any humans can
01:30:59 <SimonRC> http://fof.durge.org/~sc/Kigdatsi/
01:31:04 <oerjan> perhaps there is an unending chain of pet-owner relationships
01:31:07 <SimonRC> nah
01:31:33 <SimonRC> I have been inconsistant over the years, but the above is a collection of things I have written.
01:32:28 <SimonRC> the messages to and from "Fonori" under "written_cwi" are the most important recent conversation, though they are about a specific scenario.
01:32:33 <oerjan> i suppose the possibility of that would depend on whether there is an unending progression of possible levels of intelligence
01:32:39 <SimonRC> yes
02:40:17 -!- SimonRC has changed nick to CRnomiS.
02:40:26 -!- CRnomiS has changed nick to SimonRC.
03:01:56 -!- calamari has joined.
04:04:02 -!- oerjan has quit ("leaving").
05:16:53 -!- ShadowHntr has quit ("End of line.").
05:26:45 -!- Stark has joined.
05:28:14 -!- Stark has changed nick to Starked.
05:28:53 -!- Starked has left (?).
05:29:05 -!- Starked has joined.
05:38:10 -!- Starked has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]").
05:54:52 -!- digital_me has quit (Read error: 110 (Connection timed out)).
06:11:23 -!- calamari has quit ("Leaving").
06:33:24 -!- anonfunc has joined.
07:25:28 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)).
07:29:45 -!- RodgerTheGreat has quit.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
13:22:25 -!- helios24 has joined.
13:29:49 -!- helios24 has quit ("Leaving").
13:39:05 -!- helios24 has joined.
13:47:31 -!- helios24 has quit (Remote closed the connection).
13:48:28 -!- helios24 has joined.
13:50:09 -!- helios24 has quit (Client Quit).
15:11:28 -!- helios24 has joined.
15:37:56 -!- ShadowHntr has joined.
16:01:43 -!- anonfunc has quit.
16:24:46 -!- tgwizard has joined.
16:24:46 -!- RodgerTheGreat has joined.
16:24:46 -!- jix has joined.
16:34:51 -!- nazgjunk has joined.
17:22:15 -!- crathman has joined.
17:37:02 * SimonRC is going to meet Kevin Warwick.
17:50:07 <lament> kewho.
17:51:18 <SimonRC> RTFW
17:53:51 <lament> tfwhat
17:57:06 <SimonRC> Wikipedia
17:57:14 <lament> oh pf.
18:00:10 <lament> i'm not reading that!
18:03:32 -!- oerjan has joined.
18:07:28 -!- tgwizard has quit (Read error: 110 (Connection timed out)).
18:07:56 -!- sebbu has joined.
18:08:34 <sebbu> hi everybody
18:08:48 <oerjan> hi
18:09:25 <lament> hy
18:15:44 <RodgerTheGreat> hi
18:19:32 -!- UpTheDownstair has joined.
18:36:37 -!- nazgjunk has quit (Success).
18:44:22 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
18:45:41 -!- FabioNET has joined.
19:11:29 -!- UpTheDownstair has quit (Success).
19:11:33 -!- nazgjunk has joined.
19:18:52 -!- flagitious has joined.
20:37:15 -!- crathman has joined.
20:55:51 -!- FabioNET has quit ("A domani...").
21:02:14 -!- sebbu2 has joined.
21:10:07 -!- helios24 has quit ("Leaving").
21:17:03 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:20:37 -!- sebbu has quit (Read error: 110 (Connection timed out)).
21:27:54 -!- FabioNET has joined.
21:49:48 -!- anonfunc has joined.
21:52:28 -!- anonfunc has quit (Client Quit).
22:13:34 -!- nazgjunk has quit ("Bi-la Kaifa").
22:55:55 -!- FabioNET has quit ("A domani...").
22:57:59 -!- NK\_ has quit (Remote closed the connection).
22:58:01 -!- NK\ has joined.
23:33:16 -!- sebbu2 has quit ("@+").
23:36:03 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
23:55:35 -!- anonfunc has joined.
2007-02-14
00:04:39 -!- RodgerTheGreat has quit.
01:04:38 -!- crathman has joined.
01:07:33 <bsmntbombdood> I need a language that does implicit currying
01:11:03 * oerjan points at Haskell
01:11:09 * oerjan ducks
01:11:44 <oerjan> also Ocaml
01:11:44 <bsmntbombdood> haskell does?
01:12:14 <oerjan> if implicit currying means what i think it means
01:13:01 <bsmntbombdood> (xy.E)z ==> \y.E[x := z]
01:13:11 <bsmntbombdood> is what i mean by implicit currying
01:13:24 <bsmntbombdood> er
01:13:40 <bsmntbombdood> (\x y.E)z ==> \y.E[x := z]
01:14:02 <oerjan> yep, haskell does that
01:14:25 <bsmntbombdood> cool
01:15:44 <oerjan> as well as the reverse: (\x -> \y -> E) = \x y -> E
01:17:42 <bsmntbombdood> in x y z, is it (x y) z?
01:17:49 <oerjan> yep
01:18:04 <bsmntbombdood> k
01:19:36 <oerjan> i thought you were reading up on haskell, or maybe that was the flour-product oriented guy
01:20:48 <bsmntbombdood> I was
01:28:31 <bsmntbombdood> bah, haskell won't let me redefine if
01:31:22 <bsmntbombdood> or null, or map
01:31:44 <oerjan> null and map can be redefined
01:32:01 <oerjan> import Prelude hiding (null, map)
01:32:16 <oerjan> if is a keyword however.
01:33:02 <bsmntbombdood> shouldn't need to be in a lazy language
01:33:20 <oerjan> it's so that you can have then and else written out
01:34:20 <bsmntbombdood> hah, great error message
01:35:01 <oerjan> but in principle it is just syntactic sugar for case a of True -> b; False -> c
01:35:11 <oerjan> what message?
01:35:17 <bsmntbombdood> http://pastebin.ca/354583
01:36:15 <oerjan> Did you get that?
01:36:25 <bsmntbombdood> yeah
01:37:00 <oerjan> A function cannot return a function of the same type
01:37:08 <oerjan> that would trigger such a thing
01:37:29 <oerjan> are you trying to do combinators?
01:37:44 <bsmntbombdood> no
01:38:06 <bsmntbombdood> i did map f l = (null l) nil (cons (f (car l)) (map f (cdr l)))
01:38:58 <bsmntbombdood> In the first argument of `cdr', namely `l'
01:38:59 <bsmntbombdood> In the second argument of `map', namely `(cdr l)'
01:41:48 <oerjan> well if that should work then you would have to use combinatory booleans for (null l)
01:42:27 <bsmntbombdood> (null l) ==> \x y -> x or \x y -> y
01:42:40 <oerjan> exactly
01:43:33 <bsmntbombdood> So, how do i fix it?
01:43:41 <oerjan> perhaps the list is the problem.
01:43:50 <oerjan> what is cons defined as?
01:44:08 <bsmntbombdood> cons x y = \f -> f x y
01:44:40 <oerjan> thought so. cons x y cannot then have the same type as y.
01:45:02 <bsmntbombdood> bah
01:45:12 <oerjan> without such an occurs check error, because the type becomes recursive
01:45:39 <oerjan> you can do it with ocaml if you use the -t command line option
01:45:52 <oerjan> i did it for an Unlambda "compiler" once
01:46:08 <bsmntbombdood> so there's no way to do this in haskell?
01:46:23 <oerjan> not without an option to turn of the occurs check
01:46:28 <oerjan> *off
01:46:43 <oerjan> i don't remember if there is such an option
01:46:54 <oerjan> are you using ghc or hugs?
01:47:05 -!- flapjack has joined.
01:47:12 <bsmntbombdood> ghc
01:47:36 <oerjan> of course for portability you can wrap it in a datatype Fun = Fun -> Fun
01:47:47 <oerjan> i mean:
01:47:57 <oerjan> data Fun = Fun (Fun -> Fun)
01:48:07 <bsmntbombdood> huh?
01:48:52 <oerjan> the occurs check only triggers if the type recursion is not inside a datatype definition
01:48:53 -!- calamari has joined.
01:49:55 <oerjan> but of course if your point is to use a language where there is no syntactic noise with combinators, that doesn't work
01:50:15 -!- ShadowHntr has quit (Client Quit).
01:50:34 <oerjan> let me check the ghc webpage
01:54:36 -!- voodooattack has joined.
01:54:44 <bsmntbombdood> I should just write my own beta reducer
01:55:45 -!- flapjack has left (?).
01:57:22 <oerjan> alas, i cannot find a ghc option to turn it off
01:59:41 <oerjan> and ocaml won't work if you depend on lazyness
02:01:01 <bsmntbombdood> lame
02:03:57 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
02:04:19 -!- anonfunc has quit.
02:06:23 <oerjan> the best i can think of with haskell is to start with data Fun = Fun { fun :: Fun -> Fun } and define an application operator from that
02:07:31 <oerjan> darn, that would certainly ruin the implicit currying
02:20:32 <voodooattack> print "hi"
02:31:53 <bsmntbombdood> i kicked my power cable out :(
02:32:18 <oerjan> whoops
02:34:30 <oerjan> i should say that someone somewhere must have written a minimal lambda calculus evaluator in the haskell style already. hm...
02:34:41 <oerjan> perhaps there is one in LambdaBot.
02:43:06 -!- Sgeo has joined.
02:51:28 <oerjan> Sheesh. It says on the webpage that Lambdabot has a lambda calculus but I cannot find the command...
02:51:52 * bsmntbombdood goes back to beta reduction with pencil and paper
02:55:22 <oerjan> hey, try this page: http://www.dina.dk/~sestoft/lamreduce/index.html
03:03:04 <bsmntbombdood> oh nice
03:04:37 <bsmntbombdood> bah
03:04:44 <bsmntbombdood> they have stuff already bound :/
03:07:52 -!- anonfunc has joined.
03:12:31 <oerjan> you don't have to use it you know :)
03:27:22 -!- crathman has joined.
03:37:31 -!- bsmntbombdood has changed nick to irt3h1337.
03:38:10 -!- irt3h1337 has changed nick to bsmntbombdood.
03:38:45 <oerjan> irt3h?
03:38:55 <bsmntbombdood> i r t3h 1337
03:39:01 <oerjan> ah.
03:39:05 <bsmntbombdood> joke in another channel
03:40:23 <oerjan> it's really quite absurd that i understand what 1337 means :)
03:41:17 <bsmntbombdood> that's absurd?
03:41:39 <bsmntbombdood> Sir, please recalibrate your absurd-o-meter
03:42:44 <oerjan> of course it pales compared with the fact that i am on this channel :)
03:43:38 <oerjan> and that i am trying to write a malbolge dialect.
03:44:15 <bsmntbombdood> not a whole lot of esotericallity goes on in this channel
03:44:19 <bsmntbombdood> more just CS
03:46:25 <oerjan> you mean we need to find a medium and have a sance?
03:46:37 <bsmntbombdood> uh...what?
03:47:11 <bsmntbombdood> why would we want to communicate with the dead?
03:47:15 <oerjan> or study old alchemist books
03:47:58 <oerjan> to be esoteric of course
03:48:15 <bsmntbombdood> ponder weak and weary over many a quaint and curious volume of forgotten lore
04:07:37 -!- anonfunc_ has joined.
04:07:41 -!- Sgeo has quit (Remote closed the connection).
04:07:41 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
04:20:34 -!- anonfunc has quit (Read error: 110 (Connection timed out)).
04:25:33 <bsmntbombdood> silly rabbit, numbers in hardware are for C programmers!
04:41:27 -!- oerjan has quit ("Good night").
04:41:37 -!- anonfunc_ has changed nick to anonfunc.
05:08:10 -!- calamari has quit ("Leaving").
05:36:51 -!- flagitious has quit ("Leaving").
06:06:39 -!- ShadowHntr has joined.
06:35:12 <lament> i agree
06:35:17 <lament> this channel is not esoteric enough.
06:35:34 <lament> to fix that, from now on, English is officially forbidden.
06:36:03 <lament> You have five minutes for any last thoughts (in English).
06:36:07 <GregorR> channel.language = pseudocode?
06:36:27 <lament> anybody caught using English after that will be publicly humiliated.
06:36:46 <lament> (in pseudocode)
06:37:34 <GregorR> humiliation.language = pseudocode; humiliation.effectiveness < EFFCTVNS_LOW
06:39:59 <lament> false
06:40:06 <lament> humiliation.tool = whip;
06:40:45 <voodooattack> libToilet->Flush()
06:41:20 <lament> humiliate (x) = begin; x.remove(pants); humiliation.tool.apply(x.behind); end
06:43:50 <voodooattack> lament.doLament(100);
06:44:34 <lament> attack(voodoo)
06:44:58 <voodooattack> ceaseAttack(voodoo);
06:45:23 <voodooattack> attack(lament, &wpnNuclearBomb);
06:45:42 <lament> nu, teper' nash kanal gorazdo bolee ezoterichen.
06:46:32 <lament> ni siquiera nosotros entendemos a nosotros mismos
06:46:49 <voodooattack> speakko englaisso? :P
06:47:51 <lament> nao, so pode falar os outros idiomas
06:50:06 <voodooattack> xD
07:13:49 -!- ShadowHntr has quit (Client Quit).
07:16:34 -!- helios24 has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:10:55 -!- Arrogant has joined.
08:32:49 -!- Arrogant has quit ("Leaving").
09:34:57 -!- voodooattack has quit.
12:32:13 -!- jix has joined.
14:06:05 -!- nazgjunk has joined.
14:33:13 <bsmntbombdood> gwaq trono el trope y loq
14:33:53 -!- sekhmet has quit ("away").
14:34:03 <bsmntbombdood> wern et we poneq ba nog
14:35:20 <bsmntbombdood> (map cut-with-knives (channel-users))
14:37:50 <bsmntbombdood> (map (compose repair cut-with-knives) (channel-users))
14:41:15 -!- nazgjunk has quit ("Bi-la Kaifa").
14:54:31 -!- sekhmet has joined.
15:04:21 <oklopol> vi kane sake a zx3
15:23:08 -!- sekhmet has quit ("meh").
15:23:35 -!- crathman has joined.
15:36:50 -!- sekhmet has joined.
15:48:52 -!- RodgerTheGreat has joined.
17:33:55 -!- anonfunc has quit.
17:45:27 -!- tgwizard has joined.
18:12:56 -!- puzzlet has quit (Read error: 110 (Connection timed out)).
18:21:31 -!- sebbu has joined.
18:23:43 -!- kxspxr has joined.
18:37:05 -!- oerjan has joined.
18:37:43 -!- digital_me has joined.
18:43:49 <bsmntbombdood> what's \x y.y with S and K?
18:44:42 <oerjan> Language.English.status == Forbidden
18:45:12 <GregorR> oerjan.languages["pseudocode"].quality < LQUAL_MEDIUM
18:45:51 <oerjan> Language.Pseudocode.Base == "Haskell"
18:45:58 <bsmntbombdood> channel.send(oerjan.compute(T[\x y.y]))
18:46:21 <GregorR> oerjan.ooTree.reasonable = false;
18:46:45 <GregorR> typeof(languages) == TYPE_AARRAY
18:46:51 <oerjan> unlambdaify(\x y.y) == K I == K (S K K)
18:47:17 <bsmntbombdood> oooo
18:48:07 <oerjan> Language.Haskell.ModuleTree /= ObjectOriented
18:49:03 <bsmntbombdood> no me understando
18:49:50 <oerjan> Che cosa il sua problemo?
18:51:23 <oerjan> \x y.y == \x. \y.y == \x. I == K I
18:51:43 <GregorR> O, lenguas natural estan OK?
18:52:20 <oerjan> Natrlich, nur Englisch ist verboten.
18:52:52 <oerjan> Men ikke la det utarte, OK?
18:53:21 <GregorR> Pero, no hablo lenguas con exceptin del ingls :(
18:53:47 <bsmntbombdood> !help
18:53:50 <EgoBot> help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon
18:53:52 <EgoBot> 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl
18:54:07 <GregorR> EgoBot es exento :P
18:54:31 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
18:54:32 <oerjan> Pseudocode perfettamente buono.
18:54:51 <bsmntbombdood> unlambdaify(\x y.x y)
18:54:52 <GregorR> Qu es "perfettamente"?
18:55:53 <oerjan> "perfettamente" == Italian.AdverbialFormOf("perfetto")
18:56:12 <GregorR> Y perfetto es?
18:56:31 <GregorR> italian["perfetto"].toEnglish();
18:56:45 <oerjan> "perfetto" = Oerjan.GuessItalianEquivalence("perfect")
18:56:59 <GregorR> Ah, s s.
18:57:23 <GregorR> Esto conversacin es muy largo X-P
18:57:45 <GregorR> Err, lento
18:58:16 <oerjan> [spanish[x].toEnglish()| x <- ["largo","lento"]
18:58:21 <oerjan> *]]
18:58:46 <GregorR> spanish["lento"].toEnglish() == "slow"
18:58:55 <GregorR> spanish["largo"] == NULL
18:59:04 <GregorR> (Maybe :P)
18:59:29 <oerjan> Protest.basedOn(existenceOf("Key Largo"))
19:05:37 <bsmntbombdood> channel.language = English
19:05:38 <oerjan> \x y.x y == \x.\y.x y == \x.(S (K x)) I == S (S (K S) (S (K K) I)) (K I)
19:05:39 <bsmntbombdood> Ha!
19:06:47 <oerjan> http://oerjan.nvg.org/esoteric/ulify2.scm
19:07:19 <bsmntbombdood> fun
19:11:10 <oerjan> It's for unlambda, not pure combinator calculus however.
19:11:57 -!- kxspxr has quit.
19:15:36 <bsmntbombdood> why is it called calculus?
19:15:52 -!- helios24 has quit (Read error: 60 (Operation timed out)).
19:16:28 <oerjan> because it is a system for calculating functions
19:28:13 <bsmntbombdood> \x y.y == SK
19:28:24 <bsmntbombdood> ha! shorter
19:28:46 <oerjan> ah yes, the KI = SK equation
19:31:01 <oerjan> it's not valid for unlambda though - it breaks with side effects
19:32:01 <bsmntbombdood> ha! side effects
19:32:10 <bsmntbombdood> oh come on
19:32:12 <bsmntbombdood> http://ling.ucsd.edu/~barker/Iota/
19:35:08 <oerjan> what about it?
19:37:58 <bsmntbombdood> crazy
19:39:54 <oerjan> ok
19:43:32 <bsmntbombdood> ummm
19:43:33 <bsmntbombdood> == (^x.xSK)(^x.xSK)
19:43:33 <bsmntbombdood> == (^x.xSK)SK
19:43:34 <bsmntbombdood> == SSKK
19:43:53 <bsmntbombdood> is that wrong or am i missing something?
19:45:12 <oerjan> i think you mean SKSK
19:45:54 <bsmntbombdood> that's what i thought
19:46:05 <bsmntbombdood> that's not what it says on that page
19:48:15 <oerjan> hm... SKSK = KK(SK) = K
19:48:19 <bsmntbombdood> right
19:48:31 <bsmntbombdood> so *ii isn't I
19:49:06 <oerjan> and the expression given for K is more complicated
19:50:15 <bsmntbombdood> weird
19:51:19 <oerjan> in fact all the others use the first one, so they are wrong too
19:53:13 <bsmntbombdood> yeah
19:57:05 <oerjan> however, *ii = K and *i*ii = S, so it can be easily fixed
19:57:43 <bsmntbombdood> heh, his are way too complicated
20:01:14 <oerjan> i'll make a note about it on our wiki
20:02:09 <bsmntbombdood> back to class
20:07:19 <oerjan> eh, wait
20:07:25 <oerjan> we are wrong
20:07:57 <oerjan> and the page is right
20:10:34 <oerjan> because in (^x.xSK)SK, only the S should be beta substituted
20:35:12 <oklopol> can i see a brainfuck implementation with haskell?
20:35:27 <oerjan> hm...
20:35:36 <oerjan> there is one on Lambdabot
20:35:37 <oklopol> i just can't figure out how imperativeness is done effectively with a purely funxxxxional lang
20:35:48 <oklopol> but then again, it's proly easy
20:35:55 -!- helios24 has joined.
20:35:58 <oerjan> don't you know about monads?
20:36:12 <oklopol> i thought they might be the answer
20:36:29 <oerjan> although it's only I/O that really needs it for brainfuck
20:36:31 <oklopol> i'm one of the idiot who can't figure monads out
20:36:37 <oklopol> *idiots
20:37:07 <oklopol> but, does the massive array have to be cloned on every step?
20:37:21 <oklopol> or do monads somehow handle it haxxorly?
20:37:52 <oklopol> i get leet-wannabe when i'm tired, sorry :)
20:37:58 <oerjan> no. you can use two linked lists, one for everything left of the current position and one for everything to the right.
20:38:35 <oerjan> because brainfuck is not really random access.
20:39:03 <oerjan> the brainfuck state can easily be done purely functionally.
20:39:57 <oklopol> that's exactly what i can't figure out, is there an implementation :P
20:40:32 <oklopol> you can make one in 5 min i'm sure
20:40:33 <oklopol> :D
20:41:46 <oerjan> also haskell has a module called Data.Array.Diff that cheats in such a way that arrays can be changed efficiently without anyone noticing that it's not functional.
20:41:54 <oerjan> *purely functional
20:42:11 -!- helios24 has quit ("Leaving").
20:42:46 <oerjan> "When the // operator is applied to a diff array, its contents are physically updated in place. The old array silently changes its representation without changing the visible behavior: it stores a link to the new current array along with the difference to be applied to get the old contents."
20:42:56 <oklopol> also, brainfuck is what i always do when i begin learning a language, since it isn't as easy (or i can't do it in the usual way), i'd like to see it :D
20:43:00 <oklopol> okay
20:47:49 <oerjan> good grief. the Lambdabot version is excessively complicated.
20:48:17 -!- helios24 has joined.
20:48:46 <oerjan> and mercilessly non-pure
20:49:10 <oklopol> would it take you long to make one? :P
20:49:24 <oklopol> (i'm not sure what you were talking about, though)
20:49:52 <oerjan> I'm talking about http://www.cse.unsw.edu.au/~dons/lambdabot/scripts/BF.hs
20:50:17 <oerjan> it shouldn't take too long since i already started writing one a while ago
20:51:25 <oerjan> but i'll try and see if there isn't a finished one somewhere
20:52:05 <oklopol> i wrote one in php in 15 min when i finally read the spec.... then debugged for 2 hours to find out my code was right but i had confused output and return values when writing test cases :P
20:54:05 <oklopol> i could become a professional brainfuck interpreter coder or something
20:54:14 <oklopol> i've written maybe 50 or smth :D
20:59:13 <oerjan> found one, it uses a real functional tape but mysteriously uses a tape for the program as well
20:59:39 <oerjan> http://www.joachim-breitner.de/blog/archives/161-Brainfuck-interpreter-in-Haskell.html
21:00:26 <oklopol> thanks, i'll try to read that
21:03:09 <oerjan> my own interpreter got buried under all the configuration options i wanted to include
21:03:10 -!- sebbu2 has joined.
21:04:40 <oerjan> although it does a more proper parsing of the brainfuck, so it doesn't have to search through the program for matching loops
21:05:15 <oklopol> i have one in c++ that does nice circular tree structures
21:05:21 <oklopol> (i don't know the term)
21:05:35 <oklopol> like... a list and [] are in a sublist
21:05:45 <oklopol> nesting
21:05:46 <oklopol> maybe
21:05:47 <oklopol> :D
21:07:15 <oklopol> i had this brainfuck quine, ran for 6 days on my old brainfuck interpreter, so i made a new one that used hashmaps or smth for the loops, ran for 8 hours i think, then made a good one, with as much non-algorithmic optimization i can think of, 6 hours
21:07:19 <oerjan> not circular, that would be if some of the sublists are equal to the list itself
21:07:33 <oklopol> then realized the quine did a [+]... and i was using ints :)
21:07:41 <oerjan> heh :)
21:07:47 <oklopol> took it of and it ran in a microsecond or smth xD
21:07:49 <oklopol> *off
21:07:54 <oklopol> i mean, put chars there
21:08:20 <oerjan> yeah, even poorly implemented brainfuck is not _that_ inefficient :)
21:09:05 <oklopol> well, i though it migh've been an only mathematically proven quine or smth, didn't even look at it until caught a glimpse of [+] and burst into laughter :P
21:09:41 <oerjan> just be glad you didn't use bignums :)
21:10:23 <oklopol> well, i think i'd've closed the prog after a week :D
21:10:39 <oklopol> hmm... i think it didn't get till the end now that i come to think of it
21:11:14 <oklopol> sometimes i wonder how unpractical i can get, 30 hours of work over a brainfuck code i don't even look at :D
21:11:22 <oerjan> a bignum brainfuck implementation should be easy in Haskell though
21:11:42 <oklopol> yeah, well, in anything else than c++ actually
21:12:03 <oklopol> c++ doesn't have bignums in the standard package
21:12:07 <oerjan> i suppose
21:12:42 <oklopol> java does, python does, vb does, that's pretty much all langs i know thoroughly :<
21:12:49 -!- helios24 has quit ("Leaving").
21:14:02 <oklopol> in c++ you'd have to dl boost, but i think it's easier to write something yourself than dl it :D
21:14:13 <oerjan> heh
21:14:27 <oklopol> at least more fun
21:15:05 <oerjan> well, a good bignum implementation is not that trivial, especially huge multiplies
21:15:11 <oklopol> true
21:15:25 <oklopol> that's why i've never gotten one to work for all operators
21:15:36 <oklopol> or, never implemented all of them rather
21:15:51 <oklopol> i've done a few bignum classes in c++
21:16:28 <oklopol> i think i did multiplication with addition in the first one :P
21:17:02 -!- GregorR has changed nick to Gonee.
21:17:05 <oerjan> _just_ addition? not even shifts?
21:18:44 <oklopol> ^ with *, * with +, + with inc, inc with binary logic and you get the winning combination
21:18:51 <oklopol> :)
21:19:03 <oklopol> i don't remember, i was a noob :P
21:19:28 -!- Gonee has changed nick to _D6Gregor1RFeZi.
21:20:14 <oerjan> gregor now consumes reality again.
21:20:31 <_D6Gregor1RFeZi> It's what I do.
21:21:03 <oerjan> and produces ... what? int-elligence, perhaps.
21:21:25 -!- sebbu has quit (Connection timed out).
21:21:26 -!- sebbu2 has changed nick to sebbu.
21:21:54 <oerjan> or was that the other way around.
21:23:17 -!- Sgeo has joined.
21:57:59 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:19:38 <oklopol> what does const do in haskellllll
22:19:39 <oklopol> ?
22:20:10 <oklopol> i COULD ask on #haskell of course...
22:20:20 <oerjan> const = K
22:20:34 <oklopol> identity?
22:20:50 <oklopol> so... useless? :P
22:20:57 <oerjan> const x y = x
22:21:19 <oklopol> ohhhh
22:21:30 <oerjan> not useless, it is quite useful in higher-order programs
22:21:37 <oklopol> yeah, prolly
22:21:40 <oerjan> btw, id x = x
22:22:08 <oklopol> isn't it rather a function that returns x with any arg?
22:22:41 <oerjan> const x is such a function yes.
22:23:22 <oklopol> aaaaa so NOT id
22:23:35 <oklopol> const /= id
22:23:41 <oerjan> no, id is id. :)
22:23:49 <oerjan> identically :D
22:23:56 <oklopol> oh, so it seems :P
22:24:36 <oerjan> i don't know if the S combinator has a name in haskell though.
22:24:56 <oklopol> S did what now? :P
22:25:12 <oerjan> S x y z = x z (y z)
22:25:12 <oklopol> i have never played with lambda calculus
22:25:43 <oerjan> i was just reading this page: http://www.haskell.org/haskellwiki/Pointfree
22:26:12 <oerjan> some really weird examples there
22:27:15 <oklopol> point-free map fusion... :?
22:28:33 <oerjan> i suppose map fusion is an automatic optimization technique
22:28:46 <oklopol> mem' = any . (==) <<< i find even this pretty sick :\
22:28:52 <oerjan> to avoid making intermediate lists
22:29:10 <oklopol> ah okay
22:29:39 <oerjan> well i wouldn't go that far either.
22:30:36 <oklopol> i've read a lot about functional langs but never written more than one liners on them... i should try doing something, everything might get clearer :O
22:30:37 <oklopol> :P
22:30:46 <oklopol> one-liners
22:31:14 <oerjan> it gets strange with pointless style when you use it to hide more than one argument, like with any.
22:31:37 <oerjan> in that mem'
22:32:05 <oklopol> yeah, pretty neat though :P
22:32:25 <oerjan> but as long as it chains just one argument through, it can in fact be clearer.
22:32:31 <oerjan> in my opinion.
22:34:44 <oklopol> yeah, they are more abstract, the small ones are easier, the big ones pretty undecipherable :P
22:34:55 -!- nazgjunk has joined.
22:35:10 <oklopol> i can actually read the bf interpreter
22:35:28 <oerjan> that's good. :)
22:35:37 <oklopol> slowly though
22:36:28 <oklopol> -- Sets the current value
22:36:28 <oklopol> set :: Tape a -> a -> Tape a
22:36:28 <oklopol> set t v = doOn t (const v)
22:36:35 <oklopol> this took me a while :D
22:37:08 <oerjan> aha.
22:37:35 <oklopol> it's quite simple now that i think about it
22:37:43 <oerjan> that is an example of the usefulness of const.
22:37:58 <oklopol> indeed
22:39:08 -!- _D6Gregor1RFeZi has changed nick to GregorR.
22:39:51 <oklopol> okay, i can't follow anymore xD
22:39:56 <oklopol> gotta continue my tutorial...
22:51:10 -!- nazgjunk has quit ("Bi-la Kaifa").
22:51:21 <bsmntbombdood> oerjan: no
22:51:33 <bsmntbombdood> (\x.xKS)(\x.xKS)
22:51:51 <bsmntbombdood> hmm
22:51:52 <bsmntbombdood> maybe
22:53:07 <bsmntbombdood> (\x.((xK)S))(\x.((xK)S))
22:53:15 <oerjan> eh, the page has SK
22:53:22 <bsmntbombdood> er
22:53:24 <bsmntbombdood> right
22:54:00 <bsmntbombdood> \x.((xS)K)
22:54:02 <oerjan> although we might check what happens with KS as well.
22:54:37 <oerjan> indeed those are equivalent.
22:54:47 <bsmntbombdood> (((\x.xSK)S)K)
22:55:15 <bsmntbombdood> so it's SSKK?
22:55:24 <oerjan> yes, as the page says
22:55:26 <bsmntbombdood> so the page is right
22:55:54 <oerjan> because application is left associative
22:56:16 <bsmntbombdood> well, then \x.x(SK) would make for shorter programs then
22:57:14 <bsmntbombdood> And how to you unlamdify \x.xSK ?
22:57:18 <oerjan> no, because then the previous steps will break.
22:57:44 <bsmntbombdood> hmm
22:58:11 <oerjan> \x.(xS)K = S(SI(KS))(KK)
22:59:08 <oerjan> you just need three rules:
22:59:29 <oerjan> \x A B = S (\x A) (\x B)
22:59:38 <oerjan> \x x = I
22:59:56 <oerjan> \x C = K C when C does not contain x
23:00:24 <oerjan> *\x = \x.
23:02:26 <bsmntbombdood> so you get \x.xSK == (S (\x.x) (\x.S))(KK) == (SI(KS))(KK)
23:03:19 <oerjan> eh no. because \x.xSK is really \x.(xS)K
23:03:53 <oerjan> or, you are missing an S in there.
23:04:20 <oerjan> the outermost one.
23:04:51 <bsmntbombdood> oh
23:05:14 <oerjan> this is actually easier in unlambda notation.
23:06:26 <oerjan> just substitute ``s for each `, change the variable to i and put `k before everything else.
23:06:59 <bsmntbombdood> hmmm
23:07:11 <oerjan> and remove the initial \x. (^x in the unlambdaify notation)
23:08:12 <bsmntbombdood> How did I not understand those rules before
23:08:16 * bsmntbombdood smacks head
23:09:14 <oerjan> those rules are really what explains why combinatory logic uses S K I, also. :)
23:10:09 <bsmntbombdood> wikipedia is no good for learning
23:12:22 -!- sebbu has quit ("@+").
23:14:58 <bsmntbombdood> yeah, S K I make a lot more sense now
23:16:49 <oklopol> i was skiing the other day
23:17:30 <bsmntbombdood> where you thinking about combinatory logic?
23:18:55 <oklopol> sure
23:19:00 <oklopol> always
23:19:12 <oerjan> that _could_ be hazardous in steep hills
23:19:48 <oklopol> yes, unless you are very good at either of them
23:20:16 <bsmntbombdood> I tried all math class to get (SI(KS))(KK)
23:23:29 <oerjan> actually my experience is that the better you get at math the more hazardous it becomes to do other things simultaneously.
23:23:56 <oklopol> well, true :P
23:25:13 <oerjan> because you get to the point where you are completely immersed in it.
23:25:15 <oklopol> i often have a hard time listening to ppl since i only hear the first few words and then whatever i was thinking about blocks all hearing again
23:25:34 <oerjan> heh
23:26:14 <oklopol> same thing with reading a book, i get an idea, 20 minutes pass and someone asks me why i've been looking at the same page for 20 min
23:27:10 <oerjan> you should be prime professor material :)
23:27:16 <oklopol> hehe prolly :P
23:27:46 <oklopol> often when someone asks me if i want to go somewhere sometime i have to answer i can't come because i wouln't remember to
23:27:49 <oklopol> *wouldn't
23:27:59 <bsmntbombdood> academia is the only place for computer science :/
23:28:21 <oklopol> today i asked a teacher in advance what to do in case i forget a test... and forgot it as i'd predicted :)
23:29:01 <oklopol> bsmntbombdood what do you mean by that?
23:29:17 <bsmntbombdood> what's another job you can get doing cs
23:29:31 <oklopol> what's cs?
23:29:36 <bsmntbombdood> computer science
23:29:40 <oklopol> :P
23:29:55 <oerjan> see, he already forgot ;-)
23:30:02 <oklopol> i feel so clever xD
23:31:03 <oerjan> but seriously, don't you have something with an alarm/calendar system?
23:31:13 <oklopol> i should get one
23:31:24 <oklopol> maybe some day
23:31:52 <oklopol> in high school teachers don't mind things happening half a year late
23:32:03 <oklopol> so i don't have a real urge :)
23:34:05 * oerjan does remember the last year norwegian projects in high school, when all the pupils in my class were so late the teacher just replaced it with a test instead.
23:34:23 <oerjan> essentially.
23:35:29 <oerjan> there may have been a couple exceptions but i was not one of them.
23:35:44 <oklopol> yeah, that would be ideal
23:36:45 <oklopol> i'm not the sort of guy who likes to hear about derivatives for 30 lessons and do 150 assignments when i've known them for 5 years
23:37:30 <oklopol> if there was just a test, i'd get the best grade prolly, with this system i have to beg for the worst grade to avoid the assignments
23:38:27 <bsmntbombdood> yeah
23:40:24 <bsmntbombdood> i hate school
23:41:15 <bsmntbombdood> cept my math class now doesn't have required homework :)
23:42:00 <oklopol> well, i wouldn't mind assignments should they be challenging
23:42:40 <oklopol> i just can't do a lot of routineous assignments
23:42:50 <oklopol> i just explode
23:49:07 <bsmntbombdood> it's like 20 problems the same
23:51:49 <oklopol> well, a problem on the last page was to find the sides for a triangle for which it's area is the greatest possible
23:53:08 <oklopol> last page of the 300 page book
23:53:30 <oklopol> and they were in order of difficulty
23:53:37 <oklopol> somewhat at least
2007-02-15
00:11:51 -!- voodooattack has joined.
00:28:32 <bsmntbombdood> oerjan how do you unlambdify stuff like \x.\y.x y
00:29:23 <oerjan> it can be done in the same way but there is an additional rule that is helpful:
00:29:32 <bsmntbombdood> \x.(S (Kx) I) ??
00:29:50 <oerjan> \y. C y = C
00:30:05 <oerjan> so \x.\y.x y = \x.x = I
00:30:30 <oerjan> yep, that is the direct way.
00:30:36 <bsmntbombdood> but then what?
00:31:36 <bsmntbombdood> for the outer one
00:31:42 <oerjan> \x.((S (Kx)) I = S(S(KS)(S(KK)I))(KI)
00:32:23 <oerjan> eh, forget first parenthesis
00:33:35 -!- crathman has joined.
00:33:49 -!- crathman has quit (Remote closed the connection).
00:35:49 -!- crathman has joined.
00:37:32 -!- tgwizard has quit (Read error: 60 (Operation timed out)).
00:45:59 <bsmntbombdood> damn that's complicated
00:49:29 <voodooattack> http://www.encyclopediadramatica.com/index.php/C
00:49:49 <voodooattack> let's try that bit of code :P
00:50:38 <oerjan> yep, abstraction elimination by this method is exponential in the number of variables.
00:52:21 <oerjan> there are more complicated combinators you can use but they need more variables than this before becoming worthwhile.
00:53:54 <oerjan> essentially you can merge a list of variables using something cons-like to make the blowup linear in the number of variables instead, I think.
00:57:27 <oerjan> I remember writing something about it on the old esolang mailing list.
01:06:54 <bsmntbombdood> too many Ss and Ks and Is
01:07:27 <oklopol> hmm... thue seems too hard for a first project :<
01:08:03 <oklopol> i kinda like haskell in the sense i haven't done a single algorithmic error even though i use quite complicated mappings etc
01:08:18 <oklopol> (haven't noticed at least :P)
01:08:42 <oerjan> i assume this applies after you have fixed the type errors?
01:08:47 <oklopol> yes
01:08:53 <oklopol> them i have millions :P
01:09:37 <bsmntbombdood> It would be cool to define K in terms of S
01:09:52 <oerjan> i don't think it can be done
01:10:27 <oerjan> lessee, why not...
01:10:44 <oerjan> K x y removes y
01:10:45 <bsmntbombdood> \x y.x ==> S (KK) I
01:10:53 <oklopol> i'd need this function doSubst :: (String, String) -> String -> (Bool, String) where first tuple is the substitution (from, to), second the string to alter, return (success, new string)
01:11:05 <oklopol> i can't make it nicely though :<
01:11:11 <oerjan> But I think you cannot make any expression in S that removes an argument completely
01:11:43 <oerjan> i have a very similar function in IrpBot
01:12:07 <oklopol> can you gimme a hint? :P
01:12:27 <oklopol> i have the knowledge necessary to do that... just can't :<<
01:12:58 <oklopol> too complicated
01:13:11 <oerjan> a "" = ""
01:13:11 <oerjan> a t | old `isPrefixOf` t = new ++ a (drop (length old) t)
01:13:14 <oerjan> a (c:r) = c:a r
01:14:37 <oerjan> i believe you need import Data.List for the isPrefixOf
01:15:03 <oklopol> nice
01:18:08 <oerjan> back to expressing K with S, I now remember the terminology
01:21:14 <oerjan> ack, i had it backwards
01:25:57 <oerjan> anyhow, there are two classes of combinators that are closed and K and S are in different ones.
01:26:27 <oerjan> K is affine, this means every argument is used at most once
01:26:43 -!- oklofok has joined.
01:26:56 <oerjan> S is the opposite (relevant may be the word), every argument is used at least once
01:27:30 <oerjan> I is in the intersection: the linear ones, which use every argument exactly once
01:28:36 <oerjan> the affine subset can be generated by the combinators S, B, C.
01:28:45 <oerjan> *K, B, C
01:32:19 <oerjan> C a b c = a c b, B a b c = a (b c)
01:32:58 <oerjan> the opposite subset would be S, B, C; I think
01:33:02 <voodooattack> C = 1? :P
01:33:29 <oerjan> nope
01:34:35 <oklofok> i think it works :D
01:35:03 <oerjan> combinators are not usually commutative
01:35:08 <oklofok> 15 lines :PP
01:35:19 <oerjan> what works?
01:35:25 <oklofok> my thue interpreter
01:35:26 <oerjan> thue?
01:35:28 <oklofok> ya
01:35:58 <oerjan> are you doing random choice of rules?
01:36:00 <oklofok> it did runThue [("oko","pol"), ("pol", "mo")] "okopol" -> "momo"
01:36:03 <oklofok> no
01:36:26 <oklofok> i do rule by rule... since thue does not care about order right?
01:36:42 <oklofok> you can read my code, it's 15 lines as i said
01:37:07 <oklofok> it's very bad code i'm sure, this is the first program i've done on a functional language :D
01:37:15 <oklofok> (unless you count python)
01:38:41 <oklofok> http://www.pastebin.ca/356379
01:39:19 <oklofok> i tried not to look at your code too much, just checked drops param order and the function names
01:40:38 <oklofok> it takes the substs as a list
01:40:44 <oklofok> so it's not exactly thue
01:41:08 <oerjan> parser next? you might want to look at the Parsec library
01:41:57 <oerjan> with that the parser shouldn't be more than another 15 lines
01:43:01 <bsmntbombdood> man that's ugly
01:43:12 -!- oklopol has quit (Read error: 110 (Connection timed out)).
01:43:28 -!- oklopol has joined.
01:43:44 <oklopol> god i hate it when it does that
01:44:42 <oerjan> oklopol: you do know that you can ask nickserv to kick off your ghosts?
01:45:37 <oklopol> i don't, there is no such service on qnet
01:45:43 <oklopol> (that i know of)
01:45:57 <oklopol> if there's one here, please share it with me :D
01:46:18 <oerjan> do /msg nickserv help
01:46:19 <oklopol> hmm... i can't do file io, the monads will kill me
01:47:01 <oklopol> i'm not registered, maybe i should :P
01:47:23 <oerjan> Indeed that is necessary to kill ghosts
01:47:32 <oklopol> yep, but maybe later
01:47:40 <oerjan> as well as for sending private messages
01:47:43 <oklopol> can you help me with filw io?
01:47:46 <oklopol> *file
01:47:58 <oerjan> I suggest using the interact function for a start
01:48:37 <oklopol> okay, how do i use it? :)
01:48:47 <oerjan> That saves you most of the trouble with IO if you are just making a pipe
01:49:04 <oerjan> main = interact yourPipeFunction
01:49:05 <oklopol> pipe? :D
01:49:41 <oerjan> a function from stdin to stdout
01:49:51 <Sukoshi> Quick Haskell tutorial?
01:50:06 <oerjan> i suppose it is
01:50:18 <Sukoshi> I need to get back to Haskell hacking sometime.
01:50:28 <oklopol> i had "filename: " -> open file -> read -> parse -> exec in mind
01:50:34 <Sukoshi> The Scheme in Haskell tutorial looks really nice.
01:50:46 <oerjan> right...
01:51:01 <oerjan> you want the filename as input or on the command line?
01:51:15 <oklopol> unless it's hard, yes :D
01:51:21 <oklopol> because
01:51:26 <oerjan> i mean, which one
01:51:29 <oklopol> i don't know how to specify stdin
01:51:36 <oklopol> okay, just a pipe
01:52:01 <oklopol> hmm... getContents or smth
01:52:19 <oerjan> readFile
01:52:20 <oklopol> i read about this somewhere, i'll try on my own, i'll be here crying for help soon
01:52:31 <oklopol> i'll find the page :D
01:52:37 <oerjan> ok
01:52:56 <oerjan> btw Haskell does have if then else
01:53:15 <oerjan> (for you case ... True -> ... False ...)
01:53:20 <oerjan> *your
01:54:19 -!- meatmanek has joined.
01:54:36 -!- meatmanek has quit (Read error: 104 (Connection reset by peer)).
01:54:56 <bsmntbombdood> (> scheme haskell)
01:55:13 <oerjan> (> scheme) haskell
01:55:51 <bsmntbombdood> we need to come up with something that means the opposite in scheme and haskell
01:56:45 <oerjan> yes
01:57:52 -!- wooby has joined.
01:59:01 -!- meatmanek has joined.
02:00:03 -!- oklofok has quit (Read error: 110 (Connection timed out)).
02:00:06 <oklopol> main needs a declaration (or whaddyacallit) main :: Something -> oso
02:00:08 <oklopol> ?
02:00:13 <oklopol> and what is it :P
02:00:17 <oklopol> RealWorld?
02:00:21 <oerjan> :: IO ()
02:00:28 <oklopol> just that?
02:00:29 <oklopol> oki
02:00:50 <oerjan> and type declarations are often optional
02:00:51 <oklopol> main :: IO()
02:00:55 <oklopol> main = return 5
02:00:56 <oklopol> ?
02:01:05 <oklopol> oh
02:01:11 <oklopol> () /= Int
02:01:17 <oerjan> Indeed :)
02:01:20 <oklopol> it won't compile that's all
02:01:24 <oklopol> i mean
02:01:32 <oklopol> nothing, so they can't be optional there
02:01:36 <oerjan> You would get a message about no Num instance for ()
02:02:24 <oklopol> hmm... how can i return 5 from main? :D
02:02:30 <oerjan> it's optional in the sense you don't have to write it, not in the sense that main can be any type
02:02:56 <oklopol> return strips off the monad, IO, right?
02:03:04 <oklopol> maybe not :D
02:03:06 <oerjan> sort of
02:03:12 <oerjan> but not really
02:03:25 <oerjan> actually the opposite, return puts it on
02:03:35 <oklopol> well, i'll understand it later
02:03:48 <oklopol> i wanna get this working first :D
02:03:53 <oerjan> and note also that return does not quit from a function
02:04:05 <oklopol> i do know that
02:04:35 <oklopol> i don't attach meaning to names
02:05:24 <oerjan> System.Exit.exitWith (ExitFailure 5)
02:05:25 <oklopol> i mean, i don't have problems with confusing languages, but i do have problems in understanding how IO works :P
02:06:01 <oklopol> but... but... why aren't there better examples, examples that work :\
02:06:08 <oklopol> on the net
02:06:25 <oerjan> there aren't?
02:07:24 <oklopol> incorrect indentation
02:07:35 <oklopol> whenever there's a main
02:07:48 <oklopol> it's my error i'm pretty sure
02:08:01 <oklopol> doing something really wrong when copypasting...
02:08:03 <oerjan> just for a start imagine that Haskell distinguishes sharply between pure expressions and actions
02:08:21 <oklopol> first i'd like to get ANY main working :P
02:08:23 <oerjan> and that actions have type IO something
02:08:40 <oklopol> oaky
02:08:52 <oerjan> main = print "Hello, world!"
02:09:17 <oklopol> parse error
02:09:24 <oklopol> possibly incorrect indentation
02:09:27 <oerjan> how can that be?
02:09:46 <oerjan> where are you putting it?
02:09:48 <oklopol> hard to say... it's in the Thue file
02:09:50 <oklopol> in the end
02:09:56 <oklopol> and i just run it
02:10:04 <oklopol> dblclick on the file
02:10:22 <oklopol> runThue'' (subst:substs) init sure = case doSubst subst init of
02:10:22 <oklopol> (False, _) -> runThue' substs init sure
02:10:22 <oklopol> (True, newinit) -> runThue' substs newinit True
02:10:22 <oklopol> main = print "Hello, world!"
02:10:26 <oklopol> end of my file
02:10:44 <oklopol> indentation wrong though
02:10:50 <oklopol> because of the paste
02:10:56 <oerjan> And it compiles without main?
02:11:01 <oklopol> yes
02:11:06 <oklopol> all the functions work
02:11:21 <oklopol> sorry
02:11:26 <oklopol> it seems they dont' xD
02:12:10 <oklopol> okay
02:12:12 <oklopol> now it works
02:12:39 <oklopol> i had done something fishy there... forgot about it and thought it was the same working code
02:12:56 <oerjan> next step would be a do block I guess
02:13:04 <oerjan> main = do
02:13:24 <oerjan> and then some more actions, indented
02:13:59 <oklopol> i tried one code, but it said isAscii not in scope... and nothing was imported
02:14:10 <oklopol> hmm
02:14:16 <oerjan> import Data.Char for that I think
02:14:21 <oklopol> oaky
02:14:44 <oerjan> btw: haskell.org/hoogle
02:15:50 <oerjan> as well as http://www.haskell.org/ghc/docs/latest/html/libraries/index.html
02:16:03 <oklopol> okay, i now have a code that reads two names, one for output, one for input and pipes
02:16:37 <oklopol> i'll peruse those later :)
02:16:49 <oklopol> too much just now... it's 4 am
02:17:08 <oerjan> There is also System.Environment.getArgs
02:17:21 <oklopol> hmm
02:17:29 <oklopol> but i call main as a function
02:17:35 <oklopol> in the prompt
02:17:44 <oerjan> :main
02:17:45 <oklopol> i could just give them as params?
02:17:54 <oerjan> Special command
02:18:04 <oerjan> can give arguments
02:18:35 <oklopol> okay, i'll stick to the file thing though :D
02:18:46 <oklopol> s <- readFile ifile
02:19:08 <oklopol> return s will be a string with the contents of the file..?
02:19:28 <oerjan> s will be that string
02:19:54 <oerjan> <- takes values out of IO in a sense
02:20:06 <oklopol> okay
02:20:31 <oklopol> i'll make the parser, thue's io comes some other time, i'll sleep soon
02:22:25 <oklopol> s <- readFile ifile
02:22:25 <oklopol> let (substs, init) = parseRaw s in
02:22:25 <oklopol> runThue substs init
02:22:31 <oklopol> would this be right?
02:22:54 <oklopol> if i do the parseRaw that converts string -> substitutions and initial string
02:23:26 <oerjan> looks fine
02:23:48 <oklopol> good, i'll start the parser... not sure if i'll manage to finish it just now :D
02:23:58 <oklopol> everything's kinda hazy
02:24:47 <Sukoshi> Does Haskell make well to parsers like the BT one? (Not that I'd switch.)
02:25:10 <oerjan> BT?
02:25:21 <Sukoshi> Bencoding.
02:25:54 <oerjan> almost certainly
02:26:56 <oerjan> Parsec would be shooting fish in a barrel :)
02:27:16 <bsmntbombdood> heh
02:27:18 <bsmntbombdood> write one
02:30:15 -!- crathman has quit (Read error: 110 (Connection timed out)).
02:36:14 -!- wooby has quit.
02:54:04 -!- meatmanek has left (?).
03:15:05 <oerjan> done
03:17:39 <oerjan> http://www.pastebin.ca/356520
03:18:26 <bsmntbombdood> took you longer to code :)
03:18:55 <oerjan> i'm not a fast coder
03:19:25 <oerjan> but it is just 24 lines :)
03:19:52 <bsmntbombdood> and ununderstandable by me
03:21:27 <oerjan> to run, do parseTest (many bencoding) "whatever"
03:21:53 <oerjan> ah, drop the many
03:41:23 -!- ShadowHntr has joined.
03:49:07 <bsmntbombdood> (S)S(S)S()S(K)I(S_)F
03:49:37 <oerjan> something does not look quite right there
03:49:57 <oerjan> ()? S_?
03:51:35 <bsmntbombdood> yeah, because i was just banging on the keyboard
03:55:40 <oerjan> on second thought, it is obvious that () should be I
03:57:15 <oerjan> because that makes (A1...An)B = A1...AnB for all n including 0
03:58:02 <bsmntbombdood> There should be a function that takes all the arguments you give it and does nothing with them
03:58:18 <oerjan> there is: V
03:58:28 <oerjan> it's in unlambda
03:58:33 <oerjan> V x = V
03:59:09 <bsmntbombdood> V = Y \f.\x.f ?
03:59:36 <oerjan> yeah
04:00:32 <oerjan> V = (SII) \f.\x.ff
04:00:56 <oerjan> you can take it from there :)
04:02:15 <bsmntbombdood> (SII)x == xx
04:02:47 <oerjan> well, yeah
04:03:26 <oerjan> but that would make the expression larger
04:03:42 <bsmntbombdood> Y = \f.(SII) \x.f (SII) x
04:04:15 <bsmntbombdood> ...right?
04:04:36 <oerjan> that would seem a reasonable conclusion
04:05:20 <oerjan> except the parentheses are not quite right
04:05:34 <bsmntbombdood> bargle blop
04:05:45 <oerjan> Y = \f.(SII) \x.f (xx)
04:06:10 <bsmntbombdood> yeah
04:09:57 <bsmntbombdood> V = (SII)(S(KS)(S(KK)I))(S(KK)I)
04:11:44 <oerjan> S(KK)I = KK
04:12:20 <oerjan> wait...
04:12:47 <oerjan> S(KK)I = K
04:13:02 <bsmntbombdood> S(KK)Ix = (KK)x(Ix)
04:13:15 <bsmntbombdood> = K
04:13:57 <bsmntbombdood> V = (SII)(S(KS)K)K
04:15:12 <bsmntbombdood> = (SII)(S(KK))
04:15:26 <bsmntbombdood> nope
04:15:30 <bsmntbombdood> wrong order
04:17:14 <oerjan> i don't see how you got your first expression, though
04:17:55 <bsmntbombdood> SII \xf.ff
04:18:13 <bsmntbombdood> s/xf/fx/
04:18:22 <oerjan> and then?
04:18:45 <bsmntbombdood> \f.(S (Kf) (Kf))
04:18:55 <bsmntbombdood> (drop the SII for a moment)
04:19:55 <oerjan> ok (but not optimized)
04:19:59 <bsmntbombdood> ?
04:20:10 <bsmntbombdood> how can you optimize it?
04:20:16 <oerjan> S (Kf) (Kf) = K(ff)
04:20:45 <bsmntbombdood> oh right
04:20:50 <bsmntbombdood> it's a konstant function
04:22:09 <bsmntbombdood> so \fx.ff == S(KK)(SII)
04:22:30 <bsmntbombdood> so V = (SII)S(KK)(SII)
04:22:43 <bsmntbombdood> so V = (SII)(S(KK)(SII))
04:24:05 <oerjan> might be right :)
04:28:25 <bsmntbombdood> (KK) = I right?
04:28:45 <bsmntbombdood> I mean K
04:29:06 <oerjan> no
04:29:22 <bsmntbombdood> KKx = K
04:29:34 <oerjan> right
04:30:04 <bsmntbombdood> so yes, V = (SII)(S(KK)(SII))
04:30:55 * bsmntbombdood feels like he has accomplished something
04:32:08 <bsmntbombdood> actually
04:32:14 <bsmntbombdood> S(KK)(SII)
04:32:26 <bsmntbombdood> nevermind
04:33:51 <oerjan> S(KK)(SII)x = KKx(xx) = K(xx)
04:34:49 <bsmntbombdood> yeah
04:35:09 <oerjan> so if x = S(KK)(SII), then xx = K(xx)
04:36:02 <bsmntbombdood> what's your point?
04:36:27 <oerjan> just triple checking
04:58:57 <bsmntbombdood> i'm going to bed, thanks for your help
04:59:23 <oerjan> me too, good night
04:59:40 -!- oerjan has quit ("leaving").
05:15:08 -!- Sgeo has quit (Remote closed the connection).
05:28:01 -!- digital_me has quit (Read error: 60 (Operation timed out)).
05:31:22 -!- GregorR has changed nick to _D6Gregor1RFeZi.
05:52:43 -!- puzzlet has joined.
05:59:14 -!- Arrogant has joined.
06:33:10 -!- ShadowHntr has quit ("End of line.").
06:55:40 -!- _D6Gregor1RFeZi has changed nick to GregorR.
07:34:41 -!- RodgerTheGreat has quit.
07:40:30 -!- voodooattack has quit (Read error: 113 (No route to host)).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:01:08 -!- Arrogant has quit ("Leaving").
08:35:38 -!- pgimeno has quit (Read error: 104 (Connection reset by peer)).
08:51:50 -!- pgimeno has joined.
13:09:47 -!- nazgjunk has joined.
13:41:34 -!- helios24 has joined.
13:57:56 -!- jix has joined.
14:20:07 <SimonRC> *BOGGLE*:
14:20:10 <SimonRC> "No, everyone is born Christian. Only later in life do people choose to stray from Jesus and worship satan instead. Atheists have the greatest "cover" of all, they insist they believe in no god yet most polls done and the latest research indicates that they are actually a different sect of Muslims."
14:21:53 <SimonRC> no, actually *this* is even more mind-boggling:
14:21:56 <SimonRC> ""One of the most basic laws in the universe is the Second Law of Thermodynamics. This states that as time goes by, entropy in an environment will increase. Evolution argues differently against a law that is accepted EVERYWHERE BY EVERYONE. Evolution says that we started out simple, and over time became more complex. That just isn't possible: UNLESS there is a giant outside source of energy supplying the Earth with huge amounts of energy. If there were su
14:22:35 <SimonRC> Headline: Christian Scientists Hypothesise 'Sun'
14:29:17 -!- nazgjunk has quit ("Bi-la Kaifa").
14:34:06 <bsmntbombdood> haa!!!
14:34:16 <bsmntbombdood> that's funny
14:36:15 <bsmntbombdood> "a giant outside source of energy supplying the Earth with huge amounts of energy"
14:56:40 -!- kxspxr has joined.
14:57:52 -!- kxspxr has quit (Client Quit).
15:19:03 -!- crathman has joined.
15:24:04 -!- wooby has joined.
15:24:34 -!- wooby has quit (Client Quit).
15:46:48 -!- RodgerTheGreat has joined.
16:13:56 -!- Arrogant has joined.
16:16:35 -!- sebbu has joined.
16:32:50 <GregorR> bsmntbombdood: Hmmm, now what could that be ...
16:33:03 <GregorR> bsmntbombdood: Something like a big ball of burning gas ...
16:33:11 <GregorR> bsmntbombdood: That uses nuclear fusion to create energy ...
16:33:20 -!- RodgerTheGreat has quit.
16:33:24 <GregorR> bsmntbombdood: Energy which ends up transferred to Earth ... ;)
16:34:14 <GregorR> Hilarious.
16:39:29 -!- FabioNET has joined.
16:56:28 -!- Arrogant has quit ("Leaving").
17:12:37 -!- RodgerTheGreat has joined.
17:21:59 -!- ShadowHntr has joined.
17:26:16 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
17:28:48 -!- oklofok has joined.
17:34:52 -!- oklofok has changed nick to oklopol.
17:52:29 -!- nazgjunk has joined.
17:59:38 -!- RodgerTheGreat has quit.
18:05:14 -!- RodgerTheGreat has joined.
18:07:51 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
18:13:36 -!- nazgjunk has joined.
18:13:37 -!- UpTheDownstair has joined.
18:14:13 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
18:14:30 -!- UpTheDownstair has changed nick to nazgjunk.
18:21:17 -!- ShadowHntr has quit (Read error: 131 (Connection reset by peer)).
18:22:18 -!- ShadowHntr has joined.
18:37:00 <bsmntbombdood> GregorR: indeed
18:38:01 <GregorR> pikhq: Why are you never online? :P
18:43:21 -!- ShadowHntr has quit (Client Quit).
18:45:06 <bsmntbombdood> you're killin me
18:45:26 <bsmntbombdood> i'm bored
18:50:23 <oklopol> you should do the oko
18:50:28 <oklopol> http://www.vjn.fi/148.htm
18:50:33 <oklopol> too bad i wrote this in finnish :\
18:52:50 <bsmntbombdood> GODDAMN THESE PEOPLE ARE ANNOYING
18:53:16 <oklopol> rararar
19:00:47 <lament> finnish is a pretty useless language. nobody speaks it!
19:17:29 -!- nazgjunk has quit ("Bi-la Kaifa").
19:17:37 <oklopol> :D
19:18:03 <oklopol> yeah... who likes useless languages...
19:50:35 -!- wooby has joined.
20:06:56 -!- ihope has joined.
20:07:36 <ihope> ~exec self.raw("PRIVMSG ihope :Boing")
20:07:45 <ihope> Interesting, don't you think?
20:07:50 <ihope> ~exec self.raw("PRIVMSG ihope :Boing")
20:07:55 <ihope> Really, how odd...
20:08:33 <ihope> ~ps
20:08:33 <bsmnt_bot> 0: 'self.ihope = IRCbot("80.32.164.76", "FOLLYbot", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen(); self.ihope.bsmnt = self', 772164.12 seconds
20:08:40 <ihope> Hee.
20:08:58 <ihope> ~kill 0
20:09:06 <ihope> ~ps
20:09:06 <bsmnt_bot> 0: 'self.ihope = IRCbot("80.32.164.76", "FOLLYbot", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen(); self.ihope.bsmnt = self', 772197.13 seconds
20:09:10 <ihope> Yay.
20:17:57 -!- FabioNET has quit (Read error: 145 (Connection timed out)).
20:20:22 <ihope> ~exec self.raw("QUIT")
20:20:22 -!- bsmnt_bot has quit.
20:20:26 -!- bsmnt_bot has joined.
20:20:30 <ihope> ~ps
20:20:31 <bsmnt_bot> None
20:20:39 <ihope> That's one way to do it, eh?
20:20:48 <ihope> ~exec self.ihope = IRCbot("80.32.164.76", "FOLLYbot", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen(); self.ihope.bsmnt = self
20:38:11 -!- helios24 has quit (Read error: 60 (Operation timed out)).
20:44:55 <ihope> ~exec self.ihope.bsmnt.raw("PRIVSMG #esoteric :Foo")
20:45:02 <ihope> Interesting.
20:45:05 <ihope> Oh.
20:48:30 -!- helios24 has joined.
21:00:51 -!- helios24 has quit (Read error: 60 (Operation timed out)).
21:06:47 -!- helios24 has joined.
21:09:36 -!- FabioNET has joined.
21:11:13 -!- sebbu has quit (Read error: 60 (Operation timed out)).
21:16:05 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:16:06 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09").
21:18:48 -!- sebbu has joined.
21:22:54 -!- FabioNET has quit (Client Quit).
21:39:51 -!- RodgerTheGreat has quit.
21:54:50 <bsmntbombdood> ihope
21:56:53 <oklopol> me too
22:01:44 <bsmntbombdood> iklopol
22:02:28 <oklopol> osofok
22:02:47 <oklopol> fuck... i'll have to wear a suit tomorrow :<<<
22:02:57 <bsmntbombdood> hah
22:03:26 <oklopol> you mean poohead
22:07:15 -!- wooby has quit.
22:13:04 -!- digital_me has joined.
22:26:55 -!- Sgeo has joined.
22:30:42 -!- oerjan has joined.
22:34:47 <SimonRC> ug
22:35:37 <oerjan> ly
22:35:50 <SimonRC> ITYM "li"
22:36:12 <oerjan> why i realized that just after saying it
22:36:17 <oerjan> *li
22:36:22 <SimonRC> http://en.wikipedia.org/wiki/Ugli_fruit
22:38:37 <oerjan> why the heck isn't it spelled Hugli if that's how it's originally pronounced?
22:47:51 <oerjan> Darn Babelfish doesn't have finnish
22:49:28 <oerjan> oklopol: Why can't you write in a sensible language such as Norwegian? :)
22:51:08 <oerjan> Or Finlandssvenska, but I guess you hate that as much as most Norwegians hate Nynorsk
23:09:54 -!- GregorR has changed nick to _D6Gregor1RZeFi.
23:10:18 -!- _D6Gregor1RZeFi has changed nick to _D6Gregor1RFeZi.
23:31:50 -!- sebbu has quit ("Leaving").
23:39:39 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
2007-02-16
00:01:22 -!- SevenInchBread has joined.
00:08:28 -!- kxspxr has joined.
00:17:12 -!- sp3tt has quit (Connection timed out).
00:27:51 -!- SevenInchBread has quit (Read error: 104 (Connection reset by peer)).
00:28:25 -!- SevenInchBread has joined.
00:29:13 -!- _D6Gregor1RFeZi has changed nick to GregorR.
00:50:40 -!- ihope has joined.
00:56:36 -!- kxspxr has quit.
02:25:27 -!- ihope_ has joined.
02:29:45 -!- goban has joined.
02:29:47 <ihope_> #ps
02:29:53 <ihope_> ~ps
02:29:53 <bsmnt_bot> None
02:29:57 <ihope_> Really?
02:29:58 <bsmntbombdood> ihope
02:30:03 <ihope_> Suspicious.
02:30:10 <bsmntbombdood> ?
02:30:12 <ihope_> bsmntbombdood: yes?
02:30:13 <bsmntbombdood> you restarted it
02:30:22 <ihope_> When?
02:30:29 <Sgeo> #exec dir(self)
02:30:44 <ihope_> ~ is the command character here, guys :-P
02:30:51 <bsmntbombdood> er
02:31:03 <bsmntbombdood> kill everthing
02:31:11 <Sgeo> #exec self.raw("MSG #esoteric "+str(dir(self)))
02:31:22 <ihope_> PRIVMSG, not MSG.
02:31:29 <bsmntbombdood> ~exec sys.stdout(dir(self))
02:31:30 <bsmnt_bot> ['COMMAND_CHAR', 'THREADING', '__doc__', '__init__', '__module__', 'chan', 'commands_running', 'commands_running_lock', 'connect', 'connected', 'disconnect', 'do_callbacks', 'do_ctcp', 'do_exec', 'do_kill', 'do_ps', 'do_quit', 'do_raw', 'errorchan', 'exec_execer', 'get_message', 'host', 'ident', 'ihope', 'listen', 'load_callbacks', 'message_re', 'nick', 'owner', 'pong', 'p
02:31:30 <bsmnt_bot> ort', 'print_callbacks', 'raw', 'raw_regex_queue', 'readbuffer', 'realname', 'register_raw', 'save_callbacks', 'socket', 'sockfile', 'verbose']
02:31:35 <ihope_> Or that.
02:31:43 <Sgeo> #exec self.raw("PRIVMSG #esoteric "+str(dir(self)))
02:31:54 <oerjan> sheesh
02:32:06 <ihope_> ~exec self.raw("PRIVMSG #esoteric :"+str(dir(self)))
02:32:06 <oerjan> it won't work anyhow, you are missing a colon.
02:32:07 <bsmnt_bot> ['COMMAND_CHAR', 'THREADING', '__doc__', '__init__', '__module__', 'chan', 'commands_running', 'commands_running_lock', 'connect', 'connected', 'disconnect', 'do_callbacks', 'do_ctcp', 'do_exec', 'do_kill', 'do_ps', 'do_quit', 'do_raw', 'errorchan', 'exec_execer', 'get_message', 'host', 'ident', 'ihope', 'listen', 'load_callbacks', 'message_re', 'nick', 'owner', 'pong', 'port', 'print_callbacks', 'raw', 'raw_regex_queue', 'readbuffer', 'realname', 'regi
02:32:32 <Sgeo> #exec self.raw("PRIVMSG #esoteric ""+str(dir(self)))
02:32:35 <Sgeo> #exec self.raw("PRIVMSG #esoteric :"+str(dir(self)))
02:32:39 <bsmntbombdood> um...
02:32:52 <oerjan> anyone else thinks sgeo is a bit dense today?
02:33:02 <ihope_> Sgeo: ~exec, not #exec
02:33:19 <Sgeo> Is it the same code on bsmnt_bot and ihope? erm
02:33:25 * oerjan says this, having misspelled stdout as output for n-1 of the last n attempts
02:33:35 <bsmntbombdood> Sgeo: what?
02:33:40 <bsmntbombdood> ~ps
02:33:41 <bsmnt_bot> None
02:33:47 <Sgeo> <bd_> #exec self.raw("QUIT :")
02:33:47 <Sgeo> * DogKing has quit (Active Quit: )
02:33:52 <ihope_> Sgeo: mine was running with # as the command character.
02:33:54 <oerjan> ihope is not a bot. I hope this clears things up.
02:34:17 <ihope_> I started it with an ~exec on this one.
02:34:18 * bsmntbombdood growls at ihope_
02:34:24 <ihope_> bsmntbombdood: yes?
02:34:37 <bsmntbombdood> just felt like growling
02:34:40 <ihope_> Oh.
02:36:04 * bsmntbombdood giggles at ihope_
02:36:06 <oerjan> hm...
02:36:48 <oerjan> a Zoo language, unifying OOK, MOO and various other beastly endeavours.
02:40:09 -!- bsmnt_bot has quit.
02:40:28 -!- bsmnt_bot has joined.
02:42:04 -!- bsmnt_bot has quit (Client Quit).
02:42:23 -!- bsmnt_bot has joined.
02:43:14 -!- ihope has quit (Success).
02:44:02 -!- bsmnt_bot has quit (Client Quit).
02:44:18 -!- bsmnt_bot has joined.
02:49:30 -!- bsmnt_bot has quit.
02:49:46 -!- bsmnt_bot has joined.
02:59:43 -!- bsmnt_bot has quit (Excess Flood).
03:00:01 -!- bsmnt_bot has joined.
03:01:13 -!- ihope_ has changed nick to foobar.
03:01:42 -!- foobar has changed nick to ihope.
03:05:11 * oerjan again advertises nickserv's ghost command
03:05:40 -!- bsmnt_bot has quit (Remote closed the connection).
03:05:48 -!- bsmnt_bot has joined.
03:05:57 -!- ShadowHntr has joined.
03:12:33 -!- Sgeo has quit (zelazny.freenode.net irc.freenode.net).
03:12:33 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net).
03:12:57 -!- puzzlet has joined.
03:14:15 -!- bsmnt_bot has quit.
03:14:20 -!- bsmnt_bot has joined.
03:40:49 -!- crathman has joined.
03:41:50 <bsmntbombdood> fun, we can blow up any combinatory logic program to any size
03:41:55 <bsmntbombdood> replace I with SKI
03:42:03 <bsmntbombdood> K with S(KK)I
03:42:34 <oerjan> S with S(KS)I
03:42:37 -!- Sgeo has joined.
03:44:21 <bsmntbombdood> repeat ad nauseuj
03:44:22 <bsmntbombdood> m
03:44:30 <oerjan> *am
03:45:21 <bsmntbombdood> right
03:45:25 * oerjan draws his roman soldier sword
03:46:04 <oerjan> That is a noun of the FIRST declension, so it's accusative ends in... ?
03:46:12 <oerjan> *its
03:46:14 <bsmntbombdood> huh?
03:46:34 <oerjan> You haven't seen Life of Brian?
03:46:51 <bsmntbombdood> no
03:47:09 <oerjan> (Strictly speaking, neither have I, somehow I always miss the middle)
03:48:21 <bsmntbombdood> S(KI)I
03:48:30 <oerjan> There's this hilarious part where John Cleese's Roman character scolds Brian for writing Romans Go Home grafitti
03:48:56 <oerjan> But not because of what it says, but because he butchers the Latin grammar
03:51:56 -!- digital_me has quit (Remote closed the connection).
03:54:21 -!- bsmnt_bot has quit.
03:54:24 -!- bsmnt_bot has joined.
03:57:20 <bsmntbombdood> SSK
03:57:56 <bsmntbombdood> SSKxy = xyx
04:00:15 <ihope> Wait, what's this ghost advertisement stuff all about?
04:02:12 <oerjan> about getting back your nisk after being thrown off
04:02:16 <oerjan> *nick
04:02:37 <ihope> Also, bsmntbombdood, was it you some of us were trying to teach ordinal numbers to?
04:02:41 <oerjan> do /msg nickserv help ghost
04:02:43 <ihope> oerjan: how's that relevant to stuff?
04:03:04 <ihope> Oh, the... right, yeah.
04:03:08 <bsmntbombdood> yeah
04:03:35 <ihope> bsmntbombdood: got it figured out yet?
04:03:47 <bsmntbombdood> haven't read anything since then
04:04:21 <ihope> bsmntbombdood: well, mind if I try one more time?
04:04:26 <oerjan> is it time for confusing him more by telling about epsilon?
04:04:33 <ihope> oerjan: nah.
04:05:53 <oerjan> basically, ordinals are all about induction.
04:06:26 <ihope> I'd say they're all about well-orderings.
04:06:44 <oerjan> That, too.
04:06:47 <ihope> Yeah.
04:07:02 <oerjan> But well-ordering is what you need for induction to be well-defined.
04:07:19 <ihope> A well-ordering is an ordering of a set such that all subsets of the set have a least element.
04:07:19 -!- crathman has quit (Read error: 110 (Connection timed out)).
04:07:36 <ihope> For example: the positive integers: {1, 2, 3, 4...}
04:07:53 <ihope> Any (non-empty) subset of them has a least element.
04:08:03 <bsmntbombdood> huh?
04:08:13 <bsmntbombdood> isn't that any set?
04:08:15 <oerjan> And that is equivalent to the usual rule of induction.
04:08:22 <ihope> Can you think of a set of positive integers that has no least element?
04:08:32 <ihope> ...Wait, what?
04:08:51 <ihope> Any set of positive integers has no least element.
04:08:59 <oerjan> *a
04:09:11 <ihope> ...Right, yes.
04:09:30 <ihope> Now, an ordinal number essentially expresses one notion of the size of a well-ordered set.
04:10:01 <ihope> {1} has the ordinal number 1, {1,2} has the ordinal number 2, {1,2,3} has the ordinal number 3...
04:10:19 <ihope> Then for {1,2,3,4...}, the ordinal number is omega.
04:11:01 <ihope> Now, for a "bigger" well-ordering of the natural numbers, we could say 1 is greater than the rest: {2,3,4...1}.
04:11:22 <oerjan> There are other kinds of sets that _don't_ have least elements, for example the set of all _negative_ integers.
04:11:25 <ihope> Look at it as {2,3,4,5...1}, and it seems like it has one extra element.
04:11:29 <ihope> Yes, like that.
04:11:58 <ihope> Now, this one extra element is expressed by adding one, so this new set has the ordinal number omega+1.
04:12:27 <bsmntbombdood> {1,2,3,4,5...} is the same as {2,3,4,5,...1}
04:12:33 <ihope> Then if you say 1 is greater than everything except 2, and 2 is greater than everything, you get {3,4,5,6...1,2}. The ordinal number for that would be omega+2.
04:12:55 <ihope> As a set, yes, but it's the order they're in that matters here, not the elements themselves.
04:12:57 <oerjan> Not when you consider the ordering.
04:13:10 <bsmntbombdood> sets are unordered
04:13:26 <ihope> Well, call it an order instead of a set, then.
04:14:41 <oerjan> "Ordered set" is really an abbreviation for a set, plus an order relation on that set.
04:14:53 <bsmntbombdood> k
04:14:54 <ihope> It's the same set, yes, but 1 is greater than everything else in the set--it's an infinity, basic(al)ly.
04:15:38 <ihope> So then if you go do something like {0,2,4,6,8...1,3,5,7,9...}, you have the same set again, but this time you have an infinite number of things, each of which is greater than another infinity of things.
04:15:51 <ihope> This is omega+omega, or omega*2.
04:16:33 <oerjan> If it confuses you to change the ordering of the natural numbers, it is possible (for now) to use sets of fractions instead.
04:16:47 <ihope> Indeed it is.
04:16:55 <bsmntbombdood> fractions?
04:17:15 <ihope> How about something like this: {0, 0.9, 0.99, 0.999... 1}
04:17:17 <oerjan> Say, {0, 1/2, 1/3, ..., 1, 1+1/2, 1+1/3, 1+1/4, ...} also has ordering omega*2
04:17:30 <ihope> oerjan: but that's still out of order.
04:17:33 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
04:17:33 <oerjan> that would be omega+1
04:17:36 <oerjan> whoops
04:17:54 <ihope> {0, 1/2, 2/3, 3/4... 1, 1+1/2, 1+2/3...}
04:18:07 <oerjan> right
04:18:17 <bsmntbombdood> k
04:18:21 <bsmntbombdood> not sure where this is going
04:18:37 <ihope> Then you can still add more to the end: {0, 1/2, 2/3, 3/4... 1, 1+1/2, 1+2/3... 2} would represent the ordinal omega*2+1.
04:19:22 <ihope> Go as far as you want, adding as many infinities as you want: {0, 1/2, 2/3, 3/4... 1, 1+1/2... 2... 3... 4.....}
04:19:35 <ihope> Go on forever like *that*, and you have omega*omega, or omega^2.
04:19:58 <ihope> Now, the nice thing is that the different well-orderings are themselves well-ordered.
04:20:56 <ihope> Therefore, you can represent each ordinal as a set of ordinals: instead of {0, 1/2, 2/3, 3/4... 1, 1+1/2, 1+2/3, 1+3/4...}, you can have {0, 1, 2, 3... omega, omega+1, omega+2, omega+3...}
04:21:15 <ihope> omega*2 happens to be the lowest ordinal number greater than all elements of that set.
04:21:55 <ihope> And if you have a "continuous" set like that, it defines an ordinal number.
04:22:32 <ihope> So if you took the unions of the sets corresponding to, say, omega, omega*2, omega*3, omega*4, etc., you'd end up with the set representing omega*omega.
04:23:23 <ihope> The union, I mean, not unions.
04:27:18 <ihope> Often, an ordinal number is said to actually be the set of ordinal numbers that goes with it, so ordinal numbers are defined as being sets of ordinal numbers.
04:28:10 <oerjan> Those are known as von Neumann ordinals, after the inventor.
04:30:25 <oerjan> You can add ordinals:
04:31:12 -!- Sgeo has quit (Read error: 110 (Connection timed out)).
04:31:21 <oerjan> If you have an ordered set in two parts, first one ordered as the ordinal a and then one part ordered as the ordinal b, then the ordinal of the whole set is called a+b.
04:32:22 <oerjan> You can see that in the omega+1, omega+2 etc. above.
04:32:57 <oerjan> Strangely enough this addition is not commutative.
04:33:10 <oerjan> 1+omega = omega != omega+1
04:33:43 <oerjan> (It is associative however)
04:34:07 <oerjan> (I.e. a+(b+c) = (a+b)+c)
04:34:30 <ihope> I like natural addition.
04:34:43 -!- Sgeo has joined.
04:35:11 -!- ShadowHntr has quit ("End of line.").
04:35:48 <oerjan> To multiply:
04:38:22 <oerjan> Make a set containing a subdivision into segments, all with the same order a, and such that the set of segments themselves have order b. Then that whole set has order a*b.
04:38:47 <oerjan> So omega*2 consists of two subsets, each with order omega.
04:38:58 <oerjan> This is not commutative either.
04:39:51 <oerjan> But it is associative, and there is distributivity: a*(b+c) = a*b + a*c
04:45:46 <oerjan> That distributivity hold only rightwards.
04:45:51 <oerjan> *holds
04:47:09 <oerjan> For powers, we need to use induction.
04:47:43 -!- goban has quit ("Leaving").
04:48:01 <oerjan> a^1 = a, and a^(b+c) = a^b*a^c.
04:48:24 <oerjan> Except that doesn't help us reach infinity, so:
04:49:22 <oerjan> a^b = union of a^(b_l) when b = union of b_l.
04:49:29 <ihope> omega.
04:49:34 <ihope> There, I've reached infinity!
04:49:37 <ihope> :-P
04:49:48 -!- alex-4 has joined.
04:49:54 <oerjan> Good, now you can explain omega^omega :)
04:52:25 <oklopol> oerjan: i don't hate any languages :)
04:52:39 <oklopol> but i don't know swedish that well
04:52:42 <oerjan> that's good, neither do i
04:52:48 -!- sp3tt has joined.
04:52:58 <oerjan> then you can explain oko here :)
04:53:13 <oklopol> okoing is a way of life :)
04:53:20 <ihope> omega^omega: the union of omega^n where n < omega.
04:56:20 <oerjan> Now then, epsilon = union of omega^(omega^(omega^...))) nested n times when n < omega
04:57:51 <ihope> omega, omega^omega, omega^omega^omega, omega^omega^omega^omega...
04:58:01 <oerjan> omega^epsilon = epsilon, incidentally.
04:58:27 <ihope> epsilon = omega^^omega, no?
04:58:29 <oerjan> If I remember right.
04:58:59 <oerjan> I suppose so.
04:59:14 <oerjan> I am not sure of that ^^ notation.
04:59:29 <ihope> Tetration?
04:59:40 <ihope> And omega^^^omega would be epsilon_1.
04:59:47 <ihope> I think.
05:00:02 <ihope> Well, maybe not.
05:00:13 <ihope> (omega^^omega)^^omega?
05:00:26 <oerjan> I think we just went past what I remember :)
05:01:38 <oerjan> Except one huge step more:
05:02:44 <oerjan> omega_1 = the union of all ordinals of reorderings of the natural numbers.
05:03:17 <oerjan> (I hope omega_1 is the right name. The first ordinal of cardinality aleph_1.)
05:05:48 <ihope> Yes, omega_1 is the first ordinal of cardinality aleph_1.
05:05:59 <ihope> omega_n has cardinality aleph_n, in general.
05:06:06 <oklopol> wtf are you talking about :O
05:06:15 <oerjan> Ordinal numbers
05:06:28 <lament> there's only two numbers
05:06:32 <lament> zero and one.
05:06:42 <ihope> lament: what about... uh... hmm.
05:07:13 <ihope> lament: is that algebraically closed?
05:07:21 <ihope> I mean, surely not.
05:07:38 <ihope> x^2 + x + 1 = 0
05:07:41 <ihope> Solve that.
05:07:51 <lament> {0,1} form a field if that's what you're asking.
05:07:59 <ihope> Algebraically closed.
05:08:07 <ihope> Polynomials all have solutions.
05:08:28 <ihope> x*x = x and x+x = 0, so that equation up there is equivalent to 1 = 0.
05:08:51 <ihope> Also, it's Friday over here. Less than ten minutes ago, it was Thursday.
05:08:59 <ihope> I think I should be getting to bed.
05:09:05 <lament> so what if it's not algebraically closed?
05:09:18 <oerjan> Then it cannot be all numbers.
05:09:26 <ihope> Then... uh... say, why don't we define CK_n for all ordinal numbers n?
05:09:47 <lament> okay, let's close it then
05:09:47 <oerjan> What is CK?
05:10:33 <ihope> The smallest ordinal number that can't be enumerated by a computer of order n, where a computer of order n is a Turing machine, except able to solve the halting problems for computers of orders less than n.
05:10:40 <ihope> Close it, eh...
05:10:54 <ihope> Let's say B*B + B + 1 = 0.
05:11:01 <ihope> That means B*B + B = 1.
05:11:29 <ihope> So B(B + 1) = 1, if that matters at all.
05:11:48 <ihope> Hey, why don't we call it 2?
05:11:55 <ihope> 2*2 + 2 = 1.
05:12:00 -!- crathman has joined.
05:12:18 <ihope> Then we could say 1 + 2 = 3.
05:12:26 <ihope> Eventually, you end up with all the nimbers.
05:12:32 <ihope> ;-)
05:12:38 <ihope> Fun. Bye!
05:15:52 <lament> well no
05:16:20 <oerjan> ?
05:17:22 <lament> that doesn't sound right
05:18:03 <oerjan> What doesn't sound right, and by the way nimbers was probably not a misspelling.
05:18:31 <lament> oh, well, okay then
05:30:54 -!- ihope has quit (Connection timed out).
05:58:20 <bsmntbombdood> can K be made with S and I?
05:58:49 <oerjan> no, S and I cannot remove variables
05:59:25 <oerjan> They are in the subset called lambda_I calculus
05:59:48 <bsmntbombdood> where in \x.E, E has to contain x
05:59:59 <oerjan> right
06:00:30 <bsmntbombdood> is lambda_i calculus turing complete?
06:00:42 <oerjan> I vaguely recall yes
06:01:05 <bsmntbombdood> church numeral 0 doesn't work
06:01:25 <oerjan> something about simulating K for a large enough subset to make it work for numerals
06:01:27 <Sukoshi> Is this Unlambda fun?
06:01:42 <oerjan> combinatory logic
06:01:43 <Sukoshi> Is this (Unlambda fun) ?
06:02:01 <Sukoshi> Ah. Is he creating the Church numerals?
06:02:10 -!- crathman has quit (Read error: 104 (Connection reset by peer)).
06:02:18 -!- crathman_ has joined.
06:02:20 -!- crathman_ has changed nick to crathman.
06:02:23 <oerjan> no we were discussing whether K is necessary for Turing completeness
06:03:15 <oerjan> i guess S and I might not be enough, to get lambda_I you need also B and C
06:03:43 <Sukoshi> Ah.
06:03:46 <bsmntbombdood> B and C don't get rid of variables though
06:04:06 -!- ShadowHntr has joined.
06:04:44 <bsmntbombdood> s/variables/arguments/
06:05:09 <oerjan> i don't know the construction for a "simulated" K for numerals, however
06:05:49 <oerjan> it was either Church or Curry's work, I guess
06:07:19 <bsmntbombdood> wikipedia: The constants of CLI are: I, B, C and S, which form a basis from which all CLI terms can be composed (modulo equality)
06:07:48 <oerjan> thought so
06:08:03 <oerjan> under "lambda calculus", I found the quote:
06:08:16 <oerjan> Note that in Church's original lambda calculus, the formal parameter of a lambda expression was required to occur at least once in the function body, which made the above definition of 0 impossible
06:10:00 <bsmntbombdood> but they don't tell you what it is
06:11:02 <oerjan> where did you find that CLI quote?
06:12:08 <bsmntbombdood> http://en.wikipedia.org/wiki/Combinatory_logic#CLK_versus_CLI_calculus
06:17:56 <oerjan> heh, searching for lambdaI gives an article with the title "Proving PSN after ruining a perfectly good calculus"
06:18:04 <oerjan> *googling
06:18:04 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)).
06:19:31 <bsmntbombdood> PSN?
06:20:37 <oerjan> preservation of strong normalization
06:20:44 <oerjan> i think it was
06:20:57 <oerjan> it was the rest of the title i found funny :)
06:23:49 <bsmntbombdood> remember iota from the other day?
06:23:56 <oerjan> yes
06:24:24 <bsmntbombdood> If we use a different combinator, \x.xKSK, the definitions of S and K are shorter
06:24:45 <bsmntbombdood> x=\x.xKSK
06:24:51 <oerjan> i may have read that somewhere
06:24:56 <bsmntbombdood> K = (xx)x
06:25:29 -!- ShadowHntr has quit (Read error: 104 (Connection reset by peer)).
06:27:54 <bsmntbombdood> S = x(xx)
06:28:00 <bsmntbombdood> much shorter than iota
06:29:04 <oerjan> as short as you could possibly get them
06:29:33 <oerjan> or could you get one of them to be xx? hm.
06:30:08 -!- ShadowHntr has joined.
06:30:45 <oerjan> S = Kx is impossible
06:32:38 <oerjan> K=Sx would mean y = Kyz = Sxyz = xz(yz), but yz cannot determine y for all y and z so that is impossible
06:34:20 <oerjan> S = xK and K = xS seem harder to analyze
06:40:37 <bsmntbombdood> I think that's pretty darn good
06:41:15 <bsmntbombdood> `x`xx, 5 chars
06:56:49 -!- goban has joined.
07:23:26 -!- goban has quit ("Konversation terminated!").
07:25:39 -!- goban has joined.
07:27:52 -!- helios_ has joined.
07:28:08 -!- helios24 has quit ("Leaving").
07:28:39 -!- helios_ has changed nick to helios24.
07:37:50 -!- voodooattack has joined.
07:40:52 -!- goban has quit (Remote closed the connection).
07:44:33 -!- goban has joined.
07:48:15 -!- goban has quit (Client Quit).
07:49:01 -!- crathman_ has joined.
07:49:24 -!- crathman has quit (Read error: 104 (Connection reset by peer)).
07:49:47 -!- crathman_ has changed nick to crathman.
07:49:59 -!- goban has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:06:16 -!- Arrogant has joined.
08:16:20 -!- oerjan has quit ("leaving").
08:39:24 -!- crathman has quit (Read error: 110 (Connection timed out)).
08:52:48 -!- ShadowHntr has quit (Read error: 104 (Connection reset by peer)).
08:53:34 -!- goban has quit ("Konversation terminated!").
08:55:15 -!- goban has joined.
09:11:36 -!- Arrogant has quit ("Leaving").
11:47:10 -!- ihope has joined.
11:49:03 -!- ihope has quit (Client Quit).
13:09:01 -!- nazgjunk has joined.
13:20:08 -!- voodooattack has quit (Read error: 110 (Connection timed out)).
13:27:30 -!- voodooattack has joined.
13:32:07 -!- voodooattack has quit (Nick collision from services.).
13:32:17 -!- voodooattack| has joined.
13:32:57 -!- voodooattack| has changed nick to voodooattack.
13:41:23 -!- voodooattack has quit (Nick collision from services.).
13:41:37 -!- voodooattack has joined.
13:55:48 -!- voodooattack has quit (Nick collision from services.).
13:56:02 -!- voodooattack has joined.
14:13:06 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
14:13:17 -!- UpTheDownstair has joined.
14:13:29 -!- UpTheDownstair has changed nick to nazgjunk.
14:43:15 -!- ooooo has joined.
14:52:00 -!- crathman has joined.
15:46:31 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
15:46:46 -!- UpTheDownstair has joined.
15:47:41 -!- UpTheDownstair has changed nick to nazgjunk.
15:55:35 -!- nazgjunk has quit (Read error: 131 (Connection reset by peer)).
15:55:44 -!- UpTheDownstair has joined.
15:58:49 -!- UpTheDownstair has changed nick to nazgjunk.
16:16:12 -!- FabioNET has joined.
16:44:13 -!- voodooattack has quit (Nick collision from services.).
16:44:27 -!- voodooattack has joined.
16:58:08 -!- voodooattack has quit (Nick collision from services.).
16:58:22 -!- voodooattack has joined.
17:01:56 -!- voodooattack has quit (Nick collision from services.).
17:02:10 -!- voodooattack has joined.
17:27:43 -!- sebbu has joined.
17:27:56 -!- goban has quit (Read error: 104 (Connection reset by peer)).
17:28:14 -!- goban has joined.
17:36:22 -!- kxspxr has joined.
17:36:32 -!- kxspxr has quit (Client Quit).
17:38:52 <voodooattack> print "hi"
17:41:11 -!- UpTheDownstair has joined.
17:41:22 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
17:42:30 -!- UpTheDownstair has changed nick to nazgjunk.
17:51:17 -!- voodooattack has quit (Nick collision from services.).
17:51:31 -!- voodooattack has joined.
18:06:09 -!- FabioNET has quit (Read error: 145 (Connection timed out)).
18:23:36 -!- FabioNET has joined.
18:29:24 -!- sebbu2 has joined.
18:37:15 -!- sebbu has quit (Read error: 60 (Operation timed out)).
18:38:46 -!- FabioNET has quit (Read error: 145 (Connection timed out)).
18:54:36 -!- sebbu2 has changed nick to sebbu.
19:33:33 -!- FabioNET has joined.
19:52:28 -!- ShadowHntr has joined.
20:21:16 -!- _FabioNET_ has joined.
20:21:20 -!- FabioNET has quit (Read error: 110 (Connection timed out)).
20:39:14 -!- voodooattack has quit.
21:20:47 -!- oerjan has joined.
21:23:13 -!- SevenInchBread has joined.
21:23:27 <oerjan> hi crumby one
21:45:00 <bsmntbombdood> x=\x.xSKS
21:45:04 <bsmntbombdood> S = xx
21:45:15 <bsmntbombdood> not sure if K is possible yet
21:45:22 <oerjan> hm...
21:46:28 <bsmntbombdood> I = x(xx)
21:48:40 <oerjan> how do you get that last one?
21:49:07 <bsmntbombdood> xS = SSKS
21:49:53 <bsmntbombdood> erm
21:51:17 <bsmntbombdood> SSKS = SS(KS)
21:51:39 <bsmntbombdood> I goofed
21:51:49 <oerjan> easy to do
21:53:52 <oerjan> I get x(x(xx))=S as well
21:57:32 <oerjan> x(xxx)=SS(SKS)=SSI
22:03:22 <oerjan> x(x(xxx))=S
22:03:55 <oerjan> xx(xx)=SS, x(xx)x=SxS, xxxx=Sxx
22:04:09 <bsmntbombdood> SSxy = Sx(xy)
22:04:29 <oerjan> you mean Sy(xy)
22:04:30 <bsmntbombdood> Sx(xy)z = xz(xyz)
22:05:15 <bsmntbombdood> what?
22:05:24 <oerjan> SSxy=Sy(xy)
22:05:24 <bsmntbombdood> i was just using x as a variable
22:05:41 <oerjan> i realized that
22:05:57 <bsmntbombdood> crap
22:05:59 <bsmntbombdood> yeah
22:07:17 <oerjan> i seem to be always getting back to S: x(xx(xx))=S too)
22:08:05 <bsmntbombdood> yeah
22:08:17 <bsmntbombdood> think this is a dead end
22:08:51 <oerjan> maybe, maybe not. at least getting S cuts many search branches short quick
22:09:15 <bsmntbombdood> because SKS = I
22:09:54 <oerjan> darn you are right
22:10:26 <oerjan> well not quite
22:10:33 <bsmntbombdood> but it's still \x.(((xS)K)S) and not \x.x(SKS)
22:11:37 <oerjan> none of the four-x versions actually contain K
22:12:18 <oerjan> or wait
22:12:38 <oerjan> well x itself is still in there so there might be a chance
22:16:40 <SevenInchBread> ...DNS is some weird, chaotic stuff...
22:16:57 <SevenInchBread> but then again... that kind of applies to networking in general.
22:17:42 <oerjan> x(x(xx)x)=SK=KI eventually
22:24:40 <oerjan> x(xxxx)=SKS=I
22:25:24 <bsmntbombdood> cool
22:34:58 <oerjan> x(x(x(xx)x))=KS, I have a feeling of getting closer...
22:35:18 <bsmntbombdood> i've gone on to other combinators
22:35:18 <oerjan> (That was the first with 6 x's
22:35:21 <oerjan> )
22:35:36 <oerjan> fine then we aren't duplicating work
22:35:46 <bsmntbombdood> i'm going for shortness of S and K
22:36:05 <oerjan> indeed this x has been a disappointment in that respect
22:36:06 <SevenInchBread> hmm... I'm really interested in the idea of an "anonymous decentralized server"... for lack of a better term
22:36:57 <oerjan> but then, if it really was shorter then since the combinator is the same size as the known one it would certainly have been used instead
22:37:18 <bsmntbombdood> i've got one with a short S and I
22:37:21 <bsmntbombdood> no K yet
22:37:26 <SevenInchBread> hmm.. it'd be like a P2P network acting as a single virtual server... all the data would be partitioned amongst all the peers in the network... and so there would be no real "server".
22:37:59 <SevenInchBread> ...would be great for illegal stuff. :)
22:38:48 <GregorR> Uh, DHT you mean?
22:39:14 <GregorR> If you took any ol' DHT system, then connected to it without actually joining the DHT, you have exactly what you're looking for.
22:40:18 <SevenInchBread> It would be great for free web hosting too...
22:40:46 <SevenInchBread> since everyone being hosted is chipping in some process cycles and hard disk space of their own... there's no need to charge anyone for the service.
22:41:28 <bsmntbombdood> freenet
22:42:15 <SimonRC> indeeed
22:42:30 <SimonRC> without the kiddy-porn though, I hope
22:42:40 <GregorR> IIRC, there are no non-participating clients in FreeNet.
22:42:41 <SimonRC> or maybe bittorrent
22:42:51 <bsmntbombdood> freenet sucks because it's written in java
22:42:54 <SimonRC> GregorR: you could write a selfish client if you wanted to
22:43:13 <SevenInchBread> nah... you could have kiddie porn.
22:43:16 <SimonRC> bsmntbombdood: how so/
22:43:23 <bsmntbombdood> SimonRC: resource hog
22:43:37 <SimonRC> maybe
22:44:05 <SimonRC> Some non-virtual instance methods might be nice in Java.
22:44:10 <bsmntbombdood> I ran freenet for a while untill I got tired of it using half my memory and all of my cpu
22:44:18 <SimonRC> Or sealed classes.
22:44:30 <SimonRC> they would speed up method calls a fair bit I ssupect
22:44:42 <SimonRC> bsmntbombdood: and all your network connection
22:44:43 <SevenInchBread> bsmntbombdood, you can't give it a maximum?
22:44:59 <SimonRC> This is apparently about networking water coolers, from the looks of slide 2: http://www.dur.ac.uk/tom.friedetzky/local/par/pc14-4up.pdf
22:45:22 <bsmntbombdood> gargh
22:45:26 <SimonRC> what?
22:45:29 <bsmntbombdood> X=\x.xSKSK
22:45:34 <bsmntbombdood> S = XX
22:45:41 <SimonRC> what is this for?
22:46:09 <bsmntbombdood> I = X(XX)
22:46:53 <bsmntbombdood> SimonRC, trying to find a single combinator to have the shortest S and K
22:47:11 <bsmntbombdood> best we have so far is X=\x.xKSK
22:52:57 <SevenInchBread> hmmm... so freenet doesn't die down on its process cycles when it doesn't need them and/or when there's other stuff that needs them on your computer?
23:13:03 -!- nazgjunk has quit ("i need to sleep ffs").
23:21:01 <SimonRC> hmm http://ling.ucsd.edu/~barker/Iota/
23:21:27 <bsmntbombdood> yeah
23:21:29 <oerjan> yes, that's where we started
23:21:51 <bsmntbombdood> but \x.xKSK is shorter than iota
23:22:40 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
23:27:34 <bsmntbombdood> oh wow
23:27:43 <bsmntbombdood> http://www.cs.uu.nl/people/jeroen/article/combinat/combinat.ps
23:27:45 <oerjan> ?
23:28:15 <oerjan> Darn postscript
23:28:45 <bsmntbombdood> X = \f.fS(\xyz.x)
23:28:47 <bsmntbombdood> K = XX
23:28:51 <bsmntbombdood> S = X(XX)
23:29:13 <oerjan> ok that's the final word then
23:29:25 <bsmntbombdood> yeah
23:31:31 <oerjan> the worst is i am sure i have seen that URL before
23:32:55 <bsmntbombdood> it was on the iota page
23:35:09 <bsmntbombdood> it is considerably more complicated though
23:36:00 -!- sebbu has quit ("@+").
23:41:45 <bsmntbombdood> \f.fS(S(S(KS)S(KK)(KK))(S(KK)I))
23:42:36 <bsmntbombdood> crazy long
23:42:50 <oerjan> i think you have missed some optimizations
23:43:09 <bsmntbombdood> probably
23:43:17 <oerjan> \xyz.x = \x.K(Kx) = S(KK)K
23:43:33 <bsmntbombdood> uh...yeah
23:43:35 <bsmntbombdood> :P
23:43:49 <bsmntbombdood> i'm stupid
23:45:29 <oerjan> \f.fS(S(KK)K)=SI(S(KS)(K(S(KK)K)))
23:45:38 <bsmntbombdood> wait
23:45:48 <oerjan> too late :)
23:46:02 <oerjan> whoops
23:46:24 <bsmntbombdood> \xyz.x = S(KK)(S(KK)I)
23:46:24 <oerjan> *S(SI(KS))(K(S(KK)K))
23:46:30 <bsmntbombdood> not S(KK)K
23:46:42 <oerjan> S(KK)I=K
23:46:58 <bsmntbombdood> oh duh
23:47:39 <oerjan> follows from eta-reduction: \x.fx = f
23:48:12 <bsmntbombdood> yeah
23:49:17 * SimonRC goes...
23:49:22 <bsmntbombdood> silly me
23:50:24 <bsmntbombdood> I wonder if there's a shorter I than SKK
23:50:55 <SimonRC> no: S, K, SS, SK, KS, and KK are all not I
23:51:45 <bsmntbombdood> ...so?
23:51:59 <bsmntbombdood> in iota, I is shorter than both S and K
23:52:18 <oerjan> oh you mean with that X
23:53:24 <oerjan> actually there is
23:53:37 <oerjan> because SKX is shorter than SKK :)
23:55:21 <bsmntbombdood> oh right
23:55:29 <bsmntbombdood> but there still could be a better one
23:56:11 -!- _FabioNET_ has quit (Read error: 110 (Connection timed out)).
23:59:10 <oerjan> XX=K, X(XX)=K, XXX=KX, X(X(XX))=XK=KS_=S, X(XXX)=X(KX)=KXS(\xyz.x)=X(\xyz.x)=(\xyz.x)S(\xyz.x)
23:59:37 <oerjan> eh, wait...
2007-02-17
00:00:26 <oerjan> messed up at the start
00:03:41 <bsmntbombdood> wow that paper printed terribly
00:07:18 <oerjan> nope, there is no shorter than six X'x
00:07:22 <oerjan> *X's
00:08:17 <bsmntbombdood> fun
00:08:36 <oerjan> eh, wait...
00:08:50 <oerjan> i have missed some cases
00:09:41 <bsmntbombdood> i'm trying to understand their derivation
00:09:55 <oerjan> in the paper?
00:10:55 <bsmntbombdood> yeah
00:12:19 <bsmntbombdood> for P it makes sense but I don't understand the K part
00:13:42 -!- ShadowHntr has quit (Client Quit).
00:14:36 <oerjan> ok now i think i have all 5 X cases, still no I
00:20:29 <bsmntbombdood> i sorta understand it now
00:23:19 <bsmntbombdood> their method is interesting
00:29:44 <bsmntbombdood> apparently some guy named "Rosser" came up with X = \x.xKSK
00:30:06 <oerjan> probably the Rosser of the Church-Rosser theorem
00:32:23 <oerjan> http://en.wikipedia.org/wiki/J._Barkley_Rosser
00:45:33 -!- crathman has joined.
01:30:07 <bsmntbombdood> I wonder if there's an X such that XX = S and X(XX) = K
01:34:14 * bsmntbombdood tries the method in the paper
01:37:21 * SimonRC goes
01:38:08 <bsmntbombdood> find a P,Q,R such that PPQRQR == S
01:41:18 <oerjan> P=K(K(K(K(KS))))
01:41:27 <oerjan> :)
01:42:12 -!- Arrogant has joined.
01:42:18 <bsmntbombdood> find a P,Q,R such that PPQRQR == S and SPQR = K
01:42:22 <bsmntbombdood> :)
01:42:47 <oerjan> Senatus PopulusQue Romanum
01:43:21 <oerjan> well, SPQR=PR(QR)
01:43:50 <bsmntbombdood> yeah
01:44:14 <bsmntbombdood> P=R=K
01:44:55 <oerjan> so then KKQKQK=S
01:45:12 <oerjan> KKQKQK=KKQK=KK, alas
01:45:52 <bsmntbombdood> yeah :(
01:46:06 <oerjan> what about P=I, R=KK
01:46:30 <oerjan> IIQ(KK)Q(KK)=S
01:46:38 <oerjan> =Q(KK)Q(KK)
01:47:04 <oerjan> ok, P=I, R=KK, Q=K(K(KS))
01:48:50 <oerjan> what should X look like then?
01:50:15 <bsmntbombdood> what is (K(K(KS)))(KK)(K(K(KS)))(KK)?
01:51:09 <bsmntbombdood> S
01:51:15 <oerjan> =K(KS)(K(K(KS)))(KK)=KS(KK)=S
01:52:17 <oerjan> that was the point of that Q
01:52:22 <bsmntbombdood> wowzers it works
01:52:52 <bsmntbombdood> so X = \f.fPQR
01:53:32 <bsmntbombdood> so X = \f.f(K(K(KS)))(KK)
01:54:22 <oerjan> aha. then XX=XPQR=PPQRQR=S and X(XX)=XS=SPQR=K
01:54:41 <bsmntbombdood> yep
01:54:42 <bsmntbombdood> :)
01:54:58 <oerjan> and here i thought your equations looked arbitrary.
01:55:15 <oerjan> or at least complicated.
01:56:47 <oerjan> mission accomplished
01:57:23 <bsmntbombdood> yep
01:58:59 <bsmntbombdood> X = \f.fI(K(K(KS)))(KK)
01:59:59 <bsmntbombdood> or X = \f.f I (\xyz.S) (\x.K)
02:01:02 <oerjan> hm...
02:01:48 <oerjan> you cannot have XX=V and XV!=V, I think.
02:02:09 <oerjan> so XX and X(XX) cannot be chosen arbitrarily.
02:03:08 <bsmntbombdood> what?
02:03:25 <oerjan> Vx=V
02:03:37 <bsmntbombdood> oh
02:04:02 -!- ihope has joined.
02:04:10 <bsmntbombdood> I don't get what you are saying
02:04:21 <ihope> ~exec self.raw("JOIN #math\r\nPRIVMSG #math :zomg bot")
02:04:27 <bsmntbombdood> ihope: we are brillant
02:04:33 <bsmntbombdood> (sic)
02:04:35 <ihope> You are?
02:04:41 <ihope> ~exec self.raw("PART #math")
02:04:45 <bsmntbombdood> ihope: me and oerjan
02:05:02 <oerjan> I mean, if you can find X such that XX=K and X(XX)=S or such that XX=S and X(XX)=K then you might think you could choose XX and X(XX) to be whatever you want.
02:05:15 * ihope logreads
02:05:41 <oerjan> But I don't think you can get XX=V and XX!=V, because then X would have to simultaneously use its argument and not
02:06:07 <oerjan> *X(XX)!=V
02:06:12 <bsmntbombdood> it couldn't be of the form \f.fE
02:06:20 <ihope> V?
02:06:27 <ihope> Unlambda's v operator?
02:06:30 <bsmntbombdood> Vx=V
02:06:31 <oerjan> yep
02:06:38 <ihope> If that's it, you really don't want XX=V.
02:07:17 <oerjan> you might want to try and solve XX=A, X(XX)=B for A, B arbitrary
02:07:39 <bsmntbombdood> this method needs the number of arguments that B takes
02:07:54 <ihope> The next things up would be (XX)X = XX and X(XX) = XV. If X pays any attention to its first argument, XV = V, and if it doesn't, X = KV meaning XV = V.
02:08:12 <bsmntbombdood> A, rather
02:08:30 <oerjan> that's essentially what i think too
02:08:53 <bsmntbombdood> then you solve \f.f PQR...upto A's # of args
02:09:13 <oerjan> although not entirely.
02:09:27 <ihope> Then again, maybe I'm wrong for the "if it pays any attention to its first argument" case.
02:09:28 <oerjan> you could have XV=KV, say
02:09:59 <ihope> Well, KV is... well, it's V.
02:09:59 <oerjan> yeah, it's more subtle than that.
02:10:11 <oerjan> hm...
02:10:25 <ihope> X could simply pass its first argument on as arguments to other things.
02:10:27 <oerjan> you could have XV=\y.yV
02:10:37 <ihope> Indeed.
02:10:51 <ihope> Therefore, XVX = XV, which... hmm.
02:11:07 <bsmntbombdood> it would have to be \f.(E)f
02:11:15 <bsmntbombdood> instead of \f.fE
02:13:11 <oerjan> V essentially takes an infinite number of arguments, yes. It doesn't have what is called a "head normal form"
02:13:53 <bsmntbombdood> \f.E_a_1 ... E_a_n f E_b_1 ... E_b_n
02:13:59 <ihope> It's headless!
02:14:10 <ihope> ...What is a head normal form, exactly?
02:14:14 <oerjan> And in a sense every combinator which doesn't is semantically equivalent.
02:14:50 <ihope> I guess one could say V is equivalent to (\x.xx)(\x.xx)...
02:15:12 <oerjan> It's \v1v2...vn.v E1E2...Em
02:15:31 <ihope> oerjan: I... see.
02:15:59 <oerjan> The first expression inside the lambda must be a variable.
02:18:54 <oerjan> And if you reduce the Ei expressions recursively to their head normal forms (or to V if they don't have any) then you get a tree structure which may sometimes be infinite.
02:22:47 <oerjan> Bhm trees.
02:24:44 <oerjan> Here is one article which mentions it: http://pauillac.inria.fr/~huet/PUBLIC/Bohm.pdf
02:25:27 -!- oerjan has quit ("Restart").
02:27:51 -!- oerjan has joined.
02:28:38 <oerjan> Anyone said anything?
02:28:44 <bsmntbombdood> no
02:29:03 <ihope> Logs are nice.
02:29:09 <oerjan> Good, then I won't have to go to that snail ircbrowse
02:29:22 <bsmntbombdood> we now have 3 decent single combinator bases
02:29:23 <oerjan> I was trying avoid it
02:29:31 <oerjan> *to
02:30:25 <oerjan> actually i could have gone to tunes, they are much quicker but poorer formatting.
02:32:06 <oerjan> I wonder why meme/ircbrowse has become so slow. Too much growth?
02:35:07 <bsmntbombdood> is S(KS)K reducable?
02:35:29 <oerjan> maybe eta, lessee
02:35:42 <ihope> Reduceable?
02:35:57 <oerjan> S(KS)Kx = S(Kx)
02:36:07 <ihope> Ah, yes.
02:36:11 <bsmntbombdood> so no
02:36:18 <oerjan> nah, looks pretty minimal
02:36:39 <ihope> S(Kx)yz = Kxz(yz) = x(yz)?
02:36:50 <bsmntbombdood> that's what I got
02:37:05 <oerjan> right
02:37:33 <oerjan> you could reduce it with either B or C, I never remember which is which
02:37:52 <ihope> C is composition, isn't it?
02:38:03 <ihope> So S(KS)K = CSK?
02:38:16 <ihope> Hey, S(KS)K = C, even... right?
02:38:28 <bsmntbombdood> yep, C
02:38:37 <bsmntbombdood> no b
02:38:45 <bsmntbombdood> (B a b c) = (a (b c))
02:39:03 <ihope> What's C, then?
02:39:16 <bsmntbombdood> (C a b c) = (a c b)
02:39:23 <bsmntbombdood> according to wikipedia
02:39:30 -!- digital_me has joined.
02:39:39 <ihope> So that's... uh, what was it?
02:39:42 <ihope> flip!
02:39:52 <bsmntbombdood> something like that
02:40:13 <oerjan> B = (.), C = flip
02:40:23 <ihope> And W = join.
02:40:44 <oerjan> join?
02:40:55 <bsmntbombdood> http://en.wikipedia.org/wiki/B%2CC%2CK%2CW_System
02:41:17 <ihope> (a -> a -> b) -> a -> b, isn't it?
02:43:54 <oerjan> well, but only in the Reader monad
02:45:19 <ihope> Is there an equivalent whose principal type is that?
02:46:10 <oerjan> what?
02:46:39 -!- oklopol has quit (Remote closed the connection).
02:46:44 <ihope> Like join, but not monadic, I mean.
02:46:51 -!- oklopol has joined.
02:46:57 <oerjan> Let's ask hoogle
02:48:01 <oerjan> apparently not
02:49:32 <ihope> I suddenly feel an urge to combine this with set theory.
02:49:56 <SimonRC> zzzzz
02:49:57 <ihope> How can functions in lambda calculus be expressed as sets?
02:50:11 <oerjan> Domain theory
02:51:00 <ihope> Domain theory?
02:51:15 <oerjan> http://en.wikipedia.org/wiki/Domain_theory
02:51:21 <SimonRC> (BTW, Unlambda uses c for call-with-current-continuation, which produces "escape continuations".)
02:51:24 <SimonRC> zzzzz
02:51:38 <bsmntbombdood> SimonRC: ?
02:52:55 <oerjan> It's part of unlambda's weird impure functions
02:53:26 <bsmntbombdood> I wonder if you can interpret SKI in hardware
02:53:29 <oerjan> and has nothing to do with BCKW.
02:54:01 <ihope> bsmntbombdood: if you can interpret it in software, and processors interpret software...
02:54:19 <bsmntbombdood> ihope: you know what I mean
02:54:43 <oerjan> you need some kind of automatic memory allocation and garbage collection.
02:54:56 <ihope> bsmntbombdood: do I?
02:55:34 <oerjan> there are plenty of functional virtual machines, i am sure some of them could be hardware implemented.
03:03:13 -!- goban has quit (Remote closed the connection).
03:04:36 <oerjan> here is a design from '86: http://content.ohsu.edu/cgi-bin/showfile.exe?CISOROOT=/etd&CISOPTR=127
03:05:18 -!- goban has joined.
03:09:09 <bsmntbombdood> loooong
03:40:54 -!- Sgeo has joined.
04:22:29 <Arrogant> longcat is
04:23:16 <oerjan> thinporcupine
04:28:07 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09").
04:45:51 -!- digital_me has quit ("leaving").
05:12:35 <bsmntbombdood> SII(S(KK)(SII))
05:14:40 <bsmntbombdood> = V
05:15:48 <oerjan> yep
05:19:39 <bsmntbombdood> combinatory calculus is fun
05:19:58 <bsmntbombdood> who would want to give names to arguments?
05:22:03 -!- crathman has quit (Read error: 110 (Connection timed out)).
05:23:35 <bsmntbombdood> ooh fun
05:23:38 <bsmntbombdood> S(K(SI))(S(KK)I)
05:24:00 <bsmntbombdood> S(K(SI))K even
05:53:47 <bsmntbombdood> I have a wonder.
05:54:22 <oerjan> It's a miracle!
05:54:43 <oerjan> Excuse me, I think I got my tongue stuck in my cheek.
05:55:01 <bsmntbombdood> Is it possible to have a language that uses S,K,I, but doesn't have any explicit order of application symbols?
05:55:16 <bsmntbombdood> *turing complete language
05:56:30 <oerjan> Given that combinators aren't commutative...
05:57:40 <bsmntbombdood> i guess that's a no
06:01:03 <bsmntbombdood> s/S,K,I/any combinators/
06:02:11 <oerjan> some kind of structure is necessary.
06:02:32 <bsmntbombdood> with the X combinators it's possible to define S and K if xyz is x(y(z))
06:03:10 <bsmntbombdood> iota too
06:03:51 <oerjan> if you can define S and K then you still need to keep the order of those.
06:04:00 <bsmntbombdood> yeah
06:04:22 <oerjan> you can dispense with some of the order.
06:04:33 <oerjan> in other calculi
06:05:09 <oerjan> The pi-calculus for example, independent processes whose order doesn't matter.
06:05:23 <oerjan> But those aren't combinator based that I know of.
06:05:38 <bsmntbombdood> never heard of pi-calculus
06:06:08 <oerjan> It's sort of a lambda calculus for concurrent programming.
06:07:40 -!- crathman has joined.
06:08:49 <oerjan> And there are calculi inspired by chemical processes. Instead of ordering, there is a distinction between active and inert data.
06:10:03 <oerjan> but if you had no structure what so ever, and say something called S,K and I:
06:10:20 <oerjan> then the only thing mattering would be the number of each.
06:10:47 <oerjan> Not much to base computation on.
06:11:00 <bsmntbombdood> yeah
06:18:09 -!- Sgeo has quit ("Leaving").
06:44:25 -!- crathman has quit (Read error: 110 (Connection timed out)).
06:52:48 -!- oerjan has quit ("leaving").
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:08:53 -!- Arrogant has quit (Read error: 104 (Connection reset by peer)).
08:18:03 <bsmntbombdood> VVVVVVV
08:19:44 <bsmntbombdood> why does unlambda have V?
08:21:44 <lament> why not?
08:22:17 <bsmntbombdood> because it's stupid?
08:22:26 <lament> it's not stupid
08:22:34 <bsmntbombdood> why not?
08:22:34 <lament> it's a convenient shortcut, like i
08:23:19 <lament> v is bottom, no?
08:23:33 <lament> er, no
08:23:38 <lament> er, yes, it is
08:24:16 <bsmntbombdood> bottom?
08:24:37 <lament> _|_
08:26:07 <lament> bottom is the bottom of an infinite loop :)
08:28:32 <bsmntbombdood> I don't see any applications of V
08:31:44 <lament> it could be a primitive exception mechanism
08:32:05 <lament> for example, division by zero would return v
08:35:03 <bsmntbombdood> hmmm
08:51:36 -!- nazgjunk has joined.
09:18:17 -!- sebbu has joined.
12:20:05 -!- tgwizard has joined.
12:20:26 -!- voodooattack has joined.
13:26:11 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:26:41 -!- nazgjunk has joined.
13:42:28 -!- crathman has joined.
13:51:32 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:51:53 -!- nazgjunk has joined.
14:01:37 -!- tgwizard has quit (Remote closed the connection).
15:10:42 -!- helios24 has quit (Read error: 60 (Operation timed out)).
15:21:16 -!- crathman has quit (Read error: 104 (Connection reset by peer)).
15:21:51 -!- crathman has joined.
15:51:55 -!- sebbu has quit ("reboot time soon").
16:09:50 -!- helios24 has joined.
16:23:10 -!- goban has quit (Connection timed out).
16:23:31 -!- goban has joined.
16:28:59 -!- sebbu has joined.
16:31:24 -!- helios_ has joined.
16:32:08 -!- helios24 has quit (Read error: 110 (Connection timed out)).
16:57:55 -!- crathman_ has joined.
16:58:09 -!- crathman has quit (Read error: 104 (Connection reset by peer)).
16:58:10 -!- crathman_ has changed nick to crathman.
17:01:51 -!- goban has quit (Read error: 104 (Connection reset by peer)).
17:01:54 -!- goban has joined.
17:14:18 -!- helios_ has quit ("Leaving").
17:17:34 -!- crathman_ has joined.
17:27:30 -!- crathman_ has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
17:30:01 -!- crathman has quit (Read error: 110 (Connection timed out)).
17:33:14 -!- calamari has joined.
17:41:16 -!- goban has quit (Connection timed out).
17:41:34 -!- goban has joined.
18:07:05 -!- crathman has joined.
18:09:49 -!- Sgeo has joined.
18:30:08 -!- sebbu2 has joined.
18:35:19 -!- calamari has quit (Read error: 104 (Connection reset by peer)).
18:49:11 -!- sebbu has quit (Read error: 110 (Connection timed out)).
18:49:49 -!- calamari has joined.
19:08:11 -!- sebbu2 has changed nick to sebbu.
19:19:45 <SimonRC> hmm
19:20:57 <SimonRC> Currying is the tautology: ((A & B) -> C) -> (A -> (B -> C))
19:20:58 <SimonRC> heh
19:23:24 <SimonRC> also, IIRC, S is (p -> q -> r) -> ((p -> q) -> (p -> r)
19:24:23 <SimonRC> yeah, that's right
19:24:49 <SimonRC> also K is p -> q -> q and I is p -> p
19:25:07 <SimonRC> which means that S-K-I corresponds to that logic I can't remember the name of
19:25:55 <SimonRC> hmm, Y = SII, so
19:37:53 -!- goban has quit (Remote closed the connection).
19:38:07 -!- goban has joined.
19:39:49 -!- voodooattack has quit.
20:37:51 <bsmntbombdood> ((A & B) -> C) -> (A -> (B -> C)) ?
20:37:54 <bsmntbombdood> what's that mean?
20:38:04 <bsmntbombdood> Y isn't SII
20:38:18 <bsmntbombdood> (SII)x = xx
20:39:17 <bsmntbombdood> Y = SII \f.\x.x(fx)
20:40:10 <bsmntbombdood> i think
20:41:15 -!- UpTheDownstair has joined.
20:41:29 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
20:43:25 -!- UpTheDownstair has changed nick to nazgjunk.
20:44:00 <bsmntbombdood> Y=SII(S(K(SI))I)
20:44:17 <bsmntbombdood> by abstraction elimination
20:57:09 -!- nazgjunk has quit ("night silly sheep").
20:57:30 <bsmntbombdood> hmm that doesn't seem right
20:58:08 <bsmntbombdood> because (S(K(SI))I) is SI
20:58:20 <bsmntbombdood> so that would mean Y=SII(SI)
20:58:29 <SimonRC> I wouldn't know.
21:00:06 <bsmntbombdood> SII(SI)x == (SI)(SI)x == Ix(SIx) == x(SIx)
21:00:08 <bsmntbombdood> hmmm
22:03:42 <bsmntbombdood> stupid haskell and its typeness
22:51:23 -!- ihope has joined.
22:51:48 -!- sebbu2 has joined.
22:54:38 <ihope> ~exec self.ihope = IRCbot("80.32.164.76", "bot", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen()
23:03:42 <ihope> #exec self.ihope = 3
23:04:03 <ihope> ~exec self.ihope = 3
23:04:23 <ihope> Well, that sure didn't kill it, did it?
23:04:26 <ihope> ~exec self.ihope.raw("QUIT")
23:08:35 -!- digital_me has joined.
23:10:21 -!- sebbu has quit (Read error: 110 (Connection timed out)).
23:26:29 <bsmntbombdood> sweet, the calculi of lambda conversion got here
23:30:11 -!- ihope has quit (Read error: 131 (Connection reset by peer)).
23:42:29 -!- SevenInchBread has changed nick to CakeProphet.
23:53:59 <bsmntbombdood> uuuuh
23:54:20 <bsmntbombdood> this book defines Snfx as f(nfx)
23:54:22 -!- sebbu2 has changed nick to sebbu.
2007-02-18
00:00:50 <bsmntbombdood> weird
00:42:23 -!- sebbu has quit ("@+").
00:56:39 -!- Sukoshi has quit (Read error: 104 (Connection reset by peer)).
01:08:54 -!- CakeProphet has changed nick to SevenInchBread.
01:09:17 <bsmntbombdood> foo
01:28:39 -!- anonfunc has joined.
01:34:39 -!- anonfunc has quit.
01:36:00 -!- anonfunc has joined.
02:31:43 -!- digital_me has quit ("leaving").
03:08:54 <crathman> pipes in that SII is the mockingbird
03:09:15 <crathman> I put together the Smullyan birds a while back: http://www.angelfire.com/tx4/cus/combinator/birds.html
03:09:48 <bsmntbombdood> ?
03:09:54 <crathman> wishes for a simple esoteric language that would allow combinators to be named and composed
03:10:07 <bsmntbombdood> what's a bird?
03:10:24 <crathman> Y combinator is known as the Why bird.
03:10:52 <bsmntbombdood> ...
03:10:58 <crathman> birds are kind of a trick for naming combinators - from one of Raymond Smulyan's book
03:11:21 <crathman> a mockingbird repeats whatever it hears: SIIx = xx
03:11:44 <bsmntbombdood> ok
03:12:16 <bsmntbombdood> and...
03:12:52 <crathman> no particular point... just scrolling up on some of the earlier conversation,,,
03:14:10 <crathman> realizes that I might be missing the point of this channel...
03:14:58 <crathman> but playing around with unlambda, I've been wondering if there's a similar language that actually allows you to name and combine combinator definitions
03:16:23 -!- oerjan has joined.
03:18:00 <lament> crathman: well, Scheme would be one ;)
03:18:02 -!- wooby has joined.
03:18:49 <bsmntbombdood> haskell too
03:18:52 <crathman> tis true Scheme can be used. just looking for a language that's bare bones like unlambda or K
03:20:00 <crathman> but unlambda and k doesn't go above the level of actually letting you write long chains of combinators
03:20:04 <oerjan> bsmntbombdood: V in Unlambda becomes usable because of C, the call-with-continuation operator. In fact you have to use them because the I/O is based on it.
03:20:29 <oerjan> The impure C allows you to escape from a V.
03:20:44 <bsmntbombdood> what?
03:21:06 <oerjan> Your command some hours ago, you wondered why Unlambda had V.
03:21:20 <bsmntbombdood> oh
03:21:40 <oerjan> *comment
03:22:00 * oerjan must be in IRP-mode :)
03:23:01 <oerjan> Of course the real reason to tangle V,C and I/O in this way is to make Unlambda weirder than pure combinatory logic.
03:23:18 * bsmntbombdood notices that crathman's "Crossed Konstant Mocker" SKI expansion is way longer than it needs to be
03:24:23 -!- anonfunc has quit.
03:25:32 <bsmntbombdood> can be just S(KK)(SII)
03:25:48 <crathman> I was sloppy with some of the sk chains
03:25:53 <oerjan> Another weirdness: Using C you can detect whether a function is D without actually applying it. I noticed this but I don
03:26:03 <oerjan> 't know if anyone has used it.
03:26:49 <oerjan> It could allow for a different way of list termination.
03:27:46 <oerjan> I considered using it in my Unlambda interpreter but settled on using Church numerals to build lists instead, since you have to count `'s anyhow.
03:32:22 <bsmntbombdood> but we used laminated punch cards!
03:32:32 -!- crathman_ has joined.
03:32:50 <oerjan> SimonRC: the SKI logic is "the implicational fragment of intuitionistic logic"
03:34:06 <bsmntbombdood> oerjan.logread_amount > 100
03:34:52 <oerjan> And SKI corresponds to doing that logic Hilbert style, while lambda calculus corresponds to doing it natural deduction style.
03:35:16 <oerjan> See Wikipedia, I think.
03:35:36 <crathman_> whoops. get's disconnected in the middle of conversation.
03:37:06 -!- crathman has quit (Read error: 60 (Operation timed out)).
03:37:18 -!- crathman_ has changed nick to crathman.
03:42:02 <oerjan> crathman: I found an interpreter for such a language the other day.
03:42:50 <crathman> I'm not proficient enough to write esoteric languages... but very much enjoys playing with them
03:43:26 <crathman> oerjan: got a link?
03:43:34 <oerjan> i don't think it is considered esoteric, even, more like a computational model like combinatory logic itself.
03:44:03 <oerjan> I'm trying to look through my browser logs. Although I posted it here, too.
03:44:07 <crathman> oerjan: there is a fine line between tarpit and minimalist PL. :-)
03:46:11 <oerjan> btw here is a weird one that i couldn't make any sense of: http://cstein.kings.cam.ac.uk/~chris/combinators.html
03:46:35 <oerjan> definitely something to play with, though.
03:48:15 <oerjan> Darn, I didn't know it was that many days ago, but I found it: http://www.dina.dk/~sestoft/lamreduce/index.html
03:48:52 <oerjan> actually it is lambda calculus, but it is still pretty bare-bones
03:52:23 <crathman> oerjan: thanks!
03:56:15 <bsmntbombdood> calculation by hand ftw!
03:58:51 <bsmntbombdood> ha ha!
03:59:12 <bsmntbombdood> I is XXX
03:59:28 <bsmntbombdood> hot combinators naked!
04:00:02 -!- ShadowHntr has joined.
04:00:54 <bsmntbombdood> actually no, but ok
04:12:02 -!- anonfunc has joined.
04:17:22 -!- ShadowHntr has quit (Client Quit).
06:14:29 -!- crathman_ has joined.
06:20:14 -!- crathman_ has quit (Read error: 54 (Connection reset by peer)).
06:20:36 -!- crathman_ has joined.
06:28:31 -!- crathman_ has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
06:32:42 -!- crathman has quit (Read error: 110 (Connection timed out)).
07:08:39 -!- calamari has quit ("Leaving").
07:52:49 -!- helios24 has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:00:54 -!- sebbu has joined.
08:21:34 <Sgeo> G'night all!
08:24:27 -!- Sgeo has quit (Client Quit).
09:03:01 -!- helios24 has quit (Read error: 54 (Connection reset by peer)).
09:03:03 -!- helios24 has joined.
09:09:16 <oklopol> oerjan, was it an unlambda interpreter you made with unlambda or a brainfuck interpreter? :P
09:10:56 <oerjan> unlambda
09:11:12 <oklopol> i thought so
09:11:17 <oklopol> can i have the link?
09:12:14 * SevenInchBread has fun with GUI programming?
09:12:36 <SevenInchBread> I never thought I'd say that.
09:12:46 <oerjan> http://oerjan.nvg.org/esoteric/interpreter.unl but I don't seem to get through at the moment.
09:13:16 <oklopol> thank you
09:13:40 * SevenInchBread should get his own hostname one of these days...
09:14:14 <oerjan> I didn't even know I had one until they mentioned it during a recent crash at NVG
09:14:40 <SevenInchBread> I'm actually not too familiar with how DNS works...
09:15:26 <SevenInchBread> you need a static IP address right? Either that or change the registration each time your IP changes...
09:15:59 <oerjan> well my webpage is on the NVG server so others take care of the mess...
09:16:19 <oklopol> what does C do in unlambda?
09:16:33 <oerjan> if you change the registration you have to be careful about expiration dates, I think.
09:16:56 <SevenInchBread> Tkinter (Tk in Python) is oddly fun to play with.
09:17:16 <oerjan> if you make those too long you _cannot_ change the registration reliably until it expires.
09:17:24 <oerjan> C is call-with-current-continuation
09:17:45 <oklopol> hmm... what's that mean? :D
09:18:15 <oerjan> `Cf turns into `f<cont>, where <cont> is a continuation, a special function.
09:18:29 <SevenInchBread> yeah... changing the registration will create a period of time where your website is inaccessible... because of caching.
09:19:25 <oerjan> Now `<cont>g would cause the call `Cf to return with g as its result
09:20:36 <oerjan> If `Cf hasn't already returned you can think of <cont> as a local break or return function
09:22:02 <oerjan> But if `Cf has already returned you can mysteriously use <cont> to make it return _again_.
09:24:36 <oerjan> The latter can make for even more than usually hard to understand programs. The Unlambda distribution comes with this program: ``r`cd`.*`cd
09:25:12 <oerjan> When you can understand what it does, you have a good grasp on continuations.
09:26:33 <oklopol> so... it has something to do with side-effects? :D
09:26:36 <oerjan> However, I believe my interpreter only uses continuations for escape. Not that it isn't hard enough.
09:27:36 <oerjan> Sort of. C itself is still sort of pure, it just makes for strange program logic.
09:28:11 <oklopol> i'll try to understand them later
09:28:16 <oklopol> *C, not them
09:28:37 <oklopol> unlambda is goddamn simple now that i read about it yesterday
09:29:01 <oklopol> i didn't understand it when i saw it like half a year ago
09:29:25 <oklopol> a few substitution rules
09:34:52 -!- voodooattack has joined.
09:34:57 -!- voodooattack has quit (Remote closed the connection).
09:35:25 <oklopol> maybe it was because i thought there is something super special in there
09:35:33 -!- voodooattack has joined.
09:57:26 -!- nazgjunk has joined.
09:58:11 <oklopol> hmm... i still have a hard time understanding how to do loops
09:58:22 <oklopol> can i get an s expression reduce to itself?
09:58:27 <oklopol> i mean
09:58:29 <oklopol> i can't
09:58:33 <oklopol> can you?
09:59:20 <voodooattack> what do you mean? :p
09:59:49 <oerjan> ahem
10:00:42 <oerjan> loops -> recursion -> clever use of self-application
10:01:51 <oerjan> let's say you want to make a function f = `g f
10:02:10 <oerjan> actually...
10:02:25 <oerjan> since unlambda has strict evaluation we need to be a bit careful.
10:03:17 <oklopol> okay
10:03:29 <oklopol> how would i make f ? `gf
10:03:32 <oklopol> =
10:03:33 <oerjan> Let's say we want f x = ``g f x, where g is given.
10:03:33 <oklopol> *=
10:03:59 <oklopol> yeah
10:04:12 <oerjan> the first version will only work in a lazy language.
10:04:36 <oklopol> i think i follow
10:04:51 <oerjan> the trick is to make something that becomes f when applied to itself.
10:05:06 <oerjan> say h h = f
10:05:15 <oklopol> exactly what i want, yes
10:05:27 <oklopol> hmm okay
10:05:43 <oerjan> so ``h h x = ``g f x = ``g `hh x
10:06:08 <oklopol> so it won't evaluate them too early? or?
10:06:22 <oerjan> whoops.
10:07:17 <oerjan> To avoid early evaluation, the first step is to modify g.
10:08:05 <oerjan> Make a g' such that ``g' h x = ``g `hh x
10:08:53 <oerjan> but such that g' only applies h to itself when really needed.
10:09:09 <oklopol> okay, this gets too hard for me
10:09:11 <oklopol> :)
10:09:22 <oklopol> ```SIXS
10:09:23 <oklopol> ``IS`XS
10:09:23 <oklopol> `S`XS
10:09:37 <oklopol> i just wanted `XS -> `I`XS
10:09:42 <oklopol> hmm
10:09:46 <oklopol> it's not the same thoug
10:09:47 <oklopol> *H
10:09:58 <oerjan> that's not overly hard since I is the identity.
10:10:08 <oklopol> i would need an interpreter to learn this
10:10:31 <oklopol> it's not overtly hard maybe, too hard for me though
10:10:53 <oerjan> i mean, `XS is _always_ `I`XS :D
10:10:59 <oklopol> overt :PP
10:11:14 <oklopol> well, true
10:11:49 <oklopol> but i'm having a hard time convincing myself about turing completeness
10:11:59 <oklopol> since all expressions seem to die right away
10:12:07 <oerjan> ho hum.
10:12:11 <oklopol> so i wanted to make an S expression evaluate to itself
10:12:22 <oerjan> ``sii is your friend.
10:12:43 <oerjan> ` ``sii ``sii will not die.
10:13:27 <oerjan> let me explain it a different way.
10:13:48 <oklopol> mocking bird
10:14:13 <oerjan> to make a function recursive, give it an extra parameter which is itself. Then to recurse, apply that parameter to itself.
10:14:56 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
10:15:05 <oklopol> yeah, that i figured, i just needed to see one simple example of S reducing into itself
10:15:09 <oklopol> an s expression
10:15:43 <oerjan> well I just gave you one, ```sii``sii
10:16:06 <oerjan> simplest there is.
10:16:18 <oklopol> i did this language once where you needed to pass everything around to be able to use them... but unlambda indeed is already like that
10:16:30 <oerjan> yeah
10:16:30 <oklopol> i wish this world was smaller
10:16:38 <oklopol> i might do something original sometime
10:16:57 <oklopol> i'll play with cheese for a while then
10:17:02 <oklopol> i'm very slow in this
10:17:09 <oklopol> *``sii`sii
10:17:54 <oerjan> Eh, right
10:18:03 <oklopol> it's actually trivial
10:18:06 <oerjan> eh, wrong
10:18:11 <oklopol> oh
10:18:16 <oklopol> what is?
10:18:31 <oerjan> It should be ```sii``sii
10:18:57 <oklopol> indeed, but i understood it
10:19:02 <oklopol> i'm a clever interpreter
10:19:25 <oerjan> Another one: ```sii``s`kk``sii
10:19:45 <oklopol> but, it basically just... sii doubles it's argument and applies it to itself, so it's trivial
10:20:09 <oerjan> but it needs lazy evaluation, hm...
10:20:15 <oklopol> but i learned these yesterday so they are not so clear yet i could write these things myself
10:20:23 <oklopol> i have to convert the big one to python :D
10:20:40 <oklopol> lambda a,b,c : (a(c))(b(c))
10:20:44 <oklopol> *ones
10:21:34 -!- nazgjunk has joined.
10:21:55 <oklopol> is there a nice command line kind of unlambda interpreter?
10:22:13 <oklopol> i'd make one fast in python though if just s and k and i
10:22:14 <oerjan> They are all command line aren't they?
10:22:19 <oklopol> probably
10:22:22 <oerjan> The ones in the distribution.
10:22:26 <oklopol> i don't know
10:22:40 <oklopol> because i've not seen one, i'll search if there are many then
10:22:41 <oerjan> And a few more on my web page
10:23:10 <oklopol> this is a language i'll prolly start making interpreters when learning languages, since it's so simple
10:23:32 <oerjan> Essentially what I did
10:23:46 <oklopol> hmm
10:23:52 <oklopol> can i see your web page? :D
10:24:09 <oerjan> Although getting C right requires some understanding.
10:24:14 <oerjan> oerjan.nvg.org/esoteric
10:24:25 <oklopol> yes, that's why i'll leave that until later
10:25:11 <oklopol> oh yeah, my thue
10:25:15 <oklopol> i'll finish it today
10:25:21 <oklopol> i might bug you later that is :D
10:25:50 <oerjan> I'm afraid I'll be leaving the house in 5 minutes
10:26:16 <oerjan> but feel free to ask me later
10:26:48 <oklopol> your haskell interpreter
10:26:52 <oklopol> it takes files
10:26:54 <oklopol> only
10:26:57 <oklopol> seems
10:27:08 <oerjan> Let me see
10:27:15 <oklopol> later tonight, i'll play with unlambda first
10:28:17 <oerjan> No, you can use stdin by giving no argument
10:29:37 <oklopol> :main?
10:29:41 <oklopol> i'll try..
10:29:42 <oklopol> :D
10:30:10 <oklopol> hmm
10:30:27 <oerjan> I wrote it in a pretty old version of Haskell, no hierarchical libraries - NVG isn't quite up to date on Haskell
10:30:39 <oerjan> anyhow, gotta go
10:30:43 <oklopol> bye
10:30:51 -!- oerjan has quit ("Bye").
10:31:30 -!- jix has joined.
10:48:00 -!- anonfunc_ has joined.
10:56:37 -!- voodooattack has quit (Nick collision from services.).
10:56:51 -!- voodooattack has joined.
11:02:51 -!- anonfunc has quit (Read error: 110 (Connection timed out)).
11:06:53 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
11:29:35 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
11:29:44 -!- UpTheDownstair has joined.
11:33:41 -!- UpTheDownstair has changed nick to nazgjunk.
11:48:43 -!- jix__ has joined.
11:53:37 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
12:32:56 -!- voodooattack has quit (Nick collision from services.).
12:33:10 -!- voodooattack has joined.
12:51:50 -!- jix__ has joined.
12:52:44 -!- voodooattack has quit (Read error: 54 (Connection reset by peer)).
12:53:36 -!- voodooattack has joined.
12:56:03 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
12:56:57 -!- nazgjunk has joined.
13:05:32 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:06:18 -!- nazgjunk has joined.
13:07:44 -!- helios24 has quit (Remote closed the connection).
13:08:51 -!- helios24 has joined.
13:26:42 -!- cz_jc has joined.
13:59:56 -!- crathman has joined.
14:20:36 -!- oerjan has joined.
14:41:26 -!- sebbu2 has joined.
14:47:24 -!- crathman has quit (Read error: 110 (Connection timed out)).
14:48:07 -!- cz_jc has left (?).
14:55:07 -!- oerjan has quit ("leaving").
15:01:08 -!- sebbu has quit (Read error: 110 (Connection timed out)).
15:01:08 -!- sebbu2 has changed nick to sebbu.
15:20:31 <SevenInchBread> whoooo...
15:20:35 * SevenInchBread is making..... paint.
15:20:55 <oklopol> my thue is almost ready!
15:21:05 <oklopol> i'm making output by passing a list around xD
15:21:32 <SevenInchBread> dirty cheater?
15:21:39 <oklopol> ya
15:21:57 <oklopol> i want to get that working before actually learning haskell io
15:22:27 * SevenInchBread shall make the best paint program ever.
15:22:33 <oklopol> :P
15:22:48 <oklopol> i made a vector drawing thingie the other day
15:22:56 <oklopol> it was fun
15:24:14 <SevenInchBread> Actually... I might rig up a CLI to a programming language specifically for drawing pretty pictures.
15:24:25 <SevenInchBread> Programming art!
15:45:45 -!- crathman has joined.
15:49:58 <oklopol> ready
15:50:07 <oklopol> goddamn that took long :\
15:51:13 <oklopol> yeah, i don't understand why there aren't programming command lines on the bottom of every program
15:58:10 -!- tgwizard has joined.
16:03:12 <oklopol> haha once again my interpreter was perfect but i couldn't use it xD
16:03:30 <oklopol> well, not perfect but worked as i'd intended it to
16:03:39 <oklopol> i should leave testing for others..
16:17:23 -!- crathman_ has joined.
16:23:49 -!- crathman has quit (Read error: 60 (Operation timed out)).
16:36:50 <SevenInchBread> Anyone want to make a nifty paint program with me?
16:37:58 <SevenInchBread> ...I need to figure out how to make Python play nice with C... so I can make little helper functions in C to do all the massive byte-crunching while still nestled in the comfort of my The Best Language Ever(tm).
16:38:04 <oklopol> OMG
16:38:21 <oklopol> this actually worked http://fvdp.homestead.com/files/eso_bfi.t.txt :P
16:40:26 -!- crathman_ has quit (Read error: 110 (Connection timed out)).
16:40:41 <oklopol> hmm... not that fast though xD
16:41:09 <oklopol> *::=,>,[-<+>]<.:101_11_
16:41:12 <oklopol> ran quite fast
16:41:18 <oklopol> *::=++++++++[>++++++++<-]>+.+.+.+.+.+.+.:
16:41:29 <oklopol> has been running for 2 minutes now
16:42:04 <bsmntbombdood> write an unlambda in brainfuck
16:42:31 <oklopol> :P
16:42:49 <oklopol> i will try when i know it better
16:43:08 <oklopol> ski shouldn't be hard
16:43:12 <oklopol> imean
16:43:15 <oklopol> impossible
16:46:55 <oklopol> now that the interpreter is ready i could make it again from scratch, since it's prolly the crappiest piece of code i've ever written/seen
16:55:05 -!- goban has quit (Read error: 104 (Connection reset by peer)).
16:55:20 -!- goban has joined.
16:57:22 -!- jix__ has changed nick to jix.
17:02:25 -!- goban has quit (Remote closed the connection).
17:02:40 -!- goban has joined.
17:33:51 <oklopol> haha
17:34:06 <oklopol> made a thue interpreter in python in 25 min :P
17:34:32 <oklopol> a little learning with haskell is needed...
17:34:36 <oklopol> ------------>
17:35:04 <oklopol> i was actually just starting to eat... but had to write it... my food's cold maybe :\
17:47:14 <SevenInchBread> Yeah... Thue is fun to make :)
17:47:20 <SevenInchBread> because it's.... super easy to parse.
17:48:06 <oklopol> well, bf is easier
17:48:34 <oklopol> okay, might be i just used bad techniques
17:48:58 <oklopol> since i didn't really reason what the best way to do it would be
17:49:09 <oklopol> just wrote a quick thing
17:50:18 <SevenInchBread> basically... split and partition. ;)
17:54:11 <SevenInchBread> for old,type,new in ((left, right[0], right[:2]) for left, right in (x.partition("=")[::2] for x in split("\n") if "=" in x))):
17:54:20 <SevenInchBread> you can parse the replacement rules in one line. :)
18:07:04 -!- goban has quit (Read error: 54 (Connection reset by peer)).
18:07:19 -!- goban has joined.
18:07:21 -!- voodooattack has quit (Read error: 113 (No route to host)).
18:10:40 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
18:11:04 -!- nazgjunk has joined.
18:11:57 <oklopol> def thue(str):
18:11:57 <oklopol> rules=filter(lambda a:a!=['']and a!=['',''], map(lambda a:a.split("::="),filter(lambda a:a!=' ',str).split("\n")))
18:11:57 <oklopol> return rules
18:12:15 <oklopol> formatting
18:12:28 <oklopol> that's not the optimal way though :PP
18:17:15 <oklopol> http://www.pastebin.ca/362275 this is quite sucky :P
18:19:09 <SevenInchBread> eh... maps and filters get kind of weird.
18:19:17 * SevenInchBread likes list comprehensions. :)
18:19:53 -!- ShadowHntr has joined.
18:20:19 <oklopol> i don't know how to parse that with them
18:20:39 <oklopol> maybe you did it there, that will not compile in my python 2.2
18:20:46 <oklopol> so i have no idea what it does :D
18:21:11 -!- goban has quit (Operation timed out).
18:21:32 -!- goban has joined.
18:21:37 <SevenInchBread> it's basically the same thing as map and filter.
18:21:48 * SevenInchBread has the latest version of Python... so yeah... probably isn't compatable.
18:21:55 <oklopol> prolly, i just have [.. for .. in ... if ...]
18:22:04 <oklopol> and no other list comprehensions
18:22:18 <SevenInchBread> oh... well that was a generator expression... same thing in iterator form
18:22:27 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
18:23:23 -!- nazgjunk has joined.
18:23:47 <oklopol> okay, i don't know what that means
18:24:07 <SevenInchBread> know how list comprehensions work?
18:24:20 <oklopol> yes
18:25:04 <SevenInchBread> a generator is the same thing... except instead of constructing a list.. it just creates an iterator (which lazily evaluates the items as it iterates over them..)
18:25:18 <SevenInchBread> list comprehensions are eager... generator expressions are lazy.
18:25:49 <oklopol> i know that
18:25:55 <oklopol> but how do they work?
18:26:02 <oklopol> show me an easy example
18:26:43 <oklopol> oh
18:26:55 <oklopol> i got it now that i read your code thoroughly
18:27:19 <oklopol> except.. what is (x.partition("=")[::2] ?
18:27:33 <oklopol> the [::2] thingie
18:27:47 <SevenInchBread> hmmm.. it's hard to explain exactly...
18:27:57 <SevenInchBread> it has something to do with modulo.
18:27:57 <oklopol> tell me what it does there
18:28:04 <oklopol> i'll try and induce
18:28:05 -!- UpTheDownstair has joined.
18:28:24 <SevenInchBread> it takes the 0th and 2nd slice from a 3-tuple
18:29:10 <SevenInchBread> >>> x = (x ** 2 for x in xrange(100))
18:29:12 <SevenInchBread> >>> print x
18:29:13 <SevenInchBread> <generator object at 0x01699148>
18:29:15 <SevenInchBread> >>> print x.next()
18:29:17 <SevenInchBread> 0
18:29:18 <SevenInchBread> >>> print x.next()
18:29:19 <SevenInchBread> 1
18:29:21 <SevenInchBread> >>> print x.next()
18:29:23 <SevenInchBread> 4
18:29:24 <SevenInchBread> >>> print x.next()
18:29:25 <SevenInchBread> 9
18:29:27 -!- nazgjunk has quit (Connection reset by peer).
18:29:27 <SevenInchBread> >>> print x.next()
18:29:29 <SevenInchBread> 16
18:29:30 <SevenInchBread> >>> print x.next()
18:29:32 <SevenInchBread> 25
18:29:34 <SevenInchBread> >>> print x.next()
18:29:36 <SevenInchBread> 36
18:29:38 <SevenInchBread> >>> for num in x: print num
18:29:39 <SevenInchBread> 49
18:29:41 <SevenInchBread> 64
18:29:42 <SevenInchBread> 81
18:29:44 <SevenInchBread> 100
18:29:45 <SevenInchBread> (...truncated...)
18:29:47 <SevenInchBread> mmm... floddy.
18:31:03 <oklopol> yeah, i thought it's like that, but now partition returns left, mid, right, mid being the thing by which it was partitioned?
18:31:27 <SevenInchBread> yeah
18:31:43 <SevenInchBread> so [::2]] effectively rmeoves the mid
18:32:02 <oklopol> yeah
18:32:10 <SevenInchBread> (It's a common technique I use with partition... :) )
18:32:21 <oklopol> can i do [:1:2] or something to get 1,3,5 etc
18:32:45 <SevenInchBread> that would just return 0
18:32:50 <oklopol> and btw i think it's brilliant they have these [stuff here] things for easy sublists etc
18:33:03 <oklopol> but, how would i get them?
18:33:05 <SevenInchBread> you mean... list literals? :)
18:33:09 <oklopol> is there a way?
18:33:10 <oklopol> maybe
18:33:21 <oklopol> i don't know python's terminology that well
18:33:30 <SevenInchBread> the brackets
18:33:34 <SevenInchBread> [stuff, here]
18:33:45 <oklopol> yeah
18:34:02 <oklopol> is that python's own?
18:34:03 * SevenInchBread ...thought that was common...
18:34:27 <SevenInchBread> yeah... comma-delimited list of expressions surrounded by brackets... makes a list.
18:34:38 <oklopol> no no nono
18:34:53 <oklopol> list literal, i didn't parse that in my head it seems :P
18:35:01 <SevenInchBread> ooooh
18:35:04 <oklopol> i mean (list here)[stuff here]
18:35:05 <SevenInchBread> the slices
18:35:08 <oklopol> ye
18:35:15 <SevenInchBread> >>> range(100)[::2]
18:35:16 <SevenInchBread> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
18:35:24 <SevenInchBread> I'm guessing it uses modulo...
18:35:27 <oklopol> can you have 1, 3 etc?
18:35:38 <oklopol> yeah, from:to:filter-mod
18:35:45 <oklopol> i'd say
18:35:46 * SevenInchBread has never really figured out step... he just knows that setting it to 2 skips all the even indices.
18:35:57 <oklopol> oh
18:36:02 <oklopol> i'm a goddamn idiot :P
18:36:07 <oklopol> list[1::2]
18:36:19 <SevenInchBread> ...yup :)
18:36:26 <SevenInchBread> that would give you.....
18:36:36 <oklopol> 1, 3, etc?
18:36:38 <oklopol> i hope
18:36:42 <SevenInchBread> >>> range(100)[1::2]
18:36:44 <SevenInchBread> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
18:37:59 <SevenInchBread> heh... you can do all sorts of nifty stuff with slices if you make your subclasses of list. :)
18:38:44 <oklopol> hey... range(100)[1::2:3] would that be something?
18:38:58 <SevenInchBread> nah.
18:39:09 <SevenInchBread> there's only three parts.
18:39:13 <SevenInchBread> start:end:step
18:39:14 <oklopol> would've been a fun way to slice
18:39:16 <oklopol> yeah
18:39:32 * SevenInchBread brings up numpy... which uses some kickass multidimensional slicing.
18:53:13 <oklopol> numpy-dumpy
18:57:25 <SevenInchBread> here we go...
18:57:30 * SevenInchBread had to figure out how to use it again.
18:58:45 <SevenInchBread> >>> import numpy
18:58:46 <SevenInchBread> >>> x = numpy.array([range(10), range(10,20), range(30,40), range(40,50)])
18:58:48 <SevenInchBread> >>> print x
18:58:49 <SevenInchBread> [[ 0 1 2 3 4 5 6 7 8 9]
18:58:51 <SevenInchBread> [10 11 12 13 14 15 16 17 18 19]
18:58:52 <SevenInchBread> [30 31 32 33 34 35 36 37 38 39]
18:58:54 <SevenInchBread> [40 41 42 43 44 45 46 47 48 49]]
18:58:55 <SevenInchBread> >>> x[1,3]
18:58:57 <SevenInchBread> 13
18:58:59 <SevenInchBread> >>> x[1,(3,4,5,6,7)]
18:59:00 <SevenInchBread> array([13, 14, 15, 16, 17])
18:59:02 <SevenInchBread> >>> x[(1,2),(3,4)]
18:59:03 <SevenInchBread> array([13, 34])
18:59:05 <SevenInchBread> >>> x[(1,2,3),(3,4,5)]
18:59:06 <SevenInchBread> array([13, 34, 45])
18:59:34 -!- maverickbna has joined.
18:59:55 -!- ShadowHntr has quit (Nick collision from services.).
19:00:05 -!- maverickbna has changed nick to ShadowHntr.
19:01:33 <oklopol> can you take sub-squares from a 2d-array?
19:01:50 <SevenInchBread> I think you can... I'm just trying to figure out how. :P
19:02:15 <SevenInchBread> it's also pretty damn efficient... most of NumPy's array stuff is in C.
19:03:23 <oklopol> yeah, clever trick
19:03:40 <SevenInchBread> I don't even think it uses multiple arrays actually..
19:03:55 <SevenInchBread> as long as you maintain a solid shape you can just use multiplication.
19:04:17 <oklopol> yeah, asm does that faster than it does actualy multiplication
19:04:21 <oklopol> so yeah, it's fast
19:04:26 <oklopol> *actualy
19:04:29 <oklopol> *actual
19:04:36 <oklopol> (wh the y)
19:04:43 <oklopol> *(why the typos :\)
19:05:40 <SevenInchBread> heh... there's a function for initializing an arbitrary array to nothing but zeros... perfect for a BFer :)
19:06:22 <oklopol> well, it's kind of obvious there's one :P
19:06:54 <SevenInchBread> hmmm?
19:07:10 <oklopol> i think it is... maybe not :\
19:08:47 -!- Sgeo has joined.
19:10:10 <SevenInchBread> oklopol, do you have it installed?
19:10:50 <oklopol> i don't... i'll get a newer python too if i get it
19:10:56 <oklopol> hmm
19:11:00 -!- UpTheDownstair has changed nick to nazgjunk.
19:11:13 <SevenInchBread> Numpy is incredibly fast O.o
19:11:22 <oklopol> i'll do it now, gotta see
19:12:06 <SevenInchBread> it initialized a 100 by 100 by 100 array of zeros in about the same time any other normal Python list would initialize.
19:13:01 <oklopol> hmm
19:13:28 <oklopol> 100 x 100 is pretty much an empty array :)
19:13:40 <oklopol> 10000 ~ 0
19:14:00 <SevenInchBread> well... using Python lists it would have taken up a signifigant amount of memory.
19:14:20 <oklopol> probably
19:14:37 <oklopol> i'm used to python being unbelievably slow
19:15:04 <SevenInchBread> I haven't experience much of anything else... as far as for actual use.
19:15:45 <oklopol> i know at least c++, java, python and vb thoroughly
19:15:57 <SevenInchBread> it usually works fine for what I need it to do... and there's usually some insane library out there that can accommodate those weird high-performance situations.
19:16:06 <oklopol> thoroughly being i know pretty much all the things normal people use with them :)
19:17:17 <oklopol> 2.5 is the newest?
19:18:15 <oklopol> well, it's newer at least
19:21:25 <SevenInchBread> yeah
19:21:28 <SevenInchBread> that's the newest.
19:21:53 <SevenInchBread> hmmm... alright... so a 100 by 100 by 100 by 100 matrix of zeroes made my computer bog down for a minute.
19:22:29 <oklopol> but it could allocate it?
19:22:35 <SevenInchBread> eventually.
19:22:46 <oklopol> 100 megabytes
19:22:58 <SevenInchBread> ...hmmm, oh yeah.
19:23:01 * SevenInchBread didn't consider that.
19:23:39 <SevenInchBread> yeah... if I try to go 5 dimensions of 100 each... numpy spits out a "dimensions too large" error... for good reason I imagine. :P
19:23:46 <oklopol> it's not the time that's the issue there :)
19:24:08 <oklopol> hmm
19:24:13 <oklopol> dimensions too large?
19:24:18 <oklopol> it can have 5 dim though?
19:24:23 <SevenInchBread> yeah
19:24:31 <SevenInchBread> it can have arbitrary length dimensions.
19:25:04 <oklopol> good, c had a restriction of 12 dimensions at some point :P
19:25:05 <SevenInchBread> but... since that would be well over a gigabyte... it sorta... preemptively stopped me.
19:25:16 <oklopol> (might be a lower lever restriction though)
19:25:28 <SevenInchBread> well... I haven't checked the actual max...
19:25:31 * SevenInchBread does so.
19:25:40 <oklopol> well, 10 gigabytes
19:25:56 <oklopol> a bit more if you consider the idiotic 1024==1000 thing
19:26:00 <SevenInchBread> 10 gigabytes.... of zeros... talk about useful memory.
19:26:03 <oklopol> eh
19:26:05 <oklopol> a little less
19:27:06 <SevenInchBread> typ... the dimensions look arbitrary... just however much memory we can hold.
19:27:32 <oklopol> typ?
19:28:06 <SevenInchBread> er... that was a "yep"/
19:28:43 <oklopol> ah okay
19:29:28 <SevenInchBread> ah.... 32
19:30:07 <SevenInchBread> >>> y = numpy.zeros((1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1))
19:30:09 <SevenInchBread> ValueError: sequence too large; must be smaller than 32
19:30:25 <oklopol> :\
19:30:29 <oklopol> that's stupid
19:30:40 <SevenInchBread> Still... that should be plenty of dimensions for most scenarios... unless you're doing some freaky theoretical physics shit
19:30:59 <oklopol> yeah, but it wouldn't make it harder to code to make it n dimensions...
19:31:15 <SevenInchBread> Python lists are arbitrary dimension... I believe.
19:31:25 <oklopol> i know they are
19:32:40 <SevenInchBread> >>> x = []
19:32:41 <SevenInchBread> >>> for num in xrange(1000):
19:32:43 <SevenInchBread> x = [x]
19:32:45 <SevenInchBread>
19:32:46 <SevenInchBread> >>>print x
19:32:48 <SevenInchBread> (...I'll spare you the spam...)
19:32:49 * SevenInchBread is feeling copy-pasty.
19:33:05 <oklopol> i hate you
19:34:21 <SevenInchBread> well... I tried to make a bigger dimension... but xrange() gave out on me before the trust list could.
19:35:40 <SevenInchBread> oh ho! but itertools and its trusty count function save the day.
19:35:56 <oklopol> i was just about to press paste on the same pieceeh
19:37:26 <SevenInchBread> mmmm.... this is going to take a while.
19:40:15 <oklopol> my computer should learn some manners... when i tell someone i hate them it's not the right time to freeze up just before i can explain what i meant...
19:40:30 <SevenInchBread> yeah... so..
19:40:39 <SevenInchBread> 10000000000000000000000000000000-d list took too long...
19:40:55 <oklopol> fucking python installation ....
19:40:57 <oklopol> :\
19:40:59 <SevenInchBread> hurray KeyboardInterupt.
19:41:06 -!- GregorR has changed nick to GreggorR.
19:41:41 <SevenInchBread> Python's list/iterative-stuff is probably one its stronger features...
19:41:57 -!- GreggorR has changed nick to GregorR.
19:42:58 <SevenInchBread> theoeretically speaking... Python can have infinitity-d lists.
19:43:15 <SevenInchBread> just... not with all unique values.
19:43:49 <SevenInchBread> ...but that's not really anything amazing. :P
19:44:02 <oklopol> well, any list can have any-dimension lists :)
19:44:05 <oklopol> *language
19:44:08 <oklopol> lol xD
19:44:42 <SevenInchBread> hmm... I actually don't think Python can create infinite-length lists...
19:45:16 <SevenInchBread> Lisp can... simply because they're linked.
19:47:09 <SevenInchBread> heh... you can -simulate- an infinite list..
19:47:26 <SevenInchBread> but I guess that's all Lisp is doing also.
19:48:58 <oklopol> you can't have an infinite length list because of the implementation
19:49:11 <oklopol> i don't think python has but memory limits on length
19:49:15 -!- sebbu2 has joined.
19:49:17 <SevenInchBread> I can have a set that contains everything though. :)
19:49:37 <SevenInchBread> oklopol, well... with linked lists you can simply reference the pairs beforehand...
19:49:38 <oklopol> i hate windows
19:49:47 <oklopol> i'd like a brainfuck os better
19:50:04 <oklopol> what do you mean?
19:50:27 <oklopol> why the fuck does the taskbar not hide?!?!?!?!?!?!?
19:50:49 <oklopol> why did they put a randomizer on every fucking task
19:51:06 <oklopol> i closed about 40 programs just now to get it down
19:51:12 <oklopol> i only have mirc open
19:53:07 -!- digital_me has joined.
19:53:12 <oklopol> okay, i'll throw this piece of shit out the window.
19:53:31 * SevenInchBread made an infite list in Python... cheating a little bit.
19:53:44 <oklopol> elaborate
19:54:07 <SevenInchBread> >>> x = [1,[2,[3,[]]]]
19:54:08 <SevenInchBread> >>> x[1][1][1] = x
19:54:10 <SevenInchBread> >>> x
19:54:11 <SevenInchBread> [1, [2, [3, [...]]]]
19:54:16 <oklopol> ah
19:54:17 <oklopol> yeah
19:54:32 <oklopol> i forgot python had pointers
19:54:33 <oklopol> i mean
19:54:35 <oklopol> you know what i mean
19:54:43 <SevenInchBread> heh... yeah... lists are mutables.
19:55:06 <oklopol> mutable is different, i mean addressable
19:55:09 <oklopol> ...
19:55:34 <SevenInchBread> maybe in the implementation... but it's transparent at the top.
19:55:54 <oklopol> ?
19:56:06 <oklopol> no it isn't
19:56:07 <SevenInchBread> the pointing and addressing and all that is automatic.
19:56:20 <oklopol> well, mathematically yes
19:56:27 <SevenInchBread> in other words... there is no & :)
19:56:29 <oklopol> you don't see the pointers as numbers
19:56:35 <oklopol> that's the only difference
19:57:04 <SevenInchBread> yeah well... by that logic... there's no much difference in assembly and Python.
19:57:18 <SevenInchBread> I'm just not seeing the assembly.
19:57:58 <oklopol> all you don't see is the numerical addresses... otherwise you only have pointers and calcs are with values, moving around with pointers
19:58:11 <oklopol> it's a lot of convenience
19:58:24 <oklopol> BUT you don't have a real difference like in functional langs you would
19:58:33 <oklopol> where you can't know where something is
19:58:34 <SevenInchBread> totally... I'd rip my hair out if I had to mess around with pointers.
19:58:41 <oklopol> and it isn't really anywhere
19:59:02 -!- goban has quit (Read error: 54 (Connection reset by peer)).
19:59:07 <oklopol> but i forgot python is any-style programming... there's a nice term for it
19:59:14 <oklopol> somewhere out there
19:59:14 -!- goban has joined.
19:59:18 <oklopol> pointers are nice
19:59:36 <SevenInchBread> usually they can be simulated in part... they are nice though.
20:00:02 <SevenInchBread> I've got a fairly interesting language in my head... that resembles Smalltalk... but fairly different.
20:00:24 <oklopol> that's a bit too vague to be interesting tbh :D
20:01:09 <SevenInchBread> it's looking pretty neat in my head... it uses Smalltalks message-passing (except there are no multi-argument messages) mixed with Lisp's idea of symbols....
20:01:41 <oklopol> i don't know smalltalk :<
20:02:02 <SevenInchBread> smalltalk was one of the pionerrs of OO.
20:02:06 <SevenInchBread> before it got all... weird.
20:02:54 <oklopol> you mean OO features or attitude
20:03:02 <oklopol> with weird
20:03:17 <oklopol> and yes, i know that much about smalltalk
20:03:33 <SevenInchBread> It was one of the first to do "everything is an object"...
20:03:39 <oklopol> yeah yeah
20:03:51 <oklopol> i know all the trivia stuff, just not anything real :)
20:03:54 <SevenInchBread> It doesn't really remind me of other OO languages though.
20:04:28 <oklopol> it has a metaclass everything is derived from, the metaclass being derived from itself, that's how much i know :P
20:04:41 <oklopol> because everything HAD TO be derived from something
20:06:46 <SevenInchBread> yeah... it's like Lisp for OO... there's only three syntax forms... and no keywords (aside from a few reservered booleans, self, and super)... conditionals are implemented as methods of booleans... etc.
20:07:01 <SevenInchBread> http://users.ipa.net/~dwighth/smalltalk/byte_aug81/design_principles_behind_smalltalk.html <---
20:08:32 -!- sebbu has quit (Connection timed out).
20:08:32 -!- sebbu2 has changed nick to sebbu.
20:08:58 <SevenInchBread> more flowery than implementation-specific... but eh... it's the best description I could find. :P
20:09:32 <oklopol> i like technical descriptions better.. but i'll read that if it's not long
20:09:56 <SevenInchBread> it does go into what it considers a hinderance to program design.
20:19:41 -!- Rugxulo has joined.
20:20:55 -!- Rugxulo has left (?).
20:35:26 <oklopol> i finally managed to read it :)
20:35:33 <oklopol> there was nothing i didn't know
20:36:17 <SevenInchBread> ...yeah
20:36:21 <SevenInchBread> erm...
20:36:34 <SevenInchBread> so... other languages don't have something similar to list[x:y]?
20:36:50 <oklopol> i haven't seen
20:37:01 <oklopol> that does not mean there isn't one
20:37:07 <SevenInchBread> yeah...
20:37:11 <oklopol> since i know mostly esoteric alngs
20:37:13 <oklopol> *langs
20:37:25 <SevenInchBread> Some Python-like languages probably do it... I'd guess Ruby and maybe Perl.
20:37:29 <oklopol> maybe 15-20 non-esoteric
20:37:58 <oklopol> yeah, i don't know those languages... i should learn the languages everyone knows...
20:38:00 <SevenInchBread> Hmm... I think in Smalltalk slicing is like list from: x to: y
20:38:40 <oklopol> that kind of sublisting syntax can of course be implemented in c++ in 10 min
20:39:10 <oklopol> but i won't do that :\ so it has to be in the language itself
20:39:22 <SevenInchBread> I'm surprised C(++) doesn't have... Python's for loop.
20:39:40 <oklopol> it is considered to be added
20:39:48 <SevenInchBread> it's way too common a procedure to always repeat.
20:39:54 <oklopol> but c++ is slow to change nowadays
20:40:02 <oklopol> it will take the java syntax
20:40:08 <SevenInchBread> well... maybe not in C.... arrays aren't quite as versatile as lists.
20:40:10 <oklopol> java just evolves faster
20:40:40 <oklopol> for (int i : integer_list) {}
20:40:52 <oklopol> java is like that, c++ too if they add it
20:41:12 * SevenInchBread tries to think of some more Smalltalk idioms he knows...
20:41:12 <oklopol> but you have iterators in c++, it's the same thing but no nice syntax for it
20:41:18 <SevenInchBread> I've never actually used that language... just read about it.
20:41:39 <SevenInchBread> conditionals are like.... bool ifTrue: function ifFalse: function
20:42:09 <SevenInchBread> and it has literal syntax for lambda blocks in []'s
20:44:34 <SevenInchBread> math looks like any other math... because of the binary syntax form... 2 + 2 2 / 2
20:45:48 <oklopol> the if thing i don't understand
20:45:53 <oklopol> but i know math is like that
20:46:10 <SevenInchBread> booleans are equipped with an ifTrue and an ifFalse method.
20:46:16 <SevenInchBread> that take lambdas as arguments.
20:46:52 <SevenInchBread> so....
20:47:30 <SevenInchBread> 2 > 3 ifTrue: ["Hello, World!" print]
20:47:49 <oklopol> okay
20:50:46 <SevenInchBread> so yeah... the idea I had for my own language... would eliminate that annoying colon, make all functions one-argument, remove classes entirely (prototype OO), and have some nifty ways to mess around with the evaluation of amessage
20:54:26 <oklopol> i still don't know anything about smalltalk :)
20:54:49 <SevenInchBread> ...well I don't really know what else to explain.
20:55:35 <oklopol> "..." print outputs a string
20:55:36 <SevenInchBread> it's a fairly straightforeward design... there's some objects... and some messages... and everything about the implementation can be changed in some way.
20:55:42 <oklopol> that much i know
20:55:42 -!- UpTheDownstair has joined.
20:55:48 <SevenInchBread> do you know... why?
20:55:49 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
20:55:53 <oklopol> plus basi arithmetics
20:56:08 <oklopol> *basic
20:56:33 <oklopol> i don't know syntax, i don't know the language
20:56:46 <SevenInchBread> oh... well syntax is a snap.
20:57:04 <SevenInchBread> there's basically thee kinds of expressions... and a few literals.
20:57:15 <oklopol> i know, the text said
20:57:17 <oklopol> or you
20:58:08 -!- goban has quit (Read error: 54 (Connection reset by peer)).
20:58:11 <oklopol> messages... how i see it is that functions are rather sent messages to objects that contain instructions
20:58:14 <oklopol> or lambdas
20:58:15 <oklopol> functions
20:58:17 <oklopol> w/e
20:58:31 <oklopol> but it's just my guess
20:58:36 <SevenInchBread> unary... which goes object message binary... which goes object message arg1 and keyword object message1: arg1 message2: arg2 message3: arg3 ... ... ..
20:58:39 <SevenInchBread> it's basicallty a method call.
20:58:43 <oklopol> i don't know what is referred to by a "message"
20:58:45 <SevenInchBread> message-passing.
20:58:49 -!- tgwizard has quit (Remote closed the connection).
20:58:54 <oklopol> like in erlang?
20:59:05 <SevenInchBread> it's like "Hello".split("e")
20:59:09 <SevenInchBread> the "split" is the message.
20:59:15 <SevenInchBread> to "Hello"... the object.
20:59:25 <SevenInchBread> it's just a method call... pretty much.
20:59:27 <oklopol> yeah, so exactly how i guessed, but it wasn't clearly said there
20:59:31 <oklopol> so i didn't know
20:59:44 <oklopol> by "message" i assumed an erlang-type message
20:59:48 <oklopol> you know erlang?
20:59:50 -!- UpTheDownstair has changed nick to nazgjunk.
20:59:51 <SevenInchBread> nope.
21:01:11 <oklopol> it's functional.. but process id's that are somewhat like continuations can be stored and you can do prodess-id ! message
21:01:49 <oklopol> the in the function that the process-id points to there can be "on receive this and this message"
21:02:01 <oklopol> on receive... anyway
21:02:07 <SevenInchBread> oh... kinda like coroutines?
21:02:12 <oklopol> kinda
21:02:18 <oklopol> you should read about erlang
21:02:25 <SevenInchBread> I've heard erland is good for threads.
21:02:25 <oklopol> it's pretty neat
21:02:29 <oklopol> yeah
21:02:40 <SevenInchBread> I'm assuming is uses a lot of coroutine-like stuff
21:02:40 <oklopol> runs 25 million threads smoothly i hear
21:03:02 <oklopol> yeah, functions can stop to wait for messages from other functions
21:03:12 <oklopol> and when you call a function you store it's process id
21:03:15 <oklopol> so you can send it data
21:03:25 <oklopol> that's the basic thing you do in erlang
21:03:26 <SevenInchBread> so it's like... a mini-OS?
21:03:39 <SevenInchBread> that sounds pretty cool actually...
21:03:47 <oklopol> ericssons language
21:04:10 <oklopol> (though the name actually comes from a guy named erlang, quite a coincidence)
21:04:12 <SevenInchBread> you could easily fork real OS subprocesses and wrap them as erland functions.
21:04:28 <oklopol> yeah
21:05:09 <oklopol> i like the idea there's only data in functions and no objects etc but you can send messages... i don't know why though :P
21:05:25 <SevenInchBread> hmm.... ah... that's interesting... so it stores processes as memory... that's usually not done.
21:05:38 <oklopol> i haven't even seen an implementation for erlang, i just read a book about it... i think
21:05:43 <oklopol> i have no ideaw when
21:05:45 <oklopol> *-w
21:05:56 <oklopol> yeah, a running function is kinda like an object
21:06:03 <oklopol> and it dies after it's executed
21:06:10 * SevenInchBread was going to ID-ify the objects in his language... he might also steal a few ideas from erland while he's at it. :)
21:06:22 <SevenInchBread> ...erlang
21:06:27 <oklopol> but long executions don't matter since they are in a stabilized state when waiting for messages
21:07:03 <oklopol> actually... a function waiting for a message is kinda like an object with a state
21:07:05 <SevenInchBread> Id-ified responses... sounds like a step-up in human-like communication... since communication is rarely linear.
21:07:12 <oklopol> ...only a lot sexier if you ask me
21:07:18 <oklopol> yeah
21:07:23 <SevenInchBread> ah... all the local variables are held like an object's state?
21:07:28 -!- goban has joined.
21:07:31 <oklopol> yes
21:07:43 <oklopol> you have pattern-matching and vars
21:07:48 <oklopol> ints, lists, strings
21:07:54 <oklopol> and of course atoms
21:07:59 <oklopol> for pattern-matching
21:08:06 <SevenInchBread> ...I've actually had an idea like that before... frozen functions with object-like state.
21:08:14 <oklopol> has all the nice functional list convenience
21:08:25 <oklopol> yep, i just realized it now actually
21:08:35 <oklopol> and started to like erlang a lot more :)
21:08:59 <SevenInchBread> hmmm...
21:09:23 <oklopol> because they can have vars, calling is an object constructor, vars are the stored state, receiving messages is waiting for function calls
21:09:35 <oklopol> kinda like
21:09:52 <SevenInchBread> the main reason I've never used threading is because it's too much of a hassle... but processes with IDs and a state (which basically mimics OS processes... except you have way more access to the memory inside)... is kind of natural.
21:10:07 <SevenInchBread> yeah.. I've noticed you can use coroutines to make objects..
21:10:30 <oklopol> yeah, well, in java threads are easy, but erlang beats it
21:10:40 <oklopol> and with most langs threads are shitty
21:11:31 * SevenInchBread incorporates some of that into his smalltalk/lisp mix.
21:11:45 <oklopol> i actually never realized what you saw in coroutines until i realized erlang has that, basically, and it's a very sweet concept
21:12:09 <oklopol> mix'm up
21:12:09 <SevenInchBread> the coroutines I've seen though are far more limited than that though.
21:12:24 <SevenInchBread> just single-input, single-output type stuff.
21:13:06 <SevenInchBread> I guess with some hackish alterations of some low-level Python stuff you could change the local state... but it's definetely not meant to happen conviently.
21:14:02 <oklopol> yeah
21:14:09 <oklopol> erlang doesn't have return values
21:15:00 <oklopol> actually
21:15:02 <oklopol> i'm lying
21:15:05 <oklopol> *wrong
21:15:36 <SevenInchBread> hmm.. basically I stole Lisps idea of a universal syntax and symbols (kind of like pointers but in reverse)... and then I stole Smalltalks idea of everything-about-an-object-is-handled-by-itself... and from erland I'll take the idea of continued processes with changable state. :)
21:15:51 <oklopol> in erlang you can call functions in a different thread with one syntax and the function returns it's id right away, or you can call it "normally", and it then returns whatever it returns when it's ready
21:16:29 <oklopol> "universal syntax and symbols" what does this mean?
21:16:31 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:16:40 <oklopol> i don't know lisp that well
21:16:43 <oklopol> :D
21:16:45 <oklopol> maybe
21:16:52 <SevenInchBread> well... Lisp just has one and only one syntax.... (func arg1 arg2 ...)
21:17:06 <oklopol> ah
21:17:07 <oklopol> yeah
21:17:13 <SevenInchBread> that's it... with some minor exceptions.
21:17:19 <oklopol> yep
21:18:06 <SevenInchBread> so... Lisp can directly access its variables as a data type... a symbol data type.
21:18:36 <SevenInchBread> so... to assign a symbol to a value in Lisp... you do (set 'symbol value)
21:18:51 <oklopol> yeah
21:19:04 <SevenInchBread> ' being a special literal that keeps an expression from evaluating... and returns it as a symbol.
21:19:06 <SevenInchBread> so yeah
21:19:40 <SevenInchBread> if you have it so that every object understands the "becomes" message.
21:19:42 -!- ShadowHntr has quit ("End of line.").
21:20:06 <SevenInchBread> you can change reference to objects... or you can change objects themselves.
21:20:10 <oklopol> in common lisp is not used with defun, set and such specialties... or?
21:20:48 <oklopol> i read this book from the seventies...
21:20:55 <SevenInchBread> well... common lisp has setq... which is a macro that basically boils down to set. (it stands for "set quote"... because the ' is called the quote operation)
21:21:16 <SevenInchBread> and defune is a macro too...
21:21:31 <oklopol> yeah
21:21:40 <oklopol> set and defun they were in the book
21:22:23 <oklopol> and let and something to make functions and vars in functions...
21:22:24 <SevenInchBread> but in my language... there won't be macros... and thus no special way to make variable assignment.
21:22:32 <oklopol> and lambda separately
21:22:40 <oklopol> 3 different ways to make functions
21:22:50 <SevenInchBread> you just have to send a becomes message to a symbol object..
21:23:06 <oklopol> yeah
21:23:10 <oklopol> i see what you mean
21:24:38 <SevenInchBread> `foo becomes bar would change the foo symbol so that it pointed to bar... but foo becomes bar (without the backquote) would change foo the object to bar...
21:24:52 <SevenInchBread> so in the second one... -all- references to foo would be pointing to bar now.
21:25:02 <SevenInchBread> it's like the reverse of pointers. :)
21:25:39 <oklopol> kinda
21:25:42 <SevenInchBread> and instead of tiny little memory blocks... you have entire objects.
21:27:19 <SevenInchBread> it'll probably work using an id system... each object would have a unique ID on an list represented the global memory of the program... it sounds very much like a high-level version of pointers.
21:28:31 <oklopol> yeah, somewhat
21:30:32 <SevenInchBread> it's just the opposite of how C does it... in C the variables are implicitly references... while in this the variables evaluate to objects... and you have to "catch" them with a backquote to evaluate the reference itself.
21:31:04 <SevenInchBread> well... no
21:31:10 <oklopol> catch?
21:31:23 <SevenInchBread> actually... variable assignation copies the memory into the new block.
21:31:38 <SevenInchBread> ...er... I think?
21:31:46 <oklopol> :P
21:38:06 <SevenInchBread> well... the benefits are basically what you get with pointers... except less complicated (I think).
21:38:42 <SevenInchBread> or maybe just less tedious... you don't have to type out 4 billion *'s ...just 1 ` whenever you want to alter a variable.
21:39:56 <oklopol> well... the syntactical inconvenience of c pointers can easily be circumvented in c++
21:41:10 <SevenInchBread> with ->?
21:42:11 <SevenInchBread> the symbol design works really nice for prototype-oriented OO... familiar with it?
21:43:37 <oklopol> prolly
21:43:41 <oklopol> not the name though
21:43:48 <oklopol> sounds familiar
21:44:06 <oklopol> no, with references
21:45:30 <SevenInchBread> basically... prototype OO is OO without classes.
21:45:47 <SevenInchBread> you make new objects by spawning copies of previous objects and altering their contents.
21:45:47 <oklopol> okay
21:45:54 <oklopol> ah
21:45:56 <oklopol> like nopol
21:46:03 <oklopol> :)
21:46:11 <SevenInchBread> which is really all classes do... make copies of themselves...
21:46:21 <SevenInchBread> now we just remove the distinction of class and object altogether.
21:46:34 <oklopol> nopol does that... but it's classes and functions are the same thing
21:46:42 <oklopol> so... it's a bit different
21:47:14 <SevenInchBread> Self, Moo, and JavaScript are all prototpe.
21:47:37 <oklopol> i don't know any of them:<
21:47:59 <SevenInchBread> the copies objects all have a reference to their "parent".. and usually there's some normal OO concepts thrown in to make things convient.
21:48:08 <SevenInchBread> like delegation... which is basically arbitrary inheritance.
21:48:36 <SevenInchBread> but... I'm not going to use any sort of inheritance... because you don't need it.
21:48:52 <oklopol> yeah... modularity is for wimps
21:53:05 <SevenInchBread> nah... you just copy everything over... you've still got modularity..
21:53:34 <oklopol> if you have duckish typing
21:53:37 <oklopol> and you prolly do
21:53:50 <SevenInchBread> and since you have the ability to change both symbols and objects... you can easily override a function shared by a wide number of objects.
21:54:31 <SevenInchBread> oh definetely... I'd have trouble even conceiving of a language that can't duck type.... Python has spoiled me.
21:55:35 <oklopol> well, duck typing circumvents inheritance
21:55:40 <oklopol> not entirely
21:55:47 <oklopol> but the modularity part
21:56:09 <oklopol> because you can have similar interfaces with similar objects
21:56:25 <oklopol> with duck typing you jsut don't tell that to the compiler until at run-time
21:56:55 <oklopol> a bit slower if bad implementation, maybe a bit less clear for someone who reads the code
21:56:58 <oklopol> but it works
21:57:05 <oklopol> and makes a lot of things less verbose
21:57:38 <SevenInchBread> heh... compiler?
21:58:14 <oklopol> yeah, badly rephrased
21:58:16 <oklopol> i mean
21:58:28 * SevenInchBread usually follows a fairly straightforeward model for interpreting... scan for tokens... and then interpret the tokens to do shit.
21:58:37 <oklopol> you don't have to specify in the code which things do what
21:59:06 <oklopol> but you just hope they abide by the interface that is needed
21:59:17 <oklopol> i don't know if you follow what i'm trying to say
21:59:29 <SevenInchBread> The idea of "telling the compiler how to work" is literally completely alien to me... and doesn't even seem necessicary or that beneficial.
22:00:03 <oklopol> yeah, but it reduces run-time errors
22:00:17 <oklopol> because if you don't tell it it can't tell you you did an error
22:00:30 <SevenInchBread> well... the entire idea behind OO is that the details of the implementation are hidden behind a name...if everybody assumes that the procedures behind the names all do what they're supposed to do... then everything works fine.
22:01:02 <oklopol> yes, but with non-duck typing you also know what kind of things do what kind of stuff
22:01:34 <oklopol> with duck-typing you use everything as you wish and sometimes it works, sometimes not, because it can't be checked at compile-time
22:01:39 <oklopol> (in most cases)
22:02:37 <SevenInchBread> it's pretty useful in my experience... replacing the standard output stream with a class wrapper that implements the same methods as a file object often saves a lot of time.
22:02:58 <SevenInchBread> it makes it easy to hack things. :)
22:03:05 <SevenInchBread> make it do what you want.
22:03:16 <oklopol> yeah... that can be done with or without duck-typing
22:03:28 <oklopol> but without it you do it with inheritance
22:04:12 <oklopol> and then it's more "agreed" that it does what it's required to do
22:04:24 <oklopol> with duck-typing it's run-time checked
22:05:36 -!- anonfunc_ has quit.
22:08:09 <SevenInchBread> oklopol, hmmm?
22:08:14 * SevenInchBread is confused now. :P
22:08:33 <SevenInchBread> why would inheritance make a method work or not work?
22:09:11 <oklopol> if something is inherited from something else it has the method the parent has
22:09:27 <oklopol> so if a function need some methods a, b and c
22:09:31 -!- nazgjunk has quit ("mrahaha").
22:09:31 <oklopol> it makes a class
22:09:37 <oklopol> and then that class is derived from
22:09:38 <oklopol> but
22:09:48 <oklopol> with duck-typing you don't need that
22:09:56 <oklopol> because you can send ANY object to it
22:10:12 <oklopol> doesn't have to be derived from the class that has the methods that function needs
22:10:28 <oklopol> and the function then fails if the object it got doesn't have the methods
22:10:35 <oklopol> and this is a runtime error
22:10:55 <oklopol> without ducking it would've been a compile time type error
22:11:38 <oklopol> in my first sentence method -> methods
22:11:53 <oklopol> second, need -> needs
22:13:10 <oklopol> i think if you do the duck you oughtta have direct string manipulation for method names... which python incidentally does :P
22:15:18 <SevenInchBread> well.. hmm...
22:15:25 <SevenInchBread> what is causing this to occur?
22:15:30 <SevenInchBread> the error-at-compule-time.
22:16:09 <oklopol> because if it didn't have the method the function uses, it wasn't derived from the class the function takes as argument
22:16:30 <oklopol> because a function can only use a method it's argument has
22:16:45 <oklopol> (casting can be done of course but considered bad in most cases)
22:20:56 <SevenInchBread> oh yeah.... darn static typing
22:22:10 <SevenInchBread> it does add a layer of security to a procedure... but usually one that isn't needed...
22:23:08 <SevenInchBread> Actually... I think a nice way to do typing is by category.
22:23:44 <oklopol> well, that's interfaces for you
22:25:50 <SevenInchBread> I've never liked excessive type-checking.
22:26:10 <SevenInchBread> if something doesn't work... let it explode on its own...
22:26:34 <oklopol> yeah :D
22:29:24 <SevenInchBread> in a purely OO language... the worst that could happen is the object doesn't implement the method.
22:29:51 <oklopol> actually no
22:30:21 <oklopol> in for example java the WORST that could happen is that someone who read the code would not understand the logic at some point
22:30:36 <oklopol> that's the oo of today
22:31:28 <SevenInchBread> meh... Java is for corporate monkeys.
22:33:31 <SevenInchBread> oh... another thing I like about the smalltalk-like syntax I'll be using.
22:33:50 <SevenInchBread> there's absolutely no distinction between function calls or attribute reading.
22:34:10 <SevenInchBread> because all attributes are messages... which are function-like-things.
22:34:11 <oklopol> i don't know if it's like that with other langs, but from what i hear, it is towards that direction
22:34:22 <oklopol> i mean
22:34:32 <oklopol> the corporate-monkey-ness
22:35:15 <SevenInchBread> yeah... everybody's trying to make languages that are good for shelling out programs quickly and efficiently...
22:35:25 <SevenInchBread> I mean... whatever happend to having fun whilst programming?
22:35:30 <oklopol> yeah
22:35:57 <oklopol> i idle on this java chan... there was an hour long discussion about how to get sort() work with the swedish alphabet
22:36:36 <SevenInchBread> fully automatic unicode support... that's another thing I'll put in this language. :)
22:36:43 <oklopol> i said it's a 15 min job to make one yourself, which lead into a half an hour discussion about how much faster it is to use other's tools than to make ones own
22:36:48 <oklopol> one's
22:37:15 <SevenInchBread> ...if everyone followed that logic... no one would be making tools.
22:37:23 <SevenInchBread> sometimes it's just -fun- to make shit.
22:37:39 <SevenInchBread> you can look at it and say "I fucking made that"
22:38:21 <oklopol> yeah... i said something like that, they said you don't get money if you do stuff yourself
22:38:23 <oklopol> :\
22:38:37 * SevenInchBread is 15... totally doesn't get paid anyways. :P
22:39:01 <oklopol> i thought you must be young with your constant ideas
22:39:16 <SevenInchBread> but yeah... automatic unicode support...
22:39:25 <SevenInchBread> I don't know why people don't do it to begin with.
22:39:42 <oklopol> c++ has it, java has it, python has it, what doesn't?
22:39:57 <SevenInchBread> ASCII when you're using ASCII characters... and then when you add some unicode to the string... boom, it automatically changes encodings for you.
22:40:01 <SevenInchBread> not Python.
22:40:21 <oklopol> oh
22:40:28 <oklopol> ah, yeah, indeed it doesn't
22:40:52 <SevenInchBread> but unicode codepoints are kind of weird.
22:41:02 <SevenInchBread> but I don't it's impossible to have automatic management of encodings.
22:41:24 <SevenInchBread> oh.. and just one number type...
22:41:40 <oklopol> ?
22:41:42 <SevenInchBread> called... number.
22:42:02 <SevenInchBread> it'll convert to long, short, floating-point whatever.
22:42:31 <oklopol> hmm
22:43:05 <SevenInchBread> well... maybe an imaginary type... like Python has.
22:43:18 <oklopol> yes, exactly what i thought
22:43:27 <oklopol> actually
22:43:30 <SevenInchBread> simply because it, mathematically, operates differently.
22:43:35 <oklopol> exactly what python has, right?
22:43:42 <SevenInchBread> nope.
22:43:48 <oklopol> what is different?
22:43:54 <SevenInchBread> Python still distinguishes between integer and floating point.
22:44:06 <SevenInchBread> long and short are automatically converted... but they're still separate data types.
22:44:21 <oklopol> python has auto-bignum
22:44:32 <oklopol> you don't see the data-types really
22:44:40 <oklopol> well, rarely
22:44:41 <SevenInchBread> floating point.
22:44:56 <SevenInchBread> with true division being implemented though... it's getting close to that.
22:45:03 <oklopol> well
22:45:14 <SevenInchBread> but... there's still distinguishments in the type hierarchy... which is what I was talking about removing.
22:45:31 <SevenInchBread> the data would be represented internally in multiple ways... but abstractly it's just a "number".
22:45:32 <oklopol> you wanna get floating points perfect, you make a lazy system that NEVER calculates a function unless for output
22:45:45 <oklopol> and still maintains the actualy functional representation
22:46:08 <oklopol> and makes it nicer when it finds rules like + - x 1 1 = x etc
22:47:14 <oklopol> *actual
22:47:21 <oklopol> why the y?!?
22:47:26 <SevenInchBread> maybe a rational data type... but that's mainly only useful for algebraic solver applications.
22:47:51 <oklopol> i thought about making this math lang
22:48:10 <oklopol> since i could easily do better than matlab with basic mathematics
22:48:20 <oklopol> not the neural networks etc of course :P
22:48:32 <SevenInchBread> I like how math can be implemented without using special syntax...
22:48:59 <SevenInchBread> the only difference is that there are no precedence rules... which is fine... it's easier to remove "method calls go left to right"
22:49:11 <SevenInchBread> remove = remember
22:49:48 <oklopol> what do you mean?
22:50:08 <SevenInchBread> 2 + 2 isn't special syntax in the language I'm thinking of.
22:50:52 <oklopol> what's special syntax?
22:51:10 <SevenInchBread> well like... special rules
22:51:13 <SevenInchBread> for mathematical operators.
22:51:16 <SevenInchBread> aren't necessary.
22:51:27 <oklopol> like 5(4 + 5 )
22:51:29 <oklopol> -...
22:51:32 <oklopol> like 5(4 + 5 * 2)
22:51:34 <SevenInchBread> it just fits into the existing syntax
22:51:39 <SevenInchBread> er... well that won't work.
22:51:48 <oklopol> which is 5 * (4 + (5 * 2))
22:51:50 <SevenInchBread> I mean... basic (non-implicit) rules.
22:51:58 <oklopol> hmm
22:51:59 <oklopol> ?
22:52:18 <SevenInchBread> 5 x (4 + (5 x 2))
22:52:32 <oklopol> x is better than * ?
22:52:38 <SevenInchBread> the operators don't need special syntax... it's not exactly like math.
22:52:44 <SevenInchBread> well... I've always liked it...
22:53:00 <SevenInchBread> over *... but they can both be included and mean the same thing.
22:53:49 <oklopol> well, if you have vectors, you can have '*', '.' and 'x' be different multiplications :)
22:54:06 <SevenInchBread> on vector objects. ;)
22:54:20 <SevenInchBread> see... that's the thing... all the objects define what all the operators mean
22:54:36 <oklopol> yeah, operator overloading
22:54:43 <SevenInchBread> not even that.
22:54:51 <SevenInchBread> the operators are just... defined on the objects anyways.
22:54:54 <SevenInchBread> there's nothing to overload.
22:55:00 <oklopol> mmmmmkay
22:55:00 <oklopol> .
22:55:12 <oklopol> you make a new datatype, it has everything already?
22:55:34 <SevenInchBread> depends on where you copied from... remember there aren't really any "typeS" here... just objects.
22:56:19 <oklopol> hmm.. i still don't see where exactly you tell the computer what the multiplications mean...
22:56:26 <SevenInchBread> in 5 * 5 * is the name of a method on 5
22:56:29 <oklopol> unles you... tell it
22:56:33 <oklopol> yeah
22:56:35 <oklopol> *unless
22:56:51 <oklopol> i'm pretty sure there's something wrong with my s
22:57:09 <SevenInchBread> it'll be builtin code defining what multiplication does... but it can be overriden...
22:57:30 <SevenInchBread> it doesn't matter -how- the method is defined... simply that it is associated with the right name.
22:58:06 <oklopol> mm kay
22:58:08 <oklopol> ..
22:58:37 <SevenInchBread> if you wanted to... you could do something like
22:58:43 <SevenInchBread> True becomes False
22:59:03 <SevenInchBread> thus making all references to the True object now point to False instead.
22:59:24 <oklopol> yeah, you told that before
22:59:37 <oklopol> that's fun for esoteric purposes
22:59:43 <SevenInchBread> eh... well... boleans are kind of singletonish anyways... so `True becomes False would have much of the same effect.
23:00:10 <oklopol> but you should never have ANYTHING have any side-effect upwards without declaring it clearly in an upper lever
23:00:13 <SevenInchBread> except other symbols point to True would still be pointing to True.
23:00:36 <SevenInchBread> hmmm?
23:00:59 <SevenInchBread> nope... no restrictions.
23:01:00 <oklopol> i have a thing called infinite nesting theory
23:01:02 <oklopol> but
23:01:11 <oklopol> i'm not going to try and explain here
23:01:26 <SevenInchBread> restricting possibilities just because someone might use them stupidly is a bad idea.
23:01:27 <oklopol> hmm
23:01:48 <oklopol> in most cases, yes
23:01:51 <SevenInchBread> The Python developers do that a lot... much to my chagrin
23:02:06 <SevenInchBread> make evyerthing child proof.
23:02:47 <oklopol> yeah... it kind of takes the point of wanting things high-level if you can do low-level fuck-ups :P
23:05:33 <SevenInchBread> + - x * ^ / mod = != base inc dec !
23:05:41 <oklopol> that's exactly why c++ will become one of the slowest languages in the future, computers can do th simple mathematical algorithm reductions better than humans... actually, i realize this is basic and there's no need in explaining it :D
23:05:49 <oklopol> *the
23:06:04 <oklopol> inc and dec? :P
23:06:20 <SevenInchBread> ++ and -- are too Cish for my tastes
23:06:29 <SevenInchBread> how about... up and down?
23:06:56 <oklopol> no, reserve that for your two-dimension pointer needs
23:07:19 <SevenInchBread> these are just integer methods.
23:07:25 <SevenInchBread> anything can redefine any of those.
23:07:36 <oklopol> yeah yeah, i wasn't serious.
23:07:45 <oklopol> base?
23:07:47 <SevenInchBread> ....what is a 2d pointer?
23:07:55 <SevenInchBread> yeah... log wouldn't make any sense.
23:08:00 <oklopol> you don't wanna know what i meant
23:08:20 <oklopol> base is for what?
23:08:25 <SevenInchBread> log
23:08:30 <oklopol> but why?
23:08:36 <SevenInchBread> 10 base 2 would be log 10 base 2
23:08:52 <SevenInchBread> because everything is inherently infix notation?
23:09:07 <SevenInchBread> 10 log 2 wouldn't make any sense
23:10:02 <oklopol> 10 base 2 would be [1,0,1,0] if you ask me
23:10:04 <oklopol> :)
23:10:12 <oklopol> K has that for example
23:10:14 <SevenInchBread> yeah...
23:10:18 <oklopol> it's called base there
23:10:21 <oklopol> or __base
23:10:55 <SevenInchBread> I want to use like... base 50 represented by sequences of base 5
23:10:56 <oklopol> K has everything
23:11:13 <oklopol> ?
23:12:39 <SevenInchBread> eh... difference bases will simply different objects.
23:13:07 <oklopol> try once more please :)
23:13:19 <SevenInchBread> different bases will simply be represented by different objects.
23:13:43 <oklopol> mmm okay, what did "base 50 represented by sequences of base 5"
23:13:45 <oklopol> mean?
23:13:53 <SevenInchBread> not sure.
23:13:59 <oklopol> :D
23:14:06 <SevenInchBread> it's possible to do freaky mixes of bases though
23:14:29 <oklopol> i hope you don't see a connection between the numbers 50 and 5
23:14:49 <SevenInchBread> 5 and 55?
23:14:57 * SevenInchBread wants to adhere to the law of fives.
23:15:02 <oklopol> not that much either
23:15:20 <oklopol> 11 only has special properties in 10-base
23:15:23 <oklopol> and i hate it
23:15:30 <oklopol> that's the reason for all the hoping
23:15:37 <oklopol> hopedy-pop
23:15:38 <oklopol> i should sleep
23:16:21 <SevenInchBread> oh oh
23:16:27 <SevenInchBread> balanced 5-base
23:16:39 <SevenInchBread> represented by -2,-1,0,1,2
23:16:42 <SevenInchBread> beautiful no?
23:16:50 <oklopol> sure :P
23:20:30 <SevenInchBread> phinary?
23:20:45 <SevenInchBread> http://en.wikipedia.org/wiki/Golden_ratio_base
23:21:50 -!- oerjan has joined.
23:22:45 <SevenInchBread> oh oh oh
23:22:47 <SevenInchBread> unary base
23:22:54 <SevenInchBread> 11111 11
23:22:56 <SevenInchBread> would be seven
23:23:12 <oklopol> yeah
23:23:17 <oerjan> hm... or it could be a list [5,2]
23:23:39 <oklopol> oerjan i got the thue working :P
23:23:47 <oerjan> great :)
23:23:49 * SevenInchBread likes the idea of a base based off of the golden ratio... but not as confusing as using the actual irrational number.
23:23:53 <SevenInchBread> maybe 5 and 3.
23:24:17 <oerjan> SevenInchBread: Have you heard of the Fibonacci base?
23:24:37 * SevenInchBread just now landed on the Wikipedai article
23:24:54 <oklopol> link
23:25:42 <oerjan> I think he means http://en.wikipedia.org/wiki/Fibonacci_coding
23:25:53 <SevenInchBread> yeah
23:27:23 <SevenInchBread> hmm... maybe a mixed radix notation that alternates between 3-base and 5-base
23:27:30 <SevenInchBread> both balances
23:27:49 <SevenInchBread> -2,-1,-0,1,2 and -1,0,1
23:28:37 <oerjan> alternating means essentially using 15-base, I think
23:29:13 <oerjan> unless you use a weird alternating scheme - like one based on Fibonacci numbers :)
23:29:40 <SevenInchBread> mixed-radix
23:32:12 <oklopol> http://en.wikipedia.org/wiki/Zeckendorf%27s_theorem
23:32:17 <oklopol> rofl
23:32:37 <oerjan> i understand that. but if the mix is strictly alternating, it will be just base 15.
23:32:38 <oklopol> ai auto-proved that in a second when i heard fibonacci base
23:32:51 <oklopol> *I
23:32:53 <oklopol> ai :P
23:33:12 <SevenInchBread> hmmm
23:33:29 <oerjan> I had this urge to reedit that article to say "slightly" before the "more difficult"
23:33:32 <SevenInchBread> heh.... base 0.1 is pretty cool... it's base-10 backwards.
23:33:35 <oklopol> well, for any alternation n1, n2, ... nN it will essentially be || nX base
23:33:58 <oklopol> where || is sigma for multiplication...
23:34:03 <oklopol> where sigma is sum
23:34:09 <oklopol> i'm not good with terms :)
23:34:13 <oerjan> you mean Pi
23:34:19 <oklopol> maybe.
23:34:28 <oerjan> no, certainly :)
23:34:33 <oklopol> multiplication of a list...
23:34:52 <oklopol> sum has the E thing, multiplication a || thin with a lin on top
23:34:54 <oklopol> or smth
23:35:12 <oklopol> list.. math doesn't call them lists
23:35:23 <oerjan> like, the minutes/seconds notation is essentially itself mixing base 6 and 10 to make 60...
23:35:33 <oerjan> sequence.
23:35:51 <oklopol> really?
23:35:52 <oklopol> :o
23:35:52 <SevenInchBread> right... but you right it differently.
23:36:05 <oerjan> huh?
23:36:07 <SevenInchBread> it's essentially base 15... but you get to write it in a confusing manner.
23:36:10 <SevenInchBread> :)
23:36:11 <oklopol> i don't see 6 anywhere :\
23:36:18 <oklopol> in the clock
23:36:22 <oerjan> they are capital greek Sigma and Pi.
23:36:30 <oklopol> prolly
23:36:42 <oklopol> looks like capital pi, didn't know it was though
23:36:51 <oklopol> and i don't have the letter on this keyboard
23:36:53 <oklopol> :)
23:36:53 <oerjan> in 3:10:15, the digits after the colons can only be 0-5
23:37:08 <oklopol> ah
23:37:10 <oklopol> okay
23:37:13 <oklopol> indeed
23:37:44 <oklopol> i just think it's 60-base but there is no way to print 60-base so it's represented as 10-base
23:38:17 <oerjan> that may be true but I think the ancient babylonians wrote their base 60 in two parts as well
23:38:31 <oklopol> oh
23:38:31 <oerjan> otherwise, just too many digits
23:38:36 <oklopol> hmm
23:38:39 <oklopol> maybe
23:38:42 <oerjan> i'm not completely sure of it.
23:38:42 <oklopol> why 60 then?
23:38:44 <oklopol> :\
23:38:48 <oklopol> fractions maybe
23:39:14 <oklopol> they invented fractions actually i think... i think i read about this exact thing somewhere
23:39:26 <oerjan> the length of the year is close to 360 days.
23:39:26 <oklopol> a million years ago
23:39:53 <oklopol> yeah... 6 * 60, plus 10 for the history of finger calculation
23:39:57 <oerjan> actually fractions are frequently base 60 because the babylonians invented them, and had a base 60 system
23:40:19 <oklopol> 60 factorizes nicely
23:40:19 <oerjan> i vaguely recall it merging from a base 6 and base 10 system.
23:40:29 <oklopol> yeah, would make sence
23:41:09 <SevenInchBread> it was base 60... but the didn;t represent it with 60 individual symbols
23:43:47 <oerjan> heh, the mixed base article says the Mayans used 20 except for second place, where they used 18
23:43:56 <oklopol> :D
23:43:59 <oerjan> because 18*20 = 360
23:44:16 <oklopol> i read martians first
23:44:26 <oklopol> hmm
23:44:34 <oklopol> 20,18,20,20...
23:44:35 <oklopol> ?
23:44:46 <oklopol> the other way around of course
23:44:47 <oerjan> why, they would use base 14 of course, having that many digits...
23:44:58 <oklopol> :D
23:45:52 <SevenInchBread> I bet base-10 would have made no sense
23:46:36 <oklopol> i wish my parent would've taught me hex only :\
23:46:44 <oerjan> btw: (S)igma for (S)um, (P)i for (P)roduct.
23:46:53 <oklopol> oh
23:47:01 <oklopol> indeed
23:48:49 <SevenInchBread> hmmm... base-11 is cool.
23:49:01 <oklopol> why?
23:49:12 <SevenInchBread> It's like base-10... except there's a tiny offset as you go up.
23:49:20 <oerjan> and that part i said about using a weird mixing, i meant using what is called Fibonacci substitution.
23:49:23 <SevenInchBread> ...it's easier to think in. :P
23:49:56 <oklopol> fibonacci substitution?
23:50:42 <oerjan> 0 -> 01, 1 -> 0, repeat indefinitely to form infinite sequences.
23:51:33 <oerjan> Then use such a sequence to decide which base to use at which position.
23:53:45 <oerjan> In Haskell: fibseq = '0' : concatMap s fibseq; s '0' = "01"; s '1' = "0"
23:54:36 <oerjan> eh, wait
23:55:30 <oerjan> Make that fibseq = '0' : tail (concatMap s fibseq) where s '0' = "01"; s '1' = "0"
23:57:43 <SevenInchBread> OH
23:57:50 <SevenInchBread> base-7... with musical notes
23:58:00 <oklopol> nah
23:58:08 <oklopol> 7 makes no sence
23:58:19 <oerjan> The first 50 digits: 01001010010010100101001001010010010100101001001010
23:59:05 <oerjan> with half-notes you need base 12, plus notation for octave
2007-02-19
00:00:05 <oerjan> C C# D D# E F F# G G# A B B# if that is right in English.
00:00:20 <oklopol> almost
00:00:37 <oerjan> Or do they use H for B# too?
00:00:41 <oklopol> C C# D D# E F F# G G# A A# B is english
00:00:44 <oklopol> no
00:00:48 <oklopol> oh
00:00:51 <oklopol> sorry :)
00:00:54 <oklopol> they do
00:00:58 <oklopol> too many standards
00:01:02 <oerjan> wait, I got that backwards
00:01:07 <oklopol> and all of them too crappy to use
00:01:18 <oerjan> better look it up
00:01:19 <SevenInchBread> wow... I didn't even realize there was another standard.
00:01:24 <oklopol> aah
00:01:27 <oklopol> Bb B
00:01:31 <oklopol> Bb is A#
00:01:39 <oerjan> right.
00:01:41 <oklopol> it was you who misguided me :P
00:01:47 <SevenInchBread> why don't we just use like... 12 letters?
00:01:59 <SevenInchBread> so we don't have to deal with those missing half-tones.
00:02:05 <oerjan> in Norwegian at least, for historical reasons Bb is B while B is H
00:02:05 <oklopol> because pythagoras was an idiot
00:02:09 <oklopol> or pascal
00:02:12 <oklopol> i can't remember :)
00:02:15 <oerjan> typographical reasons, in fact.
00:02:26 <oklopol> in finnish too
00:02:31 <oklopol> i don't know the reasons
00:02:35 <oklopol> please tell me
00:03:03 <oerjan> They were written as different font versions of B, and one of them resembled H...
00:03:18 <oerjan> so eventually turned into it.
00:03:20 <SevenInchBread> base 24 if we wanted to include some microtones..
00:03:37 <oklopol> you hear them?
00:04:00 <SevenInchBread> eh... there's a subtle difference.
00:04:04 <SevenInchBread> it's common in Indian music
00:04:09 <oklopol> i don't hear clearly other than 12, since i didn't hear them early enough
00:04:09 <oklopol> i know
00:04:29 <oklopol> note ear i one thing you only learn young (note ear?)
00:04:55 <oerjan> It's 7 because that is how many there are in a single scale
00:05:11 <oklopol> yeah, but it's a stupid system
00:06:49 <oklopol> i should make my music language... then i could start playing with automatic music generation
00:06:59 <oerjan> i mean, the scales are harmonic. it's only when you want to mix scales and use dissonances that you need more notes.
00:07:07 <oklopol> that's pretty no-man's-land
00:07:18 <SevenInchBread> yeah... Western music is based on harmony.
00:07:43 <oklopol> wouter's page has a nice article on that
00:07:45 <SevenInchBread> yeah... I had an idea for a rhythm-based language... that broke up a beats into infinitely-divisible sub beats...
00:07:48 <oklopol> i mean
00:07:51 <oklopol> the scales
00:08:04 <SevenInchBread> even on a finite tape of memory its theoretically infinite due to fractional divisions
00:08:19 <oklopol> but the whole scale thing is just a too-far-gone abstraction...
00:08:40 <oerjan> hm... brainfuck with an infinitely divisible tape might be something
00:09:05 <SevenInchBread> well..
00:09:27 <SevenInchBread> you could use the numbers to represent microtones.
00:09:37 <SevenInchBread> and have a finite limit to the tape.
00:10:02 <SevenInchBread> divisions just "expand" the tape... as things kind of break down
00:14:13 <oerjan> You mean http://wouter.fov120.com/rants/hertz_12notes.html ?
00:14:35 <oklopol> yeah
00:14:51 <oklopol> the only rational thing i've heard said about numbers
00:14:56 <oklopol> okay
00:14:59 <oklopol> not the only on
00:15:00 <oklopol> *on
00:15:03 <oklopol> *one
00:15:13 <oklopol> but most musicians have no idea... about anything
00:15:50 <oklopol> it's hard explaining why a riff is good if ppl can't understand it's mathematical idea
00:16:09 <oklopol> wouter of course talked about a different thing that riffs etc
00:16:18 <oklopol> but scales instead
00:16:34 <oklopol> though it's a lot similat
00:16:36 <oklopol> *r
00:19:28 <oklopol> well, of course what has a good idea always sounds good
00:22:37 <SevenInchBread> it's a fairly context sensitive means of expression...
00:23:02 <SevenInchBread> If we just used instruments capable of bending across any number of frequencies... you'd have the full range of options...
00:23:25 <SevenInchBread> sitars do something like this... you can tune them to some stalbe notes... while having quite a bit of leeway with bending the strings.
00:23:42 <oklopol> stalbe means?
00:24:23 <SevenInchBread> ...stable
00:24:45 <SevenInchBread> the frets serve as landmarks... but most of the tones are somewhere inbetween.
00:25:03 <SevenInchBread> can't do that with a piano... which always has an exact tone for an exact position.
00:25:21 <oklopol> you can do that with most instruments
00:25:24 <oklopol> but you never do
00:25:30 <oklopol> in western music
00:25:41 <SevenInchBread> yeah.
00:26:05 <SevenInchBread> For blues and jazz guitar... nothing quite sounds right if it's not somewhere near (or slightly off of) the penatonic scale.
00:26:40 <oklopol> in western music you always have more than one note playing at the same time, the division to twelwe maintains a nice set of harmonical chords
00:26:57 <SevenInchBread> styles, I guess... both genres center heavily on the penatonic.
00:27:41 <oklopol> well, subsetting the 12 notes can be done but it's merely a way of abstraction and only helpful for a composer
00:28:15 <SevenInchBread> that's true... istars are usually one note at a time, with the resonating strings usually doing octaves.
00:28:38 <oklopol> indeed, it gets too complicated otherwise
00:28:41 -!- wooby has quit.
00:28:41 <oklopol> for the ear
00:28:53 <oklopol> i've always liked dissonance though
00:28:54 <SevenInchBread> I was suggesting that the solution to the "perfect" musical system is that there isn't one... you just pick your frequencies for the song.
00:29:12 <oklopol> my piano teacher always yelled at me when i played tritonus all the time in my compositions
00:29:41 <SevenInchBread> hmm...
00:30:06 <SevenInchBread> it would be interesting to find some way to represent near-human-like performances via something like a programming language.
00:30:34 <oklopol> you mean like... make the computer sound like a human playing?
00:30:42 <SevenInchBread> like... you could create frequency abstractions... rhythm abstractions... melodic patterns (and a way to make slight changes to that pattern)...
00:30:51 <SevenInchBread> yeah.
00:31:16 <oklopol> dl quitar pro 5 and see how good the technology is today...
00:31:19 <SevenInchBread> very minute changes patterns.
00:31:37 <oklopol> everything is recorded from real instruments and it sounds terrible
00:31:40 <oklopol> (
00:31:54 <oklopol> (though prolly not the best possible program for it...)
00:31:55 * SevenInchBread is kind of fuzzy on how sound is encoded.
00:32:04 <oklopol> wav
00:32:12 <oklopol> uses 0...255 values
00:32:15 <oklopol> just raw in there
00:32:27 <oklopol> and there is this tiny thingie in the loudspeaker
00:32:38 <oklopol> that can be up (255) or down (0)
00:32:42 * oerjan only now went to the logs. Good grief how you have been talking!
00:32:45 <SevenInchBread> ah... so wav is like the bitmap of sound files. :)
00:33:00 <oklopol> and at certain intervals it takes the next number and moves the thingien in there in the right place
00:33:01 <oklopol> yes
00:33:05 <oklopol> exactly
00:33:31 <oklopol> mp3 uses something very mathematical and clever, but everything is always reduced to wav when playing
00:33:50 <oklopol> since the physical way to represent sound in a loudspeaker is done like that
00:34:02 <oklopol> with a moving thingie
00:34:04 <SevenInchBread> hmm... so if you could make abstractions of all the various musical patterns (rhythm, harmony, melody, timbre(?))
00:34:40 <oklopol> i don't care about sound that much, i'm more interested in melody
00:34:49 <oklopol> i mean, mathematically at least
00:35:01 <oklopol> but
00:35:11 <SevenInchBread> I want to create worthwhile music with nothing but a computer program... basically.
00:36:02 <oklopol> to make a square wave (the simplest wave) with note "a" you make the wave change the position 440 times in a second and put in a file 0 255 0 255 0 255...
00:36:03 <oklopol> sorry
00:36:06 <oklopol> 880 times a second
00:36:28 <oklopol> since 0 255 is one wave only
00:36:41 <oklopol> you get it?
00:36:49 <oklopol> usually it's 44000 b/s
00:36:53 <oklopol> *B
00:37:24 <oklopol> so you do 50 0's, then 50 255's, then 50 0's etc to make the "a" note
00:37:41 <SevenInchBread> but it wouldn't sound very good...
00:37:55 <oklopol> if you don't like square
00:38:19 <SevenInchBread> you would need very very very subtle changes in the frequency... to make it sounds good.
00:38:22 <oklopol> square is used in old games and a the base of a few soloish tunes of a synthesizer
00:38:29 <oklopol> *tunes -> sounds
00:38:43 <oklopol> and i like it, but
00:38:49 <oklopol> you can use a sine wave
00:38:55 <SevenInchBread> I'm looking for natural sounds. :)
00:38:59 <SevenInchBread> so yeah
00:39:01 <SevenInchBread> a sine wave
00:39:04 <oklopol> that is done - suprisingly - with a sin()
00:39:12 <SevenInchBread> or like... some sort of imaginary number oscillator thing?
00:39:20 <oklopol> sin(t*something)
00:39:21 <oklopol> yeah
00:39:43 <oklopol> t meaning we are playing the t:t'h time step of the note
00:39:52 <SevenInchBread> but even then... that's going to be a very very steady wave... hardly "the real deal".
00:40:02 <oklopol> natural sounds are done with addition of sine waves and random generation
00:40:10 <oklopol> and i don't care about it that much
00:40:16 <oklopol> so i can't tell you a lot about is
00:40:18 <oklopol> *it
00:40:22 <SevenInchBread> maybe some dynamical systems stuff?
00:40:28 <oklopol> ?
00:40:47 <SevenInchBread> chaos theoy, fractals, etc?
00:40:57 <oklopol> you can't make natural sounds since NO ONE has EVER been able to do them
00:41:00 <oklopol> period.
00:41:12 <SevenInchBread> ...then I'll make unnatural natural sounds.
00:41:16 <SevenInchBread> :)
00:41:18 <oklopol> you can record them and clone them as you wish
00:41:25 <oklopol> but it's the same as cloning humans
00:41:41 <oklopol> it works but how it really works is unknown
00:41:59 <SevenInchBread> heh... you'd basically need to simulate a recording... at which point you might as well just go record someone.
00:42:08 -!- sebbu has quit ("@+").
00:42:26 <SevenInchBread> simulate the release of air from vocal chords pressing against a microphone.. etc
00:42:28 <oklopol> you can make a continuation in python that returns values for the thingie (0-255) one step at the time
00:42:36 <oklopol> and use it to fill a wav file
00:42:38 <oklopol> and play it
00:42:40 <SevenInchBread> yeah yeah... I get how that would work.
00:42:57 <SevenInchBread> with some couroutinal crap you could send in some input for mild alterations based on surrounding stuff.
00:43:03 <oklopol> i did a random music generator once :P
00:43:11 <oklopol> it randomized the tone and the melody
00:43:11 <SevenInchBread> ....how'd that go?
00:43:25 <oklopol> i liked the melodies... no one else did
00:44:13 <oklopol> and i was like 14 then (okay.. you're that age now and better than me so fuck you but anyway) annnnnnnnnnnnnd i didn't understand the wave things
00:44:19 <oklopol> so i made it in a bad way
00:44:24 <SevenInchBread> It would be cool to apply some fractal-like mathematic stuff...
00:44:28 <SevenInchBread> that's vague but...
00:44:29 <SevenInchBread> yeah
00:44:44 <oklopol> i randomized a sequence for the thingie, not a mathematical formula for the sine waves
00:44:51 <oklopol> so it rarely randomised good tones
00:45:14 <SevenInchBread> ah
00:45:25 <SevenInchBread> you used a random sample of some typical tones?
00:45:32 <SevenInchBread> like... the notes?
00:45:43 <SevenInchBread> or was it just... totally random byte values?
00:46:12 <oerjan> yeah, oklopol is just really fond of white noise :)
00:46:15 <oklopol> i used [int(random.random()*256) for i in range(10000)] and then put those values in slower or faster according to the current pitch
00:46:53 <oklopol> oerjan i can send you some, it sounds terrible though, prolly, but i could create random tones and play them at varying pitches :)
00:47:06 <oklopol> so it has some coolness in it
00:47:18 <oklopol> but, i must confess, i like white noice
00:48:16 <oklopol> i have this experimental project called - who'd've thank it - brainfuck, i make white noiceish pieces using random generated tones and misuse of audacity
00:48:20 <oklopol> and i like it
00:48:24 <SevenInchBread> I don't know why it never occured to me that I could play around with sound using programs.
00:48:25 <oklopol> mmmmmmh it's nice
00:48:28 <SevenInchBread> being the huge music nut I am...
00:48:44 * SevenInchBread goes off to learn some basic stuff.
00:48:50 <oklopol> yeah, i love to find out i've actually done stuff in the past
00:49:11 <oklopol> with a bad memory like me you often get a feeling you've wasted 17 years and archieved nothing
00:49:16 <SevenInchBread> hmmm... maybe a BF-like language that does something with sine waves?
00:49:35 <oklopol> i've been designing brainsick
00:49:49 <oklopol> brAInSICk that is
00:50:00 <oklopol> *BrAinSICk
00:50:03 <oklopol> anyway
00:50:23 <oklopol> brainfuck with everything in it, music, 3d graphics, networking, gui, etc
00:50:27 <oklopol> but only brainfuck
00:51:23 <oklopol> eh
00:51:24 <oklopol> actualy
00:51:26 <oklopol> *ll
00:51:48 <oklopol> i once made a language for creating music... i don't think i ever finished it
00:53:02 <oklopol> i've always been a big fan of c++, but realized just now i could actually use inheritance with it too and avoid having to make manual memory handling to get different datatypes to work :)
00:53:13 <oklopol> just now == 4 months or smth
00:53:48 <oklopol> i've done a lot of interpreters, always used one data class with a void pointer and enum for type :D
00:53:55 <oklopol> very oo...
00:54:09 <oklopol> maybe i'll stop the monolog and go to sleep
00:54:13 <oklopol> ----------------------->
00:56:08 <SevenInchBread> ...I don't like C++
00:56:36 <SevenInchBread> hrm... I'm a bit rusty on my wave physics / mathematical represenatations of that.
00:57:11 <oklopol> hmm
00:57:22 <SevenInchBread> if you have two wave functions going over the same medium... they usually add together right?
00:57:36 <SevenInchBread> if the mediam is at 0
00:57:51 <oerjan> superposition, yes i think so
00:57:59 <SevenInchBread> yeah... that's right
00:58:02 <oklopol> yes
00:58:44 <SevenInchBread> of course.... there's more to it than that.
00:59:02 <oklopol> what?
00:59:14 <SevenInchBread> string instruments produce standing waves, harmonics, fundamental frequency, partial tones etc
00:59:30 <oklopol> hmm
00:59:38 <oklopol> standing waves are the same thing
00:59:53 <oklopol> because we only consider the wave, not how it begins
00:59:56 <oklopol> *is created
01:00:14 <oklopol> harmonics -> result of the addition
01:00:16 <SevenInchBread> ah yeah...
01:00:33 <oklopol> fundamental frequency
01:00:34 <oklopol> hmm
01:00:36 <SevenInchBread> the standing wave is the result of the original wave being plcuked and reflrected across the string.
01:00:41 <oklopol> i don't know what that is
01:00:42 <SevenInchBread> which results in... all of that occuring naturally.
01:00:59 <oklopol> yes, it results in a wave in air :)
01:01:28 <SevenInchBread> if you can simulated a string stretched across frets... and a point of pressure from a finger... then you can simply create all of that without knowing what it is exactly.
01:02:02 <oklopol> partial tones: actual_note sin(n) = sin(n) + 1/2*sin(n*2^(7/12)) + 1/4*sin(2n)
01:02:29 <SevenInchBread> ...I don't know Haskell..
01:02:45 <oklopol> partial tones mean for a wave with a certain pitch there are always weaker one with a pitch that is a certain factor of it
01:02:52 <oklopol> that wasn't haskell
01:02:55 <SevenInchBread> hmmm... oh that's neat... Haskell can define functions implicitly?
01:03:01 <oklopol> haskell couldn't understand that
01:03:12 <oklopol> but, yes
01:03:28 <oklopol> if i understand what you mean
01:04:05 <SevenInchBread> well see... I'm trying to get more than just the note here..
01:04:09 <oerjan> it's nearly correct Haskell, just change ^ to ** and add a missing * I think
01:04:22 <oklopol> yeah, prolly
01:04:29 <oklopol> but it's not what i meant :)
01:04:32 <oklopol> hmm
01:04:32 <SevenInchBread> you start off with a simple wave... from plucking... which oscilates and reflects over itself.
01:04:37 <oklopol> might be haskellish :P
01:04:39 <oklopol> indeed
01:05:02 <SevenInchBread> I want the sound of that initial startoff too... not just the result of it.
01:05:55 <oerjan> partial tones is essentially the result of Fourier transforming any period signal - it is pure mathematics.
01:06:02 <SevenInchBread> and a harmonic is caused by the vibrations of the string on the other side of your finger... which may or may not happen (and has a very likely chance of occuring on certain frets)
01:06:21 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
01:06:50 <oerjan> essentially any periodic signal is the sum of a series of sine-like waves with periods that are fractions of the big one.
01:07:23 -!- oklofok has joined.
01:08:40 <oklofok> did i miss a lot?
01:08:45 -!- oklofok has changed nick to oklopol.
01:08:56 <oerjan> you may have missed:
01:08:58 <oerjan> partial tones is essentially the result of Fourier transforming any period signal - it is pure mathematics.
01:09:01 <oerjan> essentially any periodic signal is the sum of a series of sine-like waves with periods that are fractions of the big one.
01:09:02 -!- crathman has joined.
01:09:08 <oklopol> yeah
01:09:16 <oklopol> that's what i was trying to say earlier
01:09:54 <oklopol> i just don't know fourier... except it's another trivial thing someone named after themselves because they were the first to publish the idea
01:10:06 <SevenInchBread> yes, unsurprisingly, the mathematics behind music is pure mathematics... however there's obviously something missing from a mathematical model.
01:10:18 <oklopol> there is a lot missing from it
01:10:37 <oklopol> there is no mathematics behind music yet, i mean no popular theories
01:10:41 -!- crathman has quit (Connection reset by peer).
01:10:44 <oklopol> i've not found at least
01:10:55 -!- crathman__ has joined.
01:10:57 -!- crathman__ has changed nick to crathman.
01:10:59 <oklopol> there is wave theory but that's trivial
01:11:35 <oklopol> anyways, functions can't represent waves that well
01:11:44 <oklopol> i have a brilliant idea for the music lang
01:11:53 <oklopol> but it's not in it's final form yet
01:12:02 <oklopol> and requires some learning
01:12:15 <oerjan> heh the earlier mention of list slicing syntax:
01:12:31 <oklopol> it's basically you can use a function as a list of all it's values... but a bit different
01:12:47 <SevenInchBread> I think you could use coroutines to effect the iteration of the wave function in subtle ways... based on certain conditions (i.e. previous notes).
01:12:52 <oerjan> You _could_ do map (list !!) [10..20] in Haskell, but it would be horribly inefficient.
01:12:54 <oklopol> makes certain things handy... i wish i had more time :\
01:13:14 <oklopol> SevenInchBread yeah, it's kinda like that
01:13:24 <oklopol> you do a continuation for the wave
01:13:29 <oklopol> then generalize it into a note
01:13:46 <oklopol> since these things are always used the same way i'll insert them into the language
01:14:12 <SevenInchBread> like for string instruments there's a natural descrease in amplitute... it starts off very sharp and then dies down in profressively more gradual steps.
01:14:26 <oklopol> if you know the language well, it's a perfect composition tool assuming i get the playing without wav files working
01:14:30 <SevenInchBread> so you feed values into the coroutine to create that change.
01:14:38 <oklopol> but you can also play with harmonics etc easily
01:14:46 <oklopol> yeah
01:14:59 <oklopol> that's basically what i'll insert into the language
01:15:14 <oklopol> you have maths for sine wave so that basically you only change the derivative
01:15:27 <oklopol> as if you were just calcing more values to a list
01:15:28 <oklopol> BUT
01:15:45 <oklopol> it's all calculated to a simple sine function that just changes over time
01:15:52 <oklopol> hmm
01:16:13 <oklopol> i don't know if that makes sence, i'm not good at explaining my thoughts
01:16:38 <SevenInchBread> heh... OO SHALL SAVE US
01:16:41 <SevenInchBread> MAKE WAVE OBJECTS
01:16:48 <SevenInchBread> AND ADD THEM TOGETHER WITH THE __ADD__ FUNCTION
01:17:05 <SevenInchBread> and to handle the addition we shall isntantiate WaveHandlerHandlers.
01:17:21 <SevenInchBread> to the WaveHandlerHandlerMetaclass as a metaclass
01:17:23 <oklopol> you know the bad thing is you have to understand math to make a wave gradually decrease in pinch
01:17:37 <SevenInchBread> sounds like a square root.
01:17:40 <oklopol> but with changing the derivative only it's a trivial mental task
01:18:04 <oklopol> SevenInchBread what does?
01:18:05 <SevenInchBread> a square root function thing over the amplitude.
01:18:09 <oklopol> eh
01:18:11 <oklopol> hmm
01:18:21 <oklopol> i'd need paper at this point...
01:18:24 <oklopol> anyway
01:18:39 <SevenInchBread> http://en.wikipedia.org/wiki/Image:Square_root.png
01:18:47 <oklopol> if the wave slows down at a certain rate, there are errors if you only change the pitch
01:19:02 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
01:19:13 <SevenInchBread> amplitude... not pitch.
01:19:29 <oklopol> amplitude is trivial
01:19:35 <oklopol> it needs no language support
01:20:02 <oklopol> that you can do with power or 1/x
01:20:26 <oklopol> changing pitch at a rapid rate on the other hand is complicated
01:20:33 <SevenInchBread> ....what are you talking about?
01:20:39 <SevenInchBread> I'm just talking about in general... making waves.
01:20:42 <oklopol> and i have _some_ methods of making it easy to do
01:21:06 <oklopol> i'm saying it is complex to make pitch change over time
01:21:15 <SevenInchBread> well... lets's figure out why the change in pitch occurs.
01:21:20 <oklopol> amplitude is of course not
01:21:51 <oklopol> ...because the programmer wants it to?
01:22:24 <SevenInchBread> I think you could use a combination of math and some randomality to make it sound more natural.
01:22:44 <oklopol> yes, randomality is another thing of complexity
01:22:53 <SevenInchBread> I mean... what occurs in the instrument to make rapid pitch changes... and how does it effect the wave if we were to slow it down.
01:23:03 <SevenInchBread> the best way is to simply look at some waves in action. :)
01:23:33 <oklopol> because not only separate values of the wave change randomly - that leads to white noise on the backround - you have to change the pitch and amplitude randomly
01:24:06 <oklopol> well, you can deduce the math for changing pitch on the fly
01:24:39 <oklopol> i've been designing this 2d-music generator where you make blocks more in patterns you specify
01:24:46 <SevenInchBread> og... duh.
01:24:52 <SevenInchBread> they're totally different waves.
01:25:07 <SevenInchBread> depending on the instrument... and how you transition between notes.
01:25:08 <oklopol> and little circles bounce around making waves that - when hit the ceiling - produce sound
01:25:16 <SevenInchBread> there's going to be some interplay of multiple pitches going on
01:25:28 <oklopol> yes, as oerjan said earlier
01:26:08 <oklopol> partial tones exactly
01:27:11 <oklopol> you mean when changing pitch?
01:27:24 <SevenInchBread> hmmm... I bet Erland would be good for this kind of job...
01:27:30 <SevenInchBread> ...Erlang
01:27:38 <oklopol> :P
01:27:48 <SevenInchBread> yeah... when changing pitch.
01:27:50 <SevenInchBread> like... notes
01:27:57 <oklopol> yeah, same thing
01:28:22 <SevenInchBread> OH.
01:28:24 <SevenInchBread> hmm...
01:28:41 <oklopol> except of course notes refer to an abstraction of pitch where the growth has been changed to fit the working of the human ear
01:28:45 -!- ShadowHntr has joined.
01:29:37 <SevenInchBread> the speed of change in a slurred note from one pitch to the next would be based on the physical distance between the two notes and when the next note needs to played.
01:30:03 <SevenInchBread> not always... but something close to that.
01:30:09 <oklopol> pitch n = 440 * (2^(n/12)), where n is the distance between "a" and the wanted note in half-steps
01:30:25 <oklopol> that's the difference
01:30:36 <SevenInchBread> assuming we're on guitar... the pitches would change in stair-case like manner...
01:30:50 <oklopol> yeah
01:30:51 <SevenInchBread> because of well... the frets.
01:31:28 <SevenInchBread> heh... and then there's the squeek. :)
01:31:35 <oklopol> hmm?
01:31:47 <SevenInchBread> guitar squeeks :)
01:32:02 <oklopol> aah
01:32:05 <oklopol> harmonics
01:32:15 <SevenInchBread> when you slide across the strings really fast.. it makes a shrill little screech.
01:32:17 <oklopol> confusing term
01:32:23 <oklopol> oh
01:32:30 <oklopol> that i'm not familiar with
01:32:33 <oklopol> ah
01:32:34 <oklopol> okay
01:32:37 <oklopol> now i see
01:32:47 <oklopol> that's not really a guitar thing... random noise
01:32:49 <SevenInchBread> It's just background noise.
01:33:03 <oklopol> you could implement smashing the quitar then as well :P
01:33:08 <oklopol> *into a wall
01:33:37 <SevenInchBread> the only way to produce natural-sounding music is to take into the account the dynamics between notes... and the transitions... rather than having a single value for each note.
01:33:45 <SevenInchBread> you could.
01:34:14 <SevenInchBread> and the clicking of the pick... a function of the picks density, the material used, the speed of the thrust, the thickness and the number of the strings.
01:34:14 <oklopol> yes
01:34:21 <SevenInchBread> ...
01:34:30 * SevenInchBread is obviously stumbling off into semi-sarcasm.
01:34:49 <oklopol> well, i don't care about real life
01:35:14 <oklopol> it does not have to sound like a guitar if you ask me
01:35:23 <oklopol> or natural
01:35:34 <oklopol> by the way... sleep ->
01:35:59 <oerjan> sweet dreams
01:36:06 <oklopol> sure! ->
01:36:07 <oklopol> ->
01:56:18 -!- ihope has joined.
02:18:51 <bsmntbombdood> crappy day
02:19:20 <ihope> Stop using the calendar as toilet paper.
02:19:22 <ihope> (...)
02:19:38 <oerjan> and stay away from fans.
02:19:42 <oerjan> just in case.
02:20:12 <ihope> Especially if you're in North Korea.
02:20:13 <bsmntbombdood> justin case is a loser
02:20:25 <ihope> Justin Case, eh?
02:22:39 <ihope> Anyway, about those ordinal numbers...
02:25:13 <bsmntbombdood> oh god
02:26:04 <ihope> :-P
02:26:24 <oerjan> yes?
02:26:48 <ihope> Well, grok them yet?
02:27:08 <bsmntbombdood> i don't know and i don't care right now
02:27:39 <oerjan> i already know enough
02:46:36 -!- oerjan has quit ("leaving").
03:09:50 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
03:10:52 -!- ihope has quit (Read error: 54 (Connection reset by peer)).
03:42:38 -!- meatmanek has joined.
03:44:45 -!- oerjan has joined.
03:50:43 <bsmntbombdood> Y = SII(\f.\g.g ((f f) g)) right?
03:51:50 <oerjan> seems right
03:54:37 <oerjan> alternatively, \g.SII(\f.g (f f))
03:56:07 <bsmntbombdood> no
03:56:32 <oerjan> ?
03:58:12 <bsmntbombdood> oh
03:58:14 <bsmntbombdood> yeah
03:58:17 <bsmntbombdood> sorry
04:08:14 -!- ooooo has quit (Nick collision from services.).
04:15:02 <bsmntbombdood> !bf ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
04:15:05 <EgoBot> Hello World!
04:15:29 <oerjan> hey egobot, long time no see
05:01:26 -!- wooby has joined.
05:42:42 -!- oerjan has quit ("leaving").
05:51:59 -!- ShadowHntr has quit ("End of line.").
05:57:57 -!- Sgeo has quit (Remote closed the connection).
06:20:38 -!- Arrogant has joined.
06:22:33 -!- digital_me has quit (Read error: 110 (Connection timed out)).
06:25:35 -!- goban has quit ("Konversation terminated!").
06:29:15 -!- goban has joined.
06:44:19 -!- goban has quit ("Konversation terminated!").
06:48:24 -!- goban has joined.
06:51:05 -!- Arrogant has quit ("Leaving").
07:17:37 -!- goban has quit (Remote closed the connection).
07:18:04 -!- goban has joined.
07:50:13 -!- puzzlet has quit (Read error: 145 (Connection timed out)).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:01:14 -!- GreaseMonkey has joined.
08:01:47 <GreaseMonkey> Uryyb rirelbar! V whfg znqr n EBG13 rapbqre/qrpbqre :Q
08:02:30 <GreaseMonkey> man ROT13 is fun once you have a decoder/encoder
08:03:03 <wooby> :Q is a funny emote
08:03:27 <wooby> person holding magnifying glass to mouth / person smoking
08:03:28 -!- puzzlet has joined.
08:03:28 <GreaseMonkey> so :D is a funny emote in ROT13?
08:04:07 <wooby> indeed
08:07:01 <GreaseMonkey> http://pastebin.ca/363217 <-- my encoder/decoder
08:07:41 <GreaseMonkey> Should we talk in ROT13 for now?
08:07:54 <GreaseMonkey> Fubhyq jr gnyx va EBG13 sbe abj?
08:09:26 <GreaseMonkey> yays
08:09:53 <GreaseMonkey> 29 lines of C code. converts fast apart from the console routines
08:11:07 <wooby> GreaseMonkey: nice
08:11:11 <wooby> i shall attempt a shorter one :)
08:11:16 <GreaseMonkey> oh, and btw, i managed to beat hackthissite.org's permanent programming challenge
08:11:49 <GreaseMonkey> excluding includes and blank lines, 25 lines of code.
08:12:01 <GreaseMonkey> sorry
08:12:04 <GreaseMonkey> 21 lines
08:12:10 <GreaseMonkey> there's those commented-out lines
08:12:27 <GreaseMonkey> which is Z<->A, Y<->B, X<->C, etc
08:12:53 <GreaseMonkey> sadly, the console routines suck :\
08:13:06 <wooby> indeed
08:14:34 <GreaseMonkey> the algorithm itself is quite good though.
08:15:36 <GreaseMonkey> my code for perm programming challenge 1 basically got a count of every instance of every letter in every word in the wordlist and the 10 strings, and compared them one-by-one
08:16:12 <GreaseMonkey> the code will expire in 20 secs
08:16:25 <GreaseMonkey> i stuck a 10 minute timer on pastebin.ca
08:21:16 <wooby> k
08:22:14 -!- nazgjunk has joined.
08:22:17 -!- nooga has joined.
08:22:23 <nooga> hi
08:22:45 <GreaseMonkey> Terrgvatf anmtwhax naq abbtn!!!
08:23:32 <nooga> Zmglvgs bvvamgrt ;p
08:23:35 <wooby> yby
08:26:10 <nooga> Smngro amnrr pu?
08:28:33 -!- puzzlet has quit (Read error: 104 (Connection reset by peer)).
08:28:51 -!- puzzlet has joined.
08:48:49 <wooby> oh here we go
08:49:28 <wooby> http://pastebin.ca/363277
08:53:13 -!- GreaseMonkey has quit (Read error: 110 (Connection timed out)).
09:01:31 <wooby> an attempt without a lookup table
09:07:11 <nooga> simple rot13? ;p
09:07:50 <wooby> ;)
10:02:29 -!- UpTheDownstair has joined.
10:02:53 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
10:03:42 -!- UpTheDownstair has changed nick to nazgjunk.
10:08:21 <wooby> whoa
10:08:22 <wooby> main(a){while(a=~getchar())putchar(~a-1/(~(a|32)/13*2-11)*13);}
10:15:42 -!- nazgjunk has quit ("Bi-la Kaifa").
10:22:48 -!- voodooattack has joined.
11:12:48 -!- oklofok has joined.
11:23:31 -!- oklopol has quit (Read error: 110 (Connection timed out)).
12:02:35 -!- wooby has quit.
13:37:45 -!- Keymaker has joined.
13:40:28 <Keymaker> if anyone's interested (at some time someone here was, can't remember who), here's a solution to the prolan/m problem in IOI 1990, sum.prm :) i finally got around finishing it
13:40:30 <Keymaker> http://koti.mbnet.fi/yiap/programs/miscellaneous/SUM.PRM
13:41:23 <Keymaker> oh, run it in that javascript interpreter, the c interpreter has some weird bug in it
13:44:11 -!- Keymaker has left (?).
13:44:30 <oklofok> nooga, finally, i made the quicksort
13:44:48 <oklofok> and the other thing... don't remember
13:44:51 -!- oklofok has changed nick to oklopol.
13:50:09 -!- Keymaker has joined.
13:58:31 <Keymaker> i just noticed that the program also works with more than two numbers it was designed to work with (as the competition required it to sum only two numbers)! this is completely unintentional, yet of course a good thing. :) all my tests with more input numbers worked, but can't say everything works, as it wasn't designed so. however every two-number input should work
13:59:41 -!- anonfunc has joined.
14:00:04 <Keymaker> and yeah, the input is given like "43+51=?", as defined in that competition
14:00:22 -!- Keymaker has quit.
14:55:02 -!- nazgjunk has joined.
14:58:16 -!- anonfunc has quit.
14:58:53 -!- jix__ has joined.
15:35:33 -!- crathman has joined.
16:02:37 -!- helios24 has quit ("Leaving").
16:02:40 -!- helios24 has joined.
16:27:46 -!- UpTheDownstair has joined.
16:36:11 -!- UpTheDownstair has quit (Operation timed out).
16:40:05 -!- jix__ has changed nick to jix.
16:44:23 -!- nazgjunk has quit (Connection timed out).
16:55:22 -!- nazgjunk has joined.
17:00:32 -!- tgwizard has joined.
17:02:13 -!- goban has quit (Read error: 104 (Connection reset by peer)).
17:02:28 -!- goban has joined.
17:12:40 -!- goban has quit (Read error: 104 (Connection reset by peer)).
17:12:55 -!- goban has joined.
17:16:59 -!- goban has quit (Connection reset by peer).
17:17:14 -!- goban has joined.
17:20:27 -!- SevenInchBread has joined.
17:56:03 -!- FabioNET has joined.
17:58:45 -!- digital_me has joined.
18:02:56 -!- goban has quit (Connection timed out).
18:06:01 -!- goban has joined.
18:07:57 * SimonRC has been working hard
18:23:07 -!- Sgeo has joined.
18:27:51 -!- calamari has joined.
18:45:05 -!- ShadowHntr has joined.
18:45:21 -!- sebbu has joined.
18:49:21 -!- sebbu2 has joined.
19:00:47 -!- sebbu has quit (Read error: 104 (Connection reset by peer)).
19:05:38 -!- _FabioNET_ has joined.
19:06:05 -!- _FabioNET_ has quit (Read error: 104 (Connection reset by peer)).
19:09:41 -!- FabioNET has quit (Read error: 110 (Connection timed out)).
19:18:25 -!- FabioNET has joined.
19:22:33 -!- helios_ has joined.
19:22:34 -!- helios24 has quit (Read error: 54 (Connection reset by peer)).
19:28:42 -!- helios_ has changed nick to helios.
19:28:51 -!- helios has changed nick to helios24.
19:29:16 * SevenInchBread is making a do-hickey for obfuscating Python.
19:35:46 -!- FabioNET has quit (Remote closed the connection).
19:57:54 <bsmntbombdood> bargle
19:59:26 -!- tgwizard has quit (Read error: 110 (Connection timed out)).
20:07:58 -!- calamari has quit ("Leaving").
20:11:37 -!- UpTheDownstair has joined.
20:11:41 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
20:20:15 -!- FabioNET has joined.
20:34:46 -!- helios24 has quit ("Leaving").
20:54:49 <voodooattack> hahaha http://fukung.net/v/720/school.gif
21:07:43 <SevenInchBread> hahahaha
21:07:53 <SevenInchBread> that's pretty funny.
21:08:35 -!- kxspxr has joined.
21:12:42 <SevenInchBread> pfft... if he weren't writing it in C he would have saved some time. :P
21:12:52 <SevenInchBread> with its... almost-low-levelness
21:22:19 -!- UpTheDownstair has changed nick to nazgjunk.
21:23:28 <bsmntbombdood> for i in range(500): print "I will not throw paper airplanes in class"
21:24:28 <bsmntbombdood> one line bitches
21:24:42 <voodooattack> hehe
21:25:02 <voodooattack> for i as integer = 0 to 500:print "I will not throw paper airplanes in class":next
21:25:09 <voodooattack> ^^ FreeBASIC :p
21:25:13 <bsmntbombdood> lame
21:25:27 <voodooattack> no xD
21:26:01 <voodooattack> more like.. sophisticated and elegant :p
21:26:25 <SevenInchBread> print "I will not throw paper airplanes in class" * 500
21:26:29 <SevenInchBread> print "I will not throw paper airplanes in class\n" * 500
21:26:45 <bsmntbombdood> clevar
21:27:27 <SevenInchBread> hurray for string multiplication and its aid to spammers worldwide.
21:27:45 <bsmntbombdood> ~exec sys.stdout("I will not throw paper airplanes in class\n" * 3)
21:27:47 <bsmnt_bot> I will not throw paper airplanes in class
21:27:47 <bsmnt_bot> I will not throw paper airplanes in class
21:27:47 <bsmnt_bot> I will not throw paper airplanes in class
21:28:08 <bsmntbombdood> ~ps
21:28:08 <bsmnt_bot> None
21:28:40 <bsmntbombdood> what is the bot that logs this channel?
21:29:03 <voodooattack> do:var i=0:print "I will not throw paper airplanes in class":i+=1:loop while i<500
21:29:30 <SevenInchBread> ~exec print self
21:29:40 <SevenInchBread> ~exec sys.stdout(self+"\n")
21:29:40 <voodooattack> self
21:29:41 <bsmntbombdood> print doesn't work
21:29:55 <bsmntbombdood> and join #bsmnt_bot_errors
21:29:56 <SevenInchBread> ~exec sys.stdout.write(self+"\n")
21:30:12 <bsmntbombdood> ~exec sys.stdout(self)
21:30:13 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c3206c>
21:30:25 <SevenInchBread> oh... duh. :OP
21:30:53 <voodooattack> lol
21:30:57 <bsmntbombdood> ~exec sys.stdout(dir(self))
21:30:57 <bsmnt_bot> ['COMMAND_CHAR', 'THREADING', '__doc__', '__init__', '__module__', 'chan', 'commands_running', 'commands_running_lock', 'connect', 'connected', 'disconnect', 'do_callbacks', 'do_ctcp', 'do_exec', 'do_kill', 'do_ps', 'do_quit', 'do_raw', 'errorchan', 'exec_execer', 'get_message', 'host', 'ident', 'ihope', 'listen', 'load_callbacks', 'message_re', 'nick', 'owner', 'pong', 'p
21:30:58 <bsmnt_bot> ort', 'print_callbacks', 'raw', 'raw_regex_queue', 'readbuffer', 'realname', 'register_raw', 'save_callbacks', 'socket', 'sockfile', 'verbose']
21:31:12 <bsmntbombdood> ~exec self.print_callbacks()
21:31:23 <bsmntbombdood> ooh idea
21:33:00 <bsmntbombdood> ~quit
21:33:01 -!- bsmnt_bot has quit.
21:33:05 -!- bsmnt_bot has joined.
21:33:11 <bsmntbombdood> ~exec self.print_callbacks(sys.stdout)
21:33:12 <bsmnt_bot> [('^PING (.*)$', 'pong'),
21:33:13 <bsmnt_bot> ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~quit ?(.*)', 'do_quit'),
21:33:13 <bsmnt_bot> ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~raw (.*)', 'do_raw'),
21:33:13 <bsmnt_bot> ('^\\S+ PRIVMSG \\S+ :~ctcp (\\S+) (.+)', 'do_ctcp'),
21:33:14 <bsmnt_bot> ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG (\\S*) :~pexec (.*)', 'do_exec'),
21:33:15 <bsmnt_bot> ('\\S+ PRIVMSG (#esoteric|#baadf00d|#bsmnt_bot_errors) :~exec (.*)',
21:33:16 <bsmnt_bot> 'do_exec'),
21:33:17 <bsmnt_bot> ('\\S+ PRIVMSG \\S+ :~ps', 'do_ps'),
21:33:19 <bsmnt_bot> ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~kill (.*)', 'do_kill'),
21:33:21 <bsmnt_bot> ('^ERROR :Closing Link:.*', '<lambda>')]
21:33:25 <bsmntbombdood> perfec
21:33:27 <bsmntbombdood> t
21:33:49 <bsmntbombdood> ~exec self.print_callbacks(sys.stderr)
21:38:24 <SevenInchBread> ~exec shouldA = lambda char: char in __import__("string").letters; trans = {"?":"!?!?", "!":"!!!",".":"!"}; Achar = lambda char: trans.get(char, (char,"A")[shouldA(char)]); self.AAAAAAAAA = lambda stuff: "".join(map(Achar, stuff)) + "!"
21:38:25 -!- goban has quit (Remote closed the connection).
21:38:34 -!- goban has joined.
21:39:21 <SevenInchBread> ~exec sys.stdout.write(self.AAAAAAAA("bsmnt is a terrible bucket cleaner!?"))
21:39:39 <SevenInchBread> ~exec sys.stdout.write(self.AAAAAAAAA("bsmnt is a terrible bucket cleaner!?"))
21:40:27 <SevenInchBread> bsmntboobdood, your hackish thread thing doesn't update the global scope.
21:40:40 <bsmntbombdood> nope
21:40:52 <SevenInchBread> or... for that matter... it's making closures mess up.
21:40:52 <bsmntbombdood> that's intentional
21:41:10 <bsmntbombdood> it doesn't have to do with the threads though
21:42:12 <SevenInchBread> ~exec self.shouldA = lambda char: char in __import__("string").letters; self.trans = {"?":"!?!?", "!":"!!!",".":"!"}; self.Achar = lambda char: self.trans.get(char, (char,"A")[self.shouldA(char)]); self.AAAAAAAAA = lambda stuff: "".join(map(self.Achar, stuff)) + "!"
21:42:15 <SevenInchBread> ~exec sys.stdout.write(self.AAAAAAAAA("bsmnt is a terrible bucket cleaner!?"))
21:42:52 <SevenInchBread> ~exec self.shouldA = lambda self,char: char in __import__("string").letters; self.trans = {"?":"!?!?", "!":"!!!",".":"!"}; self.Achar = lambda self,char: self.trans.get(char, (char,"A")[self.shouldA(char)]); self.AAAAAAAAA = lambda self,stuff: "".join(map(self.Achar, stuff)) + "!"
21:42:54 <SevenInchBread> ~exec sys.stdout.write(self.AAAAAAAAA("bsmnt is a terrible bucket cleaner!?"))
21:44:05 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:47:34 <bsmntbombdood> ~exec for i in xrange(100): self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i); time.sleep(1)
21:47:34 -!- goban has quit (Operation timed out).
21:47:37 -!- goban has joined.
21:48:42 <bsmntbombdood> ~ps
21:49:07 -!- bsmnt_bot has quit (Excess Flood).
21:49:10 -!- bsmnt_bot has joined.
21:53:41 <bsmntbombdood> ~exec self.foo = ""
21:54:10 <bsmntbombdood> ~exec for i in range(100): self.foo += "%s\n" % i
21:54:23 <bsmntbombdood> ~exec sys.stdout(len(foo))
21:54:30 <bsmntbombdood> ~exec sys.stdout(len(self.foo))
21:54:31 <bsmnt_bot> 290
21:54:39 <bsmntbombdood> ~exec sys.stderr(self.foo)
21:55:27 <bsmntbombdood> ~exec for i in range(10999): self.raw("PDASD")
21:55:28 -!- bsmnt_bot has quit (Excess Flood).
21:55:30 -!- bsmnt_bot has joined.
21:56:35 <bsmntbombdood> i'm bored
22:04:12 -!- calamari has joined.
22:06:03 -!- voodooattack has quit.
22:24:49 -!- goban has quit (Read error: 60 (Operation timed out)).
22:28:33 -!- goban has joined.
22:29:08 -!- ShadowHntr has quit (Read error: 104 (Connection reset by peer)).
22:43:24 -!- goban has quit (Operation timed out).
22:43:34 -!- goban has joined.
23:02:13 -!- calamari has quit ("Leaving").
23:04:30 -!- FabioNET has quit (Client Quit).
23:08:16 -!- UpTheDownstair has joined.
23:08:28 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
23:10:17 -!- UpTheDownstair has changed nick to nazgjunk.
23:37:31 -!- crathman has quit (Read error: 113 (No route to host)).
23:37:34 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
23:41:10 <GregorR> Y'know what would be awesome?
23:41:13 <GregorR> A pneumatic computer.
23:42:27 <lament> make one!
23:42:54 <GregorR> Pneumatic AND/OR gates are possible, right?
23:43:21 <lament> i don't see why not.
23:43:35 <bsmntbombdood> one great computer
2007-02-20
00:11:34 -!- sebbu2 has quit ("@+").
00:55:15 <oklopol> i made bf with wav output :P
01:09:37 <bsmntbombdood> hmmm
01:09:46 <bsmntbombdood> I wonder how to parse something like this:
01:10:03 <bsmntbombdood> <expr> := i
01:10:11 <bsmntbombdood> <expr> := *<expr><expr>
01:15:28 <bsmntbombdood> oh, heh, nevermind
01:16:21 <bsmntbombdood> that took a whole 8 lines
01:21:13 <bsmntbombdood> http://pastebin.ca/364284
01:29:03 <SevenInchBread> hmmm... it's odd how different my mindset was before I started programming.
01:29:10 <SevenInchBread> "complex" had a positive connotation.
01:29:12 <bsmntbombdood> ?
01:35:41 <bsmntbombdood> oui
01:42:14 -!- oerjan has joined.
01:53:54 -!- ShadowHntr has joined.
02:05:05 -!- kxspxr has quit.
02:25:17 <bsmntbombdood> ~exec exec "x='floo'" in globals()
02:25:22 <bsmntbombdood> ~exec sys.stdout(x)
02:25:23 <bsmnt_bot> floo
02:25:28 <bsmntbombdood> cool
02:50:06 <SevenInchBread> bsmnt so why doesn't the normal mode of execution simply go to the "globals"?
02:50:16 <SevenInchBread> ~exec x = 2
02:50:17 <bsmntbombdood> because
02:50:25 <SevenInchBread> ~exec sys.stdout(x)
02:50:25 <bsmnt_bot> floo
02:50:31 <SevenInchBread> because that would make too much sense right?
02:50:36 <bsmntbombdood> no
02:50:44 <bsmntbombdood> because then the locals aren't available
02:50:51 <bsmntbombdood> self, for example
02:50:53 <SevenInchBread> what locals?
02:51:13 <SevenInchBread> sure they are.
02:51:22 <SevenInchBread> self isn't a local... in this context it's a global.
02:52:02 <bsmntbombdood> no, it's local
02:52:03 <oerjan> doesn't exec take two environment arguments, one for the globals and one for the locals? So you could have both.
02:52:10 <SevenInchBread> yes.
02:52:11 <SevenInchBread> it does.
02:52:17 <bsmntbombdood> uh huh
02:52:24 <SevenInchBread> self is a variable name...
02:52:35 <bsmntbombdood> but if you say something like "x=2", x goes in the locals
02:52:40 <SevenInchBread> it's neither local nor global... it's whatever you decide to put it in.
02:53:00 <bsmntbombdood> self isn't in globals()
02:53:00 <SevenInchBread> in my opinion it would be more convient to simply (and more intuitive) to treat everything as globals..
02:53:18 <SevenInchBread> ~exec global x; x = 2
02:53:38 <SevenInchBread> ~exec sys.stdout.write(x)
02:53:38 <bsmnt_bot> 2
02:54:08 <oerjan> but then you couldn't do tricks like ihope's extra bot inside the bot
02:54:22 <SevenInchBread> it doesn't make any sense to, nor is it even useful to, by default, bind variables to a temporary local scope.
02:54:24 <bsmntbombdood> I think you could
02:54:51 <bsmntbombdood> I could copy the globals dict, then add the need locals into i
02:54:52 <bsmntbombdood> t
02:55:17 <oerjan> i suppose.
02:55:38 <SevenInchBread> ....just make self a global.
02:55:39 <bsmntbombdood> ~exec pprint.pprint(locals(), sys.stderr)
02:55:52 <oerjan> but if self is global you cannot have two bots!
02:55:55 <bsmntbombdood> SevenInchBread: no
02:56:02 <SevenInchBread> wrong... you cannot have two selfs.
02:56:07 <bsmntbombdood> ~exec pprint.pprint(locals(), sys.stdout)
02:56:08 <bsmnt_bot> {'command': 'pprint.pprint(locals(), sys.stdout)',
02:56:08 <bsmnt_bot> 'message': ':bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :~exec pprint.pprint(locals(), sys.stdout)',
02:56:08 <bsmnt_bot> 'r': <_sre.SRE_Match object at 0xb7c55cc8>,
02:56:08 <bsmnt_bot> 'self': <__main__.IRCbot instance at 0xb7c4208c>}
02:56:17 <bsmntbombdood> so that works
02:56:38 <SevenInchBread> hmmm...
02:56:40 <bsmntbombdood> uno momento
02:56:46 <oerjan> threading would mess up horribly then, wouldn't it? or do threads have different global directories?
02:56:50 <SevenInchBread> I really don't like using the global declaration.
02:57:11 <SevenInchBread> no... they all seem to share a global directory...
02:57:19 <bsmntbombdood> no, globals is the same
02:57:37 <oerjan> so it doesn't work, because multiple execs run in separate threads.
02:57:48 <bsmntbombdood> what doesn't work?
02:57:50 <oerjan> and they might need different selfs.
02:58:05 <oerjan> it doesn't work to make self global.
02:58:14 <bsmntbombdood> of course not
02:58:26 <bsmntbombdood> ~quit
02:58:27 -!- bsmnt_bot has quit.
02:58:29 -!- bsmnt_bot has joined.
02:58:36 <SevenInchBread> it would work... if each bot were a different process.
02:58:48 <bsmntbombdood> SevenInchBread: then NOTHING would work
02:59:00 <SevenInchBread> ...?
02:59:08 <bsmntbombdood> ~exec pprint.pprint(locals(), sys.stderr)
02:59:38 <bsmntbombdood> ~exec x=1
02:59:43 <bsmntbombdood> ~exec sys.stdout(x)
02:59:52 <bsmntbombdood> damnit
03:00:00 <bsmntbombdood> it still goes into a local scope
03:00:18 <bsmntbombdood> ~exec sys.stdout(self)
03:00:19 <bsmnt_bot> <__main__.IRCbot instance at 0xb7bd508c>
03:00:40 <bsmntbombdood> it looks like it generates an empty local scope if you dont' give it one
03:01:09 <bsmntbombdood> ~exec x= 42; pprint.pprint(locals(), sys.stderr)
03:01:14 <oerjan> hm... can you pass it globals(), globals() ?
03:01:32 <bsmntbombdood> i'll try
03:01:45 <SevenInchBread> you could.
03:01:54 <bsmntbombdood> ~quit
03:01:55 <SevenInchBread> or just {}, globals() if you wanted....
03:01:55 -!- bsmnt_bot has quit (Client Quit).
03:01:57 -!- bsmnt_bot has joined.
03:02:06 <bsmntbombdood> ~exec x = 32
03:02:08 <SevenInchBread> that would make global declarations act screwy though...
03:02:11 <bsmntbombdood> ~exec sys.stdout(x)
03:02:18 <bsmntbombdood> nope
03:02:21 <bsmntbombdood> weird
03:02:21 <SevenInchBread> so globals(), globals() would be best.
03:02:25 <oerjan> still gebrochen?
03:02:37 <bsmntbombdood> gebrochen?
03:02:43 <oerjan> mock german
03:02:43 <bsmntbombdood> oh, damn
03:02:50 <bsmntbombdood> I was making a copy of the dictionary
03:02:55 <bsmntbombdood> so nothing could be added
03:02:55 <SevenInchBread> ...yeah
03:03:04 <SevenInchBread> I was about to say... that would work.
03:03:07 <bsmntbombdood> but without making a copy, I can't put self into it
03:03:22 <SevenInchBread> sure you can.
03:03:31 <bsmntbombdood> no, you can't
03:03:43 <bsmntbombdood> that will break
03:03:52 <bsmntbombdood> ~quit
03:03:53 -!- bsmnt_bot has quit (Client Quit).
03:03:56 -!- bsmnt_bot has joined.
03:03:56 <SevenInchBread> globals().update({"self":self})
03:03:56 <oerjan> Sheesh. Rewrite the bot in Erlang or something :)
03:04:00 <bsmntbombdood> ~exec x = 23
03:04:14 <bsmntbombdood> ~exec sys.stdout(x)
03:04:15 <bsmnt_bot> 23
03:04:18 <bsmntbombdood> yeah
03:04:23 <bsmntbombdood> ~exec sys.stdout(self)
03:04:24 <oerjan> huzzah
03:04:31 <SevenInchBread> or or just globals["self"] = self
03:04:31 <bsmntbombdood> <bsmnt_bot> NameError: name 'self' is not defined
03:04:37 <bsmntbombdood> no, SevenInchBread
03:04:45 <SevenInchBread> globals()["self"] = self
03:04:47 <bsmntbombdood> because globals are shared
03:04:52 <SevenInchBread> so?
03:05:00 <oerjan> and self must not be shared.
03:05:09 <bsmntbombdood> so you can't have more than one bot running
03:05:10 <SevenInchBread> if you rewrite self each time... it effectively doesn't matter.
03:05:16 <bsmntbombdood> threads
03:05:28 <oerjan> execs can run simultaneously
03:05:38 <bsmntbombdood> all the execs running use the last exec executed's self
03:05:41 <oerjan> and will, if some are long-running computations
03:05:53 <SevenInchBread> so just fork a new process like a sane person.
03:06:14 <oerjan> What, sane persons, in #esoteric? Perish the thought.
03:06:35 <bsmntbombdood> with forks, none of the cool tricks are possible
03:06:55 <SevenInchBread> basically... you want to preserve the locals.
03:07:05 <SevenInchBread> so... give each bot a local dictionary?
03:07:21 <SevenInchBread> and then... all the bots share a glolbal dictionary?
03:07:27 <bsmntbombdood> hmmm
03:07:40 <SevenInchBread> it seems kind of obvious now that I think about it...
03:07:47 <oerjan> i thought that was the way it was working already
03:07:56 <SevenInchBread> a global declaration in this case means "all bots can share"
03:07:58 <bsmntbombdood> nope
03:07:58 <SevenInchBread> nope...
03:08:03 <bsmntbombdood> one sec
03:08:10 <SevenInchBread> locals are basically just discarded after a thread is executed.
03:08:51 <bsmntbombdood> ~quit
03:08:52 -!- bsmnt_bot has quit (Client Quit).
03:08:55 -!- bsmnt_bot has joined.
03:08:58 <bsmntbombdood> ~exec x=12
03:09:12 <bsmntbombdood> ~exec pprint.pprint(locals(), sys.stderr)
03:09:19 <bsmntbombdood> yay!
03:09:23 <oerjan> ~exec sys.stdout(x)
03:09:23 <bsmntbombdood> ~exec sys.stdout(x)
03:09:23 <bsmnt_bot> 12
03:09:24 <bsmnt_bot> 12
03:09:34 <bsmntbombdood> ~exec pprint.pprint(locals(), sys.stdout
03:09:36 <bsmntbombdood> ~exec pprint.pprint(locals(), sys.stdout)
03:09:39 <bsmnt_bot> {'x': 12, 'self': <__main__.IRCbot instance at 0xb7c0008c>}
03:09:43 <oerjan> eh, wait, are you making the local directory persistent?
03:09:47 <bsmntbombdood> yeah
03:09:48 <oerjan> weird stuff
03:10:04 <bsmntbombdood> each bot has it's own locals dictionary
03:10:17 <SevenInchBread> makes sense... really.
03:10:57 <bsmntbombdood> the threads might run over each other still
03:11:09 <SevenInchBread> makes managing scopes between bots far less of a pain in the long run.
03:11:31 <bsmntbombdood> might delay updates to the dictionary untill finished executing
03:12:03 <SevenInchBread> hmm... yeah... that might be a good idea.
03:12:10 <bsmntbombdood> except not
03:12:23 <bsmntbombdood> still conflicts
03:12:26 <SevenInchBread> so two processes on the same thread don't like... murder each other.
03:13:04 <oerjan> what is wrong with the old idea that execs that wanted persistence add attributes to self?
03:13:08 <SevenInchBread> basically... python's scoping makes inter-process memory weird.
03:13:20 <SevenInchBread> but it works great for normal stuff.
03:13:26 <bsmntbombdood> oerjan: i dunno
03:14:16 <SevenInchBread> well.. the problem with that is that functions defined on self don't have the closure of their local scope.
03:14:36 <SevenInchBread> which is an unexpected behavior in Python
03:14:39 <bsmntbombdood> ~exec foo = lambda : self
03:14:47 <bsmntbombdood> ~exec sys.stdout(foo)
03:14:47 <bsmnt_bot> <function <lambda> at 0xb7c01684>
03:14:51 <bsmntbombdood> ~exec sys.stdout(foo()
03:15:02 <bsmntbombdood> gAH I HATE THE INSERT KEY
03:15:04 <bsmntbombdood> ~exec sys.stdout(foo())
03:15:17 <bsmntbombdood> <bsmnt_bot> NameError: global name 'self' is not defined
03:15:20 <bsmntbombdood> bargle
03:15:27 <SevenInchBread> like that.
03:15:31 <oerjan> i thought the expected behavior in Python is that scope hardly makes sense ;)
03:15:44 <bsmntbombdood> closures are broken
03:15:57 <SevenInchBread> eh... scope makes sense in Python... to me anyways... but that's because I've been using it... a lot.
03:16:09 <bsmntbombdood> i don't understand scope in python
03:16:40 <SevenInchBread> everything is local unless stated otherwise.
03:16:47 <bsmntbombdood> mm hmmm
03:17:16 <SevenInchBread> and a closure is just an encapsulation of the globals() at the time of definition.
03:17:55 <SevenInchBread> so... any idea of what's causing self to be undefined? I'm thinking it might be something with the way you have it set up... can I see the source?
03:19:10 <bsmntbombdood> bsmntbombdood.mooo.com/chroot_ircbot.py
03:20:38 <bsmntbombdood> argh
03:20:45 <SevenInchBread> I think it would be cool if python.exe could take URLs as pathnames.
03:21:02 <SevenInchBread> so it would interpret a program off of a URL.
03:21:41 <bsmntbombdood> this needs a script to start i
03:21:42 <bsmntbombdood> t
03:27:34 <bsmntbombdood> there, mime types are better
03:29:47 * oerjan suddenly has a realization: mime types cannot possibly handle sound data.
03:37:22 <bsmntbombdood> oerjan: this configuration is equivalent to adding attributes to self
03:37:34 <bsmntbombdood> just now it's implicit
03:38:49 <oerjan> but what if an exec needs private local variables?
03:39:12 <bsmntbombdood> it can't
03:39:24 <oerjan> it could previously
03:39:26 <SevenInchBread> ...that's kind of a weird choice.
03:39:57 <SevenInchBread> now you're just moving the namespace to self.__dict__... when you could easily just keep a special self.localnamespace dictionary.
03:40:10 <bsmntbombdood> what?
03:40:14 <bsmntbombdood> that's what i'm doing
03:40:25 <bsmntbombdood> self.locals
03:40:28 <SevenInchBread> Python's scoping is very good for handling three scopes (a thread scope, a bot scope, and an all-bot scope)
03:40:35 <bsmntbombdood> you have the source
03:40:45 <bsmntbombdood> oh?
03:40:46 <SevenInchBread> er... isn't
03:40:48 <SevenInchBread> very
03:40:51 <SevenInchBread> good
03:40:57 <bsmntbombdood> oh, yeah
03:41:24 <SevenInchBread> Python basically just recognizes two scopes... I kind of wish it could use a list of scopes.
03:41:37 <SevenInchBread> localest scope all the way to globalest :)
03:41:51 <bsmntbombdood> that's how i did it in my mini lisp interpreter
03:44:06 <lament> SevenInchBread: you do realize you're completely wrong, right?
03:44:32 <SevenInchBread> >.> ...that sounded really arrogant. :)
03:48:25 <SevenInchBread> What am I wrong aboutZ
03:48:40 <lament> >>> def foo(x):
03:48:40 <lament> ... def bar(y):
03:48:40 <lament> ... def baz():
03:48:40 <lament> ... print x,y
03:48:40 <lament> ... return baz
03:48:42 <lament> ... return bar
03:48:45 <lament> ...
03:49:16 <lament> >>> foo(1)(2)()
03:49:16 <lament> 1 2
03:49:21 <SevenInchBread> Right.
03:49:44 <SevenInchBread> that's a closure... either way... a Python variable still only have two scopes it can be found in.
03:49:52 <lament> i see a bunch of scopes here.
03:50:09 <lament> x can be found in the scope of foo, the scope of bar and the scope of baz, and those are all different scopes.
03:50:11 <SevenInchBread> yeah... but only two are used to look up a variable.
03:51:17 <lament> to look up x from baz, we check baz, then bar, then foo.
03:51:40 <SevenInchBread> no... we check the functions closure... which is one namespace.
03:51:55 <SevenInchBread> it doesn't "slide upwards"... although that's the effect given.
03:53:12 <bsmntbombdood> huh?
03:57:13 <SevenInchBread> well no..
03:57:20 <SevenInchBread> I take that back... functions have -three- namespaces.
03:57:39 <SevenInchBread> still, that's not a list. :/
04:00:49 <bsmntbombdood> #raw names
04:01:00 <bsmntbombdood> ~raw names
04:01:02 -!- bsmnt_bot has quit (SendQ exceeded).
04:01:06 <bsmntbombdood> lol
04:01:22 -!- bsmnt_bot has joined.
04:01:41 -!- bsmntbombdood has changed nick to xor.
04:26:01 -!- calamari has joined.
04:32:35 <oerjan> xor: Do you know that the xor operation can be defined on ordinal numbers? ;)
04:32:43 <xor> heh
04:32:54 <xor> I wonder if there's a way to find xors non-bitwisely
04:33:28 <oerjan> Xor is "nimber" addition, and nimbers can be identified with ordinals.
04:33:41 <xor> nooooooo!
04:34:11 <xor> I know i^j = (j & i) - (j | i)
04:34:14 <oerjan> Alas, it also boils down to ordinals having base 2 representations.
04:34:49 <oerjan> Any base too... the omega base was the one previously mentioned as "Cantor normal form"
04:35:32 <oerjan> You mean i^j = (j | i) - (j & i)
04:36:15 <oerjan> And that works because the bits in the second part are all set in the first, so - requires no borrow and becomes bitwise.
04:38:38 <oerjan> Do you know Nim?
04:39:17 <oerjan> Basically if you have three heaps, of size x, y and z, then the first player loses iff x == y ^ z.
04:39:49 <oerjan> Which is equivalent to x ^ y ^ z == 0
04:40:33 <oerjan> It may not be practical, but there is no mention of bits in it :)
04:41:28 <oerjan> (Assuming both players play perfectly, as usual in mathematical game theory.)
04:42:18 <oerjan> And relax, ordinals are not mentioned either unless your heaps are infinite.
04:42:34 <xor> i don't get it
04:42:53 <xor> each turn you add one to a heap?
04:43:24 <oerjan> No, each turn the player takes as many iterms as he wishes from one heap.
04:43:28 <oerjan> *items
04:43:31 <xor> oh
04:45:36 <oerjan> It turns out there is a large class of games that can all be reduced to Nim and assigned nimbers to their positions.
04:46:02 <SevenInchBread> chess? :)
04:47:24 <oerjan> Not chess, at least not easily. The games should have the property that there are no fundamental differences between the players, each position can in principle occur for each, with the same allowed moves.
04:48:09 <oerjan> In addition, all games must end.
04:48:40 <oerjan> (Well-foundedness, through which the ordinals creep in if you have infinitely many positions)
04:49:55 <oerjan> The nimber of a position is easily defined recursively: It is the smallest natural number (from 0) that cannot be the nimber of the position after the player has moved.
04:50:15 <oerjan> *natural = ordinal, if games are infinite.
04:51:04 <oerjan> Oh, and one final property, the first player who cannot make a move loses.
04:51:14 <oerjan> And there are two players.
04:52:00 <oerjan> For Nim, the nimber of a single heap is its number of items, naturally.
04:52:27 <oerjan> For several heaps you can prove that it is the xor of the heap sizes.
04:53:40 <oerjan> The first player loses iff the nimber is 0.
04:55:50 -!- goban has quit (Read error: 60 (Operation timed out)).
04:56:07 -!- goban has joined.
05:13:23 -!- digital_me has quit ("Lost terminal").
05:29:19 -!- oerjan has quit ("leaving").
06:20:56 -!- Sgeo has quit (zelazny.freenode.net irc.freenode.net).
06:20:56 -!- meatmanek has quit (zelazny.freenode.net irc.freenode.net).
06:20:56 -!- sp3tt has quit (zelazny.freenode.net irc.freenode.net).
06:20:57 -!- ShadowHntr has quit (zelazny.freenode.net irc.freenode.net).
06:20:58 -!- cmeme has quit (zelazny.freenode.net irc.freenode.net).
06:20:58 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net).
06:20:59 -!- bsmnt_bot has quit (zelazny.freenode.net irc.freenode.net).
06:20:59 -!- SevenInchBread has quit (zelazny.freenode.net irc.freenode.net).
06:21:29 -!- bsmnt_bot has joined.
06:21:29 -!- ShadowHntr has joined.
06:21:29 -!- Sgeo has joined.
06:21:29 -!- SevenInchBread has joined.
06:21:29 -!- puzzlet has joined.
06:21:29 -!- meatmanek has joined.
06:21:29 -!- sp3tt has joined.
06:21:29 -!- cmeme has joined.
06:23:03 -!- nooga has quit (Remote closed the connection).
06:23:08 -!- nooga has joined.
06:57:30 -!- calamari has quit ("Leaving").
06:58:28 -!- ShadowHntr has quit ("End of line.").
07:05:25 -!- GreaseMonkey has joined.
07:06:17 -!- GreaseMonkey has quit (Client Quit).
07:06:41 -!- GreaseMonkey has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:20:21 <nooga> about that: http://fukung.net/v/720/school.gif
08:20:25 <nooga> ruby kills u all
08:20:39 <nooga> 500.times {print "yadda yadda"}
08:24:30 -!- oklobot has joined.
08:24:52 <oklopol> !exec 500["yadda yadda"PrntNlDrp1SubDbl]
08:24:55 <EgoBot> Huh?
08:24:56 <oklobot> yadda yadda
08:25:00 <oklobot> yadda yadda
08:25:03 <oklobot> yadda yadda
08:25:07 <oklobot> yadda yadda
08:25:10 -!- oklobot has quit (Read error: 104 (Connection reset by peer)).
08:25:12 <oklopol> yeah yeah
08:28:21 <nooga> but in ruby it's more elegant :>
08:29:10 <oklopol> YOU are more elegant.
08:29:10 <nooga> !*",211yadda yadda,3500
08:29:13 <EgoBot> Huh?
08:29:23 <nooga> !sadol !*",211yadda yadda,3500
08:29:25 <EgoBot> BDSM: Invalid argument types for '*': string, integer (index: 1, row: 1, col: 2)
08:29:30 <nooga> heh
08:29:34 <nooga> old interpreter ;p
08:29:41 <oklopol> :)
08:30:05 -!- GreaseMonkey has quit ("gnight").
08:30:21 <oklopol> i added that to oklobot quite late to
08:30:22 <oklopol> *oo
08:30:47 <oklopol> it's still not turing complete :P
08:31:12 <oklopol> nooga i have a lot shorter quicksort than the page
08:31:19 <nooga> sow me
08:31:21 <nooga> show*
08:31:38 <oklopol> i'll search... no idea where it is
08:33:01 <oklopol> okay... was in a folder named posakdif
08:35:13 -!- Sgeo has quit (Remote closed the connection).
08:36:18 <oklopol> http://www.pastebin.ca/364621
08:37:05 <oklopol> i had a lot shoter one than that... put i did some very strange things
08:37:11 <oklopol> and it failed from time to time
08:37:15 <nooga> cool
08:37:37 <nooga> but you must admit that reversed quine is genious
08:37:43 <oklopol> something like using then same operator many times...
08:37:46 <oklopol> i don't remember
08:37:48 <oklopol> :D
08:38:04 <nooga> (7:C",228!R!C!"7822,"R:!R!"9822,"C:7(:R",228(7:C",2289"!R!:R",2287"!C!RR!C!"7822,"R:!R!"9822,"C:7(
08:38:11 <nooga> the beauty
08:38:24 <oklopol> yeah it's pretty cool :D
08:38:48 <oklopol> 7( in the end... eof can be there?
08:39:07 <nooga> it's within a string
08:40:09 <oklopol> hard to say, i can't read that anymore
08:40:15 <oklopol> :D
08:40:25 <nooga> need to make indents
08:40:25 <oklopol> ':' is?
08:40:42 <oklopol> where?
08:40:43 <nooga> what?
08:40:53 <oklopol> what's :
08:40:55 <oklopol> i forgot
08:40:59 <nooga> in that quine, to see the structure
08:41:05 <nooga> :ab --> a=b
08:41:30 <oklopol> haven't played with sadol after you were here last
08:41:42 <nooga> ow
08:42:14 <oklopol> !
08:42:15 <oklopol> ?
08:42:17 <EgoBot> Huh?
08:42:18 <oklopol> ! does?
08:42:21 <EgoBot> Huh?
08:42:25 <nooga> well.. bbl, classes start in 10 mins
08:42:36 <oklopol> ! first
08:42:39 <EgoBot> Huh?
08:42:49 <nooga> ! prints
08:42:51 <EgoBot> Huh?
08:42:57 <oklopol> though so
08:42:58 <oklopol> have fun
08:43:03 <nooga> rtfm ;p
08:43:20 <nooga> http://esolangs.org/wiki/SADOL here's the cheat sheet
08:49:30 <oklopol> haha
08:49:39 <oklopol> i just came up with trecursion :)
08:50:23 <oklopol> it's neat, gotta come up with a lang around it
09:43:13 -!- oklofok has joined.
09:43:14 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
09:57:20 -!- oklodok has joined.
09:57:22 <oklodok> olp.
09:57:39 <oklofok> pop.
09:57:43 -!- oklofok has changed nick to oklopol.
09:57:52 <oklopol> %out oklodok
09:57:56 -!- oklodok has left (?).
10:23:57 -!- nazgjunk has joined.
10:31:37 -!- ais523 has joined.
10:37:07 -!- UpTheDownstair has joined.
10:37:57 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
10:40:14 -!- UpTheDownstair has changed nick to nazgjunk.
10:51:30 -!- nazgjunk has quit ("Bi-la Kaifa").
11:08:17 -!- nazgjunk has joined.
11:16:32 <ais523> I was impressed with Keymaker's Underload interpreter in Brainfuck
11:16:56 <ais523> so I wrote a Brainfuck (minus input) to Underload compiler: http://pastebin.ca/364737
11:21:18 <ais523> !help daemon
11:21:21 <EgoBot> Use: daemon <daemon> <daemon-command> Function: start a daemon process.
11:21:48 <ais523> !daemon ul bf http://www.bf-hacks.org/hacks/uload.b
11:22:01 <ais523> !ul (Hello, world!)S
11:22:18 <ais523> !ps
11:22:21 <EgoBot> 2 ais523: ps
11:23:38 <ais523> !help bf
11:23:39 <EgoBot> To use an interpreter: <interpreter> <program> Note: <program> can be the actual program, an http:// URL, or a file:// URL which refers to my pseudofilesystem.
11:24:26 <ais523> !daemon ul bf http://www.bf-hacks.org/hacks/uload.b
11:24:30 <ais523> !ps
11:24:34 <EgoBot> 3 ais523: ps
11:24:38 <oklopol> "<program> can be the actual program" means you can write the binary there i assume?
11:24:55 <ais523> You can write the source code straight in, like this:
11:24:57 <oklopol> oh
11:25:02 <oklopol> it's not the interpreter
11:25:04 <ais523> !bf +++++++++++++++++++++++++++++++++++.+.+.+.+.
11:25:06 <EgoBot> #$%&'
11:25:07 <oklopol> :)
11:25:15 <oklopol> yeah
11:25:27 <ais523> but for some reason, daemoning the Underload compiler doesn't seem to take
11:25:28 <oklopol> i reada quickly, though program meant the interpreter
11:25:31 <oklopol> *read
11:25:36 <oklopol> !help
11:25:38 <EgoBot> help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon
11:25:40 <EgoBot> 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl
11:26:22 <ais523> !daemon ul bf8 http://www.bf-hacks.org/hacks/uload.b
11:26:26 <ais523> !ps
11:26:30 <EgoBot> 4 ais523: ps
11:27:49 <ais523> !daemon dup bf >+[>,]<[<]>[>.]<[<]>[>.]
11:27:53 <ais523> !ps
11:27:56 <EgoBot> 5 ais523: ps
11:28:04 <ais523> !dup Hello, world!
11:28:26 <ais523> That's strange, there's no output but there isn't an error message either.
11:28:35 <ais523> !this makes no sense and should cause an error message
11:28:38 <EgoBot> Huh?
11:28:47 <ais523> !undaemon dup
11:28:50 <EgoBot> Process 4 killed.
11:29:55 <ais523> !daemon dup bf >++++++++++++++++++++++++++++++++[>,----------]<[<]>[++++++++++.>]<[<]>[>.]
11:30:05 <ais523> !dup Hello, world!
11:30:08 <EgoBot> *Hello, world!Hello, world!
11:30:42 <ais523> The problem seems to be that EgoBot is interpreting newline as newline (10), not EOF
11:31:03 <ais523> !undaemon ul
11:31:06 <EgoBot> Process 3 killed.
11:31:08 * oklopol slaps EgoBot
11:31:10 <ais523> !undaemon ul
11:31:24 <ais523> !ps
11:31:26 <EgoBot> 3 ais523: ps
11:31:40 <ais523> There are still two broken daemons lying around, it seems
11:31:49 <ais523> !undaemon ul
11:31:58 <ais523> !help eof
11:32:00 <EgoBot> Use: eof <pid> Function: send EOF to a process
11:32:07 <ais523> That looks promising
11:32:22 <ais523> !bf http://www.bf-hacks.org/hacks/uload.b
11:32:31 <ais523> !ps
11:32:34 <EgoBot> 3 ais523: bf
11:32:36 <EgoBot> 4 ais523: ps
11:32:48 <ais523> !i 3 (Hello, world!)S
11:32:51 <ais523> !eof 3
11:32:54 <EgoBot> Hello, world!
11:33:33 <ais523> !kill 1
11:33:34 <EgoBot> Process 1 killed.
11:33:36 <ais523> !kill 2
11:33:38 <EgoBot> Process 2 killed.
11:33:40 <ais523> !ps
11:33:42 <EgoBot> 1 ais523: ps
11:34:25 <ais523> !help usertrig
11:34:28 <EgoBot> Use: usertrig <command> <trig-command> Function: manage user triggers. <command> may be add, del, list or show.
11:34:57 <ais523> !bf-textgen +[]
11:35:00 <EgoBot> Huh?
11:35:06 <ais523> !bf-txtgen +[]
11:35:10 <EgoBot> Huh?
11:35:20 <ais523> !bf_txtgen +[]
11:35:50 <EgoBot> 45 +++++++++[>+++++>++++++++++>><<<<-]>--.>+.++. [473]
11:36:21 <ais523> I'm sure that >><< bit can be shortened
11:37:50 <oklopol> :P
11:40:54 <ais523> !bf http://www.bf-hacks.org/hacks/uload.b
11:41:55 <ais523> !i 1 (:aSS):aSS
11:41:57 <ais523> !eof 1
11:42:00 <EgoBot> (:aSS):aSS
11:42:09 <ais523> Underload is a good language for writing quines in
11:43:10 <oklopol> StringIO's eof check in python?
11:45:28 <ais523> I can't figure out the context of your last comment
12:02:16 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
12:02:26 -!- oklopol has joined.
12:36:30 <oklopol> i've asked this before
12:36:31 <oklopol> but
12:37:02 <oklopol> can i reach a var of the parent functions in a subfunction
12:37:10 <oklopol> in python
12:37:47 <oklopol> def oso:
12:37:48 <oklopol> a=""
12:37:48 <oklopol> def b:
12:37:48 <oklopol> a="adsf"
12:37:48 <oklopol> b()
12:37:48 <oklopol> print a
12:38:52 <oklopol> hmm... globals might be the answer, can a global be global in a function?
12:39:07 <oklopol> def oso:
12:39:08 <oklopol> a=""
12:39:08 <oklopol> def b:
12:39:08 <oklopol> global a
12:39:08 <oklopol> a="adsf"
12:39:08 <oklopol> b()
12:39:10 <oklopol> print a
12:43:24 <oklopol> i feel leetish when i write an interpreter and then close python without saving :)
12:43:42 <oklopol> "lol i can rewrite this in 5 min"
12:54:32 -!- helios24 has joined.
12:54:46 <oklopol> python 2.5 won't work... something about a refused connection...
12:54:49 <oklopol> :\
12:54:50 <oklopol> wtf
12:57:46 <oklopol> is there True?true_stuph:false_stuph in python?
12:57:54 <oklopol> cond?true_stuph:false_stuph in python?
12:58:39 <oklopol> python 2.5 works fine until i click ok on these all-ways-on-to error messages
12:58:51 <oklopol> after which it quits
12:59:03 <oklopol> *always-on-top
12:59:05 <oklopol> :)
12:59:21 <ais523> ~exec sys.stdout(true?"True":"False")
12:59:37 <ais523> seems as though Python doesn't have a ?: operator
12:59:52 <ais523> ~exec sys.stdout("The previous line would have worked if I had a ?: operator")
12:59:52 <bsmnt_bot> The previous line would have worked if I had a ?: operator
13:01:37 <oklopol> True
13:01:49 <oklopol> ~exec sys.stdout(True?"True":"False")
13:02:08 <oklopol> ~exec sys.stdout(("True" if True else "False"))
13:02:33 <oklopol> ~exec sys.stdout((if True then "True" else "False"))
13:03:19 <oklopol> ~exec sys.stdout((["True" for i in [True] if i]+["False"])[0])
13:03:20 <bsmnt_bot> True
13:03:27 <oklopol> ~exec sys.stdout((["True" for i in [False] if i]+["False"])[0])
13:03:27 <bsmnt_bot> False
13:03:38 <oklopol> handy, i must say -____-
13:07:55 <oklopol> def cond_to_for(cond,true,false):
13:07:56 <oklopol> ([true for i in [cond] if i]+[false])[0]
13:07:57 <oklopol> hmph
13:08:03 <oklopol> i don't know how to use exec it seems
13:16:34 <oklopol> http://www.pastebin.ca/364857
13:16:46 <oklopol> i have some serious mental problems :<
13:16:54 <oklopol> exec... wtf, this is metaproggin
13:17:44 -!- helios24 has quit ("Leaving").
13:39:17 -!- jix has joined.
13:39:20 <oklopol> (23)+(23,6424)+(23534,653) -> (23,23,6424,23534,653) <<<<<< how is that done?
13:39:23 <oklopol> in python
13:39:35 <oklopol> + is not right
13:49:58 -!- helios24 has joined.
13:54:11 -!- helios24 has quit (Client Quit).
13:54:43 -!- ais523 has quit ("/quit").
13:56:13 -!- helios24 has joined.
13:56:17 <nooga> y00
13:56:21 <nooga> sup?
14:03:33 <oklopol> is there something like StringIO in haskell?
14:03:40 <oklopol> it would be a cheat of course
14:03:49 <oklopol> but i suppose you have one anyway
14:04:07 <oklopol> python's StringIO, the one bsmntbombdood used
14:18:02 -!- helios24 has quit (Remote closed the connection).
14:22:23 -!- tgwizard has joined.
14:22:51 <nooga> huh
14:24:00 <nooga> well
14:24:37 <nooga> http://strlen.com/aardappel/index.html this might be interesting
14:25:08 -!- helios24 has joined.
14:26:01 <oklopol> yeah, wouter's a pro
14:26:28 <nooga> yeah, but false is not as good as sadol :d
14:28:33 <nooga> :X
14:29:08 <oklopol> sorry to say but it is :\
14:29:08 <oklopol> well, i like it more
14:29:15 <nooga> YEAH!
14:29:38 <nooga> what really lacks in sadol is classic higher order functions
14:30:30 <nooga> sadol is completely functional but not in the normal wa
14:30:34 <nooga> way
14:32:41 <nooga> when i designed it i didn't even know what is lambda ;d
14:34:26 -!- oklofok has joined.
14:34:32 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
14:36:49 <nooga> ;p
14:43:25 -!- oklofok has changed nick to oklopol.
14:43:48 <nooga> once i had an idea to write simple lisp interpreter in SADOL
14:43:55 <nooga> ;d
14:45:31 <oklopol> we all snap from time to tim
14:45:33 <oklopol> *time
14:46:38 <nooga> :D
14:46:44 <nooga> but it's possible
14:46:54 <nooga> and even not so hard
14:47:19 <nooga> but it requires enormous amoun of time I don't have
14:48:58 <oklopol> true
14:58:25 <nooga> g2g
14:58:26 <nooga> bbl
15:10:26 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
15:11:06 -!- oklopol has joined.
15:39:50 -!- goban has quit (Read error: 104 (Connection reset by peer)).
15:58:11 -!- goban has joined.
16:08:20 -!- goban has quit (Read error: 104 (Connection reset by peer)).
16:08:43 -!- goban has joined.
16:09:03 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
16:09:13 -!- oklopol has joined.
16:18:06 -!- goban has quit (Read error: 104 (Connection reset by peer)).
16:18:23 -!- goban has joined.
16:25:43 <SimonRC> My compiler lecturer is a bastard.
16:26:16 <SimonRC> Basically our assignment is: "This is a 1.24M-instruction machine code program. Make it faster."
16:29:56 -!- goban has quit (Operation timed out).
16:30:59 -!- crathman has joined.
16:31:53 -!- goban has joined.
16:34:35 <GregorR> SimonRC: He's really just a programmer using a class of students to cheat for his company :P
16:35:05 <oklopol> SimonRC that sounds fun imo
16:35:32 <GregorR> That sounds like quite possibly the least fun thing imaginable.
16:36:12 <GregorR> "Tedius" would be a better word.
16:37:02 <GregorR> Plus an o in there :P
16:37:25 <oklopol> well, if you do it manually
16:37:27 <oklopol> i wouldn't
16:37:40 <oklopol> i assume it's a metaprogramming task
16:45:45 <SimonRC> Ah, I forgot to mention...
16:45:51 <SimonRC> It is for a VM
16:45:56 <SimonRC> A 2200-year-old VM
16:46:06 <SimonRC> http://www.boundvariable.org/um-spec.txt
16:46:17 <SimonRC> oklopol: indeed it is
16:46:36 <SimonRC> After all, he has just taught us about optimisation.
16:47:34 -!- oklofok has joined.
16:47:35 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
16:51:18 <oklofok> yeah
16:51:23 <oklofok> then i'd find it fun
16:51:28 <oklofok> maybe i'm sick somehow
16:51:31 -!- oklofok has changed nick to oklopol.
16:52:05 <oklopol> my project in the uni is to create a jave class that can randomize a poker hand and check for straight and flush...
16:52:08 <oklopol> *java
16:53:23 <oklopol> basically a 20 minute job max, but it required a plan that has to be checked before implementation... plus a 5 page documentation
16:53:29 <oklopol> *requires
16:53:44 <oklopol> actually, the example documentation is 15 pages
16:55:05 <SimonRC> The assignment is supposed to be about 10h work.
16:56:23 <oklopol> maybe, would take longer for me, prolly
16:57:37 -!- SevenInchBread has quit (Read error: 145 (Connection timed out)).
17:01:59 -!- FabioNET has joined.
17:02:35 -!- FabioNET has quit (Remote closed the connection).
17:03:51 -!- sp3tt has quit (Read error: 54 (Connection reset by peer)).
17:08:28 -!- FabioNET has joined.
17:43:50 -!- sp3tt has joined.
17:46:50 -!- sp3tt has quit (Read error: 104 (Connection reset by peer)).
17:48:07 * SimonRC goes. (Bizarre coursework: http://www.dur.ac.uk/s.r.clarkstone/ASAM%20Compilers%20coursework.eml )
17:49:50 -!- ais523 has joined.
17:51:13 -!- sp3tt has joined.
17:54:18 -!- sp3tt has quit (Read error: 104 (Connection reset by peer)).
17:57:37 -!- sp3tt has joined.
18:01:17 -!- sp3tt has quit (Read error: 104 (Connection reset by peer)).
18:05:59 -!- sp3tt has joined.
18:29:36 -!- sebbu has joined.
18:31:54 <xor> dur
18:38:57 <SimonRC> hm
18:42:54 <ais523> I'll have to complain again about a lack of context, after reading the previous two lines and today's logs
18:47:52 <ais523> !bf http://www.bf-hacks.org/hacks/uload.b
18:48:21 <ais523> !i 1 (:*)(:::::::*******)^(*)~^S
18:48:23 <ais523> !eof 1
18:48:25 <EgoBot> ****************************************************************************************************************************************************************************************************************************************************************
18:50:26 <GregorR> .
18:50:32 <GregorR> ?
18:53:14 -!- sp3tt has quit (Read error: 54 (Connection reset by peer)).
18:55:52 <ais523> I was getting EgoBot to run Underload
18:56:11 * GregorR doesn't know what underload is ^^
18:56:23 <ais523> http://esolangs.org/wiki/Underload
18:56:58 <ais523> I can't daemon Keymaker's interpreter, though, because it expects EOF at the end of the program rather than newline
18:57:18 <GregorR> Aww :(
18:57:36 <GregorR> It could be modified ... but BF is sort of write-only coding ^^
18:58:18 <ais523> It shouldn't be too hard; the start of the program looks like a EOF-seeking routine to read the whole program, which could be modified independently
18:58:49 <ais523> Anyway, I was sufficiently impressed with the Underload interpreter in BF that I wrote a BF (minus input) to Underload compiler: http://pastebin.ca/364737
18:59:10 -!- sp3tt has joined.
19:03:39 <ais523> !daemon ul bf http://pastebin.ca/raw/365170
19:03:49 <ais523> !ul (Hello, world!)S
19:03:52 <EgoBot> Hello, world!
19:03:59 <GregorR> Whoot
19:04:00 <ais523> !ps
19:04:00 -!- sp3tt has quit (Read error: 104 (Connection reset by peer)).
19:04:04 <EgoBot> 1 ais523: ps
19:04:08 <GregorR> !ps d
19:04:12 <EgoBot> 1 GregorR: ps
19:04:21 <GregorR> OK, so it closes after receiving one line ;)
19:04:25 <ais523> The modified version ends after it runs one program, though
19:04:31 <ais523> Crossed messages...
19:05:18 -!- ais523 has quit ("I have to go home").
19:09:40 -!- sp3tt has joined.
19:22:49 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
19:25:13 -!- oklofok has joined.
19:42:50 -!- sp3tt has quit (Read error: 131 (Connection reset by peer)).
19:56:02 -!- sp3tt has joined.
20:00:12 -!- oklofok has changed nick to oklopol.
20:04:44 -!- voodooattack has joined.
20:28:13 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
21:22:43 -!- wooby has joined.
21:39:29 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:47:51 -!- sebbu has quit ("@+").
22:51:46 -!- goban has quit (Read error: 54 (Connection reset by peer)).
22:51:59 -!- goban has joined.
23:12:39 -!- nazgjunk has changed nick to na[zZz]gjunk.
23:15:30 <SimonRC> exercise: write a turing-machine evaluator in the lambda calculus.
23:15:50 <SimonRC> evil exercise: write a lambda-calculus evaluator for the turing machine
23:15:57 <SimonRC> :-P
23:16:00 * SimonRC goes for a bit
23:16:29 <xor> heh
23:16:42 * xor just wrote a ski calculus interpreter
23:19:01 <xor> unparse(simp(parse("```S`KKIx"))) ==> "`Kx"
23:22:35 -!- tgwizard has quit (Remote closed the connection).
23:22:45 <xor> unparse(simp(parse("```S``SI`KS`KKx"))) ==> "``xSK"
23:24:40 <xor> :)
23:25:18 * oklopol has nothing clever to say
23:25:19 -!- SevenInchBread has joined.
23:25:37 * oklopol leaves feeling embarrassed -->
23:25:54 <SevenInchBread> hmmm... interesting.
23:26:03 <SevenInchBread> Anyone heard of the term "rope" as a datatype?
23:26:22 <SevenInchBread> I just read about it.
23:26:26 <oklopol> <--
23:26:30 <oklopol> url
23:27:18 <SevenInchBread> It's basically a binary tree of arrays of characters (a tree of strings).
23:27:58 <oklopol> omg! -------------->
23:28:21 <SevenInchBread> so to concatenate ropes you just make a new node, with the two ropes being the branches.
23:29:19 <xor> ?
23:32:26 <SevenInchBread> IT apparently makes concatenation operations faster... at the expense of a few extra chunks of memory lying around.
23:36:56 <xor> I wonder how to make it reduce things like S(KK)I automatically
23:37:30 <xor> (using extensionality)
23:37:51 <SevenInchBread> hmm... well...
23:38:36 <SevenInchBread> let's see... I don't know if ropes would actually make anything faster. It lightens the burden of the concatenation operation... but in doing so it makes it less straightforeward to traverse.
23:38:58 <xor> concantenation of strings is only O(n)
23:40:27 <SevenInchBread> well... that adds up when you insert values onto strings continuously.
23:41:42 -!- FabioNET has quit (Client Quit).
23:47:48 -!- wooby has quit.
2007-02-21
00:25:31 -!- digital_me has joined.
00:40:35 -!- goban has quit (Read error: 110 (Connection timed out)).
01:04:21 -!- digital_me has quit ("Lost terminal").
01:09:49 -!- wooby has joined.
01:17:50 -!- goban has joined.
01:24:42 -!- crathman has joined.
01:28:51 -!- wooby has quit.
02:00:45 -!- goban has quit (Connection timed out).
02:00:51 -!- goban has joined.
02:06:19 -!- crathman has quit (Read error: 131 (Connection reset by peer)).
02:06:30 -!- crathman_ has joined.
02:06:32 -!- crathman_ has changed nick to crathman.
02:06:44 -!- crathman has quit (Remote closed the connection).
02:44:53 -!- anonfunc has joined.
03:09:53 -!- anonfunc has quit.
03:15:54 -!- anonfunc has joined.
03:44:57 -!- xor has changed nick to bsmntbombdood.
03:59:27 -!- voodooattack has quit.
04:09:06 -!- GreaseMonkey has joined.
04:20:12 <bsmntbombdood> monkey too greasy
04:21:58 <GregorR> If you bake it just enough of the grease runs out to leave it tender but not greasy.
04:24:30 -!- Sgeo has joined.
04:24:46 <bsmntbombdood> supercoolness: http://bsmntbombdood.mooo.com/ski_repl.py
04:29:11 <bsmntbombdood> $ ```Sxyz
04:29:15 <bsmntbombdood> ``xz`yz
04:30:04 <bsmntbombdood> $ ```SKxy
04:30:04 <bsmntbombdood> y
04:31:49 <SevenInchBread> hmmm
04:32:18 <SevenInchBread> I want to make a computer that operates on base-5
04:32:24 <SevenInchBread> a... pentit?
04:32:29 <GregorR> I want to make a pneumatic computer.
04:32:50 <SevenInchBread> Well... I'm getting kind of fed up with bits... :)
04:32:52 <GregorR> Make it base-6 so it can be a sextit.
04:32:58 <SevenInchBread> hahahahaha
04:33:26 <SevenInchBread> I was going for base-5 because of The Law of Fives... but base-6 would actually have the digit 5 in it.
04:33:41 <GregorR> "Law of Fives"?
04:33:44 <SevenInchBread> You could encode more information in less space.
04:33:52 <GreaseMonkey> oh sry
04:33:53 <bsmntbombdood> no you couldn't
04:33:58 <GreaseMonkey> didn't notice there was action here
04:34:05 <SevenInchBread> http://en.wikipedia.org/wiki/Discordianism#The_Law_of_Fives
04:34:58 <GreaseMonkey> hey, i know basic "hypnosis"
04:35:09 <GreaseMonkey> i dunno what the term for it is though
04:35:13 <bsmntbombdood> logic works in binarys
04:35:15 <GreaseMonkey> i think it's "autosuggestion"
04:35:18 <bsmntbombdood> *bits
04:36:42 <SevenInchBread> well... assuming you use similar methods of storing bits to store sextits... you could get a large number of representable values within a sequence of sextits than you could a sequence of bits.
04:37:20 <SevenInchBread> base-3 is actually fairly feasible... -1, 0, 1 corresponding to the polarity of the volts.
04:37:27 <bsmntbombdood> ha ha you said sex-tit
04:48:39 <SevenInchBread> hmm... but you can't reliably represent 5 states with a typical transistor can you?
04:48:51 <SevenInchBread> the voltage can change unexpectedly.
04:58:50 -!- GreaseMonkey has quit ("gtg").
05:08:04 <SevenInchBread> hmmm... I wonder if I could somehow attach an analog component to my computer and make it a hybrid computer.
05:28:01 -!- Arrogant has joined.
05:35:51 <SevenInchBread> hmmm... are there any analog computers out there that use sound as their medium?
05:35:55 <SevenInchBread> interesting idea.
05:36:23 <SevenInchBread> I'd imagine it would make quite a bit of racket... unless you keep it out of the range of human hearing.
05:36:33 <bsmntbombdood> what's the point?
05:36:36 <SevenInchBread> but then you'd annoy quite a few dogs.
05:36:41 <GregorR> Same as the point of a pneumatic computer.
05:36:41 <SevenInchBread> what's the point of anything?
05:36:48 <GregorR> It's pure, unadulterated awesomeness.
05:37:10 <SevenInchBread> hmmmm.. well sound is kind of like pneumatic... but with totally different processes.
05:37:21 <SevenInchBread> vibrating air... air pressure... totally different things.
05:37:53 <GregorR> Heh
05:38:23 <SevenInchBread> you could mix sound waves to do nifty things...
05:38:35 <SevenInchBread> and combine it with pneumatic somehow.
05:39:11 <SevenInchBread> with some hydraulic stuff thrown in just for the awesomeness of sloshing sounds (and a water fountain as an output device)
05:42:42 <SevenInchBread> hmm... a pnuematic computer? That's a wind tunnel. :P
05:43:10 <GregorR> lol
05:54:33 <SevenInchBread> I would use electrical and chemical components.
05:54:37 <SevenInchBread> essentially like the brain.
05:56:16 <SevenInchBread> if you consider the inpreciseness of intelligence... analog computers seem better suited for AI than digital computers.
05:57:01 -!- goban has quit (Remote closed the connection).
05:57:22 -!- goban has joined.
06:15:12 -!- goban has quit (Remote closed the connection).
06:41:44 -!- goban has joined.
07:05:51 -!- goban has quit (Remote closed the connection).
07:06:22 -!- goban has joined.
07:09:05 -!- goban has quit (Remote closed the connection).
07:09:34 -!- goban has joined.
07:14:31 -!- Sukoshi has joined.
07:15:26 <Sukoshi> If you break every case statement does it specifically match your case of choice through only one jump or is a fall-through case statement faster?
07:15:29 <Sukoshi> In C.
07:18:14 <GregorR> ... regardless of breaking or anything else, a switch is one jump.
07:18:23 <GregorR> (At max)
07:18:35 <Sukoshi> Aha.
07:18:37 <Sukoshi> Cool-z.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:06:37 <SevenInchBread> hmmm
08:06:56 <SevenInchBread> should esoos ever become complete... it needs an OS-tan.
08:07:26 <GregorR> And even if it doesn't :-P
08:08:33 <SevenInchBread> ...yes
08:08:39 <SevenInchBread> I imagine it being green...
08:08:41 <SevenInchBread> for some reason
08:08:56 -!- ShadowHntr has joined.
08:09:13 <SevenInchBread> or... at least... futanari (hermaphrodite anime pron)
08:11:40 -!- Arrogant has quit ("Leaving").
08:11:51 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)).
08:12:08 -!- EgoBot has joined.
08:12:10 -!- Sgeo has quit (Read error: 131 (Connection reset by peer)).
08:41:34 -!- SevenInchBread has changed nick to SevenInchPastry.
08:54:41 -!- ShadowHntr has quit ("End of line.").
09:05:23 -!- oklopol has quit (zelazny.freenode.net irc.freenode.net).
09:05:24 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net).
09:05:24 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net).
09:05:24 -!- NK\ has quit (zelazny.freenode.net irc.freenode.net).
09:05:24 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
09:05:24 -!- SimonRC has quit (zelazny.freenode.net irc.freenode.net).
09:05:24 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
09:05:28 -!- oklofok has joined.
09:05:28 -!- Sukoshi has joined.
09:05:28 -!- sekhmet has joined.
09:05:28 -!- NK\ has joined.
09:05:28 -!- GregorR has joined.
09:05:28 -!- SimonRC has joined.
09:05:28 -!- tokigun has joined.
09:05:30 -!- GregorR has quit (Read error: 104 (Connection reset by peer)).
09:05:43 -!- GregorR has joined.
09:07:45 -!- Sukoshi has quit (Remote closed the connection).
09:08:13 -!- Sukoshi has joined.
09:41:34 -!- SimonRC has quit (zelazny.freenode.net irc.freenode.net).
09:41:34 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
09:41:34 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net).
09:41:35 -!- NK\ has quit (zelazny.freenode.net irc.freenode.net).
09:41:35 -!- oklofok has quit (zelazny.freenode.net irc.freenode.net).
09:43:50 -!- oklofok has joined.
09:43:50 -!- sekhmet has joined.
09:43:50 -!- NK\ has joined.
09:43:50 -!- SimonRC has joined.
09:43:50 -!- tokigun has joined.
09:50:47 -!- na[zZz]gjunk has changed nick to nazgjunk.
10:00:38 -!- nazgjunk has changed nick to n[a]zgjunk.
10:11:06 -!- oklopol has joined.
10:11:24 -!- oklofok has quit (Read error: 104 (Connection reset by peer)).
11:11:36 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
11:12:23 -!- oklofok has joined.
11:19:13 -!- anonfunc has quit (Read error: 104 (Connection reset by peer)).
13:29:15 -!- jix__ has joined.
13:48:18 -!- goban has quit (Read error: 104 (Connection reset by peer)).
13:48:35 -!- goban has joined.
13:56:00 -!- goban has quit (Read error: 104 (Connection reset by peer)).
13:56:15 -!- goban has joined.
14:15:28 <nooga> hey
15:30:09 -!- crathman has joined.
15:56:40 <nooga> :S[s] :: S:`s
15:59:02 -!- goban has quit (Read error: 110 (Connection timed out)).
16:07:10 -!- oerjan has joined.
16:09:44 <nooga> hi oerjan
16:09:51 <oerjan> hi nooga
16:09:55 <nooga> back from work?
16:10:39 <oerjan> not really
16:14:28 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
16:16:13 <nooga> hm
16:16:39 <nooga> have you invented something new?
16:17:30 <oerjan> i have mostly designed a Malbolge dialect which I am calling "Malbolge Unshackled"
16:17:45 <nooga> w0
16:17:47 <nooga> show me
16:18:03 <oerjan> the implementation is far from ready though.
16:18:17 <nooga> what about the spec?
16:18:23 <oerjan> basically, i was thinking how to make Malbolge Turing complete
16:18:34 <oerjan> still only in my head.
16:18:40 <nooga> i c
16:18:43 <oerjan> by removing size limits
16:19:08 <oerjan> for Malbolge, this has various problems.
16:21:12 <oerjan> mostly to do with the fact that the tritwise operations (the crazy operation and rotation) are not defined for general integers, but tightly connected with the particular tritwidth (10) of Malbolge
16:22:31 <oerjan> for the crazy operation it is easiest to solve: use 3-adic numbers, where the first trit is considered to repeat indefinitely to the left.
16:22:52 -!- ShadowHntr has joined.
16:23:33 <oerjan> (Since op(0,0) == 1 on trits, this is necessary to make the definition independent of tritwidth)
16:24:03 <oerjan> but rotation is more awkward.
16:24:55 <oerjan> because what should happen to the trit that is shifted off rightward?
16:25:54 <nooga> hm
16:25:56 <oerjan> rotation is the only way in Malbolge to create values larger in width than those you already have, an essential for Turing completeness.
16:26:12 <nooga> i c
16:26:22 <nooga> sorry, but g2g ;/
16:26:33 <oerjan> bye
16:26:36 <nooga> bbl
16:50:29 <oerjan> oklofok: What is StringIO?
16:53:49 <oerjan> hm...
16:54:37 <oerjan> sounds like the Writer monad.
16:54:57 <oerjan> a bit.
17:05:32 <oerjan> but doing it properly is hard without duck typing, i guess.
17:07:30 <oerjan> other than that, it is far more common in Haskell to work with strings when possible, so the opposite is easier.
17:17:53 -!- oerjan_ has joined.
17:20:11 -!- oerjan has quit (Nick collision from services.).
17:20:14 -!- oerjan has joined.
17:20:25 <oerjan_> what!
17:20:48 -!- oerjan has quit (Remote closed the connection).
17:20:55 -!- oerjan_ has changed nick to oerjan.
17:27:01 -!- SevenInchPastry has quit (Read error: 145 (Connection timed out)).
17:36:32 -!- goban has joined.
17:42:02 -!- Sukoshi has quit (Remote closed the connection).
17:42:39 -!- Sukoshi has joined.
18:00:27 -!- goban has quit (Connection timed out).
18:08:03 -!- goban has joined.
18:25:05 -!- sebbu has joined.
18:49:32 -!- goban has quit (Read error: 104 (Connection reset by peer)).
18:49:41 -!- goban has joined.
19:00:11 -!- crathman has joined.
19:10:18 -!- Arrogant has joined.
19:21:09 -!- fizzie has joined.
19:36:55 -!- sebbu2 has joined.
19:48:12 -!- sebbu has quit (Read error: 60 (Operation timed out)).
20:08:22 <oklofok> oerjan bsmntbombdood used it in his *ii -parser
20:08:27 -!- oklofok has changed nick to oklopol.
20:08:47 <oerjan> Iota?
20:11:23 <oerjan> iota = (char 'i' >> I) <|> (char '*' >> liftM2 App iota iota)
20:11:54 <oerjan> data Iota = I | App Iota Iota
20:12:27 <oerjan> import Text.ParserCombinators.Parsec
20:12:40 <oerjan> except the import has to be first.
20:12:53 -!- n[a]zgjunk has changed nick to nazgjunk.
20:13:38 <oerjan> eh, that I should be return I
20:14:48 <oklopol> App?
20:15:08 <oerjan> * is application isn't it?
20:15:27 <oklopol> i think it is
20:15:59 <oklopol> App is a haskell term?
20:16:13 <oerjan> it's defined in the data statement.
20:16:47 <oklopol> yeah, indeed
20:17:02 <oklopol> i'm not that familiar with haskell's type system :D
20:17:44 <oerjan> well it's a kickass type system
20:18:40 <oerjan> it defines a type Iota with two constructors I and App, the last of which takes two arguments.
20:19:31 <oerjan> both themselves of type Iota.
20:21:32 <oklopol> App and I are then kinda like constructors, i would've asked, but seems it's exactly what you said now that i read it again
20:21:56 <oerjan> right.
20:22:23 -!- sebbu has joined.
20:22:31 <oklopol> i just don't like erasing stuff i've already written
20:22:34 <oklopol> :P
20:23:23 <oerjan> maybe add S and K to the type, then you can use the equations on the wiki page.
20:24:09 <oerjan> step (App I x) = App (App x S) K
20:24:55 <oklopol> i don't know how iota works
20:24:58 <oerjan> step (App (App K x) y) = x
20:25:35 <oerjan> step (App (App (App S x) y) z) = App (App x z) (App y z)
20:25:49 <oerjan> well S and K are the usual combinators.
20:26:55 <oklopol> iota is identity?
20:27:05 <oerjan> step (App x y) = App (step x) y
20:28:00 <oerjan> no, *ix = **xSK
20:28:29 <oklopol> okayh
20:30:03 <oerjan> step x = x
20:30:46 <oerjan> That step definition will loop once the expression is in head normal form, however, which may not be quite what you want.
20:30:58 <oerjan> *loop=change nothing
20:32:25 <oerjan> But anyhow, something like this and a couple of lines more should give an entire Iota interpreter.
20:34:24 <oklopol> way to go haxxell!
20:39:53 <GregorR> OT: http://www.pastebin.ca/366652
20:41:34 -!- sebbu2 has quit (Connection timed out).
20:42:56 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
20:43:57 -!- oklopol has joined.
21:25:03 -!- oerjan has quit ("Good night").
21:36:28 -!- SevenInchPastry has joined.
21:40:49 -!- SevenInchPastry has quit (Client Quit).
21:55:20 -!- Arrogant has quit ("Leaving").
22:00:29 -!- goban has quit (Remote closed the connection).
22:00:43 -!- goban has joined.
22:12:01 -!- SevenInchPastry has joined.
22:12:12 -!- SevenInchPastry has changed nick to SevenInchBread.
22:19:17 -!- goban has quit (Read error: 104 (Connection reset by peer)).
22:19:32 -!- goban has joined.
22:30:40 <bsmntbombdood> GregorR: ?
22:33:41 <GregorR> bsmntbombdood: An email I sent today :P
22:36:07 * bsmntbombdood twonges
22:36:23 <GregorR> ... twonges?
22:36:42 <bsmntbombdood> twonges.
22:41:33 <GregorR> ... ... twonges? :P
22:42:16 <lament> to twonge or not to twonge?
22:43:00 <GregorR> To twonge, or not to twonge. That is the question.
22:43:30 -!- puzzlet_ has joined.
22:43:44 -!- puzzlet has quit (Read error: 104 (Connection reset by peer)).
22:43:46 * bsmntbombdood twonges lament
22:44:01 * oklopol gets a huge twonge
22:44:33 <GregorR> OK, I think we're done with the word "twonge" X_X
22:44:38 <bsmntbombdood> oh man i've only made $60 with adsense
22:44:48 <SevenInchBread> hmmm
22:45:09 <lament> sounds good
22:45:10 <SevenInchBread> so... back to esoos... do we have memory paging figured out?
22:45:40 * SevenInchBread wants to represent memory as something quirkier than a ginormous array. :)
22:46:09 -!- goban has quit (Connection timed out).
22:46:22 -!- goban has joined.
22:48:50 <oklopol> linda?
22:49:15 * oklopol 's been reading http://strlen.com/files/lang/aardappel/thesis.pdf
22:59:29 <Sukoshi> Is Esos still alive?
23:12:45 <SevenInchBread> ...sorta.
23:12:50 <SevenInchBread> no real work on it... but
23:13:10 <SevenInchBread> it's... erm... hmmm... it's in critical condition.
23:13:14 <SevenInchBread> also...
23:13:22 <Sukoshi> Ah... sounds ... engaging?
23:13:40 <SevenInchBread> omdeed.
23:13:53 <Sukoshi> Hootay.
23:13:57 <SevenInchBread> also
23:13:59 <SevenInchBread> http://deadbeefbabe.org/paste/3747
23:18:07 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
23:33:45 -!- goban has quit (Connection timed out).
23:34:10 -!- goban has joined.
2007-02-22
00:09:27 -!- sebbu has quit (Client Quit).
00:29:01 -!- voodooattack has joined.
00:30:33 -!- nazgjunk has quit ("Bi-la Kaifa").
00:38:47 -!- ShadowHntr has quit ("End of line.").
01:23:09 -!- wooby has joined.
01:24:10 <bsmntbombdood> heh.
01:24:35 <bsmntbombdood> there must be a bug
01:25:08 <bsmntbombdood> http://pastebin.ca/366996
01:25:16 <bsmntbombdood> :q or :Q is the command to quit
01:26:32 -!- wooby has quit (Client Quit).
01:26:38 -!- wooby has joined.
01:29:38 <bsmntbombdood> weird
01:49:31 -!- Sgeo has joined.
02:23:18 <SevenInchBread> this is pretty sweet.
02:25:42 <bsmntbombdood> what is?
02:25:49 <bsmntbombdood> Warning: this comic occasionally contains strong language (which may be unsuitable for children), unusual humor (which may be unsuitable for adults), and advanced mathematics (which may be unsuitable for liberal-arts majors).
02:26:45 <SevenInchBread> It's like... a huge concurrent PATH-like language with coroutines and support for files and sockets.
02:29:03 <SevenInchBread> Originally it was so concurrent that each individual pointer could hold only one byte... but that makes it impossible to do filenames, urls, and socket addresses.
02:29:37 <SevenInchBread> so.. I just made little counters and big counters...
02:32:30 <SevenInchBread> It's weird because this could actually be useful.
02:33:02 <SevenInchBread> very useful actually... I wouldn't mind using it. :)
02:36:39 <SevenInchBread> hell, I'll throw in unicode support too...
03:07:40 -!- wooby has quit.
03:07:43 -!- pgimeno has quit (Read error: 104 (Connection reset by peer)).
03:11:20 -!- pgimeno has joined.
03:29:29 -!- jix__ has quit (Read error: 110 (Connection timed out)).
03:30:00 -!- jix__ has joined.
03:53:55 -!- digital_me has joined.
04:10:30 <SevenInchBread> hmmm...
04:11:21 <SevenInchBread> It's funny to note that unihan probably takes up less storage space than latin text.
04:11:58 <SevenInchBread> It takes more bytes to encode a character... but you have less characters as a whole.
04:24:35 -!- oklopol has quit (Read error: 110 (Connection timed out)).
04:38:06 -!- oklopol has joined.
04:41:44 -!- digital_me has quit ("Lost terminal").
05:01:36 <SevenInchBread> ooooh.
05:01:38 <SevenInchBread> this gives me ideas.
05:01:48 * SevenInchBread shhhhhhh
05:06:19 <SevenInchBread> so.
05:06:25 <SevenInchBread> I want to turn this into a programming language.
05:07:29 <SevenInchBread> http://en.wikipedia.org/wiki/I_Ching
05:34:33 -!- oerjan has joined.
05:44:28 <bsmntbombdood> oerjan: StringIO is a file-like object
05:44:58 <oerjan> yeah, i eventually looked it up.
05:45:22 <SevenInchBread> http://www.euph0r1a.net/mesostomatic/
05:45:25 <SevenInchBread> simply grand
05:46:01 <bsmntbombdood> off to bed I go
05:52:44 <oerjan> on second thought I saw a Stream module in Haskell that was quite similar to StringIO.
05:52:58 <voodooattack> damn.. i want one of these http://www.superssd.com/products/tera-ramsan/ :/
05:54:40 <oerjan> i think it used a type class for which strings and file handles were particular instances.
05:56:12 <oerjan> i guess that one wants to be accompanied by Intel's terachip :)
05:56:30 <oerjan> for full tera-coverage
05:57:56 <voodooattack> :p
06:13:02 -!- puzzlet has joined.
06:13:02 -!- puzzlet_ has quit (Read error: 131 (Connection reset by peer)).
06:16:24 -!- goban has quit (Read error: 104 (Connection reset by peer)).
06:16:54 -!- goban has joined.
06:23:16 -!- oklofok has joined.
06:24:45 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
07:32:19 <SevenInchBread> I like TK
07:32:36 <SevenInchBread> nifty GUI thingy.
07:34:47 <GregorR> That's almost /ignore-worthy.
07:39:40 -!- sebbu has joined.
07:44:17 <SevenInchBread> well... more specifically... I like Tkinter.
07:44:38 <SevenInchBread> which is just like... Python stuff that turns around and does Tk/Tcl stuff
07:53:22 -!- ShadowHntr has joined.
07:53:35 <oerjan> Is it impolite to write an implementation of someone's language right after they have presented it?
07:54:09 <SevenInchBread> Not to me...
07:54:11 <GregorR> Heww no.
07:54:22 <SevenInchBread> I'd love it if someone implemented all the languages I came up with it.
07:54:48 <oerjan> because i got this idea for how to implement V and started writing.
07:55:32 * SevenInchBread has a nifty PATH-ish concurent language.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:17:48 -!- sebbu2 has joined.
08:37:01 -!- sebbu has quit (Read error: 110 (Connection timed out)).
09:06:47 -!- ShadowHntr has quit ("End of line.").
09:33:14 -!- oerjan has quit ("leaving").
09:40:34 -!- SevenInchBread_ has joined.
09:42:34 -!- SevenInchBread has quit (Read error: 145 (Connection timed out)).
09:42:46 -!- SevenInchBread_ has changed nick to SevenInchBread.
09:44:49 -!- anonfunc has joined.
09:46:50 -!- nazgjunk has joined.
10:07:46 -!- anonfunc has quit.
10:11:22 -!- pjd has joined.
10:28:48 -!- oklofok has changed nick to oklopol.
11:09:21 -!- oerjan has joined.
11:11:17 -!- nazgjunk has quit ("Bi-la Kaifa").
11:16:14 -!- oerjan has quit ("leaving").
11:18:28 -!- Sgeo has quit (Remote closed the connection).
11:21:47 -!- voodooattack has quit.
13:05:25 -!- sebbu2 has changed nick to sebbu.
14:19:05 -!- sebbu has quit ("reboot").
14:37:06 -!- sebbu has joined.
14:38:47 <nooga> hi
14:38:49 <nooga> sup?
15:33:06 -!- ais523 has joined.
15:41:44 -!- ais523 has quit (Remote closed the connection).
15:42:11 -!- ais523 has joined.
15:44:02 <ais523> !bf http://bf-hacks.org/hacks/underload.b
15:44:06 <EgoBot>
15:44:12 <ais523> !ps
15:44:16 <EgoBot> 1 ais523: ps
15:44:20 <SimonRC> !ps off
15:44:22 <SimonRC> :-
15:44:24 <EgoBot> 1 SimonRC: ps
15:44:24 <SimonRC> :-P
15:44:33 <nooga> ;p
15:44:45 <ais523> I must have got the wrong URL, so it interpreted it as -.
15:44:55 <nooga> what is V?
15:45:10 <ais523> !bf http://www.bf-hacks.org/hacks/uload.b
15:45:29 -!- ais523 has quit (Excess Flood).
15:45:34 -!- ais523 has joined.
15:45:53 <ais523> err... what just happened?
15:46:03 <ais523> !ps
15:46:06 <EgoBot> 1 ais523: bf
15:46:07 <nooga> it killed you
15:46:08 <EgoBot> 2 ais523: ps
15:46:30 <ais523> Maybe I should try a program slightly shorter than a kilobyte
15:46:33 <ais523> or a pastebin
15:47:41 <ais523> !i 1 http://pastebin.ca/raw/367737
15:47:44 <ais523> !eof
15:47:54 <ais523> !ps
15:47:58 <EgoBot> 1 ais523: bf
15:48:00 <EgoBot> 2 ais523: ps
15:48:18 <ais523> I suppose it might take a while to interpet what I've given it
15:48:36 <ais523> !kill 1
15:48:38 <EgoBot> Process 1 killed.
15:49:07 <ais523> or maybe it was in an infinite loop due to trying to interpret the URL as a program
15:50:23 <ais523> !daemon ul bf http://pastebin.ca/raw/365170
15:50:35 <ais523> !ul http://pastebin.ca/raw/367737
15:51:21 <ais523> !ps
15:51:24 <EgoBot> 1 ais523: ps
15:51:32 <ais523> !ps d
15:51:34 <EgoBot> 1 ais523: ps
15:51:52 <ais523> !daemon ul bf http://pastebin.ca/raw/365170
15:51:57 <ais523> !ul (Hello, world!)S
15:52:00 <EgoBot> Hello, world!
15:53:52 <ais523> !daemon ul bf http://pastebin.ca/raw/365170
15:54:03 <ais523> !ul (/me is trying to send a message starting "/me")S
15:54:06 <EgoBot> /me is trying to send a message starting "/me"
15:54:17 <ais523> doesn't work with EgoBot, it seems
15:55:33 <ais523> !daemon ul bf http://pastebin.ca/raw/365170
15:56:16 <ais523> !ul (~exec sys.stdout("!daemon ul bf http://pastebin.ca/raw/365170"))S
15:56:18 <EgoBot> ~exec sys.stdout("!daemon ul bf http://pastebin.ca/raw/365170")
15:56:19 <bsmnt_bot> !daemon ul bf http://pastebin.ca/raw/365170
15:57:04 <SimonRC> !ps
15:57:06 <EgoBot> 2 SimonRC: ps
15:57:11 <ais523> !ps d
15:57:14 <EgoBot> 1 bsmnt_bot: daemon ul bf
15:57:16 <EgoBot> 2 ais523: ps
15:58:08 <SimonRC> I think you need to read about ACTION in the IRC RFC.
15:58:16 <SimonRC> that is how /me wors
15:58:18 <SimonRC> *works
15:59:16 -!- oerjan has joined.
16:00:13 <ais523> !ul (a(:^)*S):^
16:00:16 <EgoBot> (a(:^)*S):^
16:00:25 <oerjan> !ps d
16:00:28 <EgoBot> 1 oerjan: ps
16:00:33 <oerjan> !help
16:00:36 <EgoBot> help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon
16:00:38 <EgoBot> 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl
16:00:47 <oerjan> !ps
16:00:50 <EgoBot> 1 oerjan: ps
16:01:18 <ais523> !daemon ul bf http://pastebin.ca/raw/365170
16:01:28 <ais523> !ul (~exec sys.stdout("!daemon ul bf http://pastebin.ca/raw/365170"))S
16:01:30 <EgoBot> ~exec sys.stdout("!daemon ul bf http://pastebin.ca/raw/365170")
16:01:31 <bsmnt_bot> !daemon ul bf http://pastebin.ca/raw/365170
16:01:32 <oerjan> Still takes just one line before dying?
16:01:38 <ais523> Unfortunately, yes
16:01:49 <ais523> I haven't got to modifying Keymaker's program any further
16:02:18 <ais523> I'd have to run it in a debugger to find out what happens to its memory after an Underload program ends
16:02:29 * ais523 searches for an online Brainfuck debugger
16:02:44 * oerjan has one in his favorites list
16:03:07 <oerjan> http://mozaika.com.au/oleg/bfdebug.html
16:04:59 * ais523 found that one before they saw Oerjan's message
16:05:54 * oerjan almost deduces that ais523 is a woman
16:06:30 * ais523 is just too used to using gender-neutral pronouns online
16:06:41 <ais523> and I also have a gender-neutral name in RL, as it happens
16:07:50 <SimonRC> ais523: you appear to be in birmingham uni
16:09:00 <ais523> yes, I haven't hidden my IP
16:09:24 <SimonRC> I haven't even bothered hiding my name
16:09:34 * SimonRC needs a pseudonym
16:10:20 <SimonRC> /nick Jeremy_Askew
16:10:24 <SimonRC> :-)
16:10:28 <SimonRC> whoever he might be
16:15:06 -!- jix__ has changed nick to jix.
16:19:41 <ais523> !daemon ul bf http://pastebin.ca/raw/367770
16:19:47 <ais523> !ul (Hello, world!)S
16:20:06 <ais523> !ps
16:20:08 <EgoBot> 3 ais523: ps
16:21:09 <ais523> !ps d
16:21:12 <EgoBot> 1 bsmnt_bot: daemon ul bf
16:21:14 <EgoBot> 2 ais523: daemon ul bf
16:21:16 <EgoBot> 3 ais523: ps
16:21:19 <ais523> !kill 1
16:21:21 <ais523> !kill 2
16:21:22 <EgoBot> Process 1 killed.
16:21:24 <EgoBot> Hello, world!
16:21:26 <EgoBot> Process 2 killed.
16:21:27 -!- pjd has quit.
16:21:35 <ais523> !daemon ul bf http://pastebin.ca/raw/367770
16:21:40 <ais523> !ul (Hello, world!)S
16:22:04 <ais523> !kill 1
16:22:06 <EgoBot> Process 1 killed.
16:22:08 <EgoBot> Hello, world!
16:22:18 <ais523> The problem is that there isn't a final newline on the output
16:23:19 <ais523> !daemon ul bf http://pastebin.ca/raw/367774
16:23:24 <ais523> !ul (Hello, world!)S
16:23:26 <EgoBot> Hello, world!
16:23:33 <ais523> !ul (Hello again!)S
16:23:36 -!- goban has quit (Read error: 104 (Connection reset by peer)).
16:23:36 <EgoBot> Hello again!
16:23:52 -!- goban has joined.
16:24:04 <ais523> This ought to work as long as nothing is left on the stack at the end of the program
16:27:42 <ais523> !ul (a("!ul )~*(:^")*a(~exec sys.stdout)~*):^
16:28:00 <ais523> !undaemon ul
16:28:02 <EgoBot> Process 1 killed.
16:28:12 <ais523> !daemon ul bf http://pastebin.ca/raw/367774
16:28:23 <ais523> !ul (a("!ul )~*(:^")*a(~exec sys.stdout)~*S):^
16:28:31 <ais523> !ul (a("!ul )~*(:^")*a(~exec sys.stdout)~*S):^
16:28:34 <EgoBot> ~exec sys.stdout("!ul (a("!ul )~*(:^")*a(~exec sys.stdout)~*S):^")
16:29:08 <ais523> Python seems not to understand nested quotes, so this quine's going to take a bit of work
16:29:29 <ais523> but it's hard to see how any language could understand nested " as quotes
16:29:38 <ais523> that's why I like directed quotes
16:37:11 <tokigun> ais523, how about triple-quoted string? ("""xxx""")
16:37:33 <ais523> the problem is whatever delimiters are used outside the string will end up inside it
16:37:43 <ais523> due to the nature of this sort of quine
16:38:00 <oklopol> ais523 you making your first quine?
16:38:09 <oerjan> directed quotes?
16:38:19 <tokigun> but the delimiter is three characters, so you can divide it and safely print it... maybe?
16:38:35 * ais523 has made quines before
16:38:42 <ais523> And as for directed quotes:
16:39:02 <ais523> !ul (((*)))^^aaS
16:39:04 <EgoBot> ((*))
16:39:17 <ais523> !ul (((*)))^^aaaS
16:39:18 <EgoBot> (((*)))
16:39:25 <oerjan> I.e. another word for parentheses :)
16:39:39 <ais523> Parentheses are used as directed quotes in Underload
16:39:45 <ais523> but Capuirequiem uses []
16:39:58 <ais523> and STATA (a nasty non-esoteric language) uses `" "'
16:40:02 <oerjan> I realized (and I think INTERCAL may use it) that alternating " and ' also allows for arbitrary deep nesting
16:40:22 <ais523> INTERCAL can do it even without alternating in most cases
16:40:32 <ais523> alternating is only necessary in tricky bits of array markup
16:41:05 <ais523> strangely enough, the C-INTERCAL compiler had a bug in this regard through most of its history (it was the main bug I fixed for the most recent version)
16:42:14 <oklopol> ..translates c to intercal?
16:42:21 <ais523> translates INTERCAL to C
16:42:40 <oklopol> okay, i was very close to calling you a lier :)
16:42:42 <ais523> or to be precise, it translates a dialect of INTERCAL commonly also called C-INTERCAL to C
16:44:44 <ais523> http://esolangs.org/wiki/C-INTERCAL
16:45:36 <oerjan> hm... I did not quite remember the weirdness.
16:49:24 -!- goban has quit (Connection timed out).
16:49:38 <ais523> DO .1 <- ,3SUB",2SUB.1".2~.3"".4
16:50:05 <ais523> the entire statement could be parsed a different way up to the third double-quote
16:50:27 <ais523> which is no good for a parser which must decide whether the second ears are closing when it reaches them, not later
16:50:56 <ais523> there's actually a sentence in the manual specifically banning examples like this one, which leads me to believe they must have hit the same problem implementing INTERCAL-72
16:58:28 <ais523> !ul (()(*))()(~:^:S*a~^a~!~*~(/)S):::::*****^!!
16:58:31 <EgoBot> */*/**/***/*****/********/
16:58:56 <ais523> !ul (()(*))()(~:^:S*a~^a~!~*~(/)S)::::::::********^!!
16:58:59 <EgoBot> */*/**/***/*****/********/*************/*********************/**********************************/
16:59:05 <oklopol> !ul (Hello, world!)a
16:59:11 <oklopol> print?
16:59:16 <oklopol> !ul (Hello, world!)A
16:59:19 <oklopol> !ul (Hello, world!)S
16:59:23 <EgoBot> Hello, world!
16:59:26 <oklopol> :DDDDDDDDDDDDDDDDDDDD
16:59:27 <oklopol> yay
16:59:32 <oklopol> !ul (Hello, world!)aaaaaaaaaaaaaaaaS
16:59:35 <EgoBot> ((((((((((((((((Hello, world!))))))))))))))))
16:59:42 <oklopol> whoopes
16:59:55 <oklopol> !ul (a)::S
16:59:57 <EgoBot> a
17:00:00 <oklopol> !ul (a)::SSS
17:00:03 <EgoBot> aaa
17:00:05 <oklopol> !ul (a)::SSSS
17:00:07 <EgoBot> aaa
17:00:21 <oklopol> !ul (a)~S
17:00:26 <ais523> Erm, I have no idea what state the interpret will be in now that you've used up more stack elements than it had
17:00:31 <oklopol> !ul (4)(a)~S
17:00:32 <ais523> !ul (Hello, world!)S
17:00:33 <EgoBot> 4
17:00:35 <EgoBot> Hello, world!
17:01:01 <ais523> * interpreter
17:01:09 <oklopol> oh :P
17:01:12 <ais523> !ul (a)(b)*S
17:01:15 <EgoBot> ab
17:01:21 <ais523> !ul (a)(b)~*S
17:01:25 <EgoBot> ba
17:01:31 <ais523> !ul (a):*S
17:01:32 <oklopol> !ul(a):*S
17:01:33 <EgoBot> aa
17:01:35 <EgoBot> Huh?
17:01:44 <ais523> Snap!
17:01:48 <oklopol> i seem to remember the language pretty well
17:01:49 <oklopol> yay
17:01:55 <ais523> !ul (a)aS
17:01:57 <EgoBot> (a)
17:02:08 <oklopol> !ul (a)a*S
17:02:09 <ais523> !ul (a)(a)^S
17:02:11 <EgoBot> (a)
17:02:13 <EgoBot> (a)
17:02:28 <ais523> !ul (a)(a)a*S
17:02:31 <EgoBot> a(a)
17:02:45 <ais523> !ul (a)(a)(a)^*S
17:02:47 <EgoBot> a(a)
17:03:59 <ais523> !ul ((a)(b))^*S
17:04:03 <EgoBot> ab
17:04:04 <oklopol> !ul (a)a*S <<< shouldn't this output aa or smth?
17:04:07 <EgoBot> (a)
17:04:40 <ais523> Your program: (a)a*S pushes a onto the stack, encloses it in brackets, concatenates it to a nonexistent stack element, and prints it
17:04:54 <ais523> !ul (a)(a)a*S
17:04:57 <EgoBot> a(a)
17:04:58 <oklopol> a == enclose, yeah, i failed
17:05:02 <oklopol> i though double
17:05:04 <oklopol> that's :
17:05:06 <oklopol> indeed
17:05:21 <ais523> : = two dots = double
17:05:34 <oklopol> i figured that's the reason
17:05:38 <oklopol> you are the author?
17:05:52 <ais523> Yes. Underload is a subset of a much larger language that I haven't released yet
17:05:59 <oklopol> !ul 1S
17:06:03 <ais523> because I haven't figured out the details
17:06:06 <oklopol> 1 is comment?
17:06:13 <ais523> '1' doesn't mean anything, so it's an error
17:06:21 <ais523> all strings have to be quoted in brackets
17:06:23 <oklopol> okay, same thing :P
17:06:24 <ais523> !ul (1)S
17:06:27 <EgoBot> 1
17:06:51 <ais523> What's surprising me at the moment is how errorproof the interpreter's being at the moment
17:07:03 <ais523> considering that it's written in Brainfuck and does no error checking
17:07:11 <oklopol> :o
17:07:13 <oklopol> wtf
17:07:25 <ais523> It's Keymaker you'll have to thank for that, not me
17:07:34 <ais523> I just modified it for EgoBot use
17:07:40 -!- helios24 has quit ("Leaving").
17:07:54 <ais523> http://pastebin.ca/raw/367774
17:08:11 <ais523> based on the original http://www.bf-hacks.org/hacks/uload.b
17:08:54 <oklopol> hmm... why haven't i thought of []-comments
17:09:15 <ais523> !ul (This is a comment)!(Hello, world!)S
17:09:19 <EgoBot> Hello, world!
17:09:29 <ais523> You can create a comment by enclosing it in brackets and then throwing it away with !
17:09:45 <ais523> Oh, I see you were referring to BF's [] comments
17:09:48 <oklopol> yeah
17:10:06 * ais523 didn't think of them in an earlier revision, either, and added them for the latest version
17:10:27 <oklopol> i've always stripped my comment off bf commands
17:10:30 <oklopol> *s
17:11:46 <oklopol> pretty omg our programming tasks, today i had to write a method for iteratively calculating list length on the whiteboard
17:11:55 <oklopol> in java
17:13:45 * ais523 is also learning Java
17:13:58 <ais523> I have to write an interactive game of Snakes-and-Ladders over a network
17:14:17 <ais523> which is a bit confusing, as the players have no input into snakes-and-ladders anyway
17:17:02 <oerjan> heh
17:17:36 <oklopol> i'm starting to learn towards functional languages nowadays
17:17:42 * oklopol is becoming lazy
17:18:03 <SimonRC> :-P
17:19:12 <oklopol> two years ago i would've laughed at python for the code being 10 times shorter in most tasks... since it's not REAL PROGRAMMING like c
17:19:46 <ais523> I tend to lean towards pure languages
17:19:47 <oklopol> c/c++ still makes me tick though... java not so much
17:20:06 <ais523> whether it's pure functional like Unlambda or pure procedural like C
17:20:32 <ais523> I also like C and C++
17:20:36 <ais523> Java has a lot of annoying quirks
17:20:39 <oklopol> or purely imperative like brainfuck!
17:20:41 <oerjan> what about pure multiparadigm like Oz? :)
17:20:45 <ais523> such as having to use a file-system for quoting
17:21:06 <oerjan> (not that i really know Oz)
17:21:14 * ais523 was going to use brainfuck as an example, but couldn't think of what paradigm it was a pure representative of
17:21:53 <ais523> By the way, Underload is a pretty pure concatenative language
17:26:51 <EgoBot> ais523 was wondering whether EgoBot responded to private messages
17:26:59 <ais523> apparently it does
17:29:26 <SimonRC> ais523: BF is close to a Turing machine.
17:30:01 <ais523> with lots of states but a limit on which states can go where, and what each state can do
17:30:06 <ais523> and with only a semi-infinite tape
17:30:17 <ais523> and lots of possible symbols for each tape cell
17:30:47 <oklopol> semi-infinite tape?
17:31:11 <ais523> !bf <
17:31:23 <ais523> that's an illegal program in most BF implementations
17:31:34 <ais523> but Turing machine tapes are infinite both ways
17:31:42 <oklopol> that is not semi-infinite.
17:31:42 <oerjan> not always
17:32:18 <oklopol> INF - 0 = INF, INF - (-INF) = 2INF = INF
17:32:24 <oklopol> semi- is wrong
17:32:36 <oklopol> it's just different, not semi-infinite
17:32:50 <ais523> Would you object to the term 'half-line' for a ray in geometry, which is quite common
17:33:06 <ais523> I suppose 'semi-infinite' means 'infinite half of two ways', or one way
17:33:07 <oklopol> half-linishly infinite
17:33:16 <oklopol> well, maybe :D
17:33:22 <oklopol> i hope it's not an official term
17:34:59 * oerjan thinks his data structure for implementing V's sum tree was moderately clever. :)
17:36:12 * ais523 looks up what Oerjan's data structure was
17:37:43 <ais523> You have a structure consisting of a binary tree and a linked list of binary trees?
17:38:51 <oerjan> well, i guess you could call it that. It's just a zipped binary tree.
17:39:16 <oerjan> of infinite height both ways.
17:39:54 <ais523> For Underload's superset language, Overload, I'm using a data structure which is effectively a doubly-linked binary tree
17:40:09 <ais523> analogous to a doubly-linked list
17:40:29 <SimonRC> ITYM "binary tree with upward links".
17:40:50 <ais523> Yes, except that I have to do some compression
17:40:57 <ais523> because the trees are also infinite
17:41:09 <lament> compression usually helps with infinite stuff.
17:41:53 <ais523> It's the only language I've ever come across where I had to optimize 99 bottles of beer
17:41:59 <ais523> to prevent the computer running out of memory
17:42:05 <oerjan> :D
17:43:09 <SimonRC> If one is dealing with substitutions of values for variables, sometimes you get an infinite data structure, which is easily compressed as a function for the general case plus ome counterexamples.
17:43:49 <ais523> All data types were equivalent
17:43:52 <SimonRC> like ([('x', "f(z)"), ('z', "g(x)")], id).
17:44:10 <SimonRC> ais523: corection: all data types of the same cardinality are equivalent.
17:44:13 <ais523> so the character '!' was equivalent to the number 34 (because it used incremented ASCII as a character set)
17:44:31 <SimonRC> and any data type of greater cardinality can emulate any one of lower cardinality.
17:44:34 <oklopol> extended ascii?
17:44:38 <SimonRC> within the HM type system
17:44:42 <ais523> no, incremented
17:44:49 <ais523> newline was 11 and space was 33
17:44:49 <oklopol> okay
17:44:54 <ais523> so that EOF could be 0
17:45:04 <oklopol> yeah, oaky
17:45:04 <SimonRC> ouch
17:45:08 <SimonRC> heheh
17:45:16 <SimonRC> (like an oak?)
17:46:14 <oklopol> oaky could be the name of a tree-based lang
17:46:18 <ais523> It gets worse; the number 4, for instance, was the string :::***, which is the fourth Church numeral if interpreted as an Underload or Overload program:
17:46:19 <SimonRC> heh
17:46:20 <oklopol> hohoo
17:46:24 <oklopol> i have an idea
17:46:38 <ais523> !ul ((*)S):::***^
17:46:41 <EgoBot> ****
17:46:59 <ais523> how does this tree-based language work, then?
17:47:05 <oklopol> it
17:47:09 <oklopol> hmm
17:47:12 <oklopol> actually
17:47:19 <oklopol> i have overlapping ideas
17:47:38 <oklopol> i should really make a lang for every idea i get, since they kinda stack up
17:48:05 <ais523> Overload was invented as a language for writing esolang interpreters in
17:48:19 <ais523> You can compile both Unlambda and Befunge into it, I think
17:48:30 <ais523> and because I haven't finished the specification yet, I can just change it until you can
17:48:44 <oerjan> how convenient :D
17:49:03 <oklopol> ah, a lang with self-modification and support for most esolang features
17:49:22 <oklopol> that's easy
17:49:31 <ais523> The shortest possible quine, apart from the null quine, works by reading the program source and printing it out
17:49:39 <ais523> It's only three characters long
17:49:47 <oklopol> 10 LIST
17:49:54 <oklopol> Q
17:50:07 <oerjan> that's a cheating quine
17:50:11 <oklopol> Q is not
17:50:13 <oklopol> i think
17:50:23 <oklopol> oh it is yeah
17:50:25 <oklopol> indeed
17:50:44 <ais523> Shortest possible in the language
17:50:45 <lament> i thought Q was defined to not cheat :)
17:51:16 <ais523> just like X is defined to make the language Turing-complete
17:51:19 <ais523> without saying how?
17:51:22 <oerjan> that would be rather hard to achieve.
17:51:43 <ais523> It wouldn't be the first time that an esolang was impossible to implement
17:51:45 <lament> heh, who came up with the X
17:51:51 <oklopol> oerjan?
17:52:00 <oerjan> i implemented it at least.
17:52:00 <ais523> IIRC Homespring had a clause to make it uninterpretable
17:52:11 <ais523> " . " was defined to cause a temporal paradox
17:52:23 <nooga> oklopol: sup?
17:52:34 <oklopol> nooga: all ot it
17:52:39 <oklopol> *of
17:52:41 <lament> oerjan: implemented X?
17:52:47 <lament> you have? :)
17:53:02 <ais523> I think his interpreter added a random number to each character of the program
17:53:05 <ais523> and then ran it as Perl
17:53:15 <oklopol> xD
17:53:20 <oerjan> yep that's mine.
17:53:23 <lament> oh wow, somebody wrote a Fugue compiler
17:53:51 <ais523> It seems to run on my Hello, World program, but I can't run the output on the computer I'm on
17:54:08 <ais523> It certainly compiled it into English well enough
17:54:15 <nooga> and i'm trying to design MACRO SADOL and then write a raytracer in it
17:54:18 <ais523> So I suppose it could be a Fugue to IRP compiler if needed
17:54:24 <lament> ais523: you wrote it?
17:54:44 <ais523> I didn't write the compiler, just the only Fugue programs I've ever come across
17:55:21 <lament> oh wow, that's a nice hello world
17:55:28 <ais523> The Fugue compiler writer goes by the username of Mrosenau on the wiki
17:55:41 <lament> does it compile to Prelude?
17:56:22 <ais523> Strangely, no. (That's impossible to do exactly, because Fugue can push numbers greater than 9, but obviously there's a fix around that.)
17:56:32 <lament> oh, true
17:56:58 <ais523> But there isn't a Fugue-to-Prelude compiler in there at all, just to Fugue-to-COFF and Fugue-to-pseudo-English
17:57:16 <lament> heh
17:57:52 <lament> strange, i remember putting example Prelude programs somewhere and now can't find them
17:58:24 <nooga> g
17:58:26 <nooga> eh
17:59:16 <ais523> I wrote a BF-to-Prelude compiler: http://esolangs.org/files/prelude/util/bf2pre.c
17:59:29 <ais523> It was the first step in creating the Hello, World! program
18:01:15 <lament> i remember there was a fairly pretty fibonacci Prelude program using three voices...
18:02:26 <nooga> i wonder how it sounds
18:02:57 <lament> cause two voices is borign :)
18:03:41 <oklopol> what's the term for haskell 'f . g' or 'o' in math
18:03:41 <oklopol> ?
18:03:51 <lament> composition
18:03:57 <oklopol> thanks
18:04:20 <oklopol> is there a name for the actual sign? (composition fits though)
18:04:31 <oklopol> or is it the composition sign or smth
18:04:46 <oklopol> it's 'ball' in finnish :PP
18:04:53 <lament> http://en.wikipedia.org/wiki/Function_composition
18:04:56 <lament> says it's "circle"
18:05:07 <oklopol> oki
18:05:13 <lament> http://en.wikipedia.org/wiki/Composition_operator
18:05:33 <lament> 'operator "o"'
18:05:39 <lament> what a great name
18:06:09 <ais523> It's * in Underload
18:06:29 <ais523> because composing functions is the same as multiplying numbers:
18:06:53 <ais523> !ul (::**)(::**)*((+)S)~*^
18:06:55 <EgoBot> +
18:07:04 <lament> Fugue needs a composition operator :)
18:07:07 <ais523> um...
18:07:27 <lament> it would...compose
18:07:28 <ais523> !ul (::**)(::**)*((+)S)~^^
18:07:32 <EgoBot> +++++++++
18:08:26 <ais523> ::** is 3, so multiplying two of them gives 9 +'s
18:09:26 <ais523> Composition in Fugue would be like the CREATE operator in CLC-INTERCAL, though
18:09:49 <ais523> it would generate new syntax, but the syntax for using it itself would therefore have to be too complicated to be useful
18:11:20 <ais523> By the way, the burning questions in Prelude design must be answered: exactly which way does - subtract?
18:11:41 -!- nazgjunk has joined.
18:12:13 <ais523> (So far it's mostly been assumed, at least by me and the defaults in the compiler, that it subtracts the top element from the second.)
18:13:13 <lament> eh, whatever the interpreter does
18:13:26 <lament> probably the top from the second since that would make sense
18:14:06 <nooga> U
18:15:49 <lament> elif i == '-':
18:15:49 <lament>
18:15:49 <lament> b = stacks[voice].pop()
18:15:49 <lament> a = stacks[voice].pop()
18:15:50 <lament> stacks[voice].push(a-b)
18:16:51 <SimonRC> nooga: a predecessor to V?
18:17:12 <lament> okay, i will update the specification and the wiki article
18:17:19 <SimonRC> :-P
18:17:24 <nooga> wtf is V?
18:17:38 <ais523> http://esolangs.org/wiki/V
18:17:47 <oerjan> lament: Was that you redirecting your name to your user page on the wiki?
18:18:17 <lament> yes
18:18:36 <lament> having two pages is bizarre
18:21:25 -!- crathman has joined.
18:24:00 <oerjan> well, redirecting to user pages is against policy, graue is pretty strongly against it.
18:24:29 <oerjan> See Esolang_talk:Authors
18:24:29 <lament> oh, jeez
18:26:04 <lament> http://esoteric.voxelperfect.net/wiki/Nikita_Ayzikovsky
18:26:44 <ais523> What do you think of the way I've fixed it?
18:27:20 <lament> i think graue's on crack
18:27:29 <ais523> A small amount of information on the wiki page, and a link to the userpage
18:27:35 <lament> and i think having _two_ pages about me is a little extreme
18:27:39 <ais523> Compare http://esolangs.org/wiki/Catatonic_Porpoise
18:27:46 <ais523> and http://esolangs.org/wiki/User:Graue
18:27:59 <lament> yes
18:28:07 <lament> two pages, containing the same information
18:28:20 <ais523> but probably written by different people
18:28:34 <lament> okay, i'll redirect User:Lament TO nikita aizikovsky then :)
18:28:58 <ais523> I think the point is that we can have a page http://esolangs.org/wiki/Donald_R._Woods
18:29:04 <ais523> even though he doesn't contribute
18:29:30 <lament> eh
18:30:02 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
18:30:03 <lament> we still can do that regardless of the policy on userpages
18:30:03 <ais523> http://esolangs/org/wiki/Esolang:Authors explains what some people believe the current policy to be
18:30:34 -!- oklopol has joined.
18:30:45 <ais523> (I think I agree with lament on this one, but I'm not able to decide Esolang policy by myself)
18:31:55 * lament tries to think of a nice way out of this
18:33:21 <ais523> I suppose the major difference is that user pages are treated as personal
18:33:36 <ais523> whereas pages in the article namespace are treated to the rigors of the wiki process
18:34:08 <ais523> which is why Graue doesn't want people linking to user pages in an unmarked manner and coming across a non-Neutral Point Of View page
18:34:10 <lament> i understand the reasoning
18:34:24 <lament> it works for wikipedia
18:34:50 <lament> in practice, you end up with two almost identical pages
18:35:22 <ais523> It could end up with different pages in theory, but what esolang enthusiasts are most likely to put on Esolang is a list of languages they've created
18:35:47 <ais523> and what people are most likely to write about for a person is a list of languages they've created
18:35:48 <lament> i guess somebody like Pressey has enough info about them that it makes sense to actually have a page
18:36:01 <lament> but somebody like me dosen't
18:36:32 -!- UpTheDownstair has joined.
18:36:48 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
18:37:16 <oerjan> We could always make up some lies about you being a convicted serial killer :)
18:38:07 <ais523> but we don't have a {{citation needed}} tag to put on them, so they'd have to be deleted
18:40:46 <lament> oerjan: what do you mean lies
18:41:07 <lament> heh @ http://www.esolangs.org/wiki/Category:Unusable_for_programming
18:41:10 <ais523> "Nikita Ayzikovsky": 71 google results, so it might be a bit hard to write an article
18:41:30 <ais523> "ais523": 10100 google results, mostly sites pretending to be Wikipedia or Google Groups
18:41:50 <ais523> (Strangely, Esolang is second nowadays, behind my Wikipedia user page; it never used to be like that!)
18:42:09 <ais523> "lament": about 10300000 google results
18:42:13 <ais523> mostly irrelevant, of course
18:42:16 <lament> all about me
18:43:37 <lament> wow, these google results leave a horrible impression :)
18:43:40 * SimonRC goes to dinner
18:44:42 <ais523> Some more statistics: Did you know that http://esolangs.org is the 1684148th most viewed website on the Internet
18:44:53 <lament> impressive
18:45:06 <ais523> and it's visited by 0.000025% of Internet users?
18:46:21 <lament> sounds about right
18:46:52 <ais523> http://alexa.com/data/details/traffic_details?url=esolangs.org
18:50:24 <ais523> void ab() {char c; putchar('a'); c=getchar(); if(c=='y') ab(); putchar('b');}
18:50:45 <ais523> It's a program designed to be easy to implement in most languages, but very difficult to express in UML
18:51:07 <lament> how do you express programs in UML?
18:51:19 <ais523> sorrt, I meant void ab() {char c; putchar('a'); c=getchar(); if(c=='y') ab(); putchar('b'); c=getchar(); if(c=='y') ab();}
18:51:21 <lament> i thought uml was for object relationships
18:51:34 <ais523> It is, but you're meant to use it to model the entire system
18:51:52 <lament> i've never seen UML used to model program flow
18:52:16 <ais523> It has diagrams that model the flow of a program, known as sequence diagranms, that look like they're strictly ordered but in fact only place an incomplete ordering on the program
18:52:38 <ais523> and people keep trying to change the notation for loops because they don't like the official one
18:52:43 <lament> heh
18:53:09 <ais523> They are written in terms of passing messages around, but you can't send a message to the user
18:53:32 <ais523> You have to communicate to the user by returning from the message and then waiting for the user to send you another one
18:53:41 <lament> oh
18:53:49 -!- SevenInchBread has quit ("haaaaaaaaaa").
18:53:53 <ais523> so you'd effectively need to write an interpreter rather than a program to do what I've written above
18:53:58 <lament> so add a dummy user object
18:54:21 <ais523> That doesn't help, because it can't communicate with the user either except by having a message sent to it
18:54:55 <ais523> and sending messages while there's still methods running is impossible to draw, as far as I know
18:55:04 <lament> doesn't that approach fail just as badly with real-world programs as with your example?
18:55:23 <ais523> As far as I can tell, yes, but there are normally ways to work around it
18:55:53 <ais523> If you think in terms of a Microsoft-like GUI, where the user tells the system to do something, it does it, and then gives feedback, it actually makes some sort of sense
18:56:28 <ais523> But it's very easy to get confused and draw an impossibilty with the diagram still seeming to make perfect sense
18:56:59 <lament> but even microsoft-like GUIs have state
18:57:26 <ais523> You're allowed to store state in the objects (in fact, you have to), you just can't communicate with the user while there's anything on the call stack
18:57:48 <ais523> So a hideously recursive function like mine where the stack is the most sensible place to store data is pretty much worst-case
18:58:24 <lament> but isn't "waiting for user input" an extremely common hting to do?
18:59:00 <lament> even in a GUI, it happens
18:59:09 <lament> sometimes
19:00:02 <oerjan> can you do continuation passing style?
19:00:23 <lament> can you model a GOTO? :)
19:00:24 <ais523> lament: More often than it should, in my experience
19:00:44 <ais523> oerjan: probably, but it would clutter the diagram awfully
19:01:17 <ais523> lament: No, you can't. It's kind of tricky to even model an IF in a complicated diagram.
19:02:10 -!- ais523 has quit ("#esoteric made me miss my bus yesterday. It was worth it, though.").
19:02:18 <lament> o_O
19:02:44 <lament> #esoteric made me kill and eat my little brohter. It was worth it, though!
19:03:12 <GregorR> Yum
19:03:49 <oerjan> of course it was worth it, but what has #esoteric to do with it?
19:05:20 <lament> the subliminal messages you keep sending me
19:05:44 <oerjan> (Disclaimer: I have no little brothers.)
19:05:57 <lament> that brainwash me into becoming a cruel maniac fratricidal antropophage
19:05:57 <oerjan> Oh those
19:06:30 <lament> i have no little brothers, either!
19:06:39 <lament> none no more!
19:08:40 <oerjan> There is no such thing as a subliminal message.
19:08:53 <oerjan> The gnomes have made that abundantly clear to me.
19:12:26 <oerjan> And now we return to our regularly scheduled programming.
19:14:26 <lament> NOOOO!!! NOT THE REGULARLY SCHEDULED PROGRAMMING!! AAARGH
19:16:15 <oerjan> If you stop whining and behave properly you _may_ be allowed to choose your language. Otherwise, we will be winding up the C***L compiler shortly.
19:18:57 -!- goban has joined.
19:19:12 <oklopol> with a random number that is not turing complete
19:19:20 <oklopol> i mean the X thing
19:19:24 <oklopol> oerjan
19:20:21 <oklopol> you will have to make all the 256 programs at once and i'm sure perl isn't flexible enough to allow any of the 256 chars
19:20:35 <oerjan> did you read my wiki post a moment ago?
19:20:42 <oklopol> errrr no :P
19:39:16 -!- UpTheDownstair has changed nick to nazgjunk.
19:45:22 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
19:45:26 -!- oerjan has quit ("Good night").
20:09:53 -!- pgimeno has quit (zelazny.freenode.net irc.freenode.net).
20:09:54 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net).
20:09:54 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
20:09:54 -!- EgoBot has quit (zelazny.freenode.net irc.freenode.net).
20:15:37 -!- pgimeno has joined.
20:15:37 -!- Sukoshi has joined.
20:15:37 -!- GregorR has joined.
20:15:37 -!- EgoBot has joined.
21:37:15 -!- Sgeo has joined.
21:41:45 -!- meatmanek has quit (Read error: 54 (Connection reset by peer)).
21:43:24 -!- meatmanek has joined.
21:47:55 -!- ShadowHntr has joined.
22:06:41 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:31:24 -!- sebbu2 has joined.
22:33:04 <bsmntbombdood> foo
22:50:41 -!- sebbu has quit (Connection timed out).
23:10:17 -!- digital_me has joined.
23:13:21 -!- sebbu2 has quit (Client Quit).
23:14:17 -!- digital_me has quit (Client Quit).
23:14:37 -!- digital_me has joined.
23:51:22 -!- ShadowHntr has quit ("End of line.").
2007-02-23
00:05:32 -!- SevenInchBread has joined.
00:06:33 -!- nazgjunk has quit ("Bi-la Kaifa").
00:13:36 -!- nazgjunk has joined.
00:24:37 -!- digital_me has quit ("Lost terminal").
00:25:09 <bsmntbombdood> ``smart quotes''
00:26:50 -!- digital_me has joined.
00:32:42 -!- digital_me has quit ("Lost terminal").
00:34:27 -!- goban has quit (Read error: 104 (Connection reset by peer)).
00:34:49 -!- goban has joined.
00:41:24 -!- digital_me has joined.
00:41:53 -!- digital_me has quit (Client Quit).
01:00:29 -!- Shaunaf has joined.
01:19:13 -!- nazgjunk has quit ("Bi-la Kaifa").
01:21:58 <SimonRC> bsmntbombdood: ITYM "dumb quotes"
01:22:10 <SimonRC> They fuck up everything non-microsoft
01:22:25 <bsmntbombdood> I know
01:22:27 <bsmntbombdood> they suck
01:23:09 <bsmntbombdood> In LaTeX/TeX, that syntax makes them look good
01:24:19 <SimonRC> Argh!
01:24:29 * SimonRC curses time-decay.
01:25:04 <bsmntbombdood> wazzat?
01:25:06 <SimonRC> It was not until modern times that time-decay has become detectable, but it is really irritating when you encounter it.
01:25:28 <SimonRC> It is the way that time starts to slightly decay as it gets futher into the pase.
01:25:31 <SimonRC> *past
01:25:37 <bsmntbombdood> huh?
01:25:49 <SimonRC> It was not noticeable until electronic media came around.
01:26:24 <SimonRC> I am reading posts from the early days of a certain newsgroup (around 1994) and I keep seeing replies written few hours before the things they reply to.
01:27:08 <bsmntbombdood> !?
01:27:11 <EgoBot> Huh?
01:28:40 <SimonRC> Hint: What is the real cause of the noted Usenet phenomenon?
01:35:37 <Shaunaf> badly set clocks?
01:37:02 <SimonRC> no.
01:37:40 <SimonRC> Google's older archives come from disparate sources. And these would have received the original messages in a different order to one another.
01:40:01 <SimonRC> I was joking about the time decay
01:42:00 <bsmntbombdood> i was gonna say...
01:42:18 <bsmntbombdood> I googled time decay and I got a bunch of stuff about stocks
01:42:18 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
01:44:56 <SimonRC> bsmntbombdood: I nicked the ide but not the name from The Brightonimicon.
01:45:40 -!- oklopol has joined.
03:23:46 <bsmntbombdood> fun, there's a band called "Esoteric"
03:24:28 -!- ShadowHntr has joined.
04:12:38 <SimonRC> zzzz
04:18:55 -!- Sukoshi has quit (Remote closed the connection).
05:41:06 -!- Sukoshi has joined.
06:36:42 -!- helios24 has joined.
06:57:55 -!- ShadowHntr has quit (Client Quit).
07:09:35 -!- pjd has joined.
07:29:42 <nooga> YEAH!!!
07:30:28 <nooga> my noname-lame-language to SADOL2 compiler works !!1
07:32:56 <nooga> kix ass
07:37:30 <nooga> http://pastebin.ca/368682
07:37:34 <nooga> LOOK
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:06:34 <Sukoshi> No.
08:29:34 <SevenInchBread> nooga, what is that?
08:58:42 -!- SevenInchBread has quit ("haaaaaaaaaa").
09:02:42 -!- Sgeo has quit ("Leaving").
09:20:35 <Sukoshi> ?taht si tahw ,agoon
09:45:05 <oklopol> "[21:16:24] <oerjan> did you read my wiki post a moment ago?" <<< where can this be read, i don't know how the page works :D
10:07:02 -!- helios24 has quit ("Leaving").
10:32:03 -!- oerjan has joined.
10:37:05 <oerjan> oklopol: http://esoteric.voxelperfect.net/wiki/Talk:CHIQRSX9_Plus
10:37:29 <oerjan> and in general, http://esoteric.voxelperfect.net/wiki/Special:Recentchanges
10:40:36 <oerjan> substitute esolangs.org for the host name if that is what you are reading it as, reading it through two different hostnames leads to a strange reading experience.
10:41:52 <oerjan> i mean, try to pick one of the otherwise equivalent hostnames.
10:43:04 <nooga> heii
10:43:07 * oerjan has come down with something infectious, so he may not think especially clearly today.
10:43:12 <oerjan> hei nooga
10:44:14 <nooga> i've got my lame-noname-language to SADOL2 compiler
10:44:20 <nooga> working
10:44:43 <oerjan> i saw that
10:45:26 <oklopol> i used 3 hours yesterday to get vc++6 to open a file
10:45:32 <oklopol> some day i'll find a better compiler
10:45:39 <nooga> ;p
10:46:16 <oklopol> fstream rec=fstream("D:\\smth.rec");
10:46:17 <nooga> g++
10:46:45 <oklopol> it's just i need to be able to draw pixels on the screen, i only know one way to do that and it's sdl
10:46:50 <oklopol> and i can
10:46:53 <oklopol> ...
10:46:59 <oerjan> is that supposed to be a recursive definition somehow?
10:47:01 <oklopol> and i can't set up librarys, too hard
10:47:10 <oklopol> oerjan it's a constructor :P
10:47:19 <nooga> oklopol lol
10:47:22 <oklopol> fstream(...) creates an fstream object
10:47:35 <nooga> use g++
10:47:51 <oerjan> yes it was the rec i was wondering about
10:48:32 <oklopol> it's a var name
10:48:57 <oklopol> fstream var creates an fstream object, if you assign the constructor to it, it'll become it
10:49:07 <oklopol> and i'm explaining very well again...
10:49:19 <oklopol> maybe it'd be clearer in java
10:49:25 <oerjan> impossible
10:49:31 <oklopol> Fstream rec = new Fstream("D:\\smth.rec");
10:49:37 <fizzie> Isn't that usually "fstream rec("d:\\smth.rec")" to avoid creating a silly temporary?
10:49:52 <oklopol> fizzie yeah
10:50:04 <oklopol> hmm, actually, you're right :D
10:50:08 <oklopol> you can't assign stream
10:50:09 <oklopol> *s
10:50:10 <nooga> eh
10:50:20 <oklopol> okay, might actually be my mistake then
10:50:21 <nooga> throw away 'new'
10:50:23 <nooga> use malloc
10:50:29 <oklopol> nooga that was java
10:50:36 <nooga> no matter
10:50:38 <nooga> kill java
10:50:39 <oklopol> :D
10:50:39 <nooga> use C
10:50:53 * nooga is just bored
10:50:53 <oklopol> gotta go! --------->
10:51:06 <oerjan> no, use raw casts to (void*) from integer constants.
10:51:19 <nooga> c u
10:51:47 <oerjan> bye
10:51:53 <nooga> waaa 113 shift-reduce conflicts ;/
10:53:18 <oerjan> what language are you parsing?
10:53:28 <nooga> lame-noname
10:54:00 <oerjan> can i see the grammar?
10:54:12 <nooga> no, i'm in school ;|
10:54:32 <oerjan> oh
10:54:43 <nooga> i have it in home
10:54:57 <oerjan> well are you having many binary operators? then you need to assign precedences.
10:55:59 <nooga> i have precedences ;p
10:56:12 <oerjan> then that's probably bad.
10:56:17 <nooga> yeah
10:56:54 <nooga> everything is in exp rule
10:57:31 <nooga> and there are things like exp '[' exp ']'
10:59:04 <oerjan> i guess then both '[' and the rule itself (or ']') needs a precedence
11:00:22 <oerjan> hm, or not.
11:00:40 <nooga> i'll fix that later
11:01:12 <nooga> basically only user is me
11:01:32 <nooga> so there's even no error reporting ;>
11:01:50 <oerjan> basically that's usually the case.
11:02:58 <nooga> heh
11:03:07 <nooga> g2g
11:03:09 <nooga> bbl
11:03:12 <oerjan> bye
11:08:10 -!- nazgjunk has joined.
11:19:16 -!- pjd has left (?).
11:25:22 -!- Sgeo has joined.
11:30:27 -!- goban has quit (Read error: 101 (Network is unreachable)).
11:55:25 -!- goban has joined.
12:16:26 -!- helios24 has joined.
12:19:50 -!- oerjan has quit ("Ayee! The pain!").
12:23:06 -!- nooga has quit (Read error: 110 (Connection timed out)).
12:54:06 -!- Shaunaf has quit (Read error: 60 (Operation timed out)).
12:58:09 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
12:58:49 -!- nazgjunk has joined.
13:18:46 -!- helios24 has quit ("Leaving").
13:56:00 -!- Shaunaf has joined.
14:21:52 -!- nooga has joined.
14:21:56 <nooga> back
14:31:10 <nooga> eh
14:53:23 -!- oerjan has joined.
14:54:26 <nooga> http://pastebin.ca/369022 xD
14:56:01 <oerjan> is that <...> some kind of inline SADOL assembler?
14:56:25 <nooga> <% xxx %> outputs xxx literally
14:56:36 <oerjan> so yes
14:56:40 <nooga> mhm
14:57:41 <nooga> i plan to write a raytracer in this shit
14:59:31 <oerjan> are you still getting shift/reduce errors?
15:00:17 <oerjan> it looks to me a bit like a cross between perl and python
15:00:46 <oerjan> mostly python i guess
15:02:09 <oerjan> well i don't see anything in that syntax that should mean it is hard to parse.
15:02:43 <nooga> well
15:02:46 <nooga> w8
15:03:58 <nooga> http://pastebin.ca/369031 it's really lame
15:04:10 <nooga> i did it last night when my mind was gone ;p
15:06:57 <nooga> ;p
15:09:51 <oerjan> is '^' exponentiation? then it may be better to have it right associate
15:10:45 -!- UpTheDownstair has joined.
15:11:31 <oerjan> ah, your if is dangling :)
15:11:32 <nooga> nevermind
15:11:45 <oerjan> or else
15:11:48 <nooga> it works ;d
15:12:02 <oerjan> well it would shift by default
15:12:18 <oerjan> which is often the right thing.
15:12:34 <nooga> hm
15:12:42 <oerjan> greedy parsing :)
15:13:53 <nooga> so what :D
15:14:17 <nooga> it works somehow, so nevermind
15:16:49 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
15:19:30 <nooga> i don't know why e/e does not work
15:21:26 <oerjan> since i minded anyhow: i don't see any rule where the default precedence would be grossly unintuitive.
15:21:54 <oerjan> maybe there is a SADOL error?
15:21:58 <nooga> nah
15:23:18 <nooga> http://pastebin.ca/369057
15:23:56 <nooga> it's a strange error
15:24:22 <oerjan> oh. so it's the parser.
15:24:31 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)).
15:25:17 <nooga> hm
15:25:25 <nooga> compiled again and it suddenly works ;>
15:25:33 <oerjan> bah :)
15:25:58 <oerjan> mismatched file versions, perhaps.
15:26:24 <oerjan> if you are not using make.
15:27:23 <nooga> yea, it could be the reason
15:27:30 <nooga> i've got quite a mess
15:29:55 <nooga> now i can write a raytracer
15:30:50 <nooga> hm, i think it would be useful to indent generated code instead of printing it as one big line
15:34:19 <oerjan> I am cleaning up the SADOL web page a little. What is your answer to:
15:34:29 <oerjan> * ''Code'' is a list of ''function calls''. <!-- How are these separated? -->
15:35:19 <nooga> hmm
15:35:30 <oerjan> is it like i suspect that they aren't? :)
15:35:36 <nooga> they aren't
15:36:00 <nooga> because we know that all identifiers are 1 char long
15:36:24 <nooga> and we now how many arguments to pass every time we call a func
15:37:06 <oerjan> right. the latter is the same as with my Reaper (and the non-esoteric Logo, I think)
15:38:13 <nooga> a45b67c3123 {a(4,5); b(6,7); c<3>(1,2,3) c<3> means that c will take 3 args }
15:40:07 <oerjan> oh, not quite the same then.
15:41:03 <oerjan> why don't a and b need an <n>? Is it used only for currying?
15:42:10 <nooga> well a sort of
15:42:38 <nooga> arities of a and b are known to be 2
15:43:20 <nooga> bcs a and b were defined to take 2 args
15:43:30 <oerjan> right.
15:43:59 <nooga> and c was definefined to take unknown count of arguments, and that count must be specified when calling c
15:44:10 <oerjan> ok
15:44:29 <oerjan> so not currying.
15:45:07 <nooga> SADOL is not functional in a traditional way
15:45:34 <nooga> or maybe it's not functional at all
15:46:01 <nooga> I like to call it 'expression oriented'
15:47:13 <oerjan> can you pass functions as arguments or return them as results?
15:48:05 <oerjan> If it cannot do those, I wouldn't call it functional.
15:48:18 <nooga> it was included in my spec
15:48:29 <nooga> but implementation does not cover it
15:48:40 <oerjan> ok
15:48:46 <nooga> so it's rather imperative but functional wannabe ;p
15:50:51 <nooga> hehe
15:51:14 <nooga> suprisingly it's quite nice to code in it
15:53:05 <oerjan> It's sort of like compressed Logo.
15:53:28 <nooga> well
15:53:32 <nooga> i hate logo :D
15:54:30 <nooga> and u can't do such things in logo -> (7:C",228!R!C!"7822,"R:!R!"9822,"C:7(:R",228(7:C",2289"!R!:R",2287"!C!RR!C!"7822,"R:!R!"9822,"C:7(
15:54:49 <oerjan> eh, i guess not.
15:55:09 <oerjan> although i wouldn't know if that extends to more than the syntax.
15:56:21 <oerjan> number -> string conversion, is that like the usual decimal format?
15:56:47 <nooga> yup
15:57:12 <nooga> what do u mean more than the syntax?
15:58:44 <oerjan> i mean i cannot read it and so i don't know whether it could be translated easily to Logo or not.
15:59:03 <nooga> it's a reversed quine
15:59:13 <oerjan> aha
15:59:29 <nooga> a program that writes out itself but from the end to the begining
15:59:31 <oerjan> i guess that could be difficult in Logo.
16:00:27 <oerjan> it looks almost like a palindrome
16:00:43 <oerjan> but not quite
16:00:52 <oerjan> can the reversed program be run?
16:01:25 <nooga> never checked :D
16:01:41 <oerjan> what would be cool is if that produced the original program.
16:02:15 <nooga> i think it could not be run
16:03:03 <nooga> the end: 9822,"C:7( will be printed as: (7:C",2298
16:03:30 <nooga> ,2 indicates that there will be 2 args, and these are 2 and 9
16:03:39 <nooga> 8 is not parsed
16:27:51 <nooga> g2g
16:27:51 <nooga> bye
16:28:11 <oerjan> bye
16:47:04 -!- oerjan has quit ("Indeed").
16:53:24 -!- nooga has quit (Read error: 110 (Connection timed out)).
17:12:00 -!- Arrogant has joined.
17:23:18 -!- goban has quit (Read error: 104 (Connection reset by peer)).
17:23:26 -!- goban has joined.
17:41:40 -!- sebbu has joined.
18:33:54 <SimonRC> Newsquiz FTW!
18:35:17 <oklopol> rarar
18:35:26 <GregorR> zipip
18:44:15 <SimonRC> Nonono, _The Newsquiz_ is great comedy from Radio 4.
18:44:24 <SimonRC> And it's on now.
18:55:45 <oklopol> i don't think either of us actually meant anything, so "nonono" isn't really accurate :P
19:28:55 -!- goban has quit (Read error: 104 (Connection reset by peer)).
19:29:08 -!- goban has joined.
19:45:02 -!- SevenInchBread has joined.
20:00:52 * SimonRC has the musical of the Very Hungry Catterpillar stuck in his head.
20:02:47 <oklopol> SDL crashes if the exe is given arguments :)
20:02:52 <oklopol> in my compilations that is
20:09:02 -!- sp3tt has quit (Remote closed the connection).
20:09:22 -!- sebbu2 has joined.
20:14:35 -!- sp3tt has joined.
20:17:44 <SimonRC> bye
20:18:09 <oklopol> bye
20:28:21 -!- sebbu has quit (Read error: 110 (Connection timed out)).
20:28:21 -!- sebbu2 has changed nick to sebbu.
21:29:10 -!- nazgjunk has joined.
21:29:23 <SevenInchBread> hmmm...
21:29:34 <SevenInchBread> I think I'll use Ogham runes as the preprocessor directives.
21:29:57 <SevenInchBread> and the entire unihan plane will be subroutine names.
21:38:31 <SimonRC> Que'?
21:40:34 <nazgjunk> SevenInchBread, yeah!
21:40:36 <nazgjunk> ogham is fun.
21:40:43 <nazgjunk> i only write futhark though.
21:41:07 <SimonRC> fiuthark to you too
21:42:57 <SevenInchBread> hmm...
21:43:16 <SevenInchBread> I need one really special character for something...
21:45:20 <SevenInchBread> ah.
21:45:26 <SevenInchBread> U+16E5
21:45:34 <SevenInchBread> ᛥ <--stan
21:46:26 <SevenInchBread> stan shall represent the coroutines main IO stream. :)
21:47:42 <SimonRC> Alas I do not seem to have a font with U+16E5 in it.
21:47:59 <SevenInchBread> It
21:48:00 -!- goban has quit (Read error: 104 (Connection reset by peer)).
21:48:02 <SevenInchBread> 's some room
21:48:05 <SevenInchBread> er... rune
21:48:17 -!- goban has joined.
21:48:17 <SevenInchBread> It kinda looks like a block... with a hole in it.
21:48:25 -!- UpTheDownstair has joined.
21:48:43 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
21:49:24 <UpTheDownstair>
21:49:28 <UpTheDownstair> woo.
21:49:32 -!- UpTheDownstair has changed nick to nazgjunk.
21:53:04 * SevenInchBread does not actually know how to produce that character... other than by copying and pasting it.
22:00:01 <oklopol> lol
22:00:35 <oklopol> don't you have a hex mode in your client?
22:01:33 <nazgjunk> i can do it by holding shift+ctrl and type u16E5
22:01:37 <nazgjunk> *typing
22:06:25 -!- SimonRC_ has joined.
22:06:44 <SimonRC_> hmm
22:06:49 <SimonRC_> éfi
22:06:54 <SimonRC_> well that works fine
22:06:59 <SimonRC> éfi
22:07:09 <SimonRC> but this looks wrong
22:07:18 <SimonRC> it seems something about irssi is not quite right
22:07:28 <SimonRC> they both look the same in each window
22:07:44 <SimonRC> this one shows individual characters, but
22:07:59 <SimonRC_> this one shows the proper appearance
22:08:24 <SimonRC_> hm
22:09:00 <SevenInchBread> I'd rather just have some kind of syntax for typing them in directly.
22:09:05 <SimonRC> hmm
22:09:13 <SevenInchBread> like <U+16E5>
22:10:24 <SevenInchBread> alright... I've got malaysian characters for process streams... stan for the current processes main IO... malaysian for file/url streams... now what about stream sockets?
22:10:44 <SevenInchBread> datagram sockets can be like... dingbats or something.
22:10:52 -!- goban has quit (Read error: 104 (Connection reset by peer)).
22:11:03 -!- goban has joined.
22:11:31 -!- SimonRC_ has left (?).
22:11:39 <SimonRC> :-S
22:12:53 <nazgjunk> "stan"
22:12:54 <nazgjunk> lovely.
22:13:43 <SevenInchBread> yeah... this is a concurrent fungeoid with a bunch of streams and processes.
22:15:12 <SevenInchBread> you define "counters" (big or little), that move across paths... when a counter hits an intersection it splits off into multiple counters with the contained values copied from the original.
22:15:29 <SevenInchBread> collisions between countrs are operations.
22:16:48 <nazgjunk> wow creepy.
22:17:27 <nazgjunk> that sounds a small bit like a Piet-variant i discussed with... you? few weeks ago, anyway.
22:17:51 <SevenInchBread> well.. not counters... that's a lame name.
22:17:54 <SevenInchBread> we'll call them bugs.
22:18:12 <SevenInchBread> big bugs and little bugs.. crawling through tunnels... and... asexually reproducing?
22:18:14 <SevenInchBread> I dunno.
22:18:20 <SevenInchBread> terminology is for wimps.
22:18:46 <nazgjunk> haha
22:19:22 <nazgjunk> you'd have to think out a new universe, and use metaphors from there in the terminology
22:19:33 <SevenInchBread> The bugs are indecisive when they reach an intersection in the tunnels... so instead of choosing one, they just clone themselves and go down all the paths.
22:20:59 <SevenInchBread> hmmm... there should be a file format for images that uses the full x-million-something character ordinals of unicode to map pixel info.
22:21:29 <nazgjunk> hah
22:23:30 <SevenInchBread> hmm... the interpreters debugger should be a GUI that draws the little bugs going down paths... would be fun to watch.
22:26:35 -!- alex-4 has quit ("leaving").
22:31:10 <SimonRC> :-S
22:31:55 <bsmntbombdood> 1+2+3.1
22:32:08 <SimonRC> 6.099999999999999998
22:32:26 <bsmntbombdood> 6.0999999999999996
22:32:45 <SimonRC> your rounding errors are worse than mine, it seems
22:33:13 <bsmntbombdood> 6.344444444444444444444
22:33:16 <bsmntbombdood> wow, way off
22:33:17 <bsmntbombdood> :P
22:35:03 <fizzie> (number? +nan.0) => #t annoys me every time I think of it. It's Not A Number, yet it is a number. Arrr, the humanity.
22:35:11 <bsmntbombdood> heh
22:35:40 <SevenInchBread> True in languages is in fact an illusion.
22:35:45 <SevenInchBread> there is no truth... merely untruth.
22:35:54 <SevenInchBread> there is no false, merely unfalse
22:36:21 <SevenInchBread> There is no nil, merely unanything
22:37:32 <oklopol> is that so?
22:38:59 <SimonRC> unfalse
22:40:16 -!- tgwizard has joined.
22:47:00 -!- crathman has joined.
22:57:01 <SevenInchBread> tiz
22:57:07 <bsmntbombdood> naz
22:57:19 <nazgjunk> guh.
22:57:22 <nazgjunk> ?
22:57:30 <bsmntbombdood> naz gunk
23:04:19 <SevenInchBread> I think
23:04:29 <SevenInchBread> I shall use only datagram sockets.
23:04:39 <SevenInchBread> and restrict access to stream sockets in this language.
23:19:42 -!- Arrogant has quit (Read error: 113 (No route to host)).
23:21:30 <oklopol> raw sockets ftw
23:25:28 <SevenInchBread> alrighty...
23:25:40 <SevenInchBread> raw sockets should go under....
23:26:02 <SevenInchBread> Glagolithic character set?
23:28:47 <oklopol> i don't know what that is.
23:28:54 <SevenInchBread> Ethiopic it is.
23:29:01 <SevenInchBread> for raw sockets.
23:30:22 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]").
23:41:37 -!- digital_me has joined.
23:43:28 -!- Arrogant has joined.
23:51:15 -!- UpTheDownstair has joined.
23:52:14 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
23:54:04 -!- UpTheDownstair has changed nick to nazgjunk.
23:58:17 -!- sebbu has quit ("@+").
2007-02-24
00:15:20 <bsmnt_bot> omg
00:15:24 <bsmnt_bot> donuts
00:19:57 <bsmnt_bot> the peeple tell me to due bad things
00:25:10 <SimonRC> *BOGGLE* http://www.mixedtraffic.net/images/funnies/14067.jpg
01:01:05 <SevenInchBread> yay! got the esopage up! ...but I'm too lazy to type out all the specification
01:15:20 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
01:15:51 -!- nazgjunk has joined.
01:18:34 <SevenInchBread> Scandalous. http://esolangs.org/wiki/BugSophia
01:20:53 -!- nazgjunk has quit ("Bi-la Kaifa").
01:25:09 * SevenInchBread likes (well-implemented) concurrency.
01:48:16 -!- Arrogant has quit ("Leaving").
01:52:29 -!- nazgjunk has joined.
01:52:37 <SevenInchBread> ...hmmm... I should equip egobot with a befunge that can read multiline befunge programs.
01:54:14 <SevenInchBread> say !befunge-start command on one line, then put the rest of the program in subsequent lines... and then end with a !befunge-end line.
01:54:25 <SevenInchBread> the bot would just read everything you say.
01:54:34 <SevenInchBread> until !befunge-end
02:00:09 -!- SevenInchBread has quit ("haaaaaaaaaa").
02:01:54 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
02:02:18 -!- nazgjunk has joined.
02:09:29 -!- SevenInchBread has joined.
02:13:52 <SevenInchBread> hmmm..
02:14:03 <SevenInchBread> I wonder if you could take advantage of swapping two values in an esolang.
02:14:07 <SevenInchBread> like...
02:14:22 <SevenInchBread> that was the original idea I had for an infinitely visible BF.
02:14:48 <SevenInchBread> if you swap two values with the same value... the net effect is a NOP...
02:14:53 <SevenInchBread> you can use that as a conditional of some sort.
02:23:07 -!- SevenInchBread has quit (Remote closed the connection).
02:27:34 -!- nazgjunk has changed nick to na[zZz]gjunk.
02:36:00 -!- ihope has joined.
02:36:17 <ihope> HAI IM GREGORR I LIVE IN OREGON AND I WORK FOR INTEL >_O
02:43:49 -!- SevenInchBread has joined.
02:49:09 -!- tgwizard has quit (Remote closed the connection).
02:51:37 -!- nazgjunk has joined.
02:51:38 -!- na[zZz]gjunk has quit (Read error: 104 (Connection reset by peer)).
02:53:11 -!- nazgjunk has changed nick to na[zZz]gjunk.
03:06:32 -!- nazgjunk has joined.
03:06:33 -!- na[zZz]gjunk has quit (Read error: 104 (Connection reset by peer)).
03:07:18 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
03:47:22 <ihope> ~exec self.ihope = IRCbot("80.32.164.76", "Python", "nope", "ihope", "Now 100% Real", 9999, "#lobby", True, ["#lobby"], "#", True); self.ihope.listen()
04:01:12 <bsmntbombdood> HAI IHOPE
04:01:26 <ihope> Hello!
04:01:33 <ihope> I'm struggling with bsmnt_bot!
04:01:39 <bsmntbombdood> why?
04:01:54 <ihope> Because it isn't working like I want it to and I don't know what to do.
04:02:06 <bsmntbombdood> wai?
04:02:45 <ihope> How do I make the bot execute everything it receives in a PRIVMSG?
04:03:08 <bsmntbombdood> exec_chans = ["\S+"]
04:03:39 <ihope> That won't only execute stuff with an #exec?
04:03:45 <bsmntbombdood> replace ["#lobby"] with ["\S+"]
04:03:48 <bsmntbombdood> oh, right
04:03:49 <ihope> Then again, that's what I wanted to do anyway :-P
04:03:57 <ihope> ...Or not.
04:04:07 <bsmntbombdood> well
04:04:09 <ihope> Um, yeah, so how does it work?
04:04:14 <bsmntbombdood> you add a callback to do it
04:05:34 <bsmntbombdood> with a regex like r"\S+ PRIVMSG ([^#]\S+) :(.*)"
04:06:09 <ihope> #exec self.register_raw(r"\S+ PRIVMSG ([^#]\S+) :(.*)", blah)?
04:06:19 <bsmntbombdood> yeah
04:06:29 * ihope ponders disconnecting without warning
04:06:39 <bsmntbombdood> and call do_exec in your callback
04:06:40 <ihope> So what would blah be? do_exec?
04:06:47 <bsmntbombdood> no
04:07:12 <bsmntbombdood> actually, yeah
04:07:54 <ihope> It's not doing anything.
04:08:05 <ihope> Hmm...
04:08:40 <bsmntbombdood> how do you know?
04:16:31 -!- bsmntbombdood has left (?).
04:16:40 -!- bsmntbombdood has joined.
04:17:43 <bsmntbombdood> ~quit
04:17:44 -!- bsmnt_bot has quit.
04:17:48 -!- bsmnt_bot has joined.
04:33:16 -!- ihope has quit (Read error: 110 (Connection timed out)).
05:34:47 -!- digital_me has quit ("Lost terminal").
05:41:39 -!- digital_me has joined.
05:50:05 -!- pgimeno has quit (Connection reset by peer).
05:50:11 -!- pgimeno_ has joined.
05:50:30 -!- pgimeno_ has changed nick to pgimeno.
06:22:02 <SimonRC> zzzzz
06:33:31 -!- digital_me has quit ("Lost terminal").
06:54:34 -!- oerjan has joined.
07:15:05 <bsmntbombdood> hi
07:15:10 <oerjan> ho
07:16:34 -!- anonfunc has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:00:21 -!- sgeo_ has joined.
08:33:37 -!- helios24 has joined.
09:50:10 -!- Sgeo has quit (SendQ exceeded).
10:10:11 <oklopol> haha i just invented lazy evaluation :D
10:10:41 <oerjan> next: fire or the wheel? :)
10:10:48 <oerjan> or maybe sliced bread
10:11:30 <oklopol> thought i should invent a way to use map so that it only needed to evaluate as the values are actually needed... then i had this incredible idea of generalizing this so that NOTHING is done unless needed...
10:12:07 <oerjan> why how absurd.
10:12:13 <oklopol> i wish i'd born in the fifties
10:13:36 <oerjan> do you read Lambda the Ultimate? There was a recent thread on "the golden age" of the sixties and seventies.
10:13:47 <oklopol> nope, what's it?
10:13:57 <oklopol> sounds something i'd like to read
10:14:00 <oklopol> *like
10:14:14 <oerjan> it's a weblog about programming languages, at http://lambda-the-ultimate.org/
10:15:27 <oerjan> it is often very high-level, though.
10:15:33 -!- sebbu has joined.
10:16:05 <oklopol> high-level?
10:16:05 <oerjan> they encourage links to research articles and the like.
10:16:13 <oklopol> oh
10:16:21 <oklopol> you mean i wouldn't understand it?
10:17:13 <oerjan> well maybe not all of it, but there is somewhat lighter fare on its "discussion forum"
10:18:19 <oerjan> which actually is the majority of threads.
10:18:22 <oklopol> where can i see an article list there?
10:18:29 <oklopol> or how does it work?
10:18:34 <oklopol> i'm not that practical
10:18:45 <oklopol> oh
10:18:59 <oklopol> the front page changes daily and contains the link to the article?
10:19:16 <oklopol> complicated
10:19:38 <oklopol> too much text and links, there should just be a big button
10:19:42 <oerjan> changes immediately with a new main topic, i guess.
10:19:43 <oklopol> in the middle
10:19:56 <oerjan> huh?
10:20:08 <oklopol> a link to the article of the day :D
10:20:20 <oklopol> i get dizzy when there's so much links
10:20:28 <oklopol> i figured it now though
10:20:34 <oerjan> there can be more than one article, and there are several editors.
10:21:16 <oerjan> since i follow it every day, i like to read it from the Recent Posts subpage. Logging in helps then since new articles are marked.
10:21:33 <oerjan> *articles and comments
10:22:19 <oerjan> besides the main page doesn't contain the forum topics.
10:24:40 <oerjan> btw the topic i mentioned at the start is first on the next page.
10:31:47 <oklopol> i understand the article they have now
10:32:37 <oklopol> i think i might start reading daily, i like reading junk, usually just randomly search for that kind of stuff
10:32:53 <oerjan> heh
10:33:28 <oklopol> i happen to know erlang and actors quite well though
10:33:48 <oklopol> but maybe i know everything, i don't know what i don't know
10:33:56 <oklopol> i don't know cobol though, i wanna know it
10:34:03 <oklopol> i'll go now- -- - - ->
10:34:08 <oklopol> time is scarce!
10:34:09 <oerjan> shhh :)
10:34:31 <oklopol> you shut up!
10:36:47 -!- nazgjunk has joined.
10:45:34 -!- kxspxr has joined.
11:37:18 -!- oerjan has quit ("leaving").
11:40:08 -!- tgwizard has joined.
11:53:08 -!- nazgjunk has changed nick to timonator`.
11:53:18 -!- timonator` has changed nick to nazgjunk.
12:13:50 -!- ihope has joined.
12:14:13 -!- ihope has quit (Client Quit).
13:11:58 -!- anonfunc has quit.
13:25:25 -!- alex89ru has joined.
14:04:09 -!- goban has quit (Remote closed the connection).
14:04:28 -!- goban has joined.
14:10:01 -!- alex89ru has quit (Remote closed the connection).
14:13:26 -!- tokigun has quit (Read error: 110 (Connection timed out)).
15:04:06 -!- goban has quit (Read error: 104 (Connection reset by peer)).
15:04:18 -!- goban has joined.
15:25:55 -!- UpTheDownstair has joined.
15:25:55 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
15:29:48 -!- oerjan has joined.
15:30:56 <oerjan> what is the word for an explanation why something might be worth considering?
15:40:14 <oerjan> *sigh* i'll try with "rationale"
15:55:44 <kxspxr> "because" ;)
15:55:59 <oerjan> wrong word class, sorry.
15:56:19 <kxspxr> just joking
15:56:21 <oerjan> anyway it was just for an edit summary
15:56:29 <kxspxr> i figured
16:20:07 -!- goban has quit (Remote closed the connection).
16:20:40 -!- goban has joined.
16:25:48 -!- digital_me has joined.
16:30:33 -!- goban has quit (Read error: 104 (Connection reset by peer)).
16:30:49 -!- goban has joined.
17:05:05 -!- Sukoshi has quit (Read error: 104 (Connection reset by peer)).
17:19:13 -!- UpTheDownstair has changed nick to nazgjunk.
17:21:33 -!- sgeo_ has changed nick to Sgeo.
17:23:50 -!- goban has quit (Read error: 104 (Connection reset by peer)).
17:28:36 -!- goban has joined.
17:34:24 -!- wooby has joined.
18:03:53 -!- Sukoshi has joined.
18:41:03 <bsmntbombdood> nothing wrong with research papers
18:41:23 <bsmntbombdood> ha
18:41:26 <bsmntbombdood> "Lowering: A Static Optimization Technique for Transparent Functional Reactivity"
18:41:59 <SimonRC> SevenInchBread: http://doi.acm.org/10.1145/142137.142162
18:42:24 <SimonRC> "02:11 < SevenInchBread> I wonder if you could take advantage of swapping two values in an esolang."
18:42:51 <bsmntbombdood> side effects ftl
18:42:58 <oerjan> um, he has heard of Smetana, hasn't he? :)
18:43:18 <oerjan> and Smatiny
18:43:24 <bsmntbombdood> bah!
18:43:37 <bsmntbombdood> my ski reducer won't quit when I tell it o
18:44:31 <oerjan> how are you telling it to quit?
18:44:50 <bsmntbombdood> by entering the quit command
18:45:37 <oerjan> is it doing threads?
18:45:46 <bsmntbombdood> no
18:46:20 <bsmntbombdood> oooh i should put it in bsmntbombdood
18:46:26 <bsmntbombdood> bot
18:47:22 <bsmntbombdood> ~exec import ski_repl
18:47:26 <bsmntbombdood> oops
18:47:54 <bsmntbombdood> hmm
18:48:02 <oerjan> hopefully you are not using print in it.
18:48:13 <bsmntbombdood> i need to fix it a little
18:48:33 <oerjan> or you would hit the stdout problem :)
18:49:01 <bsmntbombdood> ~exec import ski_repl
18:49:11 <bsmntbombdood> ~exec sys.stdout(ski_repl)
18:49:19 <bsmntbombdood> ...
18:49:21 <bsmnt_bot> <module 'ski_repl' from '/bot/ski_repl.py'>
18:49:25 <bsmntbombdood> bout time
18:49:40 <bsmntbombdood> ~exec sys.stdout(ski_repl.parse("```Sxyz")
18:49:54 <bsmntbombdood> ~exec sys.stdout(ski_repl.parse("```Sxyz"))
18:49:55 <bsmnt_bot> [[['S', 'x'], 'y'], 'z']
18:50:18 <SimonRC> If you haven't seen it, read the link I just gave about Linear LISP.
18:50:22 <SimonRC> LL Rox!
18:51:08 <SimonRC> O(1) copy, O(1) equality testing, EQ is the same as EQUAL, and no GC required!
18:51:51 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2))))))
18:52:05 <bsmntbombdood> argh
18:52:05 <SimonRC> And there is no sharing, so you can mutate values as much as you like without worrying about other uses of them. REVERSE == NREVERSE. SORT == NSORT. etc
18:52:29 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2)))))))
18:52:39 <bsmntbombdood> ~ski ```Sxyz
18:52:40 -!- bsmnt_bot has quit (Remote closed the connection).
18:52:44 -!- bsmnt_bot has joined.
18:52:46 <bsmntbombdood> ???
18:53:09 <bsmntbombdood> i didn't see any errors anywhere
18:53:11 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2)))))))
18:53:18 <bsmntbombdood> ~ski ``Kxy
18:53:19 -!- bsmnt_bot has quit (Remote closed the connection).
18:53:21 -!- bsmnt_bot has joined.
18:53:28 <bsmntbombdood> that time i did
18:53:37 <bsmntbombdood> oh
18:53:46 <bsmntbombdood> PYTHON CLOSURES ARE BROKEN
18:53:49 <bsmntbombdood> I HATE PYTHON
18:54:07 <SimonRC> Use Haskell then.
18:54:11 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
18:54:19 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2)))))))
18:54:24 <SimonRC> ouch
18:54:27 <bsmntbombdood> ~ski ``Kxy
18:54:27 <bsmnt_bot> x
18:54:30 <bsmntbombdood> bout time
18:54:37 <bsmntbombdood> ~ski ```Sxyz
18:54:38 <bsmnt_bot> ``xz`yz
18:54:40 <bsmntbombdood> guten
18:54:42 <oerjan> ~ski ``sii``sii
18:54:42 <bsmnt_bot> ``sii
18:54:50 <oerjan> ~ski ```sii``sii
18:54:50 <bsmnt_bot> ```sii``sii
18:54:57 <bsmntbombdood> yep
18:55:08 <oerjan> eh...
18:55:15 <oerjan> ~ski ```SII``SII
18:55:15 <bsmnt_bot> ```SII``SII
18:55:25 <bsmntbombdood> sometimes it leaves things partially unreduced though
18:55:37 <oerjan> how ... convenient
18:55:48 <bsmntbombdood> ~ski ``K``Kxyz
18:55:49 <bsmnt_bot> x
18:56:29 * SimonRC tries to remember what the simple infinite loop is.
18:56:39 <oerjan> that's the one i did
18:56:42 <bsmntbombdood> SimonRC: ```SII``SII
18:56:57 <bsmntbombdood> for example:
18:57:04 <bsmntbombdood> ~ski ````S`KKIxy
18:57:05 <bsmnt_bot> ``Kxy
18:57:07 <bsmntbombdood> :/
18:58:01 <oerjan> so it is not actually _meant_ to stop prematurely?
18:58:12 -!- kxspxr has quit.
18:58:12 <bsmntbombdood> i dunno
18:58:38 <bsmntbombdood> don't think there's a way not to
18:59:19 <oerjan> eh, it's called "correct implementation" ;)
19:00:20 <oerjan> let me see that code.
19:02:09 <bsmntbombdood> http://bsmntbombdood.mooo.com/ski_repl.py
19:02:44 <SimonRC> Gargh! What twat at mozilla decided the put the "quit without confirmation" key right next to the "close tab" key.
19:03:18 <oerjan> :D
19:10:16 <oerjan> i think i know a way to fix that simp.
19:10:51 <oerjan> Simplify simp[0] _before_ checking for the test cases.
19:11:13 <oerjan> *t[0]
19:11:45 <bsmntbombdood> hmm
19:12:32 <bsmntbombdood> brilliant
19:13:31 <bsmntbombdood> except, ```SII`SII crashes it
19:13:45 <SimonRC> bsmntbombdood: well, duh
19:13:48 <oerjan> why, isn't that the point? ;)
19:13:53 <SimonRC> that's a good sign
19:13:57 <oerjan> Then you need to include a resource limit.
19:14:01 <SimonRC> indeed you do
19:14:16 <SimonRC> keep track of the number of reductions that take place or something
19:14:18 <bsmntbombdood> how?
19:14:24 <bsmntbombdood> hmmm
19:15:24 <SimonRC> well, have a variable that contains the number of applications that have taken place so far, and increase it whenever you do an application
19:16:50 <oerjan> it should be enough to do it for the S case.
19:17:12 <oerjan> since that is the only one that can increase the expression size.
19:17:30 <oerjan> *not decrease
19:19:00 <bsmntbombdood> k
19:19:09 <bsmntbombdood> $ ```SII``SII
19:19:10 <bsmntbombdood> ```SII`I``SII
19:20:33 <bsmntbombdood> ~exec reload(ski_repl)
19:20:46 <bsmntbombdood> ~ski ```SII``SII
19:20:55 <bsmnt_bot> ```SII``SII
19:21:04 <bsmntbombdood> bah
19:21:13 <bsmntbombdood> ~exec del ski_repl
19:21:43 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
19:21:54 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2)))))))
19:22:00 <bsmntbombdood> ~ski ```SII``SII
19:22:01 <bsmnt_bot> ```SII`I``SII
19:22:01 <bsmnt_bot> ```SII`I``SII
19:22:07 <bsmntbombdood> there
19:22:14 <bsmntbombdood> ~exec self.raw_regex_queue.pop()
19:22:18 <bsmntbombdood> ~ski ```SII``SII
19:22:19 <bsmnt_bot> ```SII`I``SII
19:22:33 <bsmntbombdood> :/
19:22:41 <oerjan> problem?
19:22:43 <bsmntbombdood> ~ski ````S`KKIxy
19:22:44 <bsmnt_bot> x
19:22:48 <bsmntbombdood> that works
19:23:02 <bsmntbombdood> well, ```SII`I``SII isn't all the way simplified
19:23:23 <oerjan> well i take it you have to stop somewhere?
19:23:27 <bsmntbombdood> yeah
19:23:32 <bsmntbombdood> but the I
19:24:14 <oerjan> what does your new simp return when the resource limit is exceeded?
19:24:22 <bsmntbombdood> its argument
19:24:43 <oerjan> and where is that limit checked?
19:24:51 <bsmntbombdood> in the S clause
19:25:29 <oerjan> hm... simplify t[1] before returning even in that case.
19:26:06 <bsmntbombdood> brilliant
19:26:09 <oerjan> then only S reductions will be avoided, I think.
19:26:40 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
19:26:46 <bsmntbombdood> ~ski ```SII``SII
19:26:47 <bsmnt_bot> ```SII`I``SII
19:27:00 <bsmntbombdood> ~exec self.raw_regex_queue.pop()
19:27:03 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
19:27:09 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2)))))))
19:27:13 <bsmntbombdood> ~ski ```SII``SII
19:27:14 <bsmnt_bot> ```SII`I``SII
19:27:18 <bsmntbombdood> ?
19:28:09 <bsmntbombdood> ~exec del ski_repl
19:28:19 <bsmntbombdood> ~exec import ski_repl
19:28:34 <bsmntbombdood> ~exec reload(ski_repl)
19:28:42 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
19:28:49 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2)))))))
19:28:53 <bsmntbombdood> ~ski ```SII``SII
19:28:54 <bsmnt_bot> ```SII``SII
19:28:54 <bsmnt_bot> ```SII``SII
19:29:05 <bsmntbombdood> ~exec self.raw_regex_queue.pop()
19:29:06 * oerjan wonders how much of that is actually necessary
19:29:06 <bsmntbombdood> finally
19:29:11 <bsmntbombdood> me too
19:31:30 <oerjan> globals are looked up every time they are referenced, not? So you should definitely not need to redo the register_raw.
19:32:10 <bsmntbombdood> dunno
19:32:23 <bsmntbombdood> i'm beggining to hate python's scoping
19:32:50 <oerjan> it's not perfect for functional programming, i take.
19:40:56 -!- jix__ has joined.
19:44:27 <bsmntbombdood> ~exec x = 12
19:45:08 <bsmntbombdood> ~exec self.register_raw(".*tell me x.*", lambda m: self.raw("PRIVMSG #esoteric :%s" % x))
19:45:18 <bsmntbombdood> tell me x
19:45:18 -!- bsmnt_bot has quit (Remote closed the connection).
19:45:21 -!- bsmnt_bot has joined.
19:45:32 <bsmntbombdood> gah
19:45:36 <bsmntbombdood> ~exec self.register_raw(".*tell me x.*", lambda m: self.raw("PRIVMSG #esoteric :%s" % x))
19:45:49 <bsmntbombdood> ~exec x = 12
19:46:16 <bsmntbombdood> ~exec self.raw_regex_queue[-1][1].func_globals = locals()
19:46:24 <bsmntbombdood> wtf
19:46:50 <bsmntbombdood> lame
20:09:37 -!- sebbu2 has joined.
20:10:08 -!- jix__ has quit (Read error: 104 (Connection reset by peer)).
20:14:25 -!- kxspxr has joined.
20:15:07 -!- kxspxr has quit (Client Quit).
20:28:37 -!- sebbu has quit (Connection timed out).
20:29:35 <SimonRC> ooh, esoteric: http://home.pipeline.com/~hbaker1/sigplannotices/COMFY.TXT
20:32:15 -!- jix__ has joined.
20:38:33 <oerjan> appears to be seriously intended, on first look. If that is Vaughan Pratt mentioned, I think I remember him for writing about "Chu Spaces" as models of linear logic.
20:39:39 <oerjan> although this seems much earlier, if those 60's references are a guide.
20:40:54 <oerjan> On the other hand, you could say it was in the Golden Age, when you could get research funding for being esoteric :)
21:08:29 -!- calamari has joined.
21:28:28 <GregorR> Heeeeeeeeeeeeeeeeeeeeeey calamari, you speak Java ... ^^
21:29:05 <calamari> hi GregorR
21:29:19 <calamari> my Java might be a little rusty now
21:29:23 <GregorR> >_>
21:29:30 <GregorR> <_<
21:29:35 <calamari> but we can speak JCL if you'd like
21:30:08 <oerjan> JCL? The infamous IBM language?
21:30:13 <GregorR> http://groups.google.com/group/nestedvm/browse_thread/thread/f11cc0b0e9a9b584 < I need sys_select in NestedVM to port Java.
21:30:14 <calamari> yeah
21:30:15 -!- goban has quit (Read error: 104 (Connection reset by peer)).
21:30:16 <GregorR> Erm
21:30:19 <GregorR> To port DirectNet.
21:30:29 <GregorR> But reading that code just makes my head swim :(
21:30:30 -!- goban has joined.
21:33:38 <calamari> why are you porting a perfectly good c++ program to java? seems rather cruel
21:34:10 <calamari> I'm taking c++ this semester
21:34:20 <calamari> pretty neat class
21:37:11 <SimonRC> lack of GC sucks
21:37:24 <SimonRC> it makes the object's allocation policies into part of its interface
21:38:08 <GregorR> Hah
21:38:14 <GregorR> SimonRC: Blah blah blah don't care.
21:38:23 <GregorR> calamari: I'm just trying to make it usable from Java so I can make an applet of it.
21:38:40 <GregorR> SimonRC: Blah blah blah it's not built in, get yourself Boehm GC and shaddap ^^
21:39:09 <calamari> and you're sure you need select?
21:39:23 <calamari> I don't think I've needed that for any of my java irc stuff
21:39:39 <GregorR> calamari: IRC only had one socket, no?
21:39:47 <calamari> yes
21:39:54 <GregorR> calamari: DirectNet has X sockets.
21:40:01 <GregorR> calamari: Where X is a number often greater than 1.
21:40:04 <calamari> and threads is bad?
21:40:22 <calamari> well, I guess threads don't really scale well
21:40:26 <GregorR> I stopped using threads in DN a long time ago ... and NestedVM doesn't have threads support.
21:40:31 <calamari> so I see your point
21:41:24 <calamari> unfortunately my knowledge of nio is nil, sorry
21:41:39 <calamari> let me look it up tho
21:41:56 <GregorR> I don't want you to go out of your way, I just thought this whole junk may be easier than I thought ;)
21:43:02 <calamari> or you could write some kind of browser plugin to support c++ programs ;)
21:43:35 <calamari> then the user would hate you when they go to a site and it wipes their system due to lack of security
21:43:40 <calamari> so scratch that
21:44:36 <GregorR> :P
21:44:51 <calamari> GregorR: btw where do you work?
21:45:00 <calamari> don't say microsoft
21:45:00 <GregorR> At
21:45:02 <GregorR> Segmentation fault
21:45:10 <GregorR> (core dumped)
21:45:18 <calamari> need a job?
21:45:18 <GregorR> Sorry, tried to dereference a NULL pointer.
21:45:25 <GregorR> Somewhat, not desperately.
21:45:31 <calamari> graduated?
21:45:33 <GregorR> No
21:45:50 <GregorR> I still have 1.5 years 'til I have an undergrad degree.
21:45:55 <calamari> IBM has it's embedded Linux operations in Oregon
21:46:11 <calamari> thought you might enjoy something like that
21:46:18 <GregorR> I definitely would.
21:46:21 <GregorR> But couldn't get the job :P
21:46:24 <calamari> why not
21:46:28 -!- tgwizard has quit (Read error: 110 (Connection timed out)).
21:46:40 <calamari> I could put in a good word for you
21:46:41 <GregorR> Well, lesse ... I have no degree.
21:46:44 <GregorR> P
21:46:46 <GregorR> *:P
21:46:52 <calamari> you could be a co-op first, not a problem
21:46:59 <calamari> that's what I'm doing now
21:47:11 <fizzie> Co-op first, deathmatch later. (Sorry, free association.)
21:47:18 <calamari> haha
21:47:40 <GregorR> Hmmmmmmmmmmmmmm
21:47:42 <GregorR> Tempting.
21:47:49 <calamari> It's kinda nice because once you graduate you are pretty much guaranteed a job as long as you do a good job
21:48:01 <GregorR> Well, I intend on going to grad school.
21:48:12 <calamari> haha, sucker!
21:48:21 <GregorR> I'm considering professorship *shrugs*
21:48:31 <calamari> they have tuition reimbursement
21:48:39 <GregorR> Hm+
21:48:53 <calamari> those who can, do.. those who can't, teach
21:49:17 <GregorR> Ouch :P
21:51:25 <calamari> anyhow, if you'd like me to forward it on to a guy I know in that dept.. send me your resume jeffryj at us ibm com
21:52:04 <SimonRC> Boehm GC has a few points of suckitude: If there is a fake pointer to the head of a list, and that list is continually created at the tail by one routine and destroyed at the head by another, then memory usage will grow indefinitely, as the fake pointer prevents *any* of the list from being collected.
21:52:18 <SimonRC> Plus compiler optimisations can seriously fuck it up.
21:56:28 <calamari> can't wait to build my computer.. want to try out linux amd64
22:01:29 <calamari> hmm, ubuntu came out in 2004 so it looks like I've been using linux for about 2 1/2 years
22:15:54 * SimonRC finds out that the Inform library is even cruftier than he remembered.
22:16:10 -!- goban has quit (Connection timed out).
22:16:13 <SimonRC> the main parsing routine is a sight to behold
22:16:19 -!- goban has joined.
22:17:14 <SimonRC> 1200 lines of code, repeatedly re-using the half-a-dozen local variables to which it is restricted.
22:17:24 <SimonRC> Dozens of GOTOs
22:17:35 <SimonRC> and a map at the beginning to help you understand it all.
22:19:05 <SimonRC> The fact that it has to handle english grammar, loads of exceptions, and must call and pay attention to a vast set of hooks doesn't help either.
22:21:02 <SimonRC> oh, yeah, and it's written in a language mostly less powerful than C.
22:21:28 <bsmntbombdood> fun
22:22:01 -!- goban has quit (Read error: 104 (Connection reset by peer)).
22:22:03 <bsmntbombdood> GC is messed up
22:22:14 <bsmntbombdood> It's impossible to do right
22:27:27 <oerjan> is this intended to be a general statement? :)
22:32:29 <bsmntbombdood> what?
22:32:56 <oerjan> about GC
22:33:03 <bsmntbombdood> yeah
22:43:11 -!- goban has joined.
22:49:03 <bsmntbombdood> I was reading mccarthy's gc from the lisp paper
22:49:06 <bsmntbombdood> it made me cry
22:50:47 <oerjan> what about it? not that i know/remember the details, but it is hardly the state of the art.
22:51:00 <bsmntbombdood> it's so slow
22:51:13 <bsmntbombdood> it iterates through the entire memory like 4 times each run
22:53:43 <oerjan> that's sort of like crying because Turing machines are slow... :)
22:54:13 <bsmntbombdood> not really
22:56:26 -!- SevenInchBread has quit ("haaaaaaaaaa").
23:21:16 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
2007-02-25
00:17:18 -!- sebbu2 has quit (Client Quit).
00:24:02 -!- UpTheDownstair has joined.
00:24:20 -!- UpTheDownstair has quit (Client Quit).
00:24:34 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
00:25:46 <SimonRC> bsmntbombdood: bah.
00:25:52 <SimonRC> Modern GC isn't slow.
00:26:19 <bsmntbombdood> oh?
00:26:35 <SimonRC> A program using GC that is written for use with GC will generally be about as fast as one with explicit allocation.
00:26:57 <SimonRC> Remember, the programmer can only do static analysis of a program, but the RTS can do dynamic analysis.
00:27:22 <SimonRC> GC is sometimes faster than explicit allocation and sometimes not.
00:28:44 -!- nazgjunk has joined.
00:30:20 -!- kxspxr has joined.
00:31:04 <SimonRC> copying collectors are particularly good at improving locality
00:50:33 <bsmntbombdood> ~ski ``Kxy
00:50:41 <bsmntbombdood> ~exec import ski_repl
00:50:59 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
00:51:10 <bsmntbombdood> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~ski (.*)", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), ski_repl.unparse(ski_repl.simp(ski_repl.parse(y.group(2)))))))
00:51:21 <bsmntbombdood> ~ski ``Kxy
00:51:21 <bsmnt_bot> x
00:53:45 <bsmntbombdood> ~exec replace = lambda t,a,b: (t == a and b) or [replace(t[0], a, b), replace(t[1], a, b)]
00:54:58 <bsmntbombdood> hmm
00:55:20 <bsmntbombdood> ~exec sys.stdout(replace([[1,2],[3,4]], 1, 42))
00:55:31 <bsmntbombdood> crap
00:55:39 <bsmntbombdood> scoping got messed up
00:55:54 <bsmntbombdood> ~exec pprint.pprint(locals(), sys.stdout)
00:55:55 <bsmnt_bot> {'replace': <function <lambda> at 0xb7c046bc>,
00:55:55 <bsmnt_bot> 'self': <__main__.IRCbot instance at 0xb7c0308c>,
00:55:55 <bsmnt_bot> 'ski_repl': <module 'ski_repl' from '/bot/ski_repl.py'>,
00:55:56 <bsmnt_bot> 'x': 12}
00:55:59 -!- ihope has joined.
00:56:07 <bsmntbombdood> ~exec sys.stdout(replace)
00:56:07 <bsmnt_bot> <function <lambda> at 0xb7c046bc>
00:56:17 <bsmntbombdood> wtf?
00:56:26 <bsmntbombdood> ~exec replace(1,1,2)
00:56:37 <bsmntbombdood> ~exec sys.stdout(replace(1,1,2))
00:56:38 <bsmnt_bot> 2
00:56:50 <bsmntbombdood> ~exec sys.stdout(replace([[1,2],[3,1]],1,2))
00:57:00 <bsmntbombdood> w.t.f
00:57:28 <ihope> ~exec sys.stdout(replace([[1,2],[3,1]],1,2))
00:57:33 <bsmntbombdood> time to go all combinatory logic on his ass
00:57:41 <ihope> I think you need to define replace.
00:57:48 <ihope> ...wait...
00:57:48 <bsmntbombdood> ~exec U = lambda f: f(f)
00:57:52 <bsmntbombdood> i did
00:58:04 <ihope> I see.
00:58:22 <ihope> ~exec sys.stdout(replace(1,1,2))
00:58:23 <bsmnt_bot> 2
00:58:28 <ihope> ~exec sys.stdout(replace([[1,2],[3,1]],1,2))
00:58:48 <bsmntbombdood> ~exec replace = U(lambda f: lambda t,a,b: (t == a and b) or [f(f)(t[0], a, b), f(f)(t[1], a, b)])
00:59:07 <bsmntbombdood> ~exec sys.stdout(replace([[1,2],[3,1]],1,2))
01:06:02 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09").
01:09:08 -!- ihope has joined.
01:17:29 <bsmntbombdood> oh, oops
01:17:32 <bsmntbombdood> that was stupid
01:22:23 <bsmntbombdood> k
01:22:59 <bsmntbombdood> ~exec replace = U(lambda f: lambda t,a,b: ((t == a and b) or (type(t) == list and [f(f)(t[0],a,b), f(f)(t[1],a,b)]) or t))
01:23:28 <bsmntbombdood> ~exec sys.stdout(replace([[1,2],[3,1]], 1, 42))
01:23:29 <bsmnt_bot> [[42, 2], [3, 42]]
01:23:33 <bsmntbombdood> guten
01:25:27 <bsmntbombdood> ~exec iota_comb = ski_repl.parse("``S``SI`KS`KK")
01:25:38 <bsmntbombdood> ~exec sys.stdout(iota_comb)
01:25:40 <bsmnt_bot> [['S', [['S', 'I'], ['K', 'S']]], ['K', 'K']]
01:26:56 <bsmntbombdood> ~exec un_iota = lambda x: replace(x, iota_comb, "i")
01:27:17 <ihope> Unlambda parser?
01:28:10 <oerjan> more like Lazy K
01:28:19 <ihope> ~exec sys.stdout(ski_repl.parse("C"))
01:28:20 <bsmnt_bot> C
01:28:22 <bsmntbombdood> ~exec iota = lambda x: ski_repl.unparse(un_iota(ski_repl.simp(replace(ski_repl.parse(x), "i", iota_comb))))
01:28:24 <ihope> How nice.
01:28:31 <ihope> ~exec sys.stdout(ski_repl.parse("`CK"))
01:28:32 <bsmnt_bot> ['C', 'K']
01:28:57 <bsmntbombdood> yeah, it can parse unlambda
01:29:02 <ihope> ~exec sys.stdout("C".(ski_repl.parse))
01:29:14 <ihope> Well, that clearly didn't work.
01:29:18 <ihope> ~exec sys.stdout("C".ski_repl.parse)
01:29:20 <oerjan> somehow i doubt that :)
01:29:22 <bsmntbombdood> wow, what language is that valid in?
01:29:33 <ihope> ~exec sys.stdout("C".parse.ski_repl)
01:29:40 <ihope> Indeed.
01:29:52 <bsmntbombdood> ~exec sys.stdout(iota("`ii"))
01:30:04 <ihope> ~exec foo = sys.stdout; ski_repl.parse("C").foo
01:30:16 <ihope> Indeed, it... hmm.
01:30:20 <bsmntbombdood> Sir, you are crazed
01:30:28 <oerjan> ~exec sys.stdout(ski_repl.parse("`.i`.Hi"))
01:30:29 <bsmnt_bot> ['.', 'i']
01:30:39 <bsmntbombdood> oerjan: except for that :)
01:30:40 <ihope> Okay, doesn't work.
01:30:41 <oerjan> nah, it can't parse Unlambda ;)
01:31:43 <bsmntbombdood> ~exec un_iota([])
01:31:53 <bsmntbombdood> oh come on
01:32:02 <SimonRC> Problem: If you decide to be cryogenically preserved for 1000 years, future generations may not think you are worth keeping or restoring to life. Solution: Attach a sign saying "COBOL Programmer". This will ensure your safety.
01:32:06 <bsmntbombdood> closure are super screwed :(
01:32:33 <oerjan> that one is just too old :)
01:32:34 <bsmntbombdood> so, this scoping doesn't work
01:32:46 <bsmntbombdood> ~exec self.iota_comb = ski_repl.parse("``S``SI`KS`KK")
01:33:00 <bsmntbombdood> ~exec self.un_iota = lambda x: replace(x, self.iota_comb, "i")
01:33:25 <bsmntbombdood> ~exec iota = lambda x: ski_repl.unparse(self.un_iota(ski_repl.simp(self.replace(ski_repl.parse(x), "i", self.iota_comb))))
01:33:38 <bsmntbombdood> ~exec sys.stdout(iota("`ii"))
01:33:48 <bsmntbombdood> ?!
01:33:59 * ihope ponders Unlambda input combinators
01:34:02 <bsmntbombdood> ~exec sys.stdout(self)
01:34:03 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c0308c>
01:34:10 <bsmntbombdood> ok borked
01:34:40 <ihope> AHA!
01:35:14 <ihope> You need a combinator that applies its argument to ?x, where x is the current character.
01:35:31 <bsmntbombdood> ~quit
01:35:31 -!- bsmnt_bot has quit.
01:35:35 -!- bsmnt_bot has joined.
01:35:40 <bsmntbombdood> ~exec self.iota_comb = ski_repl.parse("``S``SI`KS`KK")
01:35:44 <bsmntbombdood> ~exec self.un_iota = lambda x: replace(x, self.iota_comb, "i")
01:35:56 <bsmntbombdood> ~exec import ski_repl
01:36:00 <bsmntbombdood> ~exec self.iota_comb = ski_repl.parse("``S``SI`KS`KK")
01:36:08 <bsmntbombdood> ~exec iota = lambda x: ski_repl.unparse(self.un_iota(ski_repl.simp(self.replace(ski_repl.parse(x), "i", self.iota_comb))))
01:36:18 <bsmntbombdood> ~exec sys.stdout(iota("`ii"))
01:36:40 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
01:36:43 <bsmntbombdood> ~exec sys.stdout(iota("`ii"))
01:37:11 <bsmntbombdood> ~exec self.replace = U(lambda f: lambda t,a,b: ((t == a and b) or (type(t) == list and [f(f)(t[0],a,b), f(f)(t[1],a,b)]) or t))
01:37:21 <bsmntbombdood> ~exec U = lambda f: f(f)
01:37:23 <bsmntbombdood> ~exec self.replace = U(lambda f: lambda t,a,b: ((t == a and b) or (type(t) == list and [f(f)(t[0],a,b), f(f)(t[1],a,b)]) or t))
01:37:29 <bsmntbombdood> ~exec sys.stdout(iota("`ii"))
01:37:45 <bsmntbombdood> sigh
01:38:54 <bsmntbombdood> ~quit
01:38:56 -!- bsmnt_bot has quit (Client Quit).
01:39:01 -!- bsmnt_bot has joined.
01:39:39 <bsmntbombdood> ~exec globals()["ski_repl"] = __import__("ski_repl")
01:39:53 <bsmntbombdood> ~exec self.iota_comb = ski_repl.parse("``S``SI`KS`KK")
01:40:03 <bsmntbombdood> ~exec self.un_iota = lambda x: replace(x, self.iota_comb, "i")
01:40:27 <bsmntbombdood> ~exec self.ski_repl = __import__("ski_repl")
01:40:34 <bsmntbombdood> ~exec self.iota_comb = self.ski_repl.parse("``S``SI`KS`KK")
01:40:48 <bsmntbombdood> ~exec self.un_iota(self.iota_comb)
01:40:59 <bsmntbombdood> ~exec self.un_iota = lambda x: self.replace(x, self.iota_comb, "i")
01:41:01 <bsmntbombdood> ~exec self.un_iota(self.iota_comb)
01:42:14 <bsmntbombdood> ~exec self.U = lambda f: f(f)
01:42:35 <bsmntbombdood> ~exec self.replace = self.U(lambda f: lambda t,a,b: ((t == a and b) or (type(t) == list and [f(f)(t[0],a,b), f(f)(t[1],a,b)]) or t))
01:42:47 <bsmntbombdood> ~exec self.un_iota(self.iota_comb)
01:43:02 <bsmntbombdood> ~exec sys.stdout(self.un_iota(self.iota_comb))
01:44:46 -!- bsmnt_bot has quit (Remote closed the connection).
01:44:51 -!- bsmnt_bot has joined.
01:46:25 -!- bsmnt_bot has quit (Remote closed the connection).
01:46:30 -!- bsmnt_bot has joined.
01:50:26 <bsmntbombdood> ~exec sys.stdout(self.iota("`ii"))
01:50:27 <bsmnt_bot> ``SK`KK
01:50:29 <bsmntbombdood> there.
01:50:54 <bsmntbombdood> bout time
01:52:03 <bsmntbombdood> ~exec sys.stdout(self.iota("`i`i`ii"))
01:52:04 <bsmnt_bot> K
01:52:16 <bsmntbombdood> ~exec sys.stdout(self.iota("`i`i`i`ii"))
01:52:18 <bsmnt_bot> S
01:52:22 <bsmntbombdood> it works!
01:53:05 <bsmntbombdood> ~exec sys.stdout(self.iota("`i`i`i`i`ii"))
01:53:07 <bsmnt_bot> ``SSK
01:55:22 -!- bsmnt_bot has quit.
01:55:25 -!- bsmnt_bot has joined.
01:56:55 <bsmntbombdood> ~exec sys.stdout(self.iota("`i`i`ii"))
01:57:16 <bsmntbombdood> oh come on
01:58:12 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
01:58:39 -!- nazgjunk has joined.
02:01:36 -!- AfterDeath has joined.
02:02:48 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
02:02:57 -!- UpTheDownstair has joined.
02:03:46 <bsmntbombdood> yes, AfterDeath?
02:03:55 <AfterDeath> bsmntbombdood: ?
02:05:49 -!- UpTheDownstair has quit (Read error: 54 (Connection reset by peer)).
02:06:03 -!- nazgjunk has joined.
02:06:50 <bsmntbombdood> ~ps
02:06:51 <bsmnt_bot> None
02:12:35 <oerjan> wow. my Malbolge Unshackled interpreter works.
02:12:59 <oerjan> and more surprisingly, it actually manages to run the Malbolge cat program.
02:13:52 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
02:14:20 <ihope> Unshackled?
02:14:38 <oerjan> i made a dialect.
02:14:56 <ihope> Is it less ugly?
02:15:03 <oerjan> essentially, with automatically growing memory size
02:15:15 <ihope> Fun.
02:15:40 <oerjan> no, i've tried to keep as close to the spirit as possible.
02:16:24 <bsmntbombdood> so, turing complete malbolge
02:16:25 <oerjan> only some subtle changes to make values practically unbounded.
02:16:29 <oerjan> i hope so.
02:17:00 <oerjan> but i didn't expect the changes to be subtle enough to make the cat program work. :)
02:18:21 <oerjan> this must be an evil omen :D
02:24:00 -!- nazgjunk has joined.
02:24:20 <oerjan> now uploaded: http://oerjan.nvg.org/esoteric/Unshackled.hs
02:24:46 <bsmntbombdood> not haskell!
02:24:56 <oerjan> of course Haskell :)
02:26:17 <oerjan> how else could I properly juggle the combined infinite Trie and linked list of Trits? :)
02:27:16 <bsmntbombdood> Trie?
02:27:22 <ihope> You could do it in Unlambda.
02:27:25 <oerjan> of course a more efficient implementation might be possible.
02:27:40 <ihope> bsmntbombdood: fancy spelling of "tree", isn't it?
02:27:42 <oerjan> i suppose.
02:27:55 <ihope> Also, can I call you and your bot bb and b_? :-P
02:28:59 <oerjan> not quite. A trie is a special kind of tree, in which every key has a specific place in the tree, known at the outset.
02:30:15 <oerjan> e.g. the trinary number 021 would be at the first child of the second child of the zeroth child of the root.
02:30:54 <oerjan> *ternary
02:35:33 -!- nazgjunk has quit ("Bi-la Kaifa").
02:50:18 -!- kxspxr has quit.
03:34:11 -!- ihope has quit (Connection timed out).
03:42:56 -!- ihope has joined.
03:48:11 -!- LeaLeaLea has joined.
03:48:16 <LeaLeaLea> HELLO.
03:48:30 <oerjan> hello
03:48:51 <LeaLeaLea> .. It has been ages. Good evening ladies and gentlemen. I invite each and every one of you for a walk on the promenade. Step not into the grassy knolls or you shall surely be engulfed by lava.
03:49:54 <bsmntbombdood> oh boy.
03:51:14 -!- SevenInchBread has joined.
03:51:52 <LeaLeaLea> SevenInchBread.
03:51:53 <SevenInchBread> :(
03:52:06 <LeaLeaLea> Fancy meeting you here.
03:52:21 <SevenInchBread> FANCY TIS
03:52:32 <LeaLeaLea> What say we grab a cuppa, old bean?
03:53:07 <SevenInchBread> ...I'm uncertain
03:53:13 <SevenInchBread> of how to react
03:53:15 <SevenInchBread> to that
03:53:26 * LeaLeaLea grabs a cuppa.
03:53:37 * SevenInchBread squeezes the cuppa firmly.
03:53:50 <SevenInchBread> mmm... quite smooth.
03:53:55 <LeaLeaLea> Mmm.
03:56:31 <bsmntbombdood> ~quit
03:56:32 -!- bsmnt_bot has quit.
03:56:36 -!- bsmnt_bot has joined.
03:56:42 <bsmntbombdood> ~exec sys.stdout(self)
03:56:42 <bsmnt_bot> <__main__.IRCbot instance at 0xb7ca208c>
03:56:57 <bsmntbombdood> ~exec x = lambda: self
03:57:07 <bsmntbombdood> ~exec sys.stdout(x)
03:57:08 <bsmnt_bot> <function <lambda> at 0xb7ca3614>
03:57:12 <bsmntbombdood> ~exec sys.stdout(x())
03:57:20 <bsmntbombdood> damnit
03:57:46 <bsmntbombdood> ~exec x = lambda: y
03:57:53 <bsmntbombdood> ~exec y = 42
03:57:56 <bsmntbombdood> ~exec sys.stdout(x())
03:58:01 <bsmntbombdood> oh come on
03:58:33 <bsmntbombdood> ~quit
03:58:34 -!- bsmnt_bot has quit (Client Quit).
03:58:36 -!- bsmnt_bot has joined.
03:58:42 <bsmntbombdood> ~exec x = lambda: self
03:58:42 <SevenInchBread> ~exec for x in xrange(100): sys.stdout.write("LeaLeaLea, YOUR HOSES IS RUNNING!")
03:58:43 -!- bsmnt_bot has quit (Excess Flood).
03:58:46 -!- bsmnt_bot has joined.
03:58:46 <SevenInchBread> :)
03:58:50 <bsmntbombdood> ~exec x = lambda: self
03:58:54 <bsmntbombdood> ~exec sys.stdout(x())
03:59:04 <bsmntbombdood> ~exec self.x = lambda: self
03:59:07 <bsmntbombdood> ~exec sys.stdout(self.x())
03:59:17 <bsmntbombdood> wtf.
03:59:26 <SevenInchBread> ~exec for x in xrange(10): sys.stdout.write("LeaLeaLea, YOUR HOSES IS RUNNING!")
03:59:26 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:27 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:27 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:27 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:27 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:28 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:30 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:30 <bsmntbombdood> closures. are. broken.
03:59:32 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:33 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:36 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
03:59:39 <bsmntbombdood> ~kill 0
03:59:40 <bsmnt_bot> Proccess 0 does not exist
03:59:46 <SevenInchBread> :)
04:00:21 <bsmntbombdood> this is getting annoying
04:00:31 <bsmntbombdood> ~exec types
04:00:32 <SevenInchBread> I blame it on threading.
04:00:36 <bsmntbombdood> nope
04:01:05 <bsmntbombdood> ~exec self.x
04:01:17 <bsmntbombdood> ~exec self.x.func_code
04:01:25 <SevenInchBread> ~exec print "Lol... inconsistent print statement too..."
04:01:43 <SevenInchBread> basically... you've fucked up the environment with threading and shit. :)
04:01:51 <bsmntbombdood> ~exec types.FunctionType(self.x.func_code, globals(), closure=locals())
04:02:04 <SevenInchBread> try new.function
04:02:06 <ihope> ~exec self.x = lambda: bot
04:02:16 <ihope> ~exec sys.stdout(self.x())
04:02:17 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c9608c>
04:02:18 <ihope> ~exec sys.stdout(self)
04:02:19 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c9608c>
04:02:58 <bsmntbombdood> ~exec types.FunctionType(self.x.func_code, globals())
04:03:01 <bsmntbombdood> ~exec types.FunctionType(self.x.func_code, globals())()
04:03:17 <bsmntbombdood> ~exec sys.stdout(types.FunctionType(self.x.func_code, globals())())
04:03:18 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c9608c>
04:03:23 <bsmntbombdood> ~exec sys.stdout(types.FunctionType(self.x.func_code, globals()))
04:03:24 <bsmnt_bot> <function <lambda> at 0xb7c976f4>
04:03:29 <bsmntbombdood> hmmm
04:03:38 <bsmntbombdood> ~exec sys.stdout(self.x())
04:03:39 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c9608c>
04:03:52 <bsmntbombdood> oh ihope messed me up
04:04:02 <bsmntbombdood> ~exec self.x = lambda: self
04:04:02 <SevenInchBread> ~exec for x in xrange(5): sys.stdout.write("LeaLeaLea, YOUR HOSES IS RUNNING!")
04:04:03 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
04:04:03 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
04:04:03 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
04:04:03 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
04:04:03 <bsmnt_bot> LeaLeaLea, YOUR HOSES IS RUNNING!
04:04:08 <bsmntbombdood> SevenInchBread: stop doing that
04:04:11 <bsmntbombdood> ~exec sys.stdout(types.FunctionType(self.x.func_code, globals()))
04:04:12 -!- anonfunc has joined.
04:04:12 <bsmnt_bot> <function <lambda> at 0xb7c9a6bc>
04:04:15 <bsmntbombdood> ~exec sys.stdout(types.FunctionType(self.x.func_code, globals())())
04:04:15 <ihope> I like messing people up.
04:04:17 <ihope> :-P
04:04:25 <bsmntbombdood> ~exec sys.stdout(types.FunctionType(self.x.func_code, locals())())
04:04:25 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c9608c>
04:04:29 <bsmntbombdood> hmmmm!
04:04:32 <ihope> Sorry. Didn't mean to do that.
04:05:26 <SevenInchBread> ~exec for x in xrange(5): self.raw("PRIVMSG LeaLeaLea :YOUR HOSES IS RUNNING!")
04:05:59 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.10/2007021601]").
04:06:08 <bsmntbombdood> oh damn, still banned from #python
04:06:21 <ihope> You're banned form #python?
04:06:23 <bsmntbombdood> yeah
04:07:03 <ihope> What for?
04:07:11 <bsmntbombdood> saying "lol"
04:07:24 <ihope> Really?
04:07:28 <bsmntbombdood> yeah
04:08:10 <bsmntbombdood> I need to figure out how to make cell objects
04:08:43 <bsmntbombdood> to make closures manually
04:09:15 <ihope> If you really want to get in, change your nickname and username.
04:09:57 <bsmntbombdood> what's the ban on?
04:10:00 -!- bsmntbombdood has changed nick to xor\.
04:10:03 -!- xor\ has changed nick to xor.
04:10:38 <xor> apparently, just the nick
04:11:02 <ihope> "bsmntbombdood!*@*" and "*!n=gavin@*."
04:11:22 <ihope> Why there's a period I don't know.
04:12:28 <xor> well, passing in the locals as the globals to create the function works
04:18:50 <xor> ah ha
04:18:56 <xor> imma jenus
04:22:40 -!- SevenInchBread has quit ("haaaaaaaaaa").
04:24:31 <xor> ~exec self.foo = __import__("foo")
04:24:57 <xor> ~exec self.foo = __import__("foo")
04:25:22 <xor> ~exec self.foo.hack_closure(lambda: self, locals(), globals())
04:26:09 <xor> ~exec globals()["types"] = __import__("types")
04:26:11 <xor> ~exec self.foo.hack_closure(lambda: self, locals(), globals())
04:26:28 <xor> ~exec self.foo = __import__("foo")
04:26:31 <xor> ~exec self.foo.hack_closure(lambda: self, locals(), globals())
04:26:57 <xor> ~exec reload(self.foo)
04:27:01 <xor> ~exec self.foo.hack_closure(lambda: self, locals(), globals())
04:27:12 <xor> ~exec sys.stdout(self.foo.hack_closure(lambda: self, locals(), globals()))
04:27:13 <bsmnt_bot> <function <lambda> at 0xb7c9a79c>
04:27:18 <xor> ~exec sys.stdout(self.foo.hack_closure(lambda: self, locals(), globals())())
04:27:25 <xor> penis
04:27:33 <xor> ~exec sys.stdout(self.foo.hack_closure(lambda: self, locals(), globals()).func_globals)
04:27:34 <bsmnt_bot> {'IRCbot': <class __main__.IRCbot at 0xb7c7f32c>, 'inspect': <module 'inspect' from '/usr/lib/python2.4/inspect.pyc'>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': '/bot/ircbot.py', 'args': {'ident': 'bsmnt', 'realname': 'bsmntbombdood bot', 'chan': '#esoteric', 'nick': 'bsmnt_bot', 'host': '85.188.1.26', 'exec_chans': ['#esoteric', '#baadf00d'], 'owner':
04:27:34 <bsmnt_bot> 'bsmntbombdood!\\S*gavin@\\S*'}, 'IRCFileWrapper': <class __main__.IRCFileWrapper at 0xb7c7f35c>, 'sys': <module 'sys' (built-in)>, 'thread_info': <thread._local object at 0xb7d18890>, 'pickle': <module 'pickle' from '/usr/lib/python2.4/pickle.pyc'>, '__name__': '__main__', 'exec_global_tracer': <function exec_global_tracer at 0xb7c82a74>, 'types': <module 'types' from '/
04:27:35 <bsmnt_bot> usr/lib/python2.4/types.pyc'>, 'copy': <module 'copy' from '/usr/lib/python2.4/copy.pyc'>, 'socket': <module 'socket' from '/usr/lib/python2.4/socket.pyc'>, 'thread': <module 'thread' (built-in)>, 'traceback': <module 'traceback' from '/usr/lib/python2.4/traceback.pyc'>, 'os': <module 'os' from '/usr/lib/python2.4/os.pyc'>, 'pprint': <module 'pprint' from '/usr/lib/python2
04:27:40 <bsmnt_bot> .4/pprint.pyc'>, 'bot': <__main__.IRCbot instance at 0xb7c9608c>, 'marshal': <module 'marshal' (built-in)>, 're': <module 're' from '/usr/lib/python2.4/re.pyc'>, 'time': <module 'time' from '/usr/lib/python2.4/lib-dynload/time.so'>, 'threading': <module 'threading' from '/usr/lib/python2.4/threading.pyc'>, 'SysWrapper': <class __main__.SysWrapper at 0xb7c7f38c>, 'exec_loca
04:27:42 <xor> ~kill 0
04:27:45 <bsmnt_bot> l_tracer': <function exec_local_tracer at 0xb7c97454>, '__doc__': None, 'math': <module 'math' from '/usr/lib/python2.4/lib-dynload/math.so'>}
04:27:54 <xor> oops
04:28:02 <xor> ~exec sys.stdout(self.foo.hack_closure(lambda: self, locals(), globals()).func_globals["self"])
04:30:08 <xor> or not
04:37:05 <xor> or yes!
04:37:38 <xor> ~exec reload(self.foo)
04:37:54 <xor> ~exec sys.stdout(lambda: self, locals(), globals()))
04:38:17 <xor> ~exec sys.stdout(self.foo.hack_closure(lambda: self, locals(), globals()))
04:38:18 <bsmnt_bot> <function <lambda> at 0xb7c9a87c>
04:38:24 <xor> ~exec sys.stdout(self.foo.hack_closure(lambda: self, locals(), globals())())
04:38:24 <bsmnt_bot> <__main__.IRCbot instance at 0xb7c9608c>
04:38:28 <xor> sweet!
04:38:44 <xor> ~exec (lambda: self)()
04:38:53 <xor> that's why it's needed
04:51:35 <xor> :/
04:59:35 <oerjan> made a wiki page on Malbolge Unshackled, explaining the differences (but not the commonalities)
05:01:51 -!- mike_the_person has joined.
05:03:36 <mike_the_person> <>:#,_e0g,@j5:"
05:04:20 <xor> ~quit
05:04:34 <xor> ~exec self.raw("QUIT")
05:04:35 -!- bsmnt_bot has quit.
05:04:39 -!- bsmnt_bot has joined.
05:04:44 <xor> ~exec this is an error
05:04:56 <xor> darn
05:05:32 -!- mike_the_person has quit (Client Quit).
05:06:11 <xor> ~exec self.raw("QUIT")
05:06:12 -!- bsmnt_bot has quit (Client Quit).
05:06:15 -!- bsmnt_bot has joined.
05:06:17 <xor> ~exec this is an error
05:06:31 <xor> oh duh
05:06:55 <xor> ~exec self.raw("QUIT")
05:06:56 -!- bsmnt_bot has quit (Client Quit).
05:06:59 -!- bsmnt_bot has joined.
05:07:02 <xor> ~exec this is an error
05:07:55 <xor> ~exec self.raw("QUIT")
05:07:56 -!- bsmnt_bot has quit (Client Quit).
05:07:59 -!- bsmnt_bot has joined.
05:08:01 <xor> ~exec this is an error
05:08:53 <xor> ~exec self.raw("QUIT")
05:08:54 -!- bsmnt_bot has quit (Client Quit).
05:08:57 -!- bsmnt_bot has joined.
05:08:59 <xor> ~exec this is an error
05:09:00 <bsmnt_bot> SyntaxError: unexpected EOF while parsing
05:09:05 <xor> finally
05:09:16 <xor> ihope: there
05:09:34 <ihope> Pretty nice.
05:09:58 <ihope> But why's there a space before it now?
05:10:12 <xor> there always has been
05:10:31 <xor> i'll take it off...
05:10:57 <ihope> Doesn't look like there always has been to me.
05:11:17 <ihope> <bsmnt_bot> NameError: name 'raw' is not defined
05:11:25 <ihope> No space, and that was over three hours ago.
05:11:33 <xor> hmmm
05:11:54 <xor> that's odd
05:12:03 <xor> ~exec self.raw("QUIT")
05:12:04 -!- bsmnt_bot has quit (Client Quit).
05:12:07 -!- bsmnt_bot has joined.
05:12:13 <xor> ~exec this is an error
05:12:14 <bsmnt_bot> SyntaxError: unexpected EOF while parsing
05:12:26 <xor> weird
05:14:03 -!- xor has changed nick to bsmntbombdood.
05:14:06 <bsmntbombdood> ~quit
05:14:07 -!- bsmnt_bot has quit (Client Quit).
05:14:10 -!- bsmnt_bot has joined.
05:14:14 <bsmntbombdood> ~exec this is an error
05:14:15 <bsmnt_bot> SyntaxError: unexpected EOF while parsing
05:14:28 <bsmntbombdood> thar
05:15:04 -!- oerjan has quit ("Gooed knight").
06:07:46 -!- calamari has quit ("Leaving").
06:48:39 -!- digital_me has quit ("goodnight").
06:54:51 -!- ihope has quit (Connection timed out).
07:20:51 -!- wooby has quit.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:34:11 -!- tokigun has joined.
08:57:40 -!- tokigun has quit ("wait a moment please.").
08:58:38 -!- tokigun has joined.
09:05:24 -!- anonfunc has quit.
09:20:43 <Sukoshi> Anyone here do/have done amateur radio?
09:32:07 -!- anonfunc has joined.
09:39:11 -!- Sgeo has quit ("Leaving").
09:55:08 -!- sebbu has joined.
10:34:14 -!- anonfunc has quit.
10:50:04 <Sukoshi> I predict my question will be forgotten in a few more hours and another haphazard conversation will begin and be yet more forgotten.
11:05:16 <oklopol> properties of or prevent me from answering
11:42:22 -!- nooga has joined.
11:42:25 <nooga> hi
11:47:07 -!- pgimeno has quit (Read error: 104 (Connection reset by peer)).
12:01:37 -!- pgimeno has joined.
12:01:40 * nooga has found a bug in sadol interpreter
12:14:29 -!- tgwizard has joined.
12:33:07 -!- oerjan has joined.
12:35:12 <oerjan> Sukoshi: No.
12:36:19 <oerjan> nooga: There is always one more bug. (TM)
12:41:26 -!- Dominic_ has joined.
12:45:47 -!- UpTheDownstair has joined.
12:46:46 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)).
12:50:20 -!- nazgjunk has joined.
12:51:02 -!- Dominic_ has quit (Read error: 104 (Connection reset by peer)).
12:55:49 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
12:56:25 -!- nazgjunk has joined.
13:04:55 -!- UpTheDownstair has joined.
13:05:14 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:18:24 -!- UpTheDownstair has quit (Read error: 54 (Connection reset by peer)).
13:18:43 -!- nazgjunk has joined.
13:41:33 -!- UpTheDownstair has joined.
13:41:41 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:49:13 -!- UpTheDownstair has changed nick to nazgjunk.
14:01:22 -!- sebbu2 has joined.
14:20:41 -!- sebbu has quit (Connection timed out).
14:45:42 <oerjan> darn, i just realized what my last edit looks like in the Recent Changes list :D
15:01:28 -!- ihope has joined.
15:07:16 -!- jix__ has joined.
15:30:30 -!- ihope has quit (Read error: 104 (Connection reset by peer)).
15:30:44 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
15:31:11 -!- nazgjunk has joined.
15:54:50 * oerjan is starting to suspect that the cat program working is due to an interpreter bug.
15:57:13 <oerjan> on the positive side, that provided a good test that everything that _should_ be identical to Malbolge is working.
16:08:23 -!- SevenInchBread has joined.
16:10:10 -!- UpTheDownstair has joined.
16:12:45 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
16:17:39 -!- UpTheDownstair has changed nick to nazgjunk.
16:17:50 -!- jix__ has changed nick to jix.
16:25:14 -!- nazgjunk has quit ("Leaving").
16:31:57 -!- oerjan has quit ("Out to eat").
16:32:16 -!- nazgjunk has joined.
17:06:35 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
17:06:37 -!- UpTheDownstair has joined.
17:10:36 -!- nazgjunk has joined.
17:10:46 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)).
17:23:06 -!- Arrogant has joined.
17:52:38 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
17:59:29 <bsmntbombdood> ~exec 1/0
17:59:30 <bsmnt_bot> ZeroDivisionError: integer division or modulo by zero
18:01:29 <bsmntbombdood> ~exec raise "iAmBored", "Error"
18:01:30 <bsmnt_bot> iAmBored: Error
18:02:26 -!- nazgjunk has joined.
18:03:46 <bsmntbombdood> ~exec sys.stdout = StringIO(); sys.stdout.write("foo")
18:04:09 <bsmntbombdood> ~exec sys.stdout = StringIO(); sys.stdout.write("foo"); print sys.stdout.getvalue()
18:04:14 <bsmntbombdood> foo
18:07:26 <bsmntbombdood> ~raise StringIO()
18:07:32 <bsmntbombdood> ~exec raise StringIO()
18:07:33 <bsmnt_bot> TypeError: exceptions must be classes, instances, or strings (deprecated), not cStringIO.StringO
18:07:40 <bsmntbombdood> ~exec raise StringIO
18:07:40 <bsmnt_bot> TypeError: exceptions must be classes, instances, or strings (deprecated), not builtin_function_or_method
18:07:45 <bsmntbombdood> booble
18:08:43 <bsmntbombdood> ~raise IRCbot
18:08:52 <bsmntbombdood> ~exec raise IRCbot
18:08:53 <bsmnt_bot> TypeError: __init__() takes at least 5 arguments (1 given)
18:09:04 <bsmntbombdood> ~exec raise IRCbot, 1,2,3,4
18:09:05 <bsmnt_bot> SyntaxError: invalid syntax
18:09:36 <bsmntbombdood> ~exec self.foo = sys.stdout
18:09:48 <bsmnt_bot> hi
18:36:53 -!- wooby has joined.
18:41:47 -!- Arrogant has quit ("Leaving").
19:35:20 -!- oklopol has quit (Read error: 110 (Connection timed out)).
19:38:17 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
19:38:51 -!- nazgjunk has joined.
19:50:53 -!- oerjan has joined.
19:54:51 -!- tgwizard has quit (Remote closed the connection).
19:56:19 <bsmntbombdood> the goo
19:56:41 <oerjan> that ba, and the ugl
19:56:45 <oerjan> *the
19:57:07 <bsmntbombdood> ~exec raise "Hi oerjan"
19:57:07 <bsmnt_bot> Hi oerjan
19:57:15 <oerjan> hi bsmnt_bot
19:57:30 <bsmntbombdood> thought that error message would be more interesting
19:58:18 <bsmntbombdood> ~exec raise Exception, "oerjan is here"
19:58:19 <bsmnt_bot> Exception: oerjan is here
19:59:34 <oerjan> bsmnt_bot: you have a lousy memory if you think that is exceptional :)
20:00:48 <bsmntbombdood> ~exec exec "class BoredError(Exception): pass\n\nself.bored = BoredError"
20:00:56 <bsmntbombdood> ~exec raise self.bored
20:00:57 <bsmnt_bot> BoredError
20:02:07 <bsmntbombdood> ~exec exec "try:\n raise self.bored\nexcept Exception: \nraise \"not allowed to be bored\"\n"
20:02:08 <bsmnt_bot> IndentationError: expected an indented block (line 4)
20:02:25 <Sukoshi> ;D
20:02:28 <bsmntbombdood> ~exec exec "try:\n raise self.bored\nexcept Exception:\n raise \"not allowed to be bored\"\n"
20:02:29 <bsmnt_bot> not allowed to be bored
20:02:41 <bsmntbombdood> back to the risk game
20:03:41 -!- tgwizard has joined.
20:29:07 <bsmntbombdood> I lost :(
20:33:16 -!- sebbu has joined.
20:33:31 <bsmntbombdood> europe fails
20:33:42 <oerjan> never!
20:35:52 <bsmntbombdood> almost always
20:36:46 <bsmntbombdood> you can never hold europe
20:39:10 -!- oklopol has joined.
20:40:11 <oerjan> too many neighbors
20:41:06 <oerjan> i don't remember, can you cross between asia and america?
20:41:22 <bsmntbombdood> yeah kamchatca-alaska or something like that
20:50:34 -!- digital_me has joined.
20:50:36 -!- tgwizard has quit (Connection timed out).
20:51:55 -!- sebbu2 has quit (Read error: 110 (Connection timed out)).
20:56:07 * bsmntbombdood reads about tries
20:56:56 * bsmntbombdood implements it in C
20:57:21 <bsmntbombdood> or not
20:58:35 <bsmntbombdood> oh, so each node has $byte_length branches
20:59:23 <oerjan> $byte_length?
21:00:15 <oerjan> for a byte, that sounds like 8 but should be 256, I think
21:00:47 <bsmntbombdood> yeah
21:01:15 <bsmntbombdood> that's what I meant
21:19:15 <bsmntbombdood> don't you just love segfaults?
21:20:41 <oerjan> use a language with proper types :)
21:21:46 <bsmntbombdood> well, it works
21:22:29 <oerjan> although i suppose i _could_ make the crash function in my interpreter segfault if I used the unsafePerformIO loophole.
21:22:50 <oerjan> for now it just runs out of memory.
21:23:07 <bsmntbombdood> with a segfault you at least get a core dump
21:23:18 <bsmntbombdood> quitting with an error message doesn't tell you anything
21:26:10 <bsmntbombdood> not sure what to do when a key isn't found :/
21:31:56 <oerjan> return a default, possibly inserting it first.
21:32:09 <bsmntbombdood> bsmntbombdood.mooo.com/trie.c
21:32:27 <bsmntbombdood> thunks are ugly :/
21:36:07 <bsmntbombdood> MUCH simpler implementation than a hash table
21:36:10 <bsmntbombdood> I like it.
21:37:06 <bsmntbombdood> and any data can be used as a key, without a hash function
21:39:41 <bsmntbombdood> insertion/extraction is O(keylen)
21:44:07 <SimonRC> hi
21:45:38 <bsmntbombdood> hi
21:45:55 <SimonRC> know anything about lsof
21:46:39 <bsmntbombdood> lsof(8)?
21:47:45 <SimonRC> yeah
21:48:20 <SimonRC> rm is giving me "text file busy" but lsof is listing nothing when I say lsof <filename>
21:49:50 <bsmntbombdood> I want an algorithm to play risk
21:52:17 <SimonRC> I would like to be Hu*Ki bimorph but it ain't going to happen.
21:52:32 <SimonRC> maybe that should be Ki*Hu
21:53:06 <oerjan> ???
21:53:22 <oerjan> Hu=Human? Ki=?
21:53:35 <oerjan> or something else?
21:55:28 <SimonRC> yes#
21:55:40 <SimonRC> Hu is indeed human.
21:55:47 <SimonRC> waitamo,
21:55:56 <SimonRC> how did you know what "bimorph" meant/
21:56:21 <oklopol> bi=2, morph=morph
21:56:23 <oerjan> i guessed, from bi- and -morph
21:56:41 <SimonRC> Darn, i am not used to people being able to do that.
21:56:49 <oklopol> what's ki?
21:56:56 <SimonRC> (i.e. analyse things by their classical roots)
21:57:04 <bsmntbombdood> heh
21:57:12 <bsmntbombdood> Who doesn't do that?
21:57:19 <SimonRC> normal people
21:57:21 <SimonRC> muggles
21:57:28 <oerjan> besides any PL enthusiast should know about polymorphism
21:58:15 <SimonRC> oklopol: (Well, I do not have a good summarry, but I have explained it in bits in various places, and archived all the discussions: http://fof.durge.org/~sc/Kigdatsi/ )
21:58:41 <oklopol> oh
21:58:43 <oklopol> i've read that
21:58:44 <oerjan> oh, your own conworld.
21:58:50 <SimonRC> yup
21:58:58 <SimonRC> oerjan: where di you learn that word
21:59:11 <oerjan> which word?
21:59:31 <SimonRC> newer stuff and dynamic documents are dumped here: http://toast.durge.org/~sc/Kigdatsi/ (the server is also {compsoc,bylands}.dur.ac.uk)
21:59:36 <SimonRC> oerjan: conworld
21:59:39 <oerjan> i used to subscribe to the conlang list
21:59:45 <SimonRC> ah, ok
21:59:45 <bsmntbombdood> wazzat?
21:59:47 <SimonRC> small world
21:59:59 <SimonRC> bsmntbombdood: see spinnoff.com/zbb
22:00:26 <oerjan> besides i think it was mentioned in the files of yours i looked at
22:01:14 <SimonRC> ah, ok
22:03:02 <bsmntbombdood> oh man
22:03:10 <bsmntbombdood> storing those 3 entrys takes 11308 bytes
22:03:16 <oerjan> the world is even smaller, both at conlang and at esolangs i've met people from my local gamer's club :)
22:03:34 <SimonRC> bsmntbombdood: what are you using these tries for?
22:03:46 <bsmntbombdood> nothing
22:05:10 <bsmntbombdood> for prefix-free keys each new key takes O(keylen) more storage O.o
22:05:17 <oerjan> on the other hand i used a trie in my newest interpreter, which is how the subject came up i think
22:05:27 <bsmntbombdood> yeah
22:06:15 <bsmntbombdood> O(keylen - common_prefixlen) more
22:06:32 <SimonRC> ISTR tries have crap constants
22:06:59 <oerjan> bsmntbombdood: there is an optimization to make tries smaller.
22:07:00 <SimonRC> you might want a briefer node format
22:07:19 <SimonRC> like an array of (byte, pointer) pairs
22:07:23 <bsmntbombdood> for memory O(n) = 1024*n I think
22:07:42 <oerjan> basically, if there is only one leaf in a subtree, you save it directly.
22:07:46 <SimonRC> sounds right, for size-4 pointers
22:07:53 <oerjan> at the top of that subtree.
22:07:59 <SimonRC> oerjan: also a good idea
22:08:28 <bsmntbombdood> SimonRC: huh?
22:08:56 <oerjan> and you may also split bytes into say 2 nybbles, to make each node only have 16 subnodes.
22:09:13 <SimonRC> well, you have an array of pointers for each node, and there are 256 pointers in each node, and each pointer is 4 bytes
22:09:20 <SimonRC> oerjan: yup
22:09:25 <bsmntbombdood> yeah
22:10:10 <bsmntbombdood> manipulating nibbles isn't very nice
22:10:37 <oerjan> it isn't very hard either.
22:10:54 <oerjan> (b >> 4), b & 15
22:11:10 <bsmntbombdood> yeah
22:11:14 -!- Sgeo has joined.
22:11:29 <bsmntbombdood> How would that make the storage less though?
22:12:36 <bsmntbombdood> oh
22:13:00 <oerjan> sounds like you got it
22:13:29 <oerjan> i guess it is a tradeoff between space and search speed.
22:13:29 <bsmntbombdood> then it's O(n) = 2*16*n
22:15:23 <oerjan> *4 for pointer size
22:16:22 <bsmntbombdood> oh right
22:18:10 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:19:57 <bsmntbombdood> Segmentation fault (core dumped)
22:20:02 <bsmntbombdood> sigh
22:20:13 <SimonRC> solution: use a real language
22:21:58 <bsmntbombdood> C is just about as real as it gets
22:22:30 <SimonRC> In that case, use a language with a real typesystem.
22:22:38 <SimonRC> OST s/real //
22:23:11 <bsmntbombdood> How does a typesystem prevent segfaults?
22:23:24 <bsmntbombdood> pointers means segfaults
22:23:33 <oerjan> by making it impossible to dereference a null pointer.
22:23:58 <GregorR> That just turns it into some other type of abort.
22:24:00 <SimonRC> By guaranteeing that a pointer always points at something.
22:24:06 <bsmntbombdood> It would have to raise some kind of equivelent error
22:24:08 <oerjan> or do array indexing out of bounds
22:24:15 <SimonRC> (hint: GC may be involved)
22:24:31 <GregorR> Everybody go look up D and shaddap.
22:24:34 <oerjan> sure, but that error may be at compile time
22:24:35 <GregorR> http://www.digitalmars.com/d/
22:24:46 <bsmntbombdood> D loses
22:24:49 <SimonRC> GregorR: ITYM http://www.haskell.org/
22:24:53 <SimonRC> :-P
22:25:05 <oerjan> also Ocaml if you think haskell is too weird.
22:25:54 <SimonRC> Nah, you miss out on the cool shit like typeclasses and circular definitions.
22:26:15 <bsmntbombdood> http://www.beigerecords.com/cory/pizza_party/
22:26:19 <oerjan> yes, but on the other hand you get module functors.
22:26:29 <SimonRC> What could be more fun than creating a graph by defining the contents of a mp in terms of lookups on the map?
22:26:38 <SimonRC> oerjan: what are they?
22:26:57 <oerjan> essentially, functions from modules to modules.
22:26:58 <SimonRC> bsmntbombdood: seen it before
22:27:02 <SimonRC> oerjan: hmm.
22:27:09 <bsmntbombdood> ITYM http://schemers.org/
22:29:38 * SimonRC beats you all: http://e-pig.org/
22:30:01 <SimonRC> Each program contains a correctnes proof embedded in its types.
22:30:14 <SimonRC> No infinite loops, ever.
22:31:05 <oerjan> and not Turing-complete, nanana
22:31:30 <SimonRC> The developers find that you can write all sensible programs in it.
22:31:45 <oerjan> i was half joking :)
22:32:57 <oerjan> probably. I mean how many times do you need to run an algorithm that you don't know halts...
22:33:18 * bsmntbombdood can't figure out what's wrong :(
22:33:49 <oerjan> have you changed trie.c since you posted the link?
22:33:59 <bsmntbombdood> oh duh
22:34:11 <bsmntbombdood> or not
22:34:24 <bsmntbombdood> no
22:34:41 <bsmntbombdood> get trie_nibble.c
22:35:47 <bsmntbombdood> ooops :P
22:35:55 <oerjan> ?
22:36:01 <bsmntbombdood> i'm stupid
22:36:22 <bsmntbombdood> I masked with 0xFF instead of 0xF
22:36:40 -!- tgwizard has joined.
22:37:02 <bsmntbombdood> now it works
22:37:30 <bsmntbombdood> and uses much less storage
22:37:42 <bsmntbombdood> 1836 compared to 14392
22:38:47 <bsmntbombdood> O(n) ~ n*400
22:39:59 <bsmntbombdood> now for bits...
22:40:50 <oerjan> bits?
22:41:31 <oerjan> i think bits is worse than 2-bits, which is only twice as good as nybbles.
22:41:40 <bsmntbombdood> idunno
22:42:42 <oerjan> because bits need 2 children but twice the depth of 2-bits which need 4.
22:42:57 <bsmntbombdood> yeah
22:44:20 <oerjan> and 4*2 is half of 16.
22:45:47 <bsmntbombdood> I wonder why the constant factor is ~400 and not 128 like it should be
22:46:09 <oerjan> hm?
22:46:17 <bsmntbombdood> for nibbles
22:46:39 <oerjan> 16*2*4 = 128, you mean?
22:46:46 <bsmntbombdood> yeah
22:47:40 <bsmntbombdood> oh
22:47:55 <bsmntbombdood> its 128*keylen
22:48:13 <oerjan> brilliant :)
22:48:42 <oerjan> i was starting to worry you had some serious over-padding there :)
22:48:56 -!- UpTheDownstair has joined.
22:49:31 <oerjan> except - that only applies without sharing.
22:49:35 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
22:49:46 <bsmntbombdood> all my keys were prefix free
22:50:04 <oerjan> right, so just the top node
22:52:16 <oerjan> a minor point - you don't need a data section for the half-byte nodes
22:53:04 <bsmntbombdood> mm
22:53:52 -!- Arrogant has joined.
22:54:09 <bsmntbombdood> not worth it
22:55:24 <oerjan> you could do it fairly cheap by putting the data section last, and just adjusting the malloc size
22:55:44 <oerjan> i think
22:57:31 -!- UpTheDownstair has changed nick to nazgjunk.
22:58:41 <bsmntbombdood> not sure if that's standard
22:59:56 <SimonRC> Ah, I was wrong, epigram can do general recursion (and is hence Turing-Complete) if you permit yourself to use (gen :: (forall (P :: *) => (P -> P) -> P) i.e. to assume that anything you can prove from itself is true.
23:00:03 <SimonRC> which is a bit dodgy
23:00:53 <bsmntbombdood> I didn't know programming languages could get any more mathy
23:01:36 <oerjan> epigram essentially crosses the line to a theorem prover
23:03:12 -!- GregorR has quit (SendQ exceeded).
23:03:24 -!- GregorR has joined.
23:03:51 <oerjan> given the Curry-Howard correspondence between type systems and logic, that essentially has to happen when the type system gets complex enough
23:05:25 <oerjan> In later versions of Haskell, the type system is so powerful that it is itself Turing-complete.
23:05:56 <SimonRC> with a few command-line switches
23:06:04 <SimonRC> e.g. --allow-undecidable-types
23:06:51 <oerjan> on the other hand, the same has been said of C++.
23:07:25 <oerjan> which shows that sanity is not a requirement. :)
23:07:42 <oerjan> hm, does that mean the _type system_ of C++ is an esolang?
23:08:34 <oerjan> (disclaimer: regarding C++ i am speaking solely from prejudice, having never used it ;)
23:09:49 <oerjan> this leads to the obvious question: could we make a language whose type system is based on brainfuck?
23:10:28 <oklopol> typefuck
23:11:48 <oklopol> it seems static import means the exact opposite in java and D
23:11:55 <oklopol> i find that clever
23:32:55 -!- UpTheDownstair has joined.
23:33:56 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
23:34:03 -!- UpTheDownstair has changed nick to nazgjunk.
23:46:16 <bsmntbombdood> mathmatical logic ftl
23:46:38 * oerjan bops bsmntbombdood on the head
23:47:16 <bsmntbombdood> no me understando
23:50:46 * bsmntbombdood is reading the Curry–Howard wikipedia article
23:52:34 <SimonRC> zzzz
23:52:41 <bsmntbombdood> http://upload.wikimedia.org/math/4/1/c/41c9dae376e6427b316ac0396b990d63.png
23:52:44 <bsmntbombdood> O.o
2007-02-26
00:04:33 <oerjan> yeah, fun
00:05:31 <nazgjunk> huh.
00:05:44 * nazgjunk wtf's, audibly, and then goes to sleep.
00:07:14 <bsmntbombdood> mathmaticians come up with all kinds of crazy notations
00:09:56 -!- crathman has joined.
00:11:57 <oerjan> That notation is the fundament for understanding the rules of many of the new kinds of logic, such as linear logic.
00:15:32 -!- sebbu2 has joined.
00:16:48 -!- nazgjunk has quit (Nick collision from services.).
00:27:14 -!- Sgeo has quit ("Leaving").
00:28:34 -!- Sgeo has joined.
00:33:45 -!- tgwizard has quit (Read error: 110 (Connection timed out)).
00:34:18 -!- sebbu2 has quit (Client Quit).
00:34:34 -!- sebbu has quit (Read error: 110 (Connection timed out)).
00:37:42 -!- oerjan has quit ("Eek").
01:24:39 -!- Arrogant has quit ("Leaving").
01:49:23 -!- crathman has quit (Read error: 110 (Connection timed out)).
01:50:31 -!- wooby has quit.
01:53:01 -!- anonfunc has joined.
01:57:57 -!- goban has quit (Read error: 104 (Connection reset by peer)).
01:58:08 -!- goban has joined.
02:00:47 <SevenInchBread> ahahah
02:00:50 <SevenInchBread> >>> 'ABC' < 'C' < 'Pascal' < 'Python'
02:00:51 <SevenInchBread> True
02:03:05 <bsmntbombdood> >>> 'ABC' < 'C' < 'Pascal' < 'Python' < 'Scheme'
02:03:06 <bsmntbombdood> True
02:05:51 <SevenInchBread> but it's not greater than SOPHIA.
02:17:22 -!- crathman_ has joined.
02:29:10 <fizzie> >>> 'ABC' < 'C' < 'Pascal' < 'Python' < 'Scheme' < 'Zilog Z80 assembler'
02:29:10 <fizzie> True
02:29:19 <fizzie> I find Python's opinions a bit suspicious.
02:35:17 -!- crathman_ has quit (Read error: 110 (Connection timed out)).
02:35:49 -!- digital_me has quit ("Lost terminal").
02:39:23 -!- digital_me has joined.
04:04:22 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
04:43:54 -!- Sgeo has quit ("Leaving").
05:26:41 -!- ShadowHntr has joined.
05:46:29 -!- digital_me has quit ("Lost terminal").
07:19:42 -!- nooga has quit (Read error: 110 (Connection timed out)).
07:31:17 -!- nooga has joined.
07:53:31 -!- ShadowHntr has quit (Read error: 60 (Operation timed out)).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:55:42 -!- Sukoshi has quit ("ERC Version 5.1 (CVS) $Revision: 1.796 $ (IRC client for Emacs)").
08:56:09 -!- Sukoshi has joined.
09:11:19 -!- sebbu has joined.
09:14:33 <Sukoshi> No.
11:11:15 -!- tgwizard has joined.
11:55:01 <goban> Sukoshi: no what?
12:08:12 -!- anonfunc has quit (zelazny.freenode.net irc.freenode.net).
12:08:13 -!- helios24 has quit (zelazny.freenode.net irc.freenode.net).
12:08:13 -!- fizzie has quit (zelazny.freenode.net irc.freenode.net).
12:08:13 -!- sp3tt has quit (zelazny.freenode.net irc.freenode.net).
12:08:14 -!- cmeme has quit (zelazny.freenode.net irc.freenode.net).
12:08:14 -!- AfterDeath has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- tgwizard has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- Shaunaf has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- meatmanek has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- bsmnt_bot has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net).
12:08:22 -!- bsmntbombdood has quit (Remote closed the connection).
12:09:10 -!- bsmntbombdood has joined.
12:09:10 -!- tgwizard has joined.
12:09:10 -!- anonfunc has joined.
12:09:10 -!- bsmnt_bot has joined.
12:09:10 -!- AfterDeath has joined.
12:09:10 -!- helios24 has joined.
12:09:10 -!- sp3tt has joined.
12:09:10 -!- Shaunaf has joined.
12:09:10 -!- meatmanek has joined.
12:09:10 -!- puzzlet has joined.
12:09:10 -!- fizzie has joined.
12:09:10 -!- cmeme has joined.
13:02:14 -!- csaba has joined.
13:02:23 <csaba> Hello
13:03:09 <csaba> I'm thinking of writing a visual simulator of a Turing machine. I'm interested if you have any ideas what should I include into it? I mean, besides the basic machine.
13:23:52 -!- csaba has quit (" HydraIRC -> http://www.hydrairc.com <- IRC with a difference").
13:49:18 -!- ais523 has joined.
13:49:32 <ais523> !ps d
13:49:36 <EgoBot> 1 ais523: daemon ul bf
13:49:38 <EgoBot> 2 ais523: ps
13:49:56 <ais523> !ul (Is the Underload interpreter daemon still running after all this time?)S
13:49:59 <EgoBot> Is the Underload interpreter daemon still running after all this time?
13:53:08 <ais523> !help
13:53:09 <ais523> Now what's happened to EgoBot?
13:53:09 <ais523> !kill 1
13:53:14 -!- anonfunc has quit (zelazny.freenode.net irc.freenode.net).
13:53:14 -!- fizzie has quit (zelazny.freenode.net irc.freenode.net).
13:53:14 -!- helios24 has quit (zelazny.freenode.net irc.freenode.net).
13:53:14 -!- sp3tt has quit (zelazny.freenode.net irc.freenode.net).
13:53:15 -!- bsmntbombdood has quit (zelazny.freenode.net irc.freenode.net).
13:53:15 -!- cmeme has quit (zelazny.freenode.net irc.freenode.net).
13:53:15 -!- AfterDeath has quit (zelazny.freenode.net irc.freenode.net).
13:53:16 -!- Shaunaf has quit (zelazny.freenode.net irc.freenode.net).
13:53:16 -!- meatmanek has quit (zelazny.freenode.net irc.freenode.net).
13:53:16 -!- tgwizard has quit (zelazny.freenode.net irc.freenode.net).
13:53:17 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net).
13:53:17 -!- bsmnt_bot has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- oklopol has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- pgimeno has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- SimonRC has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- NK\ has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- sebbu has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- nooga has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- goban has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
13:53:19 -!- EgoBot has quit (zelazny.freenode.net irc.freenode.net).
13:53:44 -!- sebbu has joined.
13:53:44 -!- Sukoshi has joined.
13:53:44 -!- nooga has joined.
13:53:44 -!- goban has joined.
13:53:44 -!- GregorR has joined.
13:53:44 -!- tokigun has joined.
13:53:44 -!- EgoBot has joined.
13:53:47 -!- bsmntbombdood has joined.
13:53:47 -!- tgwizard has joined.
13:53:47 -!- anonfunc has joined.
13:53:47 -!- bsmnt_bot has joined.
13:53:47 -!- AfterDeath has joined.
13:53:47 -!- helios24 has joined.
13:53:47 -!- sp3tt has joined.
13:53:47 -!- Shaunaf has joined.
13:53:47 -!- meatmanek has joined.
13:53:47 -!- puzzlet has joined.
13:53:47 -!- fizzie has joined.
13:53:47 -!- cmeme has joined.
13:53:50 -!- oklopol has joined.
13:53:50 -!- pgimeno has joined.
13:53:50 -!- sekhmet has joined.
13:53:50 -!- NK\ has joined.
13:53:50 -!- SimonRC has joined.
13:53:56 <ais523> !help
13:54:00 <EgoBot> help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon
13:54:02 <EgoBot> 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl
13:54:07 <ais523> !ps d
13:54:10 <EgoBot> 1 ais523: daemon ul bf
13:54:12 <EgoBot> 2 ais523: ps
13:55:06 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373003
13:55:22 <ais523> !deadfish iiissoo
13:55:24 <EgoBot> >>
13:55:26 <EgoBot> >>
13:56:09 <ais523> That seemed to work (it sent the end of the message privately), but it could probably do without the prompts and newlines
13:58:41 <ais523> !undaemon deadfish
13:58:44 <EgoBot> Process 2 killed.
13:59:14 <ais523> !deadfish funge93 http://pastebin.ca/raw/373012
13:59:16 <EgoBot> Huh?
13:59:24 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373012
13:59:32 <ais523> !deadfish iiisso
14:00:35 <ais523> !undaemon deadfish
14:00:38 <EgoBot> Process 2 killed.
14:00:40 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373016
14:00:44 <ais523> !deadfish iiisso
14:00:48 <EgoBot> 81
14:01:02 <ais523> !deadfish dddddddo
14:01:04 <EgoBot> 74
14:02:42 <ais523> !undaemon deadfish
14:02:44 <EgoBot> Process 2 killed.
14:02:46 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373016
14:03:12 <ais523> Deadfish has no sensible way to set its single memory value to 0
14:03:29 <ais523> It doesn't have any loops or other flow control, either, so the benefits of implementing it are dubious
14:18:37 -!- UpTheDownstair has joined.
14:20:04 -!- UpTheDownstair has changed nick to nazgjunk.
14:21:33 <ais523> !ul (~exec sys.stdout("!deadfish iisso"))S
14:21:36 <EgoBot> ~exec sys.stdout("!deadfish iisso")
14:21:37 <bsmnt_bot> !deadfish iisso
14:21:40 <EgoBot> 16
14:22:51 <ais523> It would be nice if all EgoBot's interpreters were written in esoteric programming languages
14:23:13 <ais523> although that would lead to some sort of infinite regress, probably, unless it ran on a machine with Brainfuck machine code or something like that
14:28:16 <nazgjunk> that would be pretty awesome
14:30:08 <ais523> The Underload interpreter is written in brainfuck, and the Deadfish interpreter is written in Befunge-93, so that's two already
15:09:12 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
15:09:28 -!- UpTheDownstair has joined.
15:09:42 -!- UpTheDownstair has changed nick to nazgjunk.
15:59:11 -!- oerjan has joined.
16:01:51 <oerjan> hm...
16:01:56 <oerjan> >>>True
16:02:01 <oerjan> hm...
16:10:00 <ais523> Oerjan, your comments lack context to me
16:11:03 <oerjan> ~exec self.register_raw(~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1)))))
16:11:04 <bsmnt_bot> SyntaxError: invalid syntax
16:11:06 <oerjan> darn
16:11:29 <oerjan> ~exec self.register_raw(~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1))))))
16:11:29 <bsmnt_bot> SyntaxError: invalid syntax
16:11:44 <oerjan> whoops
16:11:53 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1)))))
16:11:59 <oerjan> >>>1+2
16:12:00 -!- bsmnt_bot has quit (Remote closed the connection).
16:12:04 -!- bsmnt_bot has joined.
16:12:21 <oerjan> apparently not correct.
16:12:47 <oerjan> ~sys.stdout(repr(1+2))
16:12:57 <oerjan> ~exec sys.stdout(repr(1+2))
16:12:58 <bsmnt_bot> 3
16:13:14 <oerjan> ~exec sys.stdout(repr(eval("1+2")))
16:13:14 <bsmnt_bot> 3
16:13:38 <oerjan> wait...
16:15:30 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1)))))
16:15:36 <oerjan> ~exec sys.stdout(repr(eval("1+2")))
16:15:37 <bsmnt_bot> 3
16:15:41 <oerjan> >>> 1+2
16:15:42 -!- bsmnt_bot has quit (Remote closed the connection).
16:15:44 -!- bsmnt_bot has joined.
16:16:12 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(y.group(1)))
16:16:16 <oerjan> >>>test
16:16:17 <bsmnt_bot> #esoteric
16:16:41 <oerjan> ~exec self.raw_regex_queue.pop()
16:17:31 <oerjan> strange. must be that darn scope again.
16:17:45 <oerjan> eh wait
16:18:00 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(2)))))
16:18:05 <oerjan> >>>1+2
16:18:06 <bsmnt_bot> 3
16:18:08 <oerjan> finally
16:18:27 <oerjan> >>> "Pascal" < "Python"
16:18:27 <bsmnt_bot> True
16:18:39 <oerjan> >>>"Test"
16:18:40 <bsmnt_bot> 'Test'
16:19:41 <ais523> Maybe it would be possible to do something similar to that to get an Underload/Python quine going
16:20:30 <ais523> ~exec self.register_raw(r"\S_ PRIVMSG (\S+) :%%(.*)", lambda x,y: sys.stdout(y.group(2)))
16:20:35 <oerjan> >>>"C++" < "Everything"
16:20:35 <ais523> %%Hello, world!
16:20:35 <bsmnt_bot> True
16:20:55 <ais523> I don't really know much Python
16:22:06 <ais523> >>>"Does this work for me too?"
16:22:07 <bsmnt_bot> 'Does this work for me too?'
16:22:33 <ais523> >>>sys.stdout("Nested printing")
16:22:33 <bsmnt_bot> Nested printing
16:22:34 <bsmnt_bot> None
16:23:14 <ais523> >>>y
16:23:15 <bsmnt_bot> <_sre.SRE_Match object at 0xb7c6b0f8>
16:23:26 <ais523> >>>y.group(2)
16:23:27 <bsmnt_bot> 'y.group(2)'
16:23:35 <ais523> >>>x
16:23:36 <bsmnt_bot> ':ais523!n=chatzill@chillingi.eee.bham.ac.uk PRIVMSG #esoteric :>>>x'
16:23:49 <oerjan> that was strange
16:24:22 <ais523> >>>eval(y.group(2))
16:24:23 -!- bsmnt_bot has quit (Remote closed the connection).
16:24:24 <oerjan> oh wait, it wasn't :)
16:24:25 -!- bsmnt_bot has joined.
16:24:30 <oerjan> it was nearly a quine
16:24:47 <ais523> I suppose I shouldn't have done that, really, but I wanted to see how it would handle the eval loop
16:25:00 <ais523> >>>'Is this still working?'
16:25:08 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(2)))))
16:25:26 <ais523> >>>"'this string contains single quotes'"
16:25:27 <bsmnt_bot> "'this string contains single quotes'"
16:25:41 <ais523> >>>"'single"+'"double'
16:25:42 <bsmnt_bot> '\'single"double'
16:26:09 <ais523> >>>'>>>'+y.group(2)
16:26:10 <bsmnt_bot> ">>>'>>>'+y.group(2)"
16:26:44 <ais523> that would be a quine-by-cheating if it weren't for the repr()
16:26:55 <oerjan> right
16:27:22 <oerjan> I wanted it to give approximately the same output as the Python repl loop
16:28:18 <ais523> I wonder why my non-repr'd and eval'd version above didn't work?
16:28:44 <ais523> maybe it's because I can't count parentheses
16:28:54 <oerjan> which one?
16:29:05 <ais523> "~exec self.register_raw(r"\S_ PRIVMSG (\S+) :%%(.*)", lambda x,y: sys.stdout(y.group(2)))"
16:29:28 <ais523> no, I did count correctly
16:29:40 <oerjan> perhaps % has a regexp meaning
16:30:05 <ais523> I hope not, my Underload interpreter in a new regexp-based language Thutu that I'm creating relies on it being meaningless
16:30:14 <ais523> but I could always change to some other character instead
16:30:27 <oerjan> wait...
16:30:29 <ais523> ~exec self.register_raw(r"\S_ PRIVMSG (\S+) :<<<(.*)", lambda x,y: sys.stdout(y.group(2)))
16:30:32 <ais523> <<<testing
16:30:41 <oerjan> you mispled S+ as S_ in there
16:30:50 <ais523> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :<<<(.*)", lambda x,y: sys.stdout(y.group(2)))
16:30:52 <ais523> damn typos
16:30:54 <ais523> <<<testing
16:30:55 <bsmnt_bot> testing
16:31:17 <oerjan> that may have been the original problem too
16:31:37 <ais523> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:38 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:31:42 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:42 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:31:46 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:46 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:31:50 <oerjan> wow
16:31:50 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:51 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:31:54 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:55 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:31:58 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:58 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:32:02 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:02 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:32:06 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:06 <ais523> ~quit
16:32:06 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:32:10 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:11 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:32:14 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:14 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:32:18 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:19 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:32:20 <ais523> !undaemon ul
16:32:22 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:23 <bsmnt_bot> !ul (a(<<<!ul )~*(:^)*S):^
16:32:24 <EgoBot> Process 1 killed.
16:32:26 <EgoBot> Huh?
16:33:39 <oerjan> you might be able to do it just with ~exec sys.stdout(...) as well
16:34:13 <ais523> !daemon ul bf http://pastebin.ca/raw/36774
16:34:49 <ais523> I tried that a while ago, but the problem was that Underload needs a literal double-quote so it can pass it to Python, and Python has trouble with double-quotes inside strings
16:35:21 <ais523> i.e. whatever representation you use for the string delimiter, it can't be used inside the string without backslashing it
16:35:32 <oerjan> right.
16:35:33 <ais523> !undaemon ul
16:35:36 <EgoBot> ~yy
16:35:37 <ais523> !daemon ul bf http://pastebin.ca/raw/367774
16:35:38 <EgoBot> Process 1 killed.
16:35:58 <ais523> I have no idea what random code I fed EgoBot by mistake there...
16:36:01 <oerjan> wow :)
16:36:12 <oerjan> apparently it did _something_
16:36:28 <ais523> that's not difficult in BF if you have enough dots in the program
16:36:48 <ais523> but it's interesting that it came up with characters that aren't near the end of the ASCII scale
16:36:59 <oerjan> something in Lisp.
16:37:33 <oerjan> there are plenty of - in Lisp.
16:37:51 <oerjan> and much fewer dots.
16:38:18 <ais523> of course, I never quite got used to using - as part of a variable name
16:38:48 <ais523> my only real Lisping to date has been writing an Unlambda-using-lambda-notation to Unlambda-using-```ski-notation compiler in Emacs-Lisp
16:40:30 <oerjan> all the loops are essentially []
16:41:42 <oerjan> my guess is the first of them is infinite, since there is only one > in the program, which comes later.
16:41:48 <oerjan> (and no <)
16:42:44 <ais523> yes, the program's essentially ------(lots more minuses and some dots)----[] from a BF point of view, which is pointless
16:45:44 <EgoBot> ais523 did get the right page this time
16:46:26 <ais523> !help
16:46:30 <EgoBot> help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon
16:46:32 <EgoBot> 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl
16:47:15 <ais523> !irp Say "Hello, world!", please!
16:47:25 <oerjan> <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373003
16:47:28 <EgoBot> Hello, world!
16:47:59 <ais523> yes, there was a call for Deadfish interpreters other than the reference one, so I wrote one in Befunge-93
16:48:06 <ais523> My first Befunge-93 program, as it happens
16:48:33 <oerjan> i thought that the poster was carelessly vague on the language :)
16:48:48 <ais523> but 373016 is the EgoBot-ised version that doesn't give prompts and which doesn't print newlines except when outputting
16:49:04 <GregorR> Y'know, I could add a sensible interpreter if you asked me to :P
16:49:07 <ais523> I even preserved the bugs in the reference interpreter
16:49:23 <ais523> !irp Tell GregorR that EgoBot does IRP now.
16:49:38 <GregorR> Well that worked great X-P
16:49:42 <EgoBot> GregorR, I now do IRP
16:49:49 <GregorR> O_O
16:49:50 <nazgjunk> hah.
16:49:58 <GregorR> Oh
16:49:59 <GregorR> Pff
16:50:08 <GregorR> For a quarter of a second, you'd fooled me.
16:50:22 <GregorR> With my own damn bot X-P
16:50:46 <ais523> I got it to do Underload and Deadfish without cheating, though
16:51:03 <ais523> (using Keymaker's BF code for the Underload and my Befunge-93 code for the Deadfish)
16:51:18 <GregorR> Its daemon support isn't particularly reliable *shrugs*
16:53:29 <ais523> once you get used to the requirements for newlines in strategic places, though, it's not too hard to use
16:53:52 <ais523> !deadfish o
16:53:56 <EgoBot> 16
16:54:04 <ais523> !deadfish so
16:54:06 <EgoBot> 0
16:54:27 <ais523> According to the Deadfish reference interpreter, the value becomes 0 whenever it was previously exactly -1 or exactly 256
16:54:50 <ais523> but squaring makes it possible to jump past 256, and then it's very tedious to take it back down again
16:57:28 <oerjan> well...
16:57:57 <oerjan> squaring is module size(int), isn't it?
16:58:00 <oerjan> *modulo
16:58:08 <oerjan> i mean *maxint
16:58:17 <oerjan> i mean, argh!
16:58:31 <ais523> presumably, but I don't know what maxint for the Befunge-93 interpreter is
16:58:36 <ais523> It shouldn't be too hard to find out
16:58:41 <ais523> !deadfish iiio
16:58:44 <EgoBot> 3
16:58:49 <ais523> !deadfish so
16:58:52 <EgoBot> 9
16:58:53 <ais523> !deadfish so
16:58:56 <EgoBot> 81
16:58:57 <ais523> !deadfish so
16:59:00 <EgoBot> 6561
16:59:01 <ais523> !deadfish so
16:59:04 <EgoBot> 43046721
16:59:06 <ais523> !deadfish so
16:59:08 <EgoBot> -501334399
16:59:17 <ais523> that can't be right
16:59:28 <ais523> so that's probably an indication of maxint's value
16:59:28 <oerjan> lessee..
17:00:51 <ais523> 32 bits
17:01:21 <ais523> because 43046721 squared is 6954FE21E3E81 in hex
17:01:42 <ais523> and -501334399 is (infinite number of F's) E21E3E81
17:02:09 <ais523> Of course, it could be anywhere from 29 bits to 36 with that information, but 32's a good guess
17:03:27 <ais523> !undaemon deadfish
17:03:28 <EgoBot> Process 2 killed.
17:03:42 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373016
17:04:21 <ais523> !ps d
17:04:24 <EgoBot> 1 ais523: daemon ul bf
17:04:26 <EgoBot> 2 ais523: daemon deadfish funge93
17:04:28 <EgoBot> 3 ais523: daemon irp bf
17:04:30 <EgoBot> 4 ais523: ps
17:04:34 <ais523> !kill 3
17:04:36 <EgoBot> Process 3 killed.
17:05:52 <oerjan> this means that once you have assured the number is even, you can get it back to 0 by 5 squarings.
17:06:04 <ais523> of course
17:06:10 <ais523> !deadfish iiio
17:06:12 <EgoBot> 3
17:06:15 <ais523> !deadfish ssso
17:06:18 <EgoBot> 6561
17:06:26 <ais523> !deadfish isssso
17:06:28 <EgoBot> 83951616
17:06:35 <ais523> !deadfish so
17:06:38 <EgoBot> 0
17:06:40 -!- jix__ has joined.
17:08:43 <oerjan> in general, 5 squarings, 1 increment, then 5 more squarings.
17:09:03 <oerjan> and you will have either 0 or 1.
17:09:23 <oerjan> which incidentally gives an actual algorithm for testing evenness
17:09:30 <ais523> I wonder if there's a way to get it onto 0 guaranteed, using the special behaviour of 256 and/or -1?
17:09:43 <ais523> Of course, sssssisssssd will get it to 0 guaranteed
17:09:45 <oerjan> oh right.
17:10:14 <oerjan> wait a moment...
17:10:33 <oerjan> does -1 have a square root? that could mess things up a bit
17:11:25 <oerjan> 256 is less important in this case, since you want to reach 0 anyhow
17:11:26 <ais523> no; -1 equals 2^(even number)-1 equals (some number)^2-1 equals (some number plus 1)(some number minus 1)
17:11:50 <ais523> and you can't have either bracket being a square, because they're one away from a square
17:11:58 -!- jix__ has changed nick to jix.
17:12:00 <ais523> and they can't share an odd factor because they differ by 2
17:13:31 <ais523> you know, with an extra register and some sort of flow control Deadfish could actually become a useful language
17:14:58 <ais523> I wonder what my JOIN message looks like from bsmnt_bot's point of view?
17:15:49 <oerjan> basically i think it is :ais523... JOIN #esoteric
17:16:04 <ais523> ~exec self.register_raw(r".*JOIN.*", lambda x,y: sys.stdout(x))
17:16:08 -!- ais523 has left (?).
17:16:17 -!- ais523 has joined.
17:16:18 <bsmnt_bot> :ais523!n=chatzill@chillingi.eee.bham.ac.uk JOIN :#esoteric
17:16:21 <oerjan> possibly JOIN :#esoteric, since they are equivalent
17:16:22 <bsmnt_bot> :oerjan!n=oerjan@hagbart.nvg.ntnu.no PRIVMSG #esoteric :possibly JOIN :#esoteric, since they are equivalent
17:16:30 <oerjan> which it was
17:16:58 <ais523> maybe we could get a bsmnt_bot welcoming service going
17:17:09 <oerjan> ~exec self.raw_regex_queue.pop()
17:17:38 <ais523> I was just looking for that command in the logs when you typed it...
17:17:42 <oerjan> seems trivial.
17:18:30 <oerjan> i had it in my own history.
17:19:27 <ais523> ~exec self.register_raw(r":([^!]*)[^ ]* JOIN.*", lambda x,y: sys.stdout(y.group(1)))
17:19:33 -!- ais523 has left (?).
17:19:41 -!- ais523 has joined.
17:19:42 <bsmnt_bot> ais523
17:20:01 <ais523> ~exec self.raw_regex_queue.pop()
17:20:19 <ais523> ~exec self.register_raw(r":([^!]*)[^ ]* JOIN.*", lambda x,y: sys.stdout("Hello, "+y.group(1)+"!"))
17:20:40 <ais523> that should do for now
17:21:01 <ais523> I need to add the fast-loading low-fanciness logs to the wiki
17:21:28 <oerjan> the tunes one, you mean
17:21:44 <ais523> that's the one
17:21:56 <oerjan> yeah, the others have recently become nearly unbearably slow
17:23:26 <oerjan> Something intermediate would have been nice.
17:23:44 -!- kxspxr has joined.
17:23:44 <bsmnt_bot> Hello, kxspxr!
17:23:58 -!- kxspxr has quit (Client Quit).
17:24:17 <ais523> I think bsmnt_bot frightened them off, probably
17:24:17 <oerjan> hm, this _could_ become annoying after netsplits.
17:24:43 <ais523> but then bsmnt_bot would probably just get kicked temporarily for flooding
17:24:58 <ais523> just like happens to EgoBot if you feed it an infinite loop that outputs something by mistake
17:25:04 <oerjan> except that i think it does its own throttling
17:25:41 <oerjan> EgoBot throttles too, but I think it has problems with huge lines
17:25:45 <ais523> but bsmnt_bot isn't throttled
17:25:49 <ais523> as far as I remember
17:26:04 <ais523> ~exec sys.stdout("a\nb\nc\nd\ne\nf\ng\nh")
17:26:05 <bsmnt_bot> a
17:26:05 <bsmnt_bot> b
17:26:05 <bsmnt_bot> c
17:26:06 <bsmnt_bot> d
17:26:06 <bsmnt_bot> e
17:26:07 <bsmnt_bot> f
17:26:09 <bsmnt_bot> g
17:26:10 <bsmnt_bot> h
17:26:12 <oerjan> i thought i remembered bsmntbombdood saying he put throttling on sys.stdout
17:26:21 <ais523> oh, the throttle only kicks in after 4 lines
17:26:21 <oerjan> in fact i think we discussed how to do it
17:26:26 <ais523> which is why I hadn't noticed it before
17:27:03 <oerjan> on the other hand the IRC network may do its own throttling in border cases
17:27:45 <oerjan> i don't know but it's suggested by the original RFC
17:29:05 <oerjan> btw i am not sure your argument that -1 has no square root mod 2^n holds
17:29:33 <ais523> no, it's an argument that -1 has no square root mod 4^n
17:29:36 <ais523> which applies in this case
17:29:43 <oerjan> ok
17:29:53 <oerjan> well i still don
17:30:05 <oerjan> 't get the argument.
17:30:32 <ais523> 4^n-1 = (2^n-1)(2^n+1)
17:30:44 <ais523> both brackets are odd, and so have no even factors
17:30:52 <ais523> they can't both be square numbers because they differ by 2
17:31:06 <ais523> and because they differ by 2, they can't share an odd factor
17:31:15 <oerjan> but the square could be a*4^n-1
17:31:31 <ais523> of course, I missed that
17:39:29 <ais523> anyway, even if -1 is hit in the sequence it isn't a problem
17:39:35 -!- anonfunc has quit.
17:39:41 <ais523> because you still end up with 0 or 1 before the final d
17:40:28 <oerjan> right
17:41:24 <oerjan> on the other hand Haskell does not give me square roots of -1 for any power of 2 that I've tested
17:41:29 <ais523> of course, relying on overflow for sssss removes any chance of a Turing-complete system unless you have an infinite number of registers
17:42:38 <oerjan> could use a strange number ring.
17:42:55 <oerjan> in which 2^32 = 0, but there are infinitely many odd numbers
17:43:30 <ais523> you could define any number that's a multiple of 2^32 to be 0
17:43:41 <ais523> much the same way as 256 is defined to be 0 in Deadfish
17:44:02 <oerjan> hm...
17:44:51 <oerjan> well, since the language already has that strangeness.
17:44:58 <ais523> the reference interpreter defines the data type to be 'unsigned int' from C
17:45:08 <oerjan> does it?
17:45:24 <ais523> it's on the wiki. I wonder if this makes the test against -1 redundant?
17:45:34 <ais523> or if the -1 is converted to unsigned before the test?
17:45:48 <oerjan> one way or the other there has to be a conversion
17:46:12 <ais523> of course, 'unsigned int' is allowed by the C specification to be as big as the implementation wants, as long as it's at least 16 bits
17:46:21 <ais523> so we may as well make it infinite
17:46:53 <oerjan> if we make it infinite we need to modify d
17:47:05 <oerjan> put the -1 test there instead.
17:47:26 <ais523> and simultaneously deal with the signed-vs-unsigned problem
17:47:38 -!- sebbu2 has joined.
17:47:39 <bsmnt_bot> Hello, sebbu2!
17:49:09 <ais523> 10 LET 256 = 0
17:49:22 <ais523> 20 LET -1 = 0
17:49:25 <oerjan> i have a vague idea that there are no square roots of -1 for proper prime powers
17:49:46 <oerjan> let me look up the mobius function
17:50:00 <oerjan> ah, Forte
17:50:18 <ais523> one of my few esolangs I never wrote an interpreter for
17:50:29 <oerjan> i have considered doing it
17:50:37 <oerjan> but never got around to it
17:52:11 <ais523> of course, Forte is limited to nonnegative integers
17:52:41 <oerjan> it is?
17:52:54 <ais523> apparently. I had to read the spec again though to make sure
17:53:12 <oerjan> how is - defined then?
17:54:17 <ais523> the spec doesn't make it very clear. It doesn't even define +, *, or /, now I've looked (it defines 'division', sort of, but doesn't explain the relationship to the / operator)
17:54:22 <ais523> I'll go and fix it now
17:55:41 <ais523> OK, - is now officially undefined if it would lead to a negative result
17:56:58 <ais523> or it would be if the wiki hadn't crashed the instant I tried to save
17:57:23 * ais523 tries again
17:57:26 <ais523> it worked this time
17:58:01 <oerjan> i hope it wasn't because i immediately tried to load the page
17:58:34 <oerjan> the justification for Forte resembles the justification for Smetana :)
18:00:43 <ais523> I actually tried programming in it; programs are mostly short commands, with huge gaps in numbering now and then, and with the occasional huge command that renumbers itself and all the others in the loop
18:00:56 <ais523> that's why there's a colon line-break provision
18:01:26 <ais523> I suspect that in larger programs it would be more efficient to use a loop to iterate through each command in a loop and renumber it
18:04:03 -!- UpTheDownstair has joined.
18:04:04 <bsmnt_bot> Hello, UpTheDownstair!
18:04:13 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
18:07:05 -!- sebbu has quit (Connection timed out).
18:09:48 <oerjan> I think I'll change your edit into a table.
18:12:22 <ais523> Yes, that looks better.
18:14:45 -!- NK\ has changed nick to NK`.
18:19:22 -!- ais523 has quit.
18:41:05 * SimonRC goes to dinner.
18:42:58 * oerjan finds a suspicious absense of information about square roots mod n when n is a prime power
18:44:44 <oerjan> oh wait.
18:44:55 * oerjan slaps head
18:45:13 <oerjan> if there are none mod 4 then there cannot be any mod 4n either.
18:47:21 -!- calamari has joined.
18:47:22 <bsmnt_bot> Hello, calamari!
18:47:39 <calamari> wow, a greet bot :)
18:47:41 <calamari> hi
18:47:53 <calamari> C++ > calamari :(
18:48:33 <oerjan> >>> "C++" > "Calamari"
18:48:34 <bsmnt_bot> False
18:48:45 <oerjan> bsmnt_bot doesn't agree
18:48:52 <calamari> cool, I have a chance then
18:50:24 -!- goban has quit (Read error: 104 (Connection reset by peer)).
18:51:01 <calamari> error: request for member 'allocate' in 'MyObject::pool', which is of non-class type 'Pool*'
18:51:21 -!- goban has joined.
18:51:22 <bsmnt_bot> Hello, goban!
18:51:31 <calamari> I think Java is messing me up hehe
18:54:36 <calamari> ahh, I was using . when I should have been using ->
18:59:36 -!- crathman has joined.
18:59:36 <bsmnt_bot> Hello, crathman!
19:00:12 <calamari> oerjan: is bsmnt_bot yours?
19:02:30 <oerjan> no, it's bsmntbombdood's
19:02:54 <oerjan> but me and ais523 played a bit with it
19:04:03 <oerjan> he is responsible for the greetings.
19:08:46 -!- goban has quit (Connection timed out).
19:08:59 -!- goban has joined.
19:08:59 <bsmnt_bot> Hello, goban!
19:18:54 -!- goban has quit (Read error: 54 (Connection reset by peer)).
19:19:09 -!- goban has joined.
19:19:09 <bsmnt_bot> Hello, goban!
19:21:24 <bsmntbombdood> oerjan: yeah, sys.stdout is throttled, but not for multiple calls
19:21:53 <oerjan> oh
19:22:11 <bsmntbombdood> >>> 1+1
19:22:11 <bsmnt_bot> 2
19:22:15 <bsmntbombdood> fun :)
19:22:34 <bsmntbombdood> >>> def f(x): return x
19:22:34 -!- bsmnt_bot has quit (Remote closed the connection).
19:22:37 -!- bsmnt_bot has joined.
19:22:41 <oerjan> ahem
19:22:43 <bsmntbombdood> yep.
19:22:50 <bsmntbombdood> eval only does expressions
19:22:51 <oerjan> it does only expressions.
19:23:02 <bsmntbombdood> stupid python
19:23:07 <oerjan> hmm...
19:23:19 <oerjan> can exec return the result?
19:23:29 <bsmntbombdood> I was thinking about a repl for it
19:23:35 <bsmntbombdood> no:(
19:23:43 <bsmntbombdood> exec is a statement
19:25:01 <oerjan> hmph. so neither eval nor exec will work as repl for statements.
19:25:17 <bsmntbombdood> you have to do analysis of the code
19:25:31 <bsmntbombdood> exec statements, eval expressions
19:26:41 <oerjan> just as well to have two different commands then. But you should do something about bsmnt_bot crashing on syntax errors.
19:27:15 <oerjan> i mean, shouldn't a do_exec be isolated?
19:27:21 <bsmntbombdood> it is
19:27:28 <bsmntbombdood> but you're not using do_exec
19:27:44 <oerjan> i'm not? hm.
19:27:56 <bsmntbombdood> nope
19:28:08 <bsmntbombdood> when callbacks all executed, exceptions aren't caught
19:28:15 <oerjan> lessee...
19:28:19 <bsmntbombdood> you used plain "eval" in the callback
19:33:43 <SimonRC> hmm
19:33:48 <SimonRC> ~exec sys=0
19:34:02 <SimonRC> ~exec print __names__
19:34:02 <bsmnt_bot> NameError: name '__names__' is not defined
19:34:08 <SimonRC> ~exec print __globals__
19:34:09 <bsmnt_bot> NameError: name '__globals__' is not defined
19:34:26 <SimonRC> hmm
19:34:44 <SimonRC> ~exec print type(sys0
19:34:45 <bsmnt_bot> SyntaxError: unexpected EOF while parsing
19:34:48 <SimonRC> ~exec print type(sys)
19:34:53 <SimonRC> hmm
19:34:58 <lament> ~exec print type(type)
19:34:59 <bsmntbombdood> ~exec exec "def protected(f): try:\n return f()\n\except:\n pass\n\nself.protected = protected"
19:34:59 <bsmnt_bot> SyntaxError: invalid syntax
19:35:26 <bsmntbombdood> ~exec sys.stdout(type(type))
19:35:27 <bsmnt_bot> <type 'type'>
19:35:39 <bsmntbombdood> print doesn't work
19:36:11 <lament> ~exec sys.exit()
19:36:24 <oerjan> do callbacks run in threads or just do_exec's
19:36:32 <bsmntbombdood> oerjan: neither
19:36:38 <bsmntbombdood> callbacks run in the main thread
19:36:49 <lament> ~exec sys.stdout("hello")
19:36:50 <bsmnt_bot> hello
19:37:12 <oerjan> eh, so do_exec's don't run in threads either?
19:37:18 <lament> ~exec sys.stdout(sys.version)
19:37:19 <bsmnt_bot> 2.4.3 (#1, Oct 25 2006, 21:45:16)
19:37:19 <bsmnt_bot> [GCC 4.1.1 (Gentoo 4.1.1)]
19:37:24 <bsmntbombdood> do_exec starts a thread
19:37:32 <bsmntbombdood> ~exec exec "
19:37:32 <bsmnt_bot> SyntaxError: EOL while scanning single-quoted string
19:37:34 <bsmntbombdood> erm
19:37:34 <oerjan> that's what i thought.
19:37:43 <bsmntbombdood> ~exec exec "
19:37:44 <bsmnt_bot> SyntaxError: EOL while scanning single-quoted string
19:37:46 <bsmntbombdood> ~exec exec "
19:37:51 <bsmnt_bot> SyntaxError: EOL while scanning single-quoted string
19:38:06 <lament> ~exec sys.stdout(sys.path)
19:38:09 <oerjan> so protected should do so as well, otherwise a repl based on it may lock up the bot.
19:38:11 <bsmnt_bot> ['/bot', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/lib/python2.4/site-packages', '/usr/lib/python2.4/site-packages/Numeric', '/usr/lib/python2.4/site-packages/dbus']
19:38:24 <bsmntbombdood> ~exec exec "def protected(f):\n try:\n return f()\n except:\n pass\nself.protected=protected"
19:38:38 <lament> can you define functions?
19:38:51 <lament> (and call them later)
19:38:51 <bsmntbombdood> hackishly
19:39:13 <bsmntbombdood> ~exec self.protected(lambda: raise "foo")
19:39:14 <bsmnt_bot> SyntaxError: invalid syntax
19:39:15 <oerjan> sure, but you need to use exec with strings and \n escapes
19:39:23 <bsmntbombdood> bloody hell
19:39:29 <SimonRC> ~exec sys.__dict__
19:39:44 <SimonRC> ~exec print sys.__dict__
19:39:48 <SimonRC> :-S
19:39:52 <lament> ~~exec sys.stdout(locals())
19:39:54 <lament> ~exec sys.stdout(locals())
19:39:55 <bsmnt_bot> {'message': ':lament!n=lament@S010600110999ad06.vc.shawcable.net PRIVMSG #esoteric :~exec sys.stdout(locals())', 'r': <_sre.SRE_Match object at 0xb7c4a0f8>, 'command': 'sys.stdout(locals())', 'self': <__main__.IRCbot instance at 0xb7c4b14c>}
19:40:25 <lament> ~exec sys.stdout(self.__dict__)
19:40:25 <bsmnt_bot> {'commands_running_lock': <thread.lock object at 0xb7d10100>, 'ident': 'bsmnt', 'realname': 'bsmntbombdood bot', 'commands_running': [('sys.stdout(self.__dict__)', 1172518674.4520161, ({'thread_info': <thread._local object at 0xb7cd5890>, 'exec_global_tracer': <function exec_global_tracer at 0xb7c3da74>, 'pprint': <module 'pprint' from '/usr/lib/python2.4/pprint.pyc'>, 're
19:40:26 <bsmnt_bot> ': <module 're' from '/usr/lib/python2.4/re.pyc'>, 'SysWrapper': <class __main__.SysWrapper at 0xb7c393bc>, 'exec_local_tracer': <function exec_local_tracer at 0xb7c4d454>, '__doc__': None, 'math': <module 'math' from '/usr/lib/python2.4/lib-dynload/math.so'>, 'IRCbot': <class __main__.IRCbot at 0xb7c3935c>, 'args': {'ident': 'bsmnt', 'realname': 'bsmntbombdood bot', 'chan
19:40:26 <bsmnt_bot> ': '#esoteric', 'nick': 'bsmnt_bot', 'host': '85.188.1.26', 'exec_chans': ['#esoteric', '#baadf00d'], 'owner': 'bsmntbombdood!\\S*gavin@\\S*'}, '__builtins__': <module '__builtin__' (built-in)>, '__file__': '/bot/ircbot.py', 'inspect': <module 'inspect' from '/usr/lib/python2.4/inspect.pyc'>, 'IRCFileWrapper': <class __main__.IRCFileWrapper at 0xb7c3938c>, 'sys': <module '
19:40:29 -!- bsmnt_bot has quit (Excess Flood).
19:40:32 -!- bsmnt_bot has joined.
19:40:33 <bsmntbombdood> baad idea
19:40:46 -!- goban has quit (Connection timed out).
19:40:49 <bsmntbombdood> although that shouldn't have flooded
19:41:21 -!- goban has joined.
19:41:29 <oerjan> there may be something about long lines and flooding
19:42:01 <bsmntbombdood> yeah
19:42:03 <oklopol> ~exec print "a"
19:42:04 <lament> ~exec self.owner = 'lament!\\S*lament@\\S*'
19:42:24 <lament> ~exec sys.stdout(self.owner)
19:42:25 <bsmnt_bot> lament!\S*lament@\S*
19:42:28 <lament> worked :)
19:42:32 <bsmntbombdood> lament: won't do anything
19:42:36 <oerjan> you rascal you
19:42:59 <oerjan> why not?
19:43:03 <bsmntbombdood> regexes are generated when the bot is initialized
19:43:07 <bsmntbombdood> not dynamically
19:43:19 <lament> and self.owner is never looked up again?
19:43:20 <bsmntbombdood> anyway, you can do everything from ~exec
19:43:25 <bsmntbombdood> lament: never
19:43:32 <lament> sounds...useful
19:43:50 <bsmntbombdood> read the codez
19:44:30 <lament> ~exec open('lament', 'w').write('hello')
19:44:31 <bsmnt_bot> IOError: [Errno 13] Permission denied: 'lament'
19:45:10 <bsmntbombdood> no write access anywhere
19:45:16 <bsmntbombdood> exce[t
19:45:26 <bsmntbombdood> ~exec sys.stdout(os.listdir("."))
19:45:27 <bsmnt_bot> ['bin', 'bot', 'etc', 'lib', 'usr']
19:45:31 <bsmntbombdood> ~exec sys.stdout(os.listdir("/bot"))
19:45:32 <bsmnt_bot> ['betterbot.py', 'test.pickle', 'foo.py~', 'ski_repl.py', 'foo.py', 'start.sh', 'better.sh', 'ircbot.py']
19:45:42 <bsmntbombdood> /bot/test.pickle
19:45:46 <bsmntbombdood> is writable
19:45:55 <lament> mm
19:47:32 <lament> ~exec os.remove('/bot/test.pickle') and os.mkdir('/bot/test.pickle') and open('/bot/test.pickle/lament', 'w').write('hello')
19:47:33 <bsmnt_bot> OSError: [Errno 13] Permission denied: '/bot/test.pickle'
19:48:22 <oerjan> that's not immensely clever.
19:48:41 <oerjan> well, now nothing is writable.
19:49:00 <bsmntbombdood> heh
19:49:12 <lament> oerjan: shhh, that's only until we get root
19:49:19 <SimonRC> ~exec sys.stdout=0
19:49:24 <SimonRC> ~exec sys.stderr=0
19:49:33 <SimonRC> ~exec del sys
19:49:34 <bsmnt_bot> NameError: name 'sys' is not defined
19:49:36 <SimonRC> hehehe
19:49:39 <SimonRC> !
19:49:42 <EgoBot> Huh?
19:49:51 <bsmntbombdood> SimonRC: that will only effect it for the current exec
19:49:54 -!- NK` has changed nick to NK`divx.
19:49:56 <SimonRC> bah
19:51:37 <bsmntbombdood> i r clevar!
19:55:19 <lament> ~exec sys.stdout(os.popen('ls').read())
19:56:06 <bsmntbombdood> ls isn't in the chroot
19:56:10 <SimonRC> ~exec sys.stdout(sys.__dict__)
19:56:11 <bsmnt_bot> {'_SysWrapper__sys': <module 'sys' (built-in)>, 'stderr': <__main__.IRCFileWrapper instance at 0xb7c2f62c>, 'stdout': <__main__.IRCFileWrapper instance at 0xb7c2f5ec>}
19:56:15 <SimonRC> hmm
19:57:00 <SimonRC> ~exec [i.clear() for i in sys.__dict__]
19:57:01 <bsmnt_bot> AttributeError: 'str' object has no attribute 'clear'
19:57:12 <bsmntbombdood> clear?
19:57:17 <SimonRC> ~exec [i.__dict__.clear() for i in sys.__dict__]
19:57:18 <bsmnt_bot> AttributeError: 'str' object has no attribute '__dict__'
19:57:23 <SimonRC> sigh
19:57:31 <SimonRC> ~exec sys.__dict__.clear()
19:57:34 <bsmntbombdood> you can't do anything to sys
19:57:35 -!- bsmnt_bot has quit (Remote closed the connection).
19:57:38 -!- bsmnt_bot has joined.
19:57:38 <bsmntbombdood> it gets replaced
19:57:49 * SimonRC tries it again
19:57:50 <SimonRC> ~exec sys.__dict__.clear()
19:58:02 <SimonRC> hmm, didn't quit this time
19:58:09 -!- bsmnt_bot has quit (Remote closed the connection).
19:58:11 -!- bsmnt_bot has joined.
19:58:12 <bsmntbombdood> interesting
19:58:15 <bsmntbombdood> I know
19:58:17 <SimonRC> oh, now it did
19:58:35 -!- goban has quit (Connection timed out).
19:58:42 -!- goban has joined.
19:59:02 <bsmntbombdood> there's a method, __getattr__, that gets called when a attribute on a object that's not there is looked up
19:59:32 <bsmntbombdood> if gettattr gets an attribute from it's self that isn't there, it recurses forever
19:59:46 <SimonRC> heh
20:00:00 <SimonRC> hmm http://www.angryfacts.com/
20:01:01 <bsmntbombdood> ok fixed
20:01:39 <bsmntbombdood> and back to class i go
20:04:24 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.2/2007021917]").
20:36:28 -!- ShadowHntr has joined.
21:07:17 -!- goban has quit (Read error: 104 (Connection reset by peer)).
21:07:43 -!- goban has joined.
21:17:53 -!- UpTheDownstair has changed nick to nazgjunk.
21:26:59 -!- goban has quit (Connection reset by peer).
21:27:02 -!- goban has joined.
21:45:07 -!- goban has quit (Remote closed the connection).
21:45:17 -!- goban has joined.
21:52:36 -!- ShadowHntr has quit (Client Quit).
21:52:37 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:03:27 -!- sebbu has joined.
22:07:56 -!- goban has quit (Connection reset by peer).
22:08:01 -!- goban has joined.
22:16:59 -!- goban has quit (Operation timed out).
22:22:22 -!- sebbu2 has quit (Connection timed out).
22:27:55 -!- goban has joined.
22:30:02 <bsmntbombdood> ~exec self.protected(lambda: 1/0)
22:30:02 <bsmnt_bot> AttributeError: IRCbot instance has no attribute 'protected'
22:30:27 <bsmntbombdood> ~exec exec "def protected(f):\n try:\n return f()\n except:\n pass\nself.protected=protected"
22:30:33 <bsmntbombdood> ~exec self.protected(lambda: 1/0)
22:30:41 <bsmntbombdood> fun
23:01:56 -!- digital_me has joined.
23:02:05 <oklopol> ~exec print "I wanna play too :<"
23:03:09 * bsmntbombdood needs to fix print
23:04:33 <oklopol> oh yeah
23:05:02 <oklopol> ~exec sys.stdout("Does this work?")
23:05:03 <bsmnt_bot> Does this work?
23:05:08 <oklopol> :DDDDD
23:05:10 <oklopol> yayayay!
23:05:23 <oklopol> ~exec sys.stdout([i+1 for i in range(3)])
23:05:24 <bsmnt_bot> [1, 2, 3]
23:05:39 <oklopol> ~exec sys.stdout((i for i in range 3))
23:05:40 <bsmnt_bot> SyntaxError: invalid syntax
23:05:44 <oklopol> orly
23:05:52 <oklopol> ~exec sys.stdout((1,2,3,4))
23:05:52 <bsmnt_bot> (1, 2, 3, 4)
23:06:00 <oklopol> omg i'm so pro at python
23:06:33 <bsmntbombdood> indeed
23:07:27 <bsmntbombdood> oh man
23:07:36 <bsmntbombdood> #scheme just had a great esolang idea
23:07:49 <bsmntbombdood> a lazy non-pure language
23:07:57 <oklopol> ~exec sys.stdout(map((lambda a : a+"."),["a","b","c","d"]))
23:07:58 <bsmnt_bot> ['a.', 'b.', 'c.', 'd.']
23:08:10 <oklopol> what would that mean?
23:08:27 <oklopol> non-pure... non-imperative?
23:08:35 <oklopol> i'm a bit lost on terms from time to time
23:08:48 <bsmntbombdood> non-pure is imperative
23:08:54 <oklopol> yeah
23:08:57 <oklopol> i meant that
23:09:06 <bsmntbombdood> of course, side effects would have to be _required_ to be sufficiently esoteric
23:09:55 <oklopol> i've been thinking about this esolang where functions have every arithmetic operation defined
23:10:11 <oklopol> and somehow the programmer would be forced to use that feature of course
23:10:29 <bsmntbombdood> what?
23:11:03 <oklopol> a lang where functions are _really_ first-class citizens
23:11:22 <oklopol> that is of course already done with math
23:11:34 <bsmntbombdood> you mean like all functional languages?
23:11:49 <oklopol> no
23:12:38 <oklopol> hmm
23:12:40 <bsmntbombdood> then what?
23:12:44 <oerjan> instance Num a => Num (b -> a)
23:12:52 <oklopol> can you do arithmetic for functions in haskell by default?
23:13:01 <oklopol> for any two functions?
23:13:10 <oerjan> nope, you need the instance i mentioned :)
23:13:22 <oklopol> mmmmmmm yeah :P
23:13:42 <bsmntbombdood> you mean like f+g = \x.f(x) + g(x)?
23:14:15 <oklopol> usually it means that
23:14:32 <oklopol> but i wouldn't use the same basic arithmetic operations
23:14:49 <oklopol> more a textual conversion
23:14:56 <oklopol> so it wouldn't make sence like that
23:15:19 <bsmntbombdood> (define (f+ f g) (lambda (x) (+ (f x) (g x)))?
23:15:35 -!- sebbu2 has joined.
23:15:39 <oklopol> :D
23:15:51 <oklopol> i find that the same thing you did with haskell
23:16:13 <oklopol> you think too functional, i've already shifted to stacks
23:16:25 <oklopol> much more esoteric when you shuffle stack operations
23:16:34 <oklopol> like zip
23:17:03 <oklopol> "shifted"
23:17:13 <oklopol> i love my vocabulary
23:18:30 <oklopol> hmm, functions are a set of imperative commands that work on a stack, a function is executed, then used a "crazy" operation on, then executed again, repeated until in normal form
23:18:43 <oklopol> functionalbolge
23:18:51 <oklopol> but with a better name
23:19:14 <oklopol> normal form might mean there is no function anymore
23:20:11 <oklopol> now there could be anyther stack, which is full of other functions that wait for their turn, functions can rely on themselves after the crazy operation or can call another function to be executed after they are in normal form or "dead"
23:20:58 <oklopol> the crazy operation in malbolge is boring since it seems so random, i think it should be more logical, but craziers
23:21:00 <oklopol> *-s
23:21:53 <oklopol> hmm... maybe i think about this at school tomorrow
23:22:04 <oklopol> this isn't a good time
23:22:28 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
23:22:41 <bsmntbombdood> ~exec fooo
23:22:41 <bsmnt_bot> NameError: name 'fooo' is not defined
23:23:02 -!- nazgjunk has joined.
23:23:25 <oklopol> ~exec foo="self.stdout(\"okokokoko\")"
23:23:32 <oklopol> ~exec exec(foo)
23:23:33 <bsmnt_bot> NameError: name 'foo' is not defined
23:23:36 <oklopol> :<
23:23:58 <oklopol> ~exec self.dict(foo)="self.stdout(\"okokokoko\")"
23:23:59 <bsmnt_bot> SyntaxError: can't assign to function call (<string>, line 1)
23:24:07 <oklopol> ~exec self.dict[foo]="self.stdout(\"okokokoko\")"
23:24:08 <bsmnt_bot> AttributeError: IRCbot instance has no attribute 'dict'
23:24:17 <oklopol> ~exec self.__dict__[foo]="self.stdout(\"okokokoko\")"
23:24:18 <bsmnt_bot> NameError: name 'foo' is not defined
23:24:24 <oklopol> ~exec self.__dict__["foo"]="self.stdout(\"okokokoko\")"
23:24:29 <oklopol> ~exec exec(foo)
23:24:30 <bsmnt_bot> NameError: name 'foo' is not defined
23:24:40 <oklopol> ~exec exec(self.__dict__["foo"])
23:24:40 <bsmnt_bot> AttributeError: IRCbot instance has no attribute 'stdout'
23:24:59 <oklopol> ~exec self.__dict__["foo"]="sys.stdout(\"okokokoko\")"
23:25:04 <oklopol> ~exec exec(self.__dict__["foo"])
23:25:05 <bsmnt_bot> okokokoko
23:25:08 <oklopol> :DDDD
23:25:19 <oklopol> me so proud
23:28:50 <oklopol> ~exec self.__dict__["oko"]=[]
23:29:00 <oklopol> ~exec sys.stdout(self.__dict__["oko"])
23:29:01 <bsmnt_bot> []
23:29:08 <oklopol> ~exec self.__dict__["oko"].append("sdfg")
23:29:09 <oklopol> ~exec sys.stdout(self.__dict__["oko"])
23:29:10 <bsmnt_bot> ['sdfg']
23:35:07 -!- sebbu has quit (Read error: 110 (Connection timed out)).
23:37:11 <oklopol> self.__dict__["B"].append("def brainfuck(code):")
23:37:11 <oklopol> self.__dict__["B"].append(" cntr=0")
23:37:11 <oklopol> self.__dict__["B"].append(" i=0")
23:37:11 <oklopol> self.__dict__["B"].append(" memi=0")
23:37:11 <oklopol> self.__dict__["B"].append(" mem=[]")
23:37:11 <oklopol> self.__dict__["B"].append(" for i in range(30000):")
23:37:13 <oklopol> self.__dict__["B"].append(" mem.append(0)")
23:37:15 <oklopol> self.__dict__["B"].append(" i=0")
23:37:17 <oklopol> darn.
23:37:22 <oklopol> execs
23:37:35 <oklopol> ~exec self.__dict__["B"]=[]
23:38:29 <oklopol> ~exec self.__dict__["B"].append("def brainfuck(code):")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" cntr=0")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" i=0")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" memi=0")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" mem=[]")
23:38:30 <oklopol> ~exec self.__dict__["B"].append(" for i in range(30000):")
23:38:31 <oklopol> ~exec self.__dict__["B"].append(" mem.append(0)")
23:38:34 <oklopol> ~exec self.__dict__["B"].append(" i=0")
23:38:44 <oklopol> ~exec sys.stdout(self.__dict__["B"])
23:38:45 <bsmnt_bot> ['def brainfuck(code):', ' cntr=0', ' i=0', ' memi=0', ' mem=[]', ' for i in range(30000):', ' mem.append(0)', ' i=0']
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" while i<len(code):")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" if code[i]==\'+\':")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" mem[memi]+=1")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'-\':")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" mem[memi]-=1")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'>\':")
23:39:09 <oklopol> ~exec self.__dict__["B"].append(" memi+=1")
23:39:11 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'<\':")
23:39:14 <oklopol> ~exec self.__dict__["B"].append(" memi-=1")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'.\':")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" sys.stdout(chr(mem[memi]))")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" #elif code[i]==\',\':")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" #mem[memi]=input()")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'[\':")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" if mem[memi]==0:")
23:39:31 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:39:33 <oklopol> ~exec self.__dict__["B"].append(" opens=1")
23:39:35 <oklopol> ~exec sys.stdout(self.__dict__["B"])
23:39:36 <bsmnt_bot> ['def brainfuck(code):', ' cntr=0', ' i=0', ' memi=0', ' mem=[]', ' for i in range(30000):', ' mem.append(0)', ' i=0', ' while i<len(code):', " if code[i]=='+':", ' mem[memi]+=1', " elif code[i]=='-':", ' mem[memi]-=1', " elif code[i]=='>':", ' memi+=1', " elif code[i]=='<':", '
23:39:36 <bsmnt_bot> memi-=1', " elif code[i]=='.':", ' sys.stdout(chr(mem[memi]))', " #elif code[i]==',':", ' #mem[memi]=input()', " elif code[i]=='[':", ' if mem[memi]==0:', ' i+=1', ' opens=1']
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" while opens!=0:")
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" if code[i]==\'[\':")
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" opens+=1")
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\']\':")
23:39:58 <oklopol> hmm
23:40:06 <oklopol> soon either i get kickbanned or the bot dies...
23:40:10 <oklopol> well, let's continue
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" opens-=1")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" i-=1")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\']\':")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" if mem[memi]!=0:")
23:40:12 <oklopol> ~exec self.__dict__["B"].append(" i-=1")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" opens=1")
23:40:23 <oklopol> ~exec aelf.__dict__["B"].append(" while opens!=0:")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" if code[i]==\'[\':")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" opens-=1")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\']\':")
23:40:24 <bsmnt_bot> NameError: name 'aelf' is not defined
23:40:24 <oklopol> ~exec self.__dict__["B"].append(" opens+=1")
23:40:27 <oklopol> ~exec self.__dict__["B"].append(" i-=1")
23:40:29 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:40:30 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:40:37 <oklopol> ...? aha
23:40:39 <AfterDeath> lol
23:41:17 <oklopol> ~exec self.__dict__["B"] = reduce(lambda a,b : a+"\n"+b, self.__dict__["B"])
23:41:36 <oklopol> ~exec brainfuck("+++++++.")
23:41:36 <bsmntbombdood> looking for "\n".join ?
23:41:36 <bsmnt_bot> NameError: name 'brainfuck' is not defined
23:41:39 <oklopol> :P
23:41:43 <oklopol> i have no idea :DD
23:42:05 <oklopol> can i dump B as a function somehow?
23:42:16 <oklopol> i don't really know how that works, just testing :P
23:42:18 <bsmntbombdood> ~exec exec "\n".join(self.B) + "self.brainfuck = brainfuck"
23:42:19 <bsmnt_bot> SyntaxError: invalid syntax
23:42:42 <oklopol> oh, yeah, that's a nice syntax
23:42:46 <oklopol> import string?
23:42:49 <oklopol> i dunno
23:43:06 <oklopol> exec
23:43:17 <oklopol> ~exec "\n".join(self.B) + "self.brainfuck = brainfuck"
23:43:18 <oklopol> ?
23:43:30 <oklopol> ~exec brainfuck("+++.")
23:43:31 <bsmnt_bot> NameError: name 'brainfuck' is not defined
23:44:01 <oklopol> bsmntbombdood, help me! :D
23:44:18 <bsmntbombdood> you have to execute it
23:44:27 <oklopol> with exec() ?
23:44:33 <bsmntbombdood> yeah
23:44:38 <oklopol> it's a function, how do i do that? :o
23:44:46 <lament> eval
23:45:05 <bsmntbombdood> exec
23:45:06 <oklopol> ~exec eval("brainfuck(+++.)")
23:45:07 <bsmnt_bot> SyntaxError: invalid syntax
23:45:11 <bsmntbombdood> no...
23:45:16 <oklopol> ~exec exec("brainfuck(+++.)")
23:45:17 <bsmnt_bot> SyntaxError: invalid syntax
23:45:17 <oklopol> then?
23:45:20 <oklopol> :P
23:45:33 <bsmntbombdood> execute the function code
23:45:40 <bsmntbombdood> you have a syntax error in it
23:45:48 <oklopol> might be
23:45:51 <oklopol> actually
23:46:03 <oklopol> i just took a random thingie
23:46:41 <oklopol> it works
23:47:05 <oklopol> ~exec exec(self.__dict__["B"])
23:47:06 <bsmnt_bot> SyntaxError: invalid syntax
23:47:18 <oklopol> ~exec eval(self.__dict__["B"])
23:47:19 <bsmnt_bot> SyntaxError: invalid syntax
23:47:28 <oklopol> i see...
23:47:37 <oklopol> might be a copy paste error
23:47:42 <oklopol> :PP
23:47:45 <oklopol> that'd be fun!
23:48:14 <oklopol> the tabs might now work
23:49:02 <bsmntbombdood> look in #bsmnt_bot_errors to see where the errors are
23:49:09 <oklopol> good idea
23:49:29 <oklopol> ~exec exec(self.__dict__["B"])
23:49:29 <bsmnt_bot> SyntaxError: invalid syntax
23:52:33 <oklopol> actually
23:52:53 <oklopol> i might've found my problem, now that i actually looked at the spot in the code where the error was
23:54:14 -!- sebbu2 has quit (Client Quit).
23:54:52 -!- bsmnt_bot has quit (Excess Flood).
23:54:56 -!- bsmnt_bot has joined.
23:56:39 <oklopol> maybe i'll make a bit shorter an interpreter...
2007-02-27
00:11:16 <oklopol> meh
00:11:36 <oklopol> to sleep, 24 lines is the best i can do without remaking it --->
00:14:37 -!- nazgjunk has quit ("Leaving").
00:29:25 -!- nooga has quit (Read error: 110 (Connection timed out)).
00:36:56 -!- oerjan has quit ("Sleep!").
00:41:09 -!- cmeme has quit ("Client terminated by server").
00:41:36 -!- cmeme has joined.
00:41:37 -!- nooga has joined.
00:49:20 -!- Shaunaf has left (?).
01:34:25 -!- crathman has joined.
01:36:36 -!- ShadowHntr has joined.
01:54:18 -!- crathman_ has joined.
01:58:13 -!- crathman_ has quit (Client Quit).
02:11:42 -!- crathman has quit (Read error: 110 (Connection timed out)).
02:17:24 -!- bsmntbombdood has changed nick to dbsmntbombdoo.
02:17:47 -!- dbsmntbombdoo has changed nick to odbsmntbombdo.
02:18:15 -!- odbsmntbombdo has changed nick to oodbsmntbombd.
02:19:19 -!- oodbsmntbombd has changed nick to doodbsmntbomb.
02:19:40 -!- doodbsmntbomb has changed nick to bdoodbsmntbom.
02:48:24 -!- bdoodbsmntbom has changed nick to bsmntbombdood.
03:25:10 -!- tgwizard has quit (Remote closed the connection).
03:25:37 -!- Sukoshi has quit (Remote closed the connection).
03:50:15 -!- Sukoshi has joined.
03:56:34 -!- wooby has joined.
04:22:40 -!- ShadowHntr has quit (Client Quit).
04:39:54 -!- RodgerTheGreat has joined.
04:40:02 <RodgerTheGreat> what are the haps my friends?
04:40:18 <wooby> not a thing, how goes it RodgerTheGreat
04:40:24 <RodgerTheGreat> not bad
04:40:59 <RodgerTheGreat> I have a little backburner project for a boolean logic/ queue based language that's progressing pretty nicely
04:41:23 <RodgerTheGreat> I ought to have a finished interpreter in a week or two depending on how much free time I end up having.
04:55:48 -!- wooby has quit.
05:02:44 -!- wooby has joined.
05:14:01 -!- ShadowHntr has joined.
05:16:56 <Sukoshi> No.
05:17:35 <RodgerTheGreat> ?
05:17:46 <RodgerTheGreat> hi, Sukoshi- how's it going?
05:18:52 <Sukoshi> No.
05:18:59 <Sukoshi> :P
05:19:11 <Sukoshi> Taking a break after a hectic spring vacation of 70+ pages of homework.
05:19:43 <Sukoshi> And a Chip-8 emulator in a semi-finished state.
05:19:59 <RodgerTheGreat> ooh, cool! Chip-8 = fun!
05:20:08 <Sukoshi> Heh.
05:20:13 <Sukoshi> It's C though.
05:20:23 <Sukoshi> I'm too tired to bug hunt now.
05:20:24 -!- digital_me has quit ("Lost terminal").
05:21:08 <RodgerTheGreat> haha
05:22:28 <RodgerTheGreat> a friend of mine built a chip-8 emulator a while ago- his major stumbling block was how sprite collision worked. As soon as I explained the whole XOR register-flag-on-flip thing, he managed to get PONG pretty much working
05:27:42 <Sukoshi> Sprite collision?
05:28:23 <Sukoshi> You mean, if there's an already written-to portion of the screen?
05:28:47 <RodgerTheGreat> yeah
05:29:10 <Sukoshi> Well, the docs say ``if 1, then flip to 0, if 0, then flip to 1. Use XOR''
05:29:12 <RodgerTheGreat> it's actually a really clever way of allowing for "collision" with virtually no code
05:29:35 <Sukoshi> I know next-to-nothing about game programming.
05:29:39 <Sukoshi> But I know about processors :P
05:29:51 <RodgerTheGreat> yeah, and whenever you write a 1 to a pixel that's already 1, there's a register that's set to "flag" a collision
05:30:21 <RodgerTheGreat> I dabble a bit in game programming... <shameless plug>http://rodger.nonlogic.org/games/Neon2</shameless plug>
05:30:38 <Sukoshi> Yeah, VF.
05:30:59 <Sukoshi> I thought of a very nice approach to emulating the registers without making a huge case table to decide on the register based on the opcode.
05:31:59 <Sukoshi> I setup a u_int_8 v[0x10]; and then, say we have an opcode 8xnn called opc, v[(opc & 0x0F00) >> 8] = opc & 0x00FF;
05:33:23 <RodgerTheGreat> hunh
05:34:00 <Sukoshi> ?
05:35:53 <RodgerTheGreat> interesting
05:36:06 <Sukoshi> Aha.
05:36:14 <Sukoshi> Yeah, I was too lazy to create an opcode.
05:36:17 <Sukoshi> *opcode parser
05:36:24 <Sukoshi> **opcode parser proper
05:36:25 <Sukoshi> Gah.
05:36:35 <RodgerTheGreat> lol
05:36:45 <Sukoshi> Plus I wanted this to be as light as I could. Only two opcodes actually use arithmetic operations.
05:36:57 <Sukoshi> And no subtraction.
05:37:15 <Sukoshi> *as light as it could.
05:37:39 <RodgerTheGreat> I'll bet your compiler makes little purring sounds when you feed it your code
05:37:44 <Sukoshi> ;D
05:37:55 <Sukoshi> Bit-twiddling is my specialty. It always has.
05:38:04 <Sukoshi> Darn BCD code made me use arithmetic. Grr. I art angry.
05:38:27 <wooby> RodgerTheGreat: awesome
05:47:22 <SimonRC> zzzzzzz
05:47:44 <RodgerTheGreat> t?
06:01:46 <RodgerTheGreat> this is hilarious: http://static.flickr.com/107/291066616_75d02b4dba_o.jpg
06:04:20 <RodgerTheGreat> of course, this will always be a classic: http://b.armory.com/~relsqui/pictures/misc/stuff.gif
06:07:57 <RodgerTheGreat> well, good night, folks.
06:09:00 <Sukoshi> No.
06:09:04 <Sukoshi> Have a BAD night.
06:09:05 <Sukoshi> BAAAD.
06:09:58 <RodgerTheGreat> :'<
06:10:21 * RodgerTheGreat curls into the fetal position
06:15:00 -!- calamari has quit ("Leaving").
06:15:30 -!- wooby has quit.
06:15:46 <Sukoshi> Hahahahaha!
06:44:04 -!- ShadowHntr has quit ("End of line.").
07:28:39 -!- meatmanek has quit (Connection timed out).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:39:13 -!- meatmanek has joined.
09:06:21 -!- goban has quit (Remote closed the connection).
09:06:54 -!- goban has joined.
09:11:32 -!- sebbu has joined.
09:13:27 -!- goban has quit (zelazny.freenode.net irc.freenode.net).
09:13:27 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net).
09:13:27 -!- EgoBot has quit (zelazny.freenode.net irc.freenode.net).
09:13:27 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
09:13:27 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
09:20:27 -!- goban has joined.
09:23:51 -!- oerjan has joined.
09:30:43 -!- Sukoshi has joined.
09:35:04 -!- GregorR has joined.
09:35:04 -!- tokigun has joined.
09:35:04 -!- EgoBot has joined.
09:46:10 -!- sebbu2 has joined.
09:53:52 -!- sebbu has quit (Read error: 60 (Operation timed out)).
10:08:37 -!- kxspxr has joined.
10:38:12 -!- kxspxr has quit.
12:18:22 -!- oerjan has quit ("leaving").
12:56:29 -!- Ricky has joined.
12:58:20 -!- Ricky has left (?).
13:15:34 -!- Qaz has joined.
13:16:24 -!- Qaz has quit (Client Quit).
14:12:54 -!- nazgjunk has joined.
14:20:05 -!- sebbu2 has quit (Client Quit).
14:22:00 -!- Qaz has joined.
14:22:43 -!- Qaz has left (?).
14:34:34 -!- sebbu has joined.
14:54:38 -!- goban has quit (Remote closed the connection).
14:55:03 -!- goban has joined.
15:16:29 -!- nazgjunk has quit (Read error: 131 (Connection reset by peer)).
15:16:44 -!- nazgjunk has joined.
15:39:43 -!- goban has quit (Connection timed out).
16:40:32 -!- oerjan has joined.
16:54:16 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
16:54:49 -!- nazgjunk has joined.
16:58:49 <RodgerTheGreat> good morning, everyone
17:04:02 <nazgjunk> well hi RodgerTheGreat
17:04:24 <RodgerTheGreat> nice to meet you, nazgjunk
17:05:33 * nazgjunk looks up a polite reply in his dictionary of earth
17:30:33 -!- jix__ has joined.
17:49:26 -!- nazgjunk has quit (zelazny.freenode.net irc.freenode.net).
17:49:26 -!- SimonRC has quit (zelazny.freenode.net irc.freenode.net).
17:49:26 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net).
17:49:26 -!- NK`divx has quit (zelazny.freenode.net irc.freenode.net).
17:49:26 -!- pgimeno has quit (zelazny.freenode.net irc.freenode.net).
17:49:26 -!- oklopol has quit (zelazny.freenode.net irc.freenode.net).
17:49:46 -!- nazgjunk has joined.
17:49:46 -!- oklopol has joined.
17:49:46 -!- pgimeno has joined.
17:49:46 -!- sekhmet has joined.
17:49:46 -!- NK`divx has joined.
17:49:46 -!- SimonRC has joined.
17:57:04 -!- SimonRC has quit (zelazny.freenode.net irc.freenode.net).
17:57:04 -!- NK`divx has quit (zelazny.freenode.net irc.freenode.net).
17:57:04 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net).
17:57:04 -!- pgimeno has quit (zelazny.freenode.net irc.freenode.net).
17:57:04 -!- oklopol has quit (zelazny.freenode.net irc.freenode.net).
17:57:04 -!- nazgjunk has quit (zelazny.freenode.net irc.freenode.net).
17:58:12 -!- nazgjunk has joined.
17:58:12 -!- oklopol has joined.
17:58:12 -!- pgimeno has joined.
17:58:12 -!- sekhmet has joined.
17:58:12 -!- NK`divx has joined.
17:58:12 -!- SimonRC has joined.
18:41:30 -!- lament has quit (Read error: 110 (Connection timed out)).
19:17:51 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
19:18:08 -!- UpTheDownstair has joined.
19:18:26 -!- UpTheDownstair has changed nick to nazgjunk.
19:41:33 * SimonRC lols http://www.irregularwebcomic.net/comic.php?current=109
19:51:41 -!- EgoBot has quit (zelazny.freenode.net irc.freenode.net).
19:51:41 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
19:51:41 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
19:53:39 -!- GregorR has joined.
19:53:39 -!- tokigun has joined.
19:53:39 -!- EgoBot has joined.
21:21:33 -!- sebbu2 has joined.
21:40:33 -!- sebbu has quit (Connection timed out).
21:46:56 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
21:48:11 -!- nazgjunk has joined.
21:58:31 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:20:21 <oklopol> python's inheritance... how do i access a parent? class b(a): ... self.a.? ... ?
22:20:35 <oerjan> super()
22:20:37 <oerjan> i think
22:21:16 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
22:21:34 <oerjan> or perhaps not, maybe you just use the name.
22:21:54 <oklopol> self is how you access the object itself
22:22:13 <oklopol> super seems to convert type -> parent of type
22:22:18 <oklopol> which doesn't help self
22:22:48 <oklopol> not that i necessarily need inheritance, i've never really liked it
22:22:57 <oklopol> just wondering, since it seems i'm using it :\
22:23:01 <oerjan> you can always look up things in a parent class if you know its name.
22:23:26 -!- nazgjunk has joined.
22:23:31 <oklopol> yeah, but i'd like to get the underlying parent object itself off the self
22:23:42 <oerjan> there is none i think
22:23:59 <oerjan> python is not prototype based.
22:24:26 <oerjan> the object contains a reference to the class, but there is no object corresponding to the super-class.
22:24:44 <oklopol> hmm... i'll go around that i guess then
22:24:45 <oerjan> just a reference from the class to its super-classes.
22:25:34 <oerjan> are you maybe asking how to call a constructor?
22:27:40 <oklopol> mm
22:27:52 <oklopol> i have copy() in my superclass
22:28:14 <oklopol> now my child class has copy too, i'd like to call the upper level copy there
22:28:37 <oerjan> right. do superclass(self,...)
22:29:14 <oerjan> any method call x.method(...) is equivalent to class.method(x,...)
22:29:50 <oerjan> *do superclass.copy(self,...)
22:30:14 <oklopol> global name superclass is not defined
22:30:48 <oerjan> by superclass i mean an expression giving you the superclass you want.
22:31:21 <oerjan> which might most simply be its name.
22:31:30 <oklopol> ah, yeah :P
22:31:32 <oklopol> indeed
22:34:03 <oklopol> can i promote a to easily it's child class b if b only adds functionality?
22:34:14 <oklopol> swap easily, to
22:34:33 <oerjan> what do you mean?
22:35:14 <oklopol> in the copy constructor i make the upper level copy... i need, however, return from copy() an instance of the child class
22:35:25 <oklopol> and the upper level copy() returns the parent
22:35:27 <oerjan> oh.
22:35:28 <oklopol> of course
22:36:13 <oerjan> right that is specific problem with copy.
22:36:40 <oklopol> mm maybe
22:37:15 <oerjan> the simplest might be to just change the class of the object, i think it is possible in python.
22:37:45 <oklopol> prolly, i'm just not familiar with that kind of twiddling
22:38:08 <oklopol> i'm not familiar with anything when it comes to python actually :P
22:38:45 <oklopol> i've learned the language by writing small functions for one-time use and read a quick tutorial
22:39:09 <oerjan> i think possibly the __class__ attribute can simply be set.
22:39:48 <oklopol> haha xD
22:39:51 <oklopol> it worked
22:39:52 <oklopol> :P
22:40:51 <oklopol> hmm... now the hard part
22:40:57 <oklopol> the part i have to do myself :\
22:49:06 <oerjan> argh! http://www.irregularwebcomic.net/118.html
22:52:06 -!- ShadowHntr has joined.
22:57:07 <oklopol> i constantly run out of windows...
22:58:07 <oerjan> doesn't that hurt?
22:58:13 <oklopol> :D
22:58:34 <oklopol> sounds like the right hobby for me
22:58:37 <oklopol> whiiiii... pof
22:58:40 <oklopol> whiiiiiiiiiii... pof
22:58:43 <oklopol> anyway
22:58:50 <oklopol> i have 70 windows open
22:58:56 <oklopol> and i can't open more -_______-
22:59:42 <oerjan> are all those different programs or maybe you should get something with tabs?
23:00:22 <oklopol> not all of them are different programs
23:00:58 <oklopol> i mean, 70 processes, i only have 25 windows open
23:01:09 <oerjan> oh
23:01:49 <oklopol> but maybe 40 channels in irc, 100 seems a weird limit since this machine, from what i've heard, is not that bad
23:02:26 <oklopol> hmm, i made no sence there
23:02:30 <oklopol> but doesn't matter
23:03:20 <oklopol> i don't like tabs
23:03:24 <oklopol> i can't find anything
23:10:27 -!- Qaz has joined.
23:11:11 -!- Qaz has left (?).
23:13:21 -!- UnrelatedToQaz has joined.
23:14:06 <UnrelatedToQaz> that's better
23:15:54 -!- UnrelatedToQaz has left (?).
23:39:08 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
23:46:52 -!- wooby has joined.
2007-02-28
00:17:56 -!- Sgeo has joined.
01:12:18 -!- sebbu2 has quit ("@+").
02:35:54 -!- pgimeno has quit (Read error: 104 (Connection reset by peer)).
02:51:20 -!- pgimeno has joined.
02:59:58 -!- digital_me has joined.
03:09:26 -!- bsmntbom1dood has joined.
03:11:15 -!- bsmntbom1dood has quit (Client Quit).
03:45:09 -!- oerjan has quit ("leaving").
03:51:37 -!- Sukoshi has quit ("ERC Version 5.1 (CVS) $Revision: 1.796 $ (IRC client for Emacs)").
05:22:02 -!- digital_me has quit ("Lost terminal").
05:36:02 <RodgerTheGreat> good night, everyone
05:37:06 -!- RodgerTheGreat has quit.
05:39:09 -!- RodgerTheGreat has joined.
06:11:08 -!- Sgeo has quit (Remote closed the connection).
06:19:42 -!- ShadowHntr has quit ("End of line.").
07:05:21 -!- Sukoshi has joined.
07:26:53 -!- ShadowHntr has joined.
07:29:08 <Sukoshi> n
07:47:05 -!- maverickbna has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:01:36 -!- manveru has joined.
08:03:53 -!- ShadowHntr has quit (Read error: 110 (Connection timed out)).
08:05:46 -!- maverickbna has changed nick to ShadowHntr.
08:17:00 -!- ShadowHntr has quit ("End of line.").
09:49:57 -!- sebbu has joined.
09:58:09 -!- sebbu has quit (zelazny.freenode.net irc.freenode.net).
09:58:09 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net).
09:58:09 -!- pgimeno has quit (zelazny.freenode.net irc.freenode.net).
09:58:09 -!- EgoBot has quit (zelazny.freenode.net irc.freenode.net).
09:58:09 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
09:58:09 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
09:58:42 -!- sebbu has joined.
09:58:42 -!- Sukoshi has joined.
09:58:42 -!- pgimeno has joined.
09:58:42 -!- GregorR has joined.
09:58:42 -!- tokigun has joined.
09:58:42 -!- EgoBot has joined.
09:59:23 -!- GregorR has quit (Connection reset by peer).
09:59:34 -!- GregorR has joined.
10:08:49 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
10:08:49 -!- EgoBot has quit (zelazny.freenode.net irc.freenode.net).
10:08:49 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
10:08:49 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net).
10:08:49 -!- pgimeno has quit (zelazny.freenode.net irc.freenode.net).
10:08:49 -!- sebbu has quit (zelazny.freenode.net irc.freenode.net).
10:09:18 -!- GregorR has joined.
10:09:18 -!- sebbu has joined.
10:09:18 -!- Sukoshi has joined.
10:09:18 -!- pgimeno has joined.
10:09:18 -!- tokigun has joined.
10:09:18 -!- EgoBot has joined.
10:10:55 -!- GregorR_ has joined.
10:10:55 -!- GregorR has quit (Read error: 104 (Connection reset by peer)).
10:12:58 -!- jix__ has joined.
10:14:22 -!- jix__ has changed nick to jix.
10:33:32 -!- nazgjunk has joined.
11:13:11 -!- anonfunc has joined.
11:13:47 -!- anonfunc has quit (Client Quit).
11:13:51 -!- anonfunc has joined.
11:55:42 -!- NK`divx has changed nick to NK`.
12:18:21 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
12:27:31 -!- oerjan has joined.
12:28:51 -!- nazgjunk has joined.
12:33:51 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
12:34:28 -!- oklofok has joined.
13:06:45 -!- ais523 has joined.
13:06:58 <ais523> !ps d
13:07:01 <EgoBot> 1 ais523: daemon ul bf
13:07:03 <EgoBot> 2 ais523: daemon deadfish funge93
13:07:05 <EgoBot> 3 ais523: ps
13:07:18 -!- ais523 has set topic: #esoteric - the international hub for esoteric programming language design and deployment - map: http://www.frappr.com/esolang - forum: http://esolangs.org/forum/ - EgoBot: !help - wiki: http://esolangs.org/wiki/ - logs: http://tunes.org/~nef/logs/esoteric/ or http://meme.b9.com/cdates.html?channel=esoteric - Pastebin: http://pastebin.ca/.
13:16:24 -!- UpTheDownstair has joined.
13:17:04 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)).
13:17:41 -!- UpTheDownstair has joined.
13:18:51 <oerjan> ais523: you correction needs a correction
13:19:07 <ais523> why, what have I done wrong this time?
13:19:12 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:19:21 <oerjan> there is a line number 100110 :)
13:19:32 <oerjan> *your
13:19:34 <ais523> that's correct, I had to pick an arbitary high number
13:19:39 <oerjan> oh.
13:20:12 <ais523> I suppose using 112 would have made more sense, to avoid clashes with the rest of the program
13:20:37 <ais523> BTW, a simple proof that -1 is not a square number modulo 2^n (n>=2): all square numbers are 0 or 1 mod 4
13:20:54 <oerjan> i realized that later that evening :)
13:21:11 <oerjan> in a d'oh! moment :)
13:22:05 <oerjan> strangely enough, there does not otherwise seem to be a theory of square residues modulo numbers that have a prime factor more than once.
13:22:19 <oerjan> that i could find by googling, anyhow.
13:22:40 -!- nazgjunk has joined.
13:24:33 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:24:37 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)).
13:25:00 -!- nazgjunk has joined.
13:37:28 <ais523> I've just finished writing a new language (although presumably refinements will be needed later)
13:37:38 <oerjan> aha
13:37:48 <ais523> It's a bit like Thue, but deterministic, with flow control, and regexp-based
13:38:18 <ais523> I've already written Hello, World!, an Underload interpreter, and a BF interpreter without I/O (although the language has I/O itself)
13:39:33 <oerjan> hm...
13:39:44 <oerjan> btw i am slowly writing a Forte interpreter
13:40:07 <ais523> I've been thinking about one too
13:40:27 <ais523> Anyway, here's the new language reference interpreter: http://pastebin.ca/375628
13:40:41 <ais523> If it had arithmetic, it might be a good language to write Forte in
13:41:03 <oerjan> well i am using Haskell, as usual.
13:41:08 <ais523> (If arithmetic isn't too hard to implement (I've already done +), it might be a good language to write Forte in anyway)
13:42:32 <ais523> Hello, World! is a one-liner: /^=1$/Hello, world!=n=x=9/
13:43:16 -!- jix__ has joined.
13:43:22 <oerjan> btw i am adding some BASIC-like debugging commands - RUN LIST BREAK STEP
13:43:44 <ais523> does LIST list using the numbers in the source program, or does it use reassigned integers?
13:44:08 <oerjan> reassigned.
13:44:20 <oerjan> or at least that is the intention.
13:44:44 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
13:44:49 <oerjan> in fact the interpreter will not keep track of the original numbers.
13:45:06 <oerjan> (other than looking up _from_ them, of course)
13:48:50 <ais523> I need a better INPUT command in Forte
13:49:14 <ais523> because in all situations there's an input that causes undefined behaviour, and even removing that clause there'll be any number of inputs that cause havoc
13:49:20 <ais523> sort of like gets() in C
13:49:39 <oerjan> string input could work.
13:50:10 <oerjan> or...
13:50:34 <oerjan> you could have INPUT be a function.
13:50:50 <oerjan> so you could modify with arithmetic before storing.
13:51:01 <ais523> if input is a char at a time rather than a number, then it'll be limited to the range 0-255
13:51:18 <oerjan> but that will still end up confusing characters.
13:51:26 <ais523> so programs could make use of the fact by never modifying those numbers (probably a good idea anyway)
13:51:51 <ais523> the numbers could still be assigned to other numbers, as long as the other numbers were not then modified themselves
13:52:06 <oerjan> no.
13:52:41 <ais523> 1000 INPUTCHAR 900
13:52:48 <ais523> 1010 PRINT 900
13:52:55 <ais523> shouldn't be a problem, for instance
13:53:04 <oerjan> hm... maybe
13:54:01 <oerjan> but you could not handle unbounded input length. or could you?
13:54:16 <ais523> you'd just have to use an infinite number of input variables
13:54:32 <oerjan> which means they would have to be calculated.
13:54:39 <oerjan> at least.
13:54:39 <ais523> you have to use an infinite number of line labels anyway, so it's not too much of an extra stretch
13:55:00 <oerjan> you mean an infinite length program?
13:55:00 <ais523> the command would have to be INPUTCHAR expression
13:55:25 <ais523> no, just the way that you have to keep increasing the line labels up arbitrarily high to keep a loop going (from within the program)
13:55:45 <oerjan> i suppose.
13:56:05 <oerjan> ok, INPUTCHAR expression it is, then.
13:56:19 <ais523> I'll go and add the INPUTCHAR command, then (what would it be called in BASIC? GET, wasn't it?)
13:56:44 <oerjan> maybe. i suppose it varies by dialect.
13:56:49 <ais523> and if we have GET we may as well have PUT to make it marginally easier to write a BF interpreter
13:57:31 <ais523> (The Underload-to-BF compiler has to dump an ASCII table into the program, because there isn't an output-by-char-code command in Underload, and Forte would end up the same way otherwise)
13:58:04 <oerjan> reminds me of Unlambda too
13:58:26 <oerjan> so GET expr but PUT number?
13:59:11 <ais523> PUT expr (and INPUT expr) would be more symmetrical
13:59:27 <ais523> I wonder if that would be worth making programs easier-to-write for
13:59:34 <oerjan> in that case, why not LET expr=expr?
13:59:58 <ais523> that would lose the link with BASIC, but why not
14:00:05 <ais523> the language is hard enough to write in anyway
14:00:41 -!- jix has quit (Read error: 110 (Connection timed out)).
14:03:04 <ais523> Updated.
14:15:35 -!- nazgjunk has joined.
15:01:24 -!- nazgjunk has quit ("Leaving").
15:22:40 -!- crathman has joined.
15:43:40 <ais523> Damn, I just discovered that the IOCCC was open
15:43:50 <ais523> and that it ends midnight today UTC
15:44:00 <ais523> Luckily I had a program ready...
15:48:45 <oerjan> hm... better put in LOAD and SAVE...
16:03:29 -!- anonfunc has quit.
16:11:39 -!- oerjan has quit ("In seach of food").
16:31:32 -!- GregorR_ has changed nick to GregorR.
17:46:59 -!- tgwizard has joined.
18:46:40 -!- ais523 has quit ("This space intentionally fails to be blank").
18:58:56 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.2/2007021917]").
19:24:10 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)).
19:31:45 -!- oklofok has quit (Read error: 104 (Connection reset by peer)).
19:39:57 -!- UnrelatedToQaz has joined.
19:40:44 -!- oklopol has joined.
19:41:56 <UnrelatedToQaz> Hullo.
19:42:29 -!- UnrelatedToQaz has quit (Client Quit).
19:54:59 -!- oerjan has joined.
20:45:48 -!- crathman has joined.
20:59:16 -!- nazgjunk has joined.
21:29:15 -!- oerjan has quit (Read error: 104 (Connection reset by peer)).
21:32:36 -!- oerjan has joined.
21:38:54 -!- oerjan has quit ("Lost terminal").
21:48:50 -!- UpTheDownstair has joined.
21:51:23 -!- UpTheDownstair has quit (Read error: 131 (Connection reset by peer)).
21:51:45 -!- UpTheDownstair has joined.
21:52:23 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
22:02:49 -!- RodgerTheGreat has joined.
22:03:17 -!- GregorR has changed nick to _D6Gregor1RFeZi.
22:03:44 -!- UpTheDownstair has changed nick to nazgjunk.
22:09:57 -!- nazgjunk has quit ("Leaving").
22:14:58 -!- sebbu2 has joined.
22:15:35 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:21:57 -!- nazgjunk has joined.
22:33:56 -!- sebbu has quit (Connection timed out).
23:00:56 -!- digital_me has joined.
23:06:22 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.2/2007021917]").
23:22:04 -!- sebbu2 has quit ("@+").
23:34:39 -!- nazgjunk has quit ("Leaving").
23:57:37 -!- oerjan has joined.
23:58:34 -!- anonfunc has joined.
←2007-01 2007-02 2007-03→ ↑2007 ↑all