00:01:08 FUCK orange broadband and their GOD DAMN ROUTER 00:08:18 -!- puzzlet has quit (Remote closed the connection). 00:08:20 -!- puzzlet_ has joined. 00:08:23 How do I access modules that are above the current directory? 00:08:26 re puzzlet_ 00:08:41 You can't, Sgeo. 00:09:41 oklofok: I took up the task of making a language like oklotalk, but logical and cleaner 00:09:44 Yes, I am crazy :D 00:10:09 "+\1 2 3" is 6 00:10:25 import sys 00:10:25 sys.path += ['../..'] 00:10:26 + is what you expect, \ is NOT a binary 'fold' operator but instead a postfix operator 00:10:31 Sgeo: Well yes 00:10:35 Would that work or fail on Windows, though? 00:10:37 and what \ does, here +\ 00:10:48 returns a function which does the folding 00:11:07 so +\'s result is an operator taking a list and folding it over + 00:11:11 then the list 1 2 3 00:11:20 ergo, "+\1 2 3" is 6 00:11:25 / is \ but for 'map' 00:14:14 -!- puzzlet_ has quit (Remote closed the connection). 00:14:26 -!- puzzlet has joined. 00:14:55 rere puzzlet 00:15:23 I don't know python 00:16:13 btw, you won't need to learn Python to use PSOX 00:16:18 Just to implement domains.. 00:17:23 My code looks FUGLY 00:18:17 GregorR, on Windows, does printf() wait for just a 0x0A, or would it be expecting the other thing too? 00:18:32 http://rafb.net/p/NpqVc215.txt 00:19:36 can view the graphs with that 00:19:54 -!- ehird` has quit (Success). 00:20:41 Sgeo: Since printf("\n") works in every Windows CC I've ever used, I would imagine just \n. 00:20:57 ty 00:21:35 -!- puzzlet_ has joined. 00:21:36 faxathisia: i already show them in a similar fashion, i meant graphically 00:21:52 graphviz can render those formats 00:22:00 oh 00:22:02 cool 00:22:27 Hahahahahaha, they're advertising a magnet you put on your left ear that helps you quit smoking X-D 00:22:28 anyhow, did you try the lang? 00:22:33 Can you say "placebo"? 00:22:40 you don't need to know python to be able to 00:22:48 heh, lol 00:22:55 * Sgeo worries that PSOX.py might be something of a slapdash implementation 00:24:21 GregorR : Might work if you're a robot. 00:24:27 Remember Futurama? 00:25:18 :[ 00:25:32 * faxathisia thinks... general purpose languages should have multiline comments 00:28:34 faxathisia: you can't say you wanna try it and then not :) 00:28:43 * faxathisia is trying to make a web 00:28:48 GregorR!!!!!!!! 00:29:00 No, I'm not here. 00:29:02 stop stop stop stop stops tops tops tops tospt ostpsotpsotsptosptsotpsotpstosptostpsotpstosptosptospsotsptosptsoptsotspooo 00:29:04 oh I just realised how to do multiline comments in python 00:29:10 YOU ARE WRONG :( 00:29:17 in C \n does not mean 0x0A 00:29:20 it means newline 00:29:22 which in windows is CR LF 00:29:24 not LF 00:29:29 the compiler does this, it is standard 00:29:44 """multiline commen""" 00:29:51 faxathisia: oh god python no :( 00:29:57 I got a ticket on a project of mine because it put non-Windows newlines in a file on Windows. 00:30:06 It did that because I used \n. 00:30:11 I did not fix it, since it wasn't broken. 00:30:31 But the point is, it didn't use CR LF. 00:31:52 -!- puzzlet has quit (Read error: 110 (Connection timed out)). 00:45:28 this is hard to use :p 00:45:33 A ticket? 00:47:59 GregorR: it was opened in binary mode 00:51:20 faxathisia: did you try it? :D 00:51:34 yeah 00:51:48 I'm still trying to make this thing without infinitelooping 00:54:52 heh 00:55:06 currently, you need to actually have the pattern die out 00:55:13 i mean, in the version you have 00:55:31 i made it stop when the same object is found twice 00:56:34 this is cool http://img339.imageshack.us/img339/8556/picture5mx0.png 00:56:42 that's the grid one though 00:56:56 (using a stupid layout) 00:58:17 what? 00:58:23 what's that? 00:58:38 Grid2d 15 15 00:58:50 xD 00:58:58 * oklofok knows a better graphical representation 00:59:47 that's the same one energy minimized http://img174.imageshack.us/img174/8382/picture6id6.png 01:01:20 oh, that's actually pretty close 01:01:44 * ehird`_ ponders elegant-but-alien-looking languages 01:01:57 i.e. simple, but not too simple, and no does-everything features, no hacks 01:02:00 but still strange 01:02:10 lambda calculus is ofc the classic in that area 01:02:55 What do you mean, lambda calculus is alien? :-P 01:03:10 i think that I can trick people into using lambda calculus for real programming 01:03:24 because.. if you just add enough syntax... 01:03:26 Pi calculus is either the ultimate in artificial intelligence stuff or actually quite unremarkable. 01:03:31 ...you get Haskell! 01:03:39 I think combinators are harder than lambda calculus. 01:03:45 oh damn it's been done already! 01:03:53 It's not too hard to define a function in lambdas. 01:03:56 I want to try some other lambda calculi though 01:04:02 Well, you can algorithmically translate lambdas to combinators. 01:04:23 You can do it for all languages! 01:04:24 Depending on the algorithm, it might actually do a decent job. :-P 01:04:58 pi calc is fun 01:05:18 I'm going to check up on just what it is. 01:05:22 can't I have more than 2 parameters? 01:10:59 Ah, indeed, after reading up on it, pi calculus is fun. 01:11:53 I like λ∏ but most of the theory is way too hard for me right now 01:12:50 You like what? 01:12:56 Lambda and pi? 01:13:49 faxathisia: if you have any interest left, wanna draw http://www.vjn.fi/pb/p165564435.txt for me? 01:14:00 or is it just for bidirectional graphs? 01:14:06 not that it matters really 01:14:13 anyhow, directed graphs should work now 01:14:31 I think explains it ok http://people.cs.uu.nl/andres/LambdaPi.html 01:15:29 Lambda and pi stuck together? 01:16:03 Lambda calculus with dependent typing? 01:17:04 It's lets you define functions whose return type depends on it's arguments 01:17:11 yeah 01:17:27 I imagine it doesn't have a full first-order logic system taking full advantage of the Curry-Howard isomorphism and all. 01:18:12 oklofok: it's just a circle 01:21:11 hehe 01:21:32 i wondered whether it gets it circle, or if it'd be eight'y or something 01:26:27 RANDOM SILLY IDEA 01:26:31 A lambda calculus CPS transformer 01:29:17 oklofok: your bot has lambdacalculus infrastructure 01:29:17 do eet 01:29:24 What, a giant robot that can transformate into a lambda expression? 01:30:26 ehird`_: o 01:30:33 e 01:30:38 Slereah: heh 01:30:46 making a lambda calculus infrastructure is a 20 min job :\ 01:30:59 i have things to do, gotta look at my parser! 01:31:13 and hope it codes itself. 01:31:40 yeh well i don't like writing cps transformers 01:31:43 (cps=http://en.wikipedia.org/wiki/Continuation_passing_style) 01:33:03 * faxathisia had fun writing one first time around 01:34:20 i haven't written one, but given a parsed code, i don't think it's hard 01:35:23 oklofok: It's not really hard, no 01:35:28 but irritating 01:35:34 Hmm. I want to implement ISWIM 01:35:56 ooh it's by Peter J. Landin 01:36:53 yes 01:37:01 it's the 'the next 700 programming languages' language 01:38:04 * Sgeo is back 01:38:23 Once PSOX 1.0 is out, would anyone here be willing to make an IRC domain? 01:38:59 no 01:39:28 * Sgeo thinks an answer from someone who thinks positively of PSOX would be more useful 01:41:40 there is no point 01:42:06 ehird`_: you actually see no point in the whole io wrapper thing? 01:42:16 i think it's an awesome idea :\ 01:42:23 i said not that 01:42:26 i said no point in the irc domain 01:42:37 oh, right, guess it's just bsmnt 01:43:08 what's an irc domain? 01:43:12 irc network? 01:45:13 irc domain = spec for PSOX stuff to access IRC 01:45:22 And implementation of such 01:45:32 a domain, in PSOX, is roughly like a library 01:45:41 eah that would be cool 01:45:46 (having ISWIN implementation) 01:45:50 ISWIM* 01:46:02 ISWIM? 01:46:14 http://www.cs.utah.edu/~eeide/compilers/old/papers/p157-landin.pdf 01:46:18 It's got the J operator 01:46:28 http://trac2.assembla.com/psox/browser/trunk/spec/psox.txt 01:46:37 I think it's a bit like the infinite improbability drive 01:49:19 haskell etc are descended from iswim 01:49:29 it has the off-by-one rule and all that 01:49:35 it would be interesting 01:50:00 What's the off-by-one rule? 01:50:17 * Sgeo isn't going to write the IRC domain himself.. at least not until after PSOX 1.0 is released 01:50:19 faxathisia: indentation for braces 01:50:25 err 01:50:27 off-side rule 01:50:28 oh right 01:50:30 heh :) 01:50:40 but the cool kind 01:50:52 instead of just indenting N places, you line it up 01:53:54 oklofok: you should form an Oklotalk Comittee 01:54:15 "The bikeshed comittee" 01:54:18 that means you're licensed to release the standard as "Report on the Oklotalk algorithmic language" 01:54:43 and provide a black-on-really-dark-gray in times-roman html version 01:54:53 with tacky gifs on your home page with 3d graphics of the language name 01:55:00 and form an Oklotalk Advocacy Group 01:55:16 sgeo@ubuntu:~/dev/psox/trunk/impl$ python PSOX.py bf test.b 01:55:16 Client's PSOX Ver: PSOX 0.5-11 01:55:16 Running PSOX 0.9 01:56:01 Doesn't like it when I try to make one of the parts of the version 10 01:56:07 * Sgeo isn't going to fix that yet 01:56:34 PSOX 1.10 is still a ways off 01:57:04 oh PSOX is also an interpreter? 01:57:10 or is it executing the bf program? 01:57:25 PSOX.py is the name of the interpreter, which executes the bf command 01:57:31 (is executing) 01:57:38 why not just bf test.b | python PSOX.py 01:57:42 I have the bf program in my path 01:57:54 would that be possible too? 01:57:56 faxathisia, because I need the PSOX server on both sides 01:58:04 on both stdin and stdout 01:58:09 ohh I see 01:59:06 * Sgeo thought of an interesting change to the PSOX spec 01:59:11 But it would be a major change 01:59:38 instead of using 0x00 before all functions, all output chars, unless 0x00, specify the domain of the function, as thought there was an implied 0x00 01:59:47 0x00 would just be regular output 02:00:34 Probably not PSOX 1.0 though 02:01:49 faxathisia: about that ISIWM interpreter, i might have a go 02:02:00 good luck :D 02:02:05 It'd be fun to mess with 02:02:08 the paper doesn't specify what typing 02:02:12 so i can do dynamic or inferenced 02:02:16 inferenced seems the purest, but harder 02:02:22 wiki said probably dynamic, but I don't see any reasons to go either way 02:02:33 hmm, someone offer help in writing it :P 02:02:41 yes YOU! 02:02:44 what're you going to write it in? 02:02:54 faxathisia: beats me. Scheme maybe? 02:03:01 -!- ihope has quit ("CGI:IRC"). 02:03:06 Not C, let's put it that way 02:03:13 That's a good idea :D 02:03:24 Does someone have any idea how to make a 2D tape for a Turing machine on Python? 02:03:32 That is, infinite in all direction. 02:03:41 Slereah: use a hash table :P 02:03:45 can you make an infinite 1D tape? 02:03:47 I don't really want to program some N->ZxZ isomorphism. 02:03:56 N->NxN though? 02:03:57 I made one. 02:03:59 oh right.. 02:04:07 N->Z is easy. 02:04:12 faxathisia: do you know scheme? :P 02:04:22 ehird: Yeah 02:04:25 N-> NxN isn't, but the function already exist, it's the pairing function. 02:04:26 yaey 02:04:44 I tried to make N->ZxZ, I really don't want to program that. 02:04:52 the thing with scheme is that you have to choose an implementation and stick with it 02:05:01 they are just too different 02:06:49 The PSOX spec will probably be finalized soon 02:07:03 -!- ihope has joined. 02:07:19 re ihope 02:07:24 Ello. 02:07:49 The people of Sine aren't wondering if I'm dead, are they? 02:07:59 faxathisia: annoyingly most scheme systems aren't batch which makes this kind of stuff a pain :-) 02:08:21 chicken, gambit, bigloo are considerations then i guess 02:11:06 i guess i'll quiz in #scheme 03:05:26 * Sgeo has an idea to make things like a version 1.10 easier 03:07:01 -!- ihope has quit ("CGI:IRC (Ping timeout)"). 03:11:44 * Sgeo can't help thinking that PSOX.py is incredibly ugly.. 03:12:44 A lot of the code is probably WTF quality.. 03:20:32 -!- ehird`_ has quit. 03:28:54 sgeo@ubuntu:~/dev/psox/trunk/impl$ python PSOX.py bf test.b 03:28:54 Client's PSOX Ver: PSOX 0.0-10 03:28:54 Running PSOX 0.0 03:34:14 PSOX.py now has support for the possibility of a client saying Version 10 03:41:34 PSOX! 03:41:46 :D YAY PSOX! GO PSOX! 03:42:05 Now is the time. . . The time to implement psox.pebble. 03:42:19 you're doing that? 03:42:32 No; I don't know where the spec is. 03:42:41 Hand it to me, and I shall have PEBBLE using PSOX. 03:42:55 Spec isn't quite finalized yet, but it's close 03:43:00 At least, the main part anyway 03:43:09 Still working on the specs for the builtin domains 03:43:28 http://trac2.assembla.com/psox/browser/trunk/spec/psox.txt 03:43:39 * pikhq shall work on a Rubik's cube while waiting 03:43:43 I give you 2 minutes. :p 03:44:51 Waiting for what? The specs for domains to be complete? 03:45:40 Sure. 03:45:42 * pikhq is done 03:45:42 Or for finalization of psox.txt? 03:45:46 >.> 03:45:46 Either. 03:46:20 I think psox.txt is final 03:46:24 Mmkay. 03:46:45 Of course, I have the ability to change everything completely, but I don't think there will be. 03:47:10 There were some changes I remember wanting to make, but I think I made all of them 03:47:41 Actually, psox.txt isn't done.. the List of Builtin Domains isn't complete.. 03:48:03 and the url for simple utilities is wrong 03:48:19 But everything else should be good 03:48:32 Although the implementation so far violates the spec 03:49:27 And will probably keep violating it 03:49:38 Is this a problem, pikhq? 03:50:34 "After that, the server responds with its minorver" should probably be "the minorver in use" 03:50:39 But that's not the vio 03:51:28 * Sgeo will go in 10min to watch Seinfeld 03:51:28 Not yet. 03:51:33 What's the violation? 03:52:20 According to the spec, if the client isn't PSOX, or if it's the wrong version, the Server lets it know, and lets the client keep running without PSOX features. The implementation exits on those conditions.. 03:53:54 Think you could provide a version-invariant method of exitting if the client is using the wrong version? 03:55:31 ? 03:55:58 When the implementation exits, the client is killed >.> 03:56:17 Oh. NM. 03:57:14 * pikhq has the psox.bfm header set up. 03:57:24 May I see? 03:57:51 Just a sec. 03:58:53 http://pastebin.ca/838136 04:00:33 You're forgetting the 0x0A 04:01:03 The spec did not say a \n was needed there. 04:01:14 Also, that's PSOX 0.0 04:01:30 Which the spec claims to be. 04:01:55 I can only code to the spec. ;) 04:02:19 When PSOX 1.0 is released, you'll need to change the code >.> 04:02:31 But that should be easy enough 04:04:02 It's a good think you did the psox.bfm now 04:04:08 -!- ihope has joined. 04:04:16 Ok, psox.txt updated 04:04:51 Hi ihope 04:07:47 pikhq, updating the header? 04:09:40 Updated. 04:10:55 this is twisted 04:11:00 I'm glad I'm idling here. 04:11:17 pikhq, where? 04:11:31 PSOX is a fantastic concept =] 04:11:50 ty Overand 04:11:51 Sgeo: Lemme post a tarball of my stuff when I'm done implementing all the stuff in the basic spec. 04:17:17 ihope, you know Sine has a web-irc gateway? 04:20:44 Overand, did you read the spec? 04:22:10 Does 2.6 return 1 if somestring was a specified safety option, 0 otherwise? 04:23:50 yes 04:24:42 pikhq, will psox.pebble be able to handle LNUM/LBYTES/VARG? 04:26:22 As of yet, I don't have any special handling for it. 04:26:54 Is the language capable of handling it though? 04:27:42 I may need to do some special patching of PEBBLE to make LNUM *convenient*. . . 04:28:04 Sgeo: I was a little bit aware of it, but I don't know where it is. 04:28:07 what about LBYTES and VARG? 04:28:25 But certaintly, you can just pass the macros that take strings of some sort an LNUM, LBYTES, or VARG. . . 04:29:26 I'll *probably* want to do something in PEBBLE like [lbytes foo bar baz] to be able to conveniently handle that stuff, though. 04:29:37 But this is a matter of convenience, not functioning. ;) 04:29:51 * Slereah made some program to generate possible programs for them Turing machine 04:29:56 With associated numbers! 04:30:07 As long as it can. I'm pretty sure that in bfcomp (which is what I wanted PSOX to work with) it would have been difficult, if not impossible 04:30:08 To maybe compute the first digits of its Turing number. 04:30:58 Turing number? 04:31:08 ihope, why don't you have an IRC client? 04:31:19 The nth digit is 1 if the program is circle free, 0 otherwise, or if it's not a valid program. 04:31:20 Sgeo, bfcomp is a really inflexible bit of language. 04:31:25 (Circle free = halts) 04:31:43 Because my macro parsing is so damned *cheap*, I can freely pass strings around in the macro parser. 04:31:59 It's like a gentler Chaitin constant. 04:32:13 hmm how is it different to Chaitins constant? 04:32:19 Sgeo: I'm not using my computer, so I'm without one for a day or two more. 04:32:19 Sgeo: some of it. 04:32:25 ah 04:32:27 (read some of the spec) 04:32:38 Overand, thoughts? 04:32:39 faxathisia : Chaitin's constant is a probability. 04:32:43 ihope, did you get my PM? 04:32:50 I thought that it is the same thing 04:32:58 The Turing constant is just a bunch of numbers. 04:33:07 Sgeo: yes. 04:33:10 Sgeo: I'm not good enough with this stuff to offer a particularly informed opinion. 04:33:22 * Sgeo once attempted to prove that God cannot exist by using Chaitin's constant 04:33:24 I'd calculate the Chaitin constant, but I don't even understand what "prefix free" mean. 04:34:47 It's probably prettier. I already know the first 1500 digits of the Turing constant, and it's 0 because it's all strings that aren't valid programs. 04:34:54 I have a feeling it's the same thing 04:35:07 Suppose a person who is God can create a stone that is too heavy for him to lift. He cannot lift this stone, so he is not really God. Therefore, a person who is God cannot create a stone that is too heavy for him to lift. Therefore, a person who is God is not really God. 04:35:11 Well, you can probably use the Turing constant to calculate the Chaitin one. 04:36:28 god can do anything -> god can do things he can't do 04:36:32 paradox. 04:36:47 It's a paradox only if you assume that god can do anything. 04:36:51 still focking, ay? :\ 04:36:53 -!- oklofok has changed nick to oklopol. 04:36:54 My "proof" was against omniscience 04:40:41 oh I think I see the difference 04:40:46 How does one define omniscience formally? 04:40:49 What if one assumes that God can do anything except that which he has designed specifically for him not to be able to do? 04:40:50 is this righT? 04:41:00 the nth bit of turings constant is 1 or 0 if the nth program terminates 04:41:33 Well, that's what I saw at least! 04:41:41 I don't think I've heard of a Turing constant. 04:42:07 ok so Chaitins constant is different, because the nth bit is not any longer whether the nth program halts or ont 04:42:20 instead .. you sum all halting programs of size n * 2^-|n| 04:42:56 (for every n) 04:43:02 If you know what "prefix free" means, I would be grateful. 04:43:28 I'd rather have a probability than a huge bunch of zeros. 04:44:05 I don't really know but I think this explains it http://en.wikipedia.org/wiki/Instantaneous_code 04:44:17 A language is prefix-free if and only if there are no two strings in the language such that one starts with the other. 04:44:24 '{0, 10, 11} has the prefix property; a code consisting of {0, 1, 10, 11} does not, because "1" is a prefix of both "10" and "11".' 04:45:42 Sgeo: I'll finish up the System domain tomorrow (I stopped short of file descriptor manipulation). 04:45:52 pikhq, coolness 04:46:17 http://pikhq.nonlogic.org/psox.tar.bz2 04:46:17 So since my code is {*,+,<,>}, am I in the clear?* 04:46:40 Is it the symbols that compose it, or the strings themselves that must be prefix free? 04:46:42 I think if you have * in the set, then you can't have ** also in the set 04:46:43 If you see simple bugs in there, would you be kind enough to fix, include a changelog, and bat the tarball back at me? 04:46:55 {*,+,<,>} is prefix-free. 04:47:08 What if there's what looks like a bug because the spec is wrong? 04:47:22 Then fix the spec for God's sake. :p 04:47:32 brb 04:47:50 The important part is that if you concatenate some words, you can tell that it's those words rather than some other words that concatenate to the same thing. 04:49:04 back 04:49:34 Okay 04:49:48 So my code is prefix free then. 04:49:51 Yes. 04:49:59 Good. 04:50:57 pikhq, make sure users realize that psox_installed doesn't check that psox is installed.. 04:51:30 Also, if I knew the bfm language, that would probably be helpful 04:51:36 >.> Imean PEBBLE 04:51:52 (Not only can you do that, but if you concatenate some words and then an initial segment of a word, you can tell that it's those words followed by that initial segment.) 04:52:48 So in other word, it's just the ability to tell apart any two different pieces of code? 04:53:07 More or less, yes. 04:53:21 Sgeo: Probably a good idea, that. 04:53:29 Learn PEBBLE. 04:53:31 what does "exit" do? 04:53:56 It calls the "exit" function in PSOX-System. 04:54:05 PSOX 2.1. ;) 04:54:22 ah. Why do you want to exit just because a domain you checked for wasn't there? 04:54:29 If the code is {0,1,10,11} and I say 110, you don't know whether it's 1-1-0, 11-0, or 1-10. If the code is {0,10,11} and I say 111, you know that it's 11-1, the 1 on the end being part of a word. 04:54:40 Shouldn't that be the business of the program using the library, and not the library itself? 04:55:23 Um. Probably. 04:56:30 Also, is pin that convenient? 04:56:37 Well, so far, I have 252 programs that might be valid (if my program works correctly). 04:56:54 Although I must take out the ones that refers to states that don't exist 04:56:58 I should probably have pin take the amount of things to ask for instead. . . 04:57:11 s/ask for/input/ 04:57:15 Because the return from the input function also includes EOF data etc. 04:57:23 and padding nuls, etc 04:57:41 Also, will this library be able to easily call arbitrary PSOX functions? 04:57:55 Because (hopefully) there will be domains not part of the official spec 04:58:36 Why is there no "in" in psox_gethandprint.bfm? 04:58:51 That would be the job of other libraries. This library is basically just a wrapper around the builtin PSOX domains. 04:59:09 And there is no "in" in psox_gethandprint.bfm because gethandprint returns a string. . . 04:59:22 I assume that the user of the macro will then handle inputting the whole string. 04:59:33 However the user sees fit. 05:00:23 * Sgeo should keep working on PSOX.py 05:01:37 You know what'd be amusingly roundabout? 05:01:45 Implementing a C library to use PSOX. ;) 05:02:26 Writing Python stuff to use PSOX might actually help testing PSOX.py 05:02:38 That it might. 05:02:45 I'll do something like that tomorrow. 05:02:57 I'll call it something like "The C PSOX Library and Test Suite". 05:03:08 * Sgeo is currently using a bf program that outputs fixed numbers 05:03:50 I seem to have the handshake (PSOX-Init) working 05:11:25 I'm working on the C PSOX library now, for no good reason. 05:11:45 * Sgeo doesn't really know C 05:12:03 * pikhq does 05:13:26 Hm. How can you find which function halts with Chaitin's constant, since it only gives you a probability? 05:28:37 -!- calamari has joined. 05:37:14 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 05:37:49 Hi calamari 05:38:02 Did you see the recent updates to the PSOX specZ? 05:38:04 spec? 05:38:14 Or pikhq's PEBBLE stuff for PSOX? 05:39:11 * Sgeo should probably go to sleep soon 05:39:27 * Sgeo is glad he finished the handshake code though 05:39:36 And, with pikhq's help, fixed the spec >.> 05:40:33 Slereah: it depends on what Chaitin's constant you use, I think. 05:40:48 oO one run of the thing I got a "Broken pipe" error 05:40:52 the next runs I didn;t 05:40:58 If it's for a uniform probability over a finite set of Turing machines, you can use it to find out how many Turing machines halt, and once you've found those, you know that the rest don't halt. 05:41:19 Maybe there's a way to find it for all Chaitin's constants; I don't know. 05:41:31 hi Sgeo 05:41:34 no I didn't 05:42:12 did you get the pesoix code working? 05:42:24 PSOX, actually. 05:42:26 Yes, but can you use it to find out what machines halt? 05:42:41 name change? 05:42:45 Is there some sort of bijection between that number and the set of halting programs. 05:42:55 or are we talking about something else? 05:43:25 Something else. 05:43:28 When I read about it, it seems like it, but now I'm not so sure. 05:43:32 esolangs.org/wiki/PSOX 05:43:47 Remind me not to do what I just did 05:45:00 no that's the same idea as pesoix 05:45:22 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)). 05:46:31 -!- ihope has quit ("CGI:IRC (Ping timeout)"). 05:46:58 -!- Sgeo has joined. 05:47:09 Crashed 05:47:11 What did I miss? 05:47:17 After Remind me not to do what I just did 05:47:38 no that's the same idea as pesoix 05:48:14 It's not compatible with PSOX, also, don't some parts of PESOIX interact directly with "cells" instead of going through stdio? 05:48:45 true, but my implementation wasn't going to do that 05:49:05 So, your implementation was basically going to selectively ignore parts of the spec. 05:49:17 yeah 05:49:24 My implementation is going to violate my spec a bit :/ 05:49:24 you got a problem with that? 05:49:28 :) 05:49:36 PESOIX is less flexible than PSOX =P 05:49:57 anyhow.. so whatever it is.. did you get it working? 05:50:26 * Sgeo is almost done with the core part of the spec, and has implemented the handshake 05:50:48 ahh so not implemented? 05:51:04 Not yet 05:51:08 * pikhq is coming up with a C library to use it for no good reason 05:51:16 that's the hard part :) 05:51:35 I hadn't even really started on the "spec" part 05:51:40 of the implementation 05:51:52 just trying to get the I/O wrapper going and I failed 05:53:08 The I/O issues is why I'm requiring clients (the esolang using PSOX) to send a command in order to receive input from stdin 05:53:29 ahh.. so it won't work with arbitrary interpreters 05:53:49 that would make it much easier 05:53:51 arbitrary interpreters it will work with. The esolang is required to send the command though 05:54:16 oh, gotcha.. hopefully that works out 05:54:18 (actually, the interpreter needs to receive from stdin character-by-character) 05:54:42 Read http://trac2.assembla.com/psox/browser/trunk/spec/psox.txt under Pseudodomains 06:02:29 calamari, read/ 06:02:31 ? 06:02:55 no I didn't, sorry 06:03:20 been trying to find a PCI video card with composite/svideo out that also doesn't have a fan 06:04:11 Thank you for all your work on PESOIX btw 06:06:46 yw, but it doesn't even work, so don't thank me too soon :) 06:07:31 Well, the spec was the inspiration for PSOX 06:10:41 * Sgeo pokethanks calamari 06:10:55 ahh, the spec wasn't my work.. that was TheRaven 06:11:05 ..oh 06:11:08 except the esoapi part ;) 06:11:16 Who was EsoAPI? 06:11:19 me 06:11:40 Well, thank you very much for something that inspired something that inspired PSOX 06:11:48 lol.. yw 06:12:22 there, something interesting might out of all that esoteric os stuff after all 06:12:41 I don't think PSOX can be used to make an esoteric OS :/ 06:13:18 that reminds me.. a while back some guy emailed me saying he was using BOS in one of his classes. So my name was probably cursed by many a student on that one :) 06:13:47 Although, in theory, you can use a subset of PSOX, extended with a custom domain, as a thingamagigy for an EsoOS 06:14:05 hehe 06:25:21 * Sgeo should probably go to slepp 06:27:00 -!- Slereah_ has joined. 06:38:15 -!- Slereah has quit (Read error: 110 (Connection timed out)). 06:38:36 -!- Slereah has joined. 06:45:52 Implementation agenda: output w/ 0x00 0x00, then class Domain, then domain dispatcher 06:46:07 Sound good? 06:47:23 After that, I'll get working on the implementation of the domains themselves, which should be quick, assuming the specs are done.. 06:48:48 Hmm. 06:49:06 Also, I should note in psox.txt somewhere that "," can be delayed.. the server stores it up until requested by the client, effectively 06:49:25 Good? 06:49:29 -!- Slereah_ has quit (Read error: 110 (Connection timed out)). 06:49:30 Mmkay. 06:49:34 * Sgeo needs to go to sleep now, g'night 06:49:58 -!- Sgeo has quit (Remote closed the connection). 07:00:39 -!- puzzlet_ has quit (Remote closed the connection). 07:00:46 -!- puzzlet has joined. 07:02:07 -!- puzzlet has quit (Client Quit). 07:02:43 -!- puzzlet has joined. 07:17:01 -!- Slereah- has joined. 07:24:47 -!- calamari has quit ("Leaving"). 07:35:43 -!- Slereah has quit (Read error: 110 (Connection timed out)). 07:35:49 -!- Slereah- has quit (Read error: 110 (Connection timed out)). 07:35:57 -!- Slereah- has joined. 07:42:10 -!- puzzlet has quit (Remote closed the connection). 07:42:18 -!- puzzlet has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:34:30 -!- oerjan has joined. 09:55:39 -!- helios_24c3 has joined. 10:09:08 -!- Hiato has joined. 10:34:35 -!- oerjan has quit ("leaving"). 10:56:36 -!- helios_24c3 has quit ("Leaving"). 11:12:22 -!- RedDak has joined. 11:56:34 -!- Hiato has left (?). 11:59:25 After my experiments with PVC instruments, I'm extremely confident that, with practice, I could play right to the finish a nocturne on a drainpipe flute. 11:59:30 -!- Hiato has joined. 11:59:40 -!- Hiato has left (?). 12:07:22 -!- oklopol has joined. 12:31:01 -!- Slereah has joined. 12:34:20 -!- RedDak has quit (Read error: 110 (Connection timed out)). 12:35:34 -!- RedDak has joined. 12:49:17 -!- Slereah- has quit (Read error: 110 (Connection timed out)). 12:49:38 -!- Slereah- has joined. 12:50:09 -!- Slereah has quit (Read error: 110 (Connection timed out)). 14:01:25 -!- helios_24c3 has joined. 14:29:49 -!- ehird`_ has joined. 15:03:16 finally, i'm fairly sure it works 15:03:31 that was one hellish language to parse :\ 15:04:08 -!- Slereah- has changed nick to Slereah. 15:07:45 oklopol: do show 15:10:36 lol, found a bug : ) 15:19:13 oh, right, i just forgot i need to fix the evaluator too 15:19:14 lol 15:31:52 http://www.vjn.fi/pb/p612225632.txt 15:32:45 the same unidirectional ring i showed before, now demonstrating the syntax 15:32:58 the computation syntax that is 15:33:24 well, to be exact, the syntax of expressions, since statements and expressions are very clearly separated. 15:35:55 -!- sebbu has joined. 15:51:42 -!- sebbu2 has quit (Connection timed out). 15:53:39 -!- ihope has joined. 16:04:54 Hello ihope 16:09:31 Ello. 16:13:24 Let's say that the Love Machine 9000 has 2 strings of length 5 that are valid programs. Both of these programs are circle-free (I won't say "halting", no program in the minimal syntax ever halt. The tape doesn't even stop moving). 16:13:45 What would be the first term for the Chaitin constant of this machine? 16:14:31 (The two programs are q0, S0 -> PS0, LE -> q0 and q0, S0 -> PS0, RI -> q0) 16:25:08 makes you wonder when a book written in 1997 says "it would take tens of man-years to write a compiler for a high-level language like pascal" 16:25:27 were people stupider back then? :) 16:25:27 Heh. 16:25:40 Possibly just lazy. 16:25:45 well, true 16:26:11 but wtf, pascal is simple as hell :\ 16:26:28 or then i just know a subset of it and think that's all 16:27:34 i mean, i'm pretty sure i could write a decent pascal compiler in a month, and i'm not even a professional :\ 16:27:57 i just create boy-years, which are like man-months. 16:28:21 gonna get some keb -> 16:31:35 someone should make a programming language that is based on an editor 16:31:44 the program simply manipulates the editor buffer of the program 16:31:45 :D 16:31:57 and the only way to loop is to manipulate the program with a quine 16:34:03 -!- jix has joined. 16:35:23 -!- oerjan has joined. 17:07:32 -!- faxathisia has quit ("Leaving"). 17:14:28 ,[.,] 17:14:28 ((in 0) (loop 0 ((out 0) (in 0)))) 17:14:32 now for optimization 17:16:00 what are the 0's for? 17:16:40 oerjan: at-position 17:16:49 >>,<< will be optimized to (in +2) 17:17:01 -!- helios_24c3 has quit ("Leaving"). 17:17:21 ic 17:19:57 oerjan: then after optimization it can be put into $BACKEND 17:20:09 i'm going to write one for brainfuck, just for kicks :-) 17:20:44 -!- RedDak has quit (Remote closed the connection). 17:20:59 bf-bloatarize :-) 17:21:07 also C (obviously), probably also an x86 machine code backend 17:21:12 -!- jix has quit ("CommandQ"). 17:21:18 maybe scheme, and try and make it work as functionally as possible while being fast :P 17:22:03 ehird`_: do you do any optimization for unmatching <>'s 17:22:03 oerjan: there's also some special instructions, right now just 'clear' which optimizes (loop X ((add 0 -1))) to (clear X) 17:22:25 oklopol: uh, i don't see any real sensible optimizations i could do 17:23:37 i should make a real optimizer sometime, the ones i've made in c++ suck ass :P 17:24:40 scheme will be great for writing my optimizor in :-) 17:25:01 except... (add x y) (add x z) optimizations need destruction :( 17:32:39 hm, that destruction really IS infuriating 17:36:29 what destruction? 17:37:49 seems like a trivial pattern match to me 17:39:23 although basic scheme doesn't have easy pattern matching built in afair 17:39:55 (i'm sure someone must have made macros for it) 17:42:16 oh wait you weren't using scheme at this stage were you? 17:42:17 i've decided to lessen my scope for now 17:42:27 oerjan: yes, i am 17:42:51 instead of generic optimization and backends, first i'm going to write a highly-aggresively-optimizing BF->x86 machine code compiler 17:43:02 syscalls will jsut be OS X, since it's what i know :-) that could easily be changed 17:43:13 what's the fastest known BF compiler right now? 17:44:14 don't know 17:44:42 ok, well what's a fast one :P 17:44:51 specifically, i'm going to be comparing mandelbrot.b performance 17:44:57 check the wiki 17:45:00 the fastest interpreter runs it in around 10 seconds 17:45:09 so compiled, i dunno... i think i could do 2 seconds? :-) 17:46:20 from the wiki: "Due to the fact that the last half of its name is often considered one of the most offensive words in the English language, it is sometimes referred to as ... b****fuck ..." 17:46:21 brilliant 17:46:25 b****fuck 17:47:36 does egobf have a compiler? 17:50:21 Sure. egobfc. 17:50:59 Which does all the optimization that egobfi does. ;) 17:51:45 Also, that editor language you discussed? 17:51:50 We have a name for it: TECO. 17:57:47 teco's not what i meant 17:57:48 :-) 17:58:08 you can do a factorial in teco without quining the program in its editor buffer and changing various parts of it to the result 18:05:53 most bf impls seem to be interps, oerjan 18:05:55 the iwki is not much heklp 18:07:06 pikhq: what about yours? didn't you have a Pebble-based bf compiler? 18:08:40 via C iirc 18:13:16 he does 18:13:20 but it's not that optimizing as far as i know 18:13:33 http://www.zathras.de/angelweb/blog-generating-machine-code-at-runtime.htm now this would be a good way to make a bf interp 18:13:41 compile to machine code then execute onthefly :-) 18:13:51 Just-in-time, eh? 18:14:00 :D 18:15:06 I don't know a simple tutorial to the mach-o format for writing out executables actually 18:15:09 :-( 18:19:36 Mirek's Cellebration 4.20 is 6 years old and it still seems to be the best cellular automata program for many purposes. 18:23:55 oerjan: Sure. PFUCK. 18:24:13 It's lightly optimizing. 18:27:30 0m1.680s, with gcc -O2 using C outputted by http://esoteric.sange.fi/brainfuck/impl/compilers/bf2c.hs which seems to do a lot of optimization 18:27:33 mandelbrot.b 18:27:35 not bad at all 18:29:53 haskell seems really suited to that 18:30:01 since bf optimization is pattern matching 18:30:08 if only i knew haskell 18:34:19 Where's mandelbrot.b? 18:34:51 http://esoteric.sange.fi/brainfuck/bf-source/prog/mandelbrot.b 18:34:53 like all bf programs! 18:35:08 bff, fastest (or second-fastest?) bf interpreter, runs it in a bit over 10 seconds 18:35:15 that compiler does it in 1.680 with gcc optimizations 18:35:33 gimme pfuck's compiled-c version 18:35:35 i'll test it 18:35:46 all optimization is pattern matching 18:35:50 ehird`_: that was sort of the unwritten part of my pattern matching statement above ;) 18:36:11 oklopol: using pattern matching could get quite verbose for some optimizations :-) 18:36:20 oerjan: yeah, well, teach me haskell 18:36:21 :P 18:37:09 graphica is getting quite awesome now, i'm fairly sure you can do an n dimensional hypercube now 18:37:17 in fact, i'll try 18:37:18 show me a graphica 3d hello world 18:37:25 :P 18:38:35 now that i've given it a bit of thought, graph rewriting may be quite a nice platform for programming 18:38:48 it has the minor defect of being superturing to implement. 18:38:53 errrr 18:38:58 that was badly put ::P 18:39:02 but i guess you got it 18:42:25 http://pikhq.nonlogic.org/mandelbrot.c 18:48:25 Graphica and graph rewriting, eh? 18:50:44 yes 18:50:46 why? 18:53:12 * ihope shrugs 18:53:24 has it been done? 18:53:41 never heard about it :\ 18:53:56 not that i care, really 18:54:04 but i am interested 18:54:34 here goes pikhq 18:55:59 pikhq: 2.5-3 seconds 18:56:03 you lose, by a lot 18:57:47 oerjan: would a brainfuck->? compiler be a good learn-haskell project do you think? :-) 18:58:01 ehird`_: But not bad at all for such simple optimisation. 18:58:01 and i actually mean from scratch - use my little knowledge of haskell, hack something out, learn from it 18:58:07 no darn tutorials :-) 18:58:20 pikhq: i did give you the benefit of gcc -O2, and this machine is recent 18:58:35 (dec 06, with the model being introduced sept 06) 18:59:22 Still, consider that I'm doing barely anything to the code. ;p 18:59:45 :p 19:00:08 And it's in Brainfuck. Surely that's worth something. :p 19:00:28 hmm, isn't the gregor's one the official fast bf interp? 19:00:30 no, it's in pebble 19:00:35 oklopol: not interp: compiler 19:00:47 well, interp in that it's used as one 19:00:55 no i mean 19:00:59 i'm lookin for a compiler 19:01:05 well, it compiles 19:01:12 egobfi8 and egobfc8. 19:01:19 compiles to binary code and runs it, iirc 19:01:19 They're both insanely fast in my experience. 19:01:36 ehird`_: compare yours to that 19:01:47 more interesting 19:01:55 egobfc8, someone give me it as a c file :P 19:02:37 eso archives? 19:02:37 http://pikhq.nonloigc.org/mandelbrot.c 19:03:04 er i meant the compiler. but ok :P 19:03:22 -!- UnrelatedToQaz has joined. 19:04:05 ehird`_: i don't know about not looking at a tutorial, but otherwise i think so 19:04:41 oerjan: well i've read YAHT in the past, g ot iup to the bit where it started talking about crazy mutant types :-) 19:05:02 pikhq: Ha, ha, egobfc8 sucks! Bus error. 19:07:59 pikhq: :-) 19:08:14 Um? 19:08:25 Gah. 19:08:33 GregorR: I thought you *fixed* that bug. 19:08:39 hehe :P 19:08:50 it's not about working, it's about how great it would be if it works! 19:08:56 *worked 19:09:27 none of you happen to be graphica experts? :\ 19:09:40 i want to know if a binary n dimensional hypercube is possible 19:09:44 oerjan: haskell pattern matching can't handle variable stuff, right? 19:09:48 what i meani s 19:10:05 ++++++++++++ -> one instruction would have to be done by matching ++ then recursing, right? 19:10:18 oklopol: er of course it's possible, mathematically 19:10:23 you can define new patterns 19:10:27 oerjan: it is? 19:10:55 if it means what i think it is 19:11:02 did you prove graphica tc? :P 19:11:21 i am not talking about graphica 19:11:26 hehe 19:11:39 i mean, is it possible to define one in graphica 19:11:46 oerjan: also, why doesn't emacs auto-indent haskell? :( 19:11:47 no idea 19:11:54 i have haskell-mode etc 19:12:10 ehird`_: apparently you need to cycle through possible indentations 19:12:18 (so i hear) 19:12:18 to take an example from bf2c.hs, "norm_move p = fst (nm p 0 0) where" is followed by some indented lines, but if i C-j on the 'where', i just get 0-indent 19:12:29 oerjan: oh jesus. no way am i going to do that 19:12:41 python has this problem, and python-mode uses the SANE indent level by default and THEN lets you cycle :( 19:12:42 i'll make a spec and hope one of the math wizzes here shows me how it's done 19:12:46 oerjan: so what do you edit haskell with? 19:12:52 vim 19:12:59 i'm pointing my hairy hand at you, oerjan and ihope! 19:13:07 does that indent your code for you, oerjan? :P 19:13:08 and i don't claim it's good 19:13:10 i know vim does autoindent 19:13:11 but for haskell? 19:13:16 for indentation 19:13:38 ah 19:13:40 :( 19:13:53 although i have not tried any fancy setup 19:14:55 hm my bf compiler will be written in haskell and target c 19:14:59 though i shall be sure to only use the simplest of c 19:15:08 damn, now i have to name it :P 19:15:09 i just use the default language insensitive autoindent 19:16:14 i'll just use emacs :P 19:16:39 as for +++++ i would just match on the first + and use span or something to get the rest 19:17:03 span (== '+') 19:17:27 oerjan: i'll be applying optimization iteratively anyway 19:17:29 something like 19:17:36 while optimization_done: optimization_done = optimize() 19:17:49 so it'll aggressively do as much as possible 19:18:04 that's extremely unhaskelly way of writing it :D 19:18:17 mutable Bool 19:18:19 oerjan: yeah, i know :-) 19:18:24 oerjan: it was just pseudocode 19:18:30 to demonstrate what i meant 19:20:38 frainbuck 19:22:15 oerjan: do you know anyting about yi? 19:23:15 only that it's a haskell editor 19:24:19 heh 19:24:23 http://haskell.org/haskellwiki/Haskell_mode_for_Emacs i'm going to do that haskell unicode thing 19:24:26 because i am curazy! 19:28:09 be careful not to mess up indentation with characters with the wrong width 19:28:19 :-) sure 19:32:37 -!- sebbu2 has joined. 19:34:41 $ darcs get --partial http://code.haskell.org/yi/ 19:34:41 Copying patch 238 of 1251... 19:34:48 you call that PARTIAL, darcs?! 19:41:34 -!- calamari has joined. 19:41:36 -!- ihope has quit ("CGI:IRC (Ping timeout)"). 19:48:25 -!- sebbu has quit (Read error: 110 (Connection timed out)). 20:01:26 oerjan: those algebric thingy-types are "data" not "type", right? 20:01:43 the X = Y a b | Z a b stuff 20:03:08 -!- ihope has joined. 20:03:13 yes, yes they are 20:03:57 yep 20:04:02 Damn, bf2c.hs optimizes /loads/ 20:04:16 type is for synonyms 20:04:25 it optimizes ifs, sums, and even multiplications (of arbitary forms)!! 20:04:39 newtype is for single field data types, removing the usual box 20:07:44 i don't think i can live up to the amazingness of bf2c.hs :( 20:07:55 it's *really good* 20:08:08 Huzzah! 20:16:49 -!- Hiato has joined. 20:16:59 Wassabi all :P 20:17:21 no thanks 20:17:32 i hear it's quite strong 20:17:34 lol, ok : Sup all 20:17:37 :) true 20:17:37 oerjan: how do i add an instance? i'm trying to get show working :-) 20:17:39 but nice 20:17:55 ehird`_: data ... deriving (Show) 20:18:30 oerjan: indented the same as a |? 20:18:43 or do you mean a custom one? 20:18:53 also, how do i then define 'show' on it 20:18:57 for example 20:19:13 um deriving (Show) gives you the default instance 20:19:45 (i.e. neither | or deriving have very strict indentation requirements, just more than the "data") 20:20:46 for a custom one, you don't use deriving, but instance Show MyType where show x = ... 20:20:47 i mean, oerjan, I want to define how to 'show BF' 20:20:52 ah 20:20:54 thank you 20:21:15 instance Show BF\nwhere, right? 20:21:24 (assuming you don't need to deal with parenthesis precedences) 20:21:31 http://www.vjn.fi/pb/p136521315.txt tell me if any part of that makes sense, will ya :) 20:21:59 need at least a space before the where in that case 20:22:23 i would use instance Show BF where\n show ... 20:22:46 -!- tejeez has quit ("mit helvetti t mun irssi sekoilee"). 20:22:50 (the where starts a new indentation block) 20:23:04 wow, oklopol, impressive 20:24:24 * oerjan wonders if helvetti means what he thinks it means 20:24:31 hell 20:24:37 right 20:24:39 graph rewriting... 20:24:39 ! 20:24:48 it doesn't rewrite anything yet. 20:25:02 currently, it's a graph *description* language.- 20:25:17 but, as always, i aim higher than i'll prolly ever get. 20:25:26 oerjan: haskell-mode doesn't consider "instance Show BF where\n " to be a proper&right indentation 20:25:34 leastmost is aligned with 'Show BF' 20:25:45 bah 20:25:47 mitä helvettiä tää mun irssi sekoilee == what the hell is my irssi doing 20:25:51 roughly translated 20:26:16 Hiato: thanks, although i don't agree :) 20:26:47 ehird`_: well the next line does need to be indented 20:27:05 how much doesn't matter 20:27:34 oerjan: can i pattern-match "negative" and "positive"? 20:27:36 on an Int 20:27:46 in case anyone happened to start reading the spec, tell me ;) 20:27:54 morning coke -> 20:27:59 I did :) 20:28:00 use a guard 20:28:29 for example, f n | n < 0 = ... 20:28:35 cool, i don't think it's any good if you don't know the syntax somewhat already, since it's very formal and simultaneously not that unambiguous. 20:28:35 oh yes! those things 20:28:40 *any good though 20:29:01 i'll include the example progs i made 20:29:43 Yes please 20:31:35 Where can I paste some text, quickly, anonymousely? 20:31:44 and also if i'm not here don't be afraid to ask in #haskell, the world's friendliest programming language channel 20:31:57 on the web? 20:31:59 pastebin.ca rolls off my tongue 20:31:59 http://www.vjn.fi/pb/p123363511.txt 20:32:23 right, thanks 20:32:27 oerjan: http://hpaste.org/4720 20:32:33 but there are lots of them 20:32:38 also /pb/, if you don't care about quality ;) 20:32:43 hahaha how ironic, you just mentioned #haskell, and someone mentioned pastebins 20:33:00 the best ever pastebin will be written by me in oklotalk :P 20:33:05 Or maybe Haskell, since I seem to like haskell 20:33:06 :) 20:33:10 ehird`_: replicate b '+' 20:33:29 etc. 20:33:44 oh, right, the coke 20:33:47 -> 20:34:02 damn... at this hour you still need coke outside :< 20:34:14 * oklopol needs to turn his sleep cycle forward... 20:34:18 whoooops 20:34:25 damn... at this hour you still need clothes outside :< 20:34:31 oerjan: is the show (Move a) ++ blah good though? 20:34:36 otherwise, it's code repetition 20:34:40 freudian slip 20:34:45 or is that anti-freudian 20:34:47 -> 20:35:36 ehird`_: er, don't you need a backwards move too? 20:35:58 show (Add 0 b) | b > 0 = '+' : show (Add 0 (b - 1)) 20:35:59 show (Add 0 b) | b < 0 = '-' : show (Add 0 (b + 1)) 20:35:59 show (Add a b) = show (Move a) : show (Add 0 b) 20:36:03 i mean show (Add a b) there 20:36:10 -!- UnrelatedToQaz has quit ("ChatZilla 0.9.79 [Firefox 2.0.0.11/2007112718]"). 20:37:00 anyway 20:37:03 ehird`_: need ++ not : at least 20:37:04 oerjan: before and after: http://hpaste.org/4720 20:37:09 yeah 20:37:12 i did that :-) 20:38:03 actually: replicate (abs b) (if b < 0 then '-' else '+') 20:38:20 http://hpaste.org/4721 20:38:27 check it out, let me know 20:39:14 oerjan: that's a bit ugly 20:39:37 as you wish 20:39:56 -!- RedDak has joined. 20:40:29 oh and it doesn't matter here but the usual way to do a second line after a guard is | otherwise without repeating the pattern 20:42:07 Hiato: hpaste is really only for relatively short haskell code 20:42:14 woops 20:42:18 your text was truncated 20:42:20 should I remove it? 20:42:24 show (Loop a b) = show (Move a) ++ "[" ++ show (Move (-a)) ++ show b ++ show (Move a) ++ "]" 20:42:25 aha, I see 20:42:29 oerjan: there has to be a better way to od that 20:42:30 and amusingly colored :) 20:43:07 someone give me a name 20:43:16 not overtly common but not unusual 20:43:16 Paul 20:43:22 a full name 20:43:29 John B. Griffith 20:43:40 bsmntbombdood: Rodger Nintendo 20:43:42 how do I remove? 20:43:42 wait, what 20:43:42 * oerjan wonders if he exists :) 20:43:50 Hiato: i don't think you can 20:44:06 meh 20:44:13 the author identification is not working... 20:44:31 i'll go with Paul Griffith 20:45:23 ehird`_: i don't think there is any much better way there 20:45:24 Hiato: i have to agree with pikhq, you have some skill at designing esolangs 20:46:16 Thanks oklopol 20:46:17 :) 20:46:25 http://rafb.net/p/x491Ou33.html 20:46:29 ok, full manual 20:46:59 oerjan: http://hpaste.org/4720#a2 i really don't like the look of this :( 20:47:22 also i keep bleeding up against 80 cols :( 20:48:24 hm a helper function: 20:49:06 showMoveBrak a s = show (Move a) ++ s ++ show (Move (-a)) 20:49:12 Brak? 20:49:19 er, bracketed 20:49:25 couldn't think of a good name 20:49:39 :P it'll do 20:49:44 Hiato: what country is .za? just wondered about your name :) 20:49:55 Zambia? 20:50:01 sure, its South Africa 20:50:03 nope 20:50:05 south africa 20:50:10 ...haha 20:50:11 Zouth Africa? 20:50:12 google powah 20:50:17 well Zuid Africa 20:50:22 in afrikaans 20:50:25 None of the official names for South Africa can be abbreviated to ZA, which is an abbreviation of the Dutch Zuid-Afrika. This is a legacy of when Dutch was an official language in South Africa, before being replaced by Afrikaans, in which the name of the country is Suid-Afrika. Afrikaans joined English and Dutch as an official language of the South Africa in 1925, and in the South African Constitution of 1961 Dutch was removed as an of 20:50:27 ehird`_: also you can break things into more than one line 20:50:33 and sa is south ammerica 20:50:37 oerjan: i did, but it looks ugly 20:50:46 yip, eihrd`_ nailed it :) 20:51:05 wikipedia powah 20:51:12 :) 20:51:53 Are you the only guy on the esomap from South Africa? 20:52:00 Klerksdorp. 20:52:06 "i.e. executing No-Op will 20:52:06 result in the data origin remaining intact but the data destination being modified." 20:52:09 i don't get it 20:52:09 Or are you not on it. 20:52:12 I think so 20:52:13 isn't no-op a nop? 20:52:18 well, I'm not on it :0 20:52:23 No-Op = No Operation 20:52:54 Ie, when you send things through a No-Op, the data destination is increased by the value in the data origon 20:52:59 well, yes 20:53:04 No-Op = nop 20:53:08 but I prefer No-Op 20:53:24 oerjan: showMoveBrak :: Int -> String -> String 20:53:27 i can has type sig! 20:53:42 Sleereah, I'm in Johannesburg, not Klerksdorp ;) 20:54:05 oerjan: 20:54:06 *Main> parse ",[.,]" [,,[[.,,]],.,,] 20:54:08 i have work to do 20:54:17 'kay 20:54:28 on my parser, though 20:54:28 ah, so ~ always moves stuff from one memory layer to the other 20:54:48 (I remembered that there was just one point in Africa, and it was South Africa) 20:54:49 oh wait 20:54:49 yuip 20:54:54 i really want an instance of Show [BF] too 20:54:59 (lol :P ) 20:55:10 I'm not so sure how clear that was oklopol, sorry 20:55:28 -!- ihope has quit ("CGI:IRC (Ping timeout)"). 20:55:32 but during it's move, it's modified by the current command 20:55:42 oerjan: show [x,y] where show x = "a" and show y = "b" is "ab" 20:55:45 what function does that? 20:55:51 i.e. map-then-join-with-no-sep 20:56:09 Hiato: i guessed that, but it may well be said clearly in the spec 20:56:17 i'm bad at noticing stuff 20:56:39 hmm, what exactly does it mean when a row is shifted? 20:56:40 lol, no prob. It's probably written badly though, haven't revised it at all 20:56:53 well, picture a grid type situation 20:56:57 yeah 20:57:02 where you have a row containing say 6 4 5 20:57:07 then you shift left 20:57:08 yeah 20:57:13 oerjan: unwords adds a space 20:57:16 it becomes 4 5 6 20:57:28 almost kinda like a rubix cube 20:57:33 oh, hehe, thought the whole row moves :) 20:57:34 but 2d and wrap around 20:57:45 but indeed, row is - and column is | 20:57:57 lol :D. I will revise the spec to make that more clear :) 20:58:11 yep (that is right? ) 20:58:50 ehird`_: concatMap 20:59:09 instance Show [BF] where show = concatMap show 20:59:14 lean, mean, currying, one-lining machine 20:59:23 Illegal instance declaration for `Show [BF]' (The instance type must be of form (T a b c) where T is not a synonym, and a,b,c are distinct type variables) In the instance declaration for `Show [BF]' 20:59:37 ehird`_: there is already a general instance for [] 20:59:52 so Slereah, fixed the beer problem for the lm ? 21:00:04 actually that error is more subtle, it is because you have not enabled extensions 21:00:10 but you don't need them for this. 21:00:18 oerjan: so, what do i do :P 21:00:57 Hiato : Yes I habe 21:01:02 instead, in the instance for BF _itself_, add a line showList = (concatMap show ++) 21:01:11 Here it is : http://paste-it.net/5486/raw/ 21:01:14 With comments and all! 21:01:25 er wait 21:01:34 messed up 21:01:43 If it doesn't work, I'll also upload the last version of the love machine. I don't remember which one I uploaded last 21:01:53 showList l s = concatMap show l ++ s 21:02:02 too much pointlessness :) 21:02:23 showLis tl = concatMap show l ++ 21:02:27 just right! 21:02:27 cool, thanks Slereah 21:02:27 :-) 21:02:28 :) 21:03:07 awesome stuff that comments state :) 21:03:12 oerjan: i think i need to ditch the ++ 21:03:14 *Main> parse ",[.,]" ,[.,]., 21:03:25 hihi happy comments :) 21:03:27 -!- dak has joined. 21:03:39 Actually, it just takes advantage of the fact that the love machine doesn't look what's in a state until it calls them. 21:03:54 ehird`_: you missed the s in my correction 21:03:58 lol, cool :) 21:04:01 I could probably make a better comment system 21:04:08 ps: Line feeds make it way way slower..... 21:04:18 hugely slow 21:04:46 yes oerjan but i missed the param too :-) 21:04:49 so it's valid pointless 21:05:05 Doesn't seem any slower than before to me. 21:05:13 ehird`_: for pointlessness you need to have parentheses around it 21:05:18 So overall, oklopol, is it worth pursuing as an Esolang? 21:05:24 It's not a very efficient program, you should know that. 21:05:37 I could probably make a better version. 21:05:50 :) 21:05:50 i did oerjan 21:05:53 I'll probably try once I isntalled m-states. 21:05:54 because it has an operator at the end 21:05:59 showList l = (concatMap show l ++) 21:06:17 Sure, well priorities... (beer should be up there :P j/k ) 21:06:17 *Main> parse ",[.,]" ,[.,]., 21:06:19 still wrong 21:06:26 oh wait 21:06:26 duh 21:06:33 parse ('[':s) = Loop 0 (parse s) : parse s 21:06:34 Hiato: i'd say, and considering the amount of trivial brainfuck derivatives, that's quite a sophisticated lang 21:06:37 see if you can spot the error! :-) 21:06:51 Thanks very much oklopol :D 21:06:52 yep 21:07:12 Hiato: only being polite so you'd read the graphica spec ;)) 21:07:16 you may need a more clever parser 21:07:16 oerjan: http://hpaste.org/4722 i think i'd have to do a pretty major parser change for that 21:07:19 (just kidding) 21:07:27 (note that this also behaves weird on ]s in other places, iut was just a quick hack) 21:07:31 lol, I read it anyway ;) 21:07:34 (lol) 21:07:55 oklopol: does oklotalk have objects? 21:07:58 or classes 21:08:52 no classes 21:09:09 prototype-based oo is possible 21:09:16 using functions. 21:09:24 ok. 21:09:25 kinda like javascript ;;;;) 21:09:43 i'm going to sketch out my Counter application for my hypothetical oklotalk-based web framework :P 21:09:47 give me an example of that oo? 21:10:05 ehird`_: the usual trick is to return the part remaining after the parse 21:10:38 so parse "++-+]-+++" = (something, "]-+++") 21:10:49 oerjan: i see 21:10:50 :-) 21:11:07 i'll need a helper function instead of : then 21:11:10 -!- Sgeo has joined. 21:11:22 Animal={§say -> outn "A generic animal says nothing!"}; Turtle=Animal+{§say -> outn "Turtle says moo"} 21:12:00 -!- RedDak has quit (Read error: 110 (Connection timed out)). 21:12:01 oklopol: ok, now pick another symbol instead of fucked-S so i can type it 21:12:12 lol :) 21:12:16 alternatively, this is an idea: 21:12:21 use tons of unicode chars 21:12:21 instead of => 21:12:25 heh 21:12:28 use the unicode two-pronged-arrow-right thing 21:12:45 then, i won't complain and instead will just make an emacs/whatever mode that rebinds loads of keys to that 21:12:49 just make your own simplified oklotalk -dialect... 21:12:49 like an APL-for-modern-machines does! :D 21:12:57 my idea is cooler :( 21:13:00 it's more weird, like oklotalk! 21:13:07 you won't be able to make a full interp anyway using the examples i give you 21:13:14 i know that 21:13:14 but even so 21:13:41 that'd be a cool idea if i knew how to produce those characters. 21:13:49 oklopol: what editor do you use 21:13:50 i don't really care about the characters. 21:14:00 gedit nowadays 21:14:01 Grr my dad locked the computer 21:14:24 oklopol: OK, well start using emacs and i'll write an oklotalk-mode that lets you type then :-) 21:14:25 *them 21:14:26 :P 21:14:39 alternatively, release an oklotalk spec using them and i'll write an editor in it that lets you type them 21:14:39 :D 21:14:47 * Sgeo is a bit too irritated to really work on PSOX 21:14:52 heh 21:14:52 pikhq, what do you have? 21:15:14 wassup Sgeo :) 21:15:16 oklopol: with that thing you did, how can you do super? i.e. call the same function in the parent object, and how do you clone an object, and how do you create an initialization function? 21:15:24 i guess: 21:15:33 you can make those synthetically 21:15:36 yes 21:15:38 but 21:15:40 how do i call a method 21:15:41 :-) 21:15:43 and they'll be there as built-ins. 21:15:59 Object!§Method 21:16:12 or object §method 21:16:18 there are lots of ways to calla function 21:16:20 *call a 21:16:21 Sgeo : http://www.rafb.net/p/x491Ou33.html tell me what you tink 21:16:25 *think 21:16:26 is there a 'returning x as y, z'? 21:16:27 that is: 21:16:33 well 21:16:33 i mean 21:16:36 a construct behaving like this: 21:16:46 x = y; ...stuff using x...; y 21:17:11 * Sgeo has no opinion 21:17:24 oklopol: wait, don't need it 21:17:32 Does the interpreter read character-by-character, or line-by-line? 21:17:33 (gee thanks -_-) 21:17:38 I mean, read stdin 21:17:40 ( ;) ) 21:17:47 oklopol: ok, one final question: how can i check whether an object has a certain method or not 21:18:04 It needs to read stdin character-by-character in order to work with PSOX 21:18:13 My interpreter? 21:18:20 well, naive new: New={o=_+{}; o §init; o} 21:18:22 It can write to stdout line by line, and in fact, PSOX.py will do that :/ 21:18:25 Hiato, yes 21:18:33 oklopol: what about instance vars 21:18:40 and what about 'self' 21:18:46 function gives out it's patterns using F!#something 21:18:46 Yes, character by character (the Full 0 one at least, this one doesn't exist yet) 21:18:49 don't remember what 21:19:09 do a {_!0}\(F!#ptrns) 21:19:14 and you have the methods 21:19:28 self is ' 21:21:27 anyhow, hope that really is your final question, since i think i'll stop answering your further questions now :< 21:21:34 * oerjan read that as instance wars 21:21:50 oerjan: should i do (list, rest)? 21:21:53 uhh, what a title 21:21:55 or could 'list' be something better 21:22:09 Instance Wars: The Awakening 21:22:24 whatever structure you want 21:22:45 for a list of BF commands, list seems fine... 21:22:47 oerjan: asking for a suggestion :-) 21:22:56 hm 21:23:00 Hiato: you read the spec as future tense, present or past? 21:23:02 i need some kind of parse-dispatcher 21:23:03 to loop parse 21:23:06 since i wants opinions :-) 21:24:39 you may have a single command parser, and a command list parser which are mutually recursive 21:24:45 lol, sorry 21:24:56 you know what I meant though 21:25:19 err no actually, that's why i asked :) 21:25:38 lol, ok "I want opinions" 21:25:55 opinions regarding graphica, that is 21:26:00 I want onions. 21:26:03 who doesn't 21:26:07 shrek 21:26:10 :) 21:26:16 oerjan: alrighty 21:26:25 oerjan: parse and parseChar, dynamic duo 21:26:48 wait, now I'm confused 21:26:51 ehird`_: except parseChar will parse an entire loop if it hits one 21:27:07 oerjan: parseInstruction's a bit too long... 21:27:09 oerjan: parseFoo? 21:27:10 who's spec was that that I read and said wants opinions? Mine are yours oklopol ? 21:27:10 i'll try to explain, if you're confused about the spec. 21:27:17 ...? 21:27:18 parseCmd 21:27:24 I am soo lost 21:27:27 hehe 21:27:31 Graphica spec is by me 21:27:35 and i want onions about it. 21:27:38 yes, I know that 21:27:40 oh 21:27:41 oerjan: you've almost fully converted me to loving haskell, byt he way :-) 21:27:41 Would anyone object that PSOX.py writes to stdout line-by-line? 21:27:46 it's a lot simpelr than i thought 21:27:53 heh :) 21:28:05 "Hiato: you read the spec as future tense, present or past?" Because I though that that was a comment about something I had said about my spec 21:28:06 i didn't paste it here for your enjoyment, but because i wanna know if it's readable :P 21:28:09 oerjan: parseCmd :: String -> BF -- seems right to me 21:28:14 oh, sorry 21:28:30 i meant about the grph. spec 21:28:33 ehird`_, does this mean you're going to write a PSOX Server in Haskell? 21:28:37 ehird`_: -> (BF, String) 21:28:42 Sgeo: If you want. SUre. 21:28:47 oerjan: Whoops, yes 21:28:57 sure, will read and concentrate now :) 21:28:57 erm, that was a joke >.> you don't need to do that 21:29:04 oerjan: and parse :: String -> ([BF], String)? 21:29:16 Sgeo: Well why not 21:29:20 right 21:29:36 in fact take a look at the definition of ReadS 21:29:50 ehird`_, it would be a bit of a project, and also domain implementors would also need to implement their domains in Haskell >.> 21:30:01 it's a type for simple parsers, used by the Read class 21:30:12 Sgeo: so what you won't have a standard for domain implementation languge 21:30:17 Sgeo: also no it wouldn't be 21:30:21 no harder than psox.py 21:30:28 someone get lambdabot in here 21:30:32 s/lambdabot/a lambdabot./ 21:30:38 * Sgeo considers PSOX.py to be a bit of a project 21:30:59 psox is trivial 21:31:40 Have you read the specs at any time after it came into existance from being branched off of PESOIX? 21:31:45 yes 21:32:14 bah, lambdabot doesn't have @src ReadS anyhow 21:32:32 just do :i ReadS in the interpreter 21:33:04 hrmm, well oklopol... I must say, that yes, I get the basic gist of what is going on, but the syntax is laid out awkwardly 21:33:17 you mean the bnf thingie? 21:33:21 the explination, that is 21:33:23 yip 21:33:34 the expression syntax would've been too weird given as a bnf... 21:33:39 i mean, that's what i thought 21:33:44 so it's explained separately 21:33:48 I see 21:33:50 ehird`_: although for more complicated parsers, the Parsec library is your friend. 21:34:00 can you point out what exactly is bad about it? 21:34:21 oerjan: I've tried Parsec before! I liked it. Nice paradigm. 21:34:24 But not for Brainfuck 21:34:25 :-) 21:34:34 it's a bit overkill for that 21:34:40 *Main> :i ReadS type ReadS a = String -> [(a, String)] -- Defined in Text.ParserCombinators.ReadP 21:34:44 how useless 21:34:59 well, just the way that things are broken down, perhaps start with the most basic structers and then build it up 21:35:10 instead of starting with something that needs 21:35:27 to be referenced from the bottom of the list 21:35:37 perhaps have the smallest ones first/most basic 21:35:44 then the more composite and advanced structers 21:35:50 Hiato: that's not how most bnf is layed out 21:35:55 anyway, that's what I feel 21:36:03 well, yes, but the Graphi one isn't 21:36:06 it's backwards 21:37:15 *Graphica 21:37:25 or have I had one too many 21:37:41 oerjan: so what IS readS 21:37:44 :-)) 21:37:46 oh wait 21:37:48 it's a type 21:37:49 duh :-) 21:37:59 also do :i Read 21:38:04 hm so parse :: ReadS BF 21:38:10 that's the class that uses it 21:38:26 i don't consider that an issue really, but usually bnf's go bottom-down 21:38:30 Read confuses me, so I'm going to ignore it! 21:38:31 at least that's my experience. 21:38:39 ... is that ok? :P 21:38:48 ... 21:38:51 bottom-down xD 21:38:53 top-down 21:38:54 Actually, I think for BF i should just repeat the readS type 21:38:54 i mean 21:38:55 it's tiny anyway 21:38:56 lol 21:38:58 although i don't think you need the list around just for bf 21:39:31 lol, well sure, it's your language, and you're more experienced 21:39:34 otoh maybe you do, an empty list signals a parse error 21:39:51 but I just felt it awkward to reference stuff that hadn't yet been introduced 21:39:51 parse :: String -> [(BF, String)] parse "" = [] parse s = let (p, s') = parseCmd s in p : parse s' 21:39:57 oerjan: looks right to me 21:40:24 er... no that's not how it's used 21:40:37 welp, it should work fine actually 21:40:39 looking at this code 21:40:54 you want ([BF], String) 21:41:00 nope 21:41:09 Hiato: apart from that, do you understand it? i don't see any difference in the order they're given myself, i've just seen top-down more frequently, so i used that. 21:41:20 err 21:41:24 that makes parse String -> [BF] 21:41:28 the evaluation part is top-down too. 21:41:29 yeah i'll fix that. 21:41:44 no wait. you are right oerjan 21:41:54 hrmm, yes that aside, I get the flow of it, but not the whole thing entirely 21:42:57 uh oerjan what should an example result look like from parse 21:43:02 say (parse ",[.,]") 21:43:19 I feel like I'm missing something (not sure what) but something to make the jump from bnf to example 21:43:29 but I could get it if I stared at it long enough I suppose 21:43:39 ([In 0, Loop 0 [Out 0, In 0]], "") 21:43:55 iirc your types 21:43:56 yeah, i myself feel it explains it all, but doesn't really explain anything :) 21:44:08 should be a bit more example'y i guess 21:44:21 oerjan: Write and Read, actually. So - parse always is (tree, "")? 21:44:36 not always 21:44:47 if you call parse recursively, it should stop at ] 21:45:15 parse ",[.,],[.,]" -> ? 21:45:17 because it is then used to parse inside a loop 21:45:25 Yeah, that would be nice, like a walk through idiot example 21:45:26 just one 21:45:36 that will also end with "" 21:45:51 i'll make a short tutorial, that + the spec might clear it up a bit 21:46:04 hmmm... wonder if it's time to put my languages on the esowiki :-) 21:46:04 oerjan: what wouldn't 21:46:09 (this is like talking to SHRDLU :-)) 21:46:19 been wondering whether i should from the day i joined here 21:46:31 but parse ".,],[.,]" = ([Write 0, Read 0], "],[.,]") 21:46:52 Yeah, that would be awesome. Ha, I think it's about time Full 0 got onto the wiki 21:46:56 but I have no clue how 21:46:59 shoudln't you get a parse error, oerj? 21:47:03 and that one would be a recursive call used for the loop of the former one 21:47:13 Hiato: just as you'd use any other wiki 21:47:14 no. 21:47:15 ...i think 21:47:29 oerjan and ehird`_ can tell you that 21:47:39 i've never touched a wiki in my life :P 21:47:40 oerjan: i don't see what definition parse could have 21:47:41 :( 21:47:42 scaaary 21:47:44 Ditto 21:47:54 we see the same things :) 21:47:59 Oklowiki will solve that! it shall be trivial! 21:48:03 and written in Oklotalk! 21:48:05 :P 21:48:06 With my fictional web framework 21:48:09 oh yeah :) 21:48:11 heh 21:48:28 To help protect against automated account creation, please solve the simple sum below and enter the answer in the box (more info): 32 + 10 = LOLOLOL 21:48:37 ehird`_: you just add a special case parse s@(']':_) = ([], s) 21:48:39 32 + 10 = 3210 21:48:42 oklowiki is a virtual wiki that automatically uses every wiki it can find on google simultaneously. 21:48:43 a malbolge script could do that 21:48:50 oerjan: s@p? bizzare 21:48:51 oklopol: haha no 21:48:52 Wicked 21:49:00 Hiato: btu it won't know to look for that. 21:49:17 Hiato: it will just say 'porn viagra cuddly toy' for all fields, or similar 21:49:19 and thus fail 21:49:21 well, it will with PSOX and some genetic algorithms :) 21:49:22 ehird`_: don't use + for concatenation! 21:49:29 lol 21:49:30 true 21:49:31 a wise man once told me that 21:49:39 oklopol: it was a pun based on such 21:49:42 -!- Sgeo has quit (Connection timed out). 21:49:46 ehird`_: that's an "as" pattern. it means bind s to the string, but also check that it matches the pattern ']':_ 21:49:56 oerjan: blind mown 21:49:56 ehird`_: and what i said was totally serious. 21:50:08 huh? 21:50:17 oerjan: spoonerize it 21:50:47 :D nice ehird`_ 21:51:07 oerjan: i have my two base cases! but no parse s! time to do that :P 21:51:22 * Slereah fixed some more colon troubles on the love machine 21:51:32 This is awesome: "Someone, probably you from IP address 198.54.202.234, has registered an account "Hiato" with this e-mail address on Esolang." 21:51:33 lol 21:51:35 Printing them or taking them as accepting characters is annoying 21:51:53 (The sentence should not be interpreted in any sodomy sense) 21:52:05 Hiato: have you? 21:52:14 lol, yes oklopol 21:53:13 how do I create a new labguage page? 21:53:17 *language 21:53:41 Hiato: MAGIC & LUFF 21:53:50 no really 21:54:01 search bar 21:54:03 type in name 21:54:04 enter 21:54:04 edit 21:54:05 voila 21:54:09 ok, thanks 21:54:46 also when logging in check the box "remember me" 21:55:05 otherwise there is a tendency you don't stay logged in 21:55:05 what's that do? 21:55:12 well, not necessary as I delete cookies automatically when closing FFX 21:55:39 Hiato: i guess you also use tor 21:55:40 er the problem is it sometimes forgets you _too_ soon 21:55:47 tor? 21:55:57 oh, I see 21:55:57 ok, forget that 21:56:06 no please 21:56:07 but maybe it depends on browser 21:56:12 don't make me google it :P 21:56:28 tor -ibash? 21:56:29 tor -rent? 21:56:43 bit- tor -nado? 21:56:58 the onion router iirc 21:56:59 no, just Tor 21:57:16 hrmm 21:57:19 ok, google 21:57:38 Tor: anonymity online 21:57:39 aha 21:58:05 well, no :P But I do use Browzar and CCleaner 21:58:25 you can always tell the type of person. 21:59:18 yeah, tor looks wicked, downloading 21:59:22 oerjan: i can't figure out a 'parse s' definition 21:59:26 sigh, hiato. sigh. 21:59:33 next up; freenet, i guess 21:59:59 ps: is there a way of using it without having to bounce many connections (limited bandwidth means I don't want to sopend it on some-one's download) 22:00:03 googling :P 22:00:20 ahh, no 22:00:26 freenet is a step way too far 22:00:31 over the edge :) 22:01:02 meh 22:01:03 well the main case should be something like: 22:01:07 actually tor is boring 22:01:38 parse s = let (p,s') = parseCmd p; (ps, s'') = parse s' in (p:ps, s'') 22:01:43 (PS: I clear cookies for a reason : I don't want my sis loggin in for me, and no, I do not delete history incase you were gonna ask) 22:02:10 http://paste-it.net/5499 22:02:11 http://paste-it.net/5500 22:02:17 Hope it works okay now. 22:02:32 oerjan: what i already had was close, interestingly 22:02:44 but parseCmd p? 22:02:44 what is p 22:02:44 ehird`_: i based it on yours 22:02:46 i think you mean s 22:02:51 er, s 22:02:53 sorry 22:03:01 also, i'll replace ; with 'in' 22:03:11 oh 22:03:12 i see 22:03:13 :-) 22:04:50 you can also remove the ; and put (ps, s'') straight under (p,s') 22:05:09 seems to work Slereah 22:05:11 just fine 22:05:21 doing that, where does 'in' line up, oerjan ? 22:05:30 'let'? 22:05:33 doesn't matter 22:05:44 parseCmd (']':s) = error, right? 22:06:01 I had to change it. Dealing with ":" made it crash 22:06:08 no, that should return ([], ']:s) 22:06:23 For instance, the function .+[<.+>] on the BF Love Machine 9000 22:06:26 oerjan: where do i handle unmatched [s and ]s then? 22:06:31 it's the essential part for allowing parse to be used for parsing inside loops 22:06:39 It works now though. 22:07:00 oerjan: parseCmd 22:07:01 not parse 22:07:22 oh right 22:07:46 hm 22:07:47 *Main> parse ",[.,]" (,[.,],"]") 22:07:53 yep, although that error should never be triggered 22:08:05 yay 22:08:11 parse (']':s) = ([], s) 22:08:19 not: parse s@(']':_) = ([], s) 22:08:20 :) 22:08:25 to get rid of "]" 22:08:33 or is that wrong 22:08:34 :/ 22:08:37 oh bad idea 22:08:54 *Main> parse ",[.[-],]" (,[.[-],],"") 22:08:55 it works fine 22:09:08 try parse ",]" 22:09:22 well. that should be an error anyway 22:09:28 but it isn't 22:09:43 with your definition: 22:09:44 *Main> parse ",]" (,,"]") 22:09:46 still isn't! 22:09:57 *Main> parse "[" ([],"") 22:09:59 also wrong 22:10:04 but that is correct 22:10:07 er wait 22:10:10 no, [s don't magically close 22:10:11 :-) 22:10:25 remember, everything before ," should be the program verbatim 22:10:34 the latter shows you have the loop part wrong 22:10:40 if it's something else (sans removing of comments), that's wrong 22:10:58 the loop part should check that what remains after the subparse starts with ] 22:11:55 in english 22:12:01 anyway 22:12:03 parse s@(']':_) = ([], s) 22:12:05 that is wrong, somehow 22:12:10 some error check is missing, somehow 22:12:16 yep, should be ([], ']':s) 22:12:49 parse should not do error checks, it should just stop and the caller should check 22:13:06 no, it should call 'error' 22:13:06 :P 22:13:11 NO! 22:13:15 bah 22:13:16 why not 22:13:17 :( 22:13:23 ehird`_: are you making a bf parser or was that something more complicated already? 22:13:28 i forgot what you were doing 22:13:30 :P 22:13:32 oklopol: bf parser 22:13:35 yarrr 22:13:40 made one once 22:13:44 which will then optimize and compile :P 22:13:44 because parseCmd ('[':s) calls parse s 22:13:57 oerjan: i didn't say it should always call error 22:14:20 sure, the caller should check, not parse 22:14:29 no, because 'parse' is toplevel parsing 22:14:50 theoretically, main = dump (compile (optimize (parse read)))) 22:14:51 not literal ofc 22:15:03 then you need another function 22:15:18 :| 22:15:39 say parseCmdList 22:15:57 to be equal to the current parse? 22:16:02 yep 22:16:10 ok, now tell me how i check for errors from parse 22:16:10 :| 22:16:44 parse s = case parseCmdList of (cmdList, "") -> cmdList; _ -> error ... 22:17:04 oerjan: hmm, also i'd like to be able to say "Unmatched [ at line X, column Y" and the same for ]s 22:17:12 which seems like it'd quickly veer into non-haskelly territory 22:17:14 *parseCmdList s 22:17:27 um... 22:17:49 you want to keep track of file positions? 22:18:09 no. 22:18:15 but: parse "a[" 22:18:17 is 22:18:23 in that case Parsec doesn't seem as that much overkill anymore. it does that. 22:18:27 error "Unmatched [ at line 1, column 2." 22:18:37 wouldn't parsec be a bit slow for this though? 22:18:57 well 22:19:00 i just mean it has so much stuff 22:19:07 and bf parsing isn't /that/ complex 22:19:14 an Unmatched [ would always be at the end of the program... 22:19:51 no, oerjan 22:19:58 parse ",[.," 22:20:00 line 1, column 2 22:20:02 oh wait 22:20:06 the [ is the thing that is unmatched 22:20:08 hm right 22:20:22 in that case even Parsec needs a bit of trick 22:21:51 well you now have to keep track of lines and columns 22:21:54 oerjan: ofc this is nothing special 22:21:56 hm 22:22:05 i guess parseCmd and parseCmdList could take line/col args 22:22:09 but that seems... ugly 22:22:59 the alternative is using a state Monad 22:23:10 oerjan: that souhnds kind of ugly too :) 22:23:11 (which passes line/col under the hood) 22:23:23 monad sounds nicer than the args, though 22:23:24 so: shoot 22:23:35 ouch 22:23:53 shoot foot 22:23:59 main = shoot foot 22:24:25 i'm not sure i am ready to explain monads practically 22:24:34 i know monads! 22:24:41 ok 22:24:54 they're just dummy objects which bubble up the call stack. 22:25:02 the implementation catches them and does stuff with them 22:25:05 well, IO monads at least... 22:25:10 ayeeh 22:25:12 I may be totally wrong! :D 22:25:36 i guess i might be about to get a haskell mindbender 22:25:46 why me? :( i even read The Little Schemer without blinking an eye! 22:26:30 ok i'll try a bit. recall that ReadS type? 22:26:37 no, but i can 22:26:40 tap tap tap click 22:26:42 type ReadS a = [Char] -> [(a,[Char])] 22:26:51 thank you 22:26:51 :P 22:27:01 and it's String, actually. but same thing 22:27:13 now there is another type lurking around in Control.Monad.State ... 22:27:30 called Cuddly? 22:27:42 newtype StateT s m a = StateT { runStateT :: s -> m (a,s) } 22:27:56 okay, wait, let me get that 22:28:11 what does the X .. = X { ... } stuff mean? 22:28:20 i get that you have a runStateT function 22:28:36 which takes a value of type s, returns a value of... something? 22:28:42 it's a newtype definition, the format is basically like data 22:28:49 but this uses record syntax 22:28:52 the what 22:29:20 it is almost the same as data StateT s m a = StateT (s -> m (a,s)) 22:30:03 OK this isn't getting muchplace :P 22:30:28 anyway it is just a type wrapper around the s -> m (a,s) 22:30:57 now set s = String, m = [] 22:31:11 and you get String -> [(a, String)] 22:31:35 ok. 22:31:42 So how does this help me with line and col numbers! 22:32:02 er right 22:32:14 maybe a bit mixup there 22:32:30 :D 22:33:55 well let's say we have some data SourcePos = SourcePos SourceName !Line !Column 22:34:07 !Line? !Column? 22:34:10 whut is ! 22:34:10 (from Parsec) 22:34:23 er ignore those !'s, they're strictness annotations 22:35:01 type Line = Int; type Column = Int 22:35:22 So I'll just do Int Int :P 22:35:40 newtype SourcePos = Int Int -- am i rite 22:35:44 then State SourcePos is a monad which passes that around 22:35:50 no 22:35:53 ok 22:35:57 you need a constructor 22:36:10 and newtype can only take one field 22:36:42 excuse me i need some food 22:37:04 hello 22:39:53 * oerjan munches 22:40:03 * ehird`_ crunches 22:41:10 like any monad, the state monads State and StateT can be used with the somewhat imperative-style do blocks of "commands" 22:41:46 the state monads have the special commands get and put, which access the passed around state 22:42:29 it's a mutable proxy 22:42:32 is that it? 22:42:52 it's a simulated mutable cell 22:43:00 and if so, wouldn't line/col parameters be better for this? 22:43:13 could be 22:43:21 parseCmd :: String -> ([BF], String, Int, Int) 22:43:23 etc 22:43:39 at least it saves you having to consider general monads at this stage 22:44:17 the next part of this is trying to determine an unmatched [ or ] as soon as possible 22:44:20 so i can know which one 22:44:59 unmatched ]'s are easy 22:45:11 but unmatched ['s need to search to the end. 22:46:54 right 22:47:07 time to look and see what is called when a ] is called outside of an inner 22:47:17 because afaics there's nothing in particular 22:47:21 i.e. no 'error call' 22:48:08 http://esoteric.voxelperfect.net/wiki/Full_0 22:48:10 wohoo 22:48:11 :) 22:48:12 as i said, parseCmdList (']':s) = ([], ']':s) 22:48:24 oerjan: that doesn't mean there's been an error though 22:48:34 so the caller knows something is wrong if it doesn't expect the ] 22:48:59 parseCmdList :: String -> Int -> Int -> ([BF], String, Int, Int) best. typedefinition. ever. 22:49:23 ah you decided to pass the Int's in as well 22:49:30 well yeah 22:49:31 how else? :) 22:49:32 * ehird`_ parseCmdList (']':s) = ([], ']':s) 22:49:35 err 22:49:35 parseCmdList (']':s) = ([], ']':s) 22:49:42 parseCmdList s@(']':_) = ([], s) 22:49:47 what is the difference, and which is cleaner? 22:49:52 there is a monad called Writer that only passes things out 22:50:24 Hiato: full 0 interpreter in full 0 anyone? 22:50:50 well the last one does not reconstruct a new list by putting on a ']' after taking it away 22:51:04 he, that's hellish ahrd 22:51:07 *hard 22:51:10 ok, but which is 'better'? :P 22:51:14 Hiato: ok - full 0 interpreter in brainfuck 22:51:31 matter of opinion 22:51:39 err... right... perhaps one in Malbolge then :P ? 22:51:43 oerjan: rawrrrr 22:51:44 :P 22:51:54 Hiato: full 0 interpreter in glass 22:52:04 hrmm... still hellish 22:52:12 er what did i answer? 22:52:16 even id delphi, it was allot of code 22:52:20 *in 22:52:36 but sure, ehird`_ , don't let me get in the way 22:52:37 :) 22:53:17 perhaps though, when there is time, I'll do it in a nice Esolang 22:53:27 something that isn't 100% 1 command type language 22:53:33 hopefully soon :) 22:55:12 oerjan: So, when a ] is found and we're not in ['s loop, what would be called? 22:55:15 can't figure it out 22:55:24 i think 22:55:25 parseCmdList (']':s) l c = ([], ']':s, l, c) 22:55:31 but i don't know how i'd tell if that's 'bad' 22:55:45 the top parseCmdList would return the program prior to the ] 22:55:53 together with what's after. 22:56:26 and it would naturally return the position of the ] as well 22:57:10 so the caller can easily check: if the remainder starts with ], it's an unmatched ] and it's got its position 22:57:31 (the caller would be your parse function, i assume) 22:58:17 Hiato: since you are the only one showing interest, when are you leaving today? that somewhat defines my schedule since i want you to see the tutorialish once i make it 22:58:35 i mean, people usually go to sleep at some point. 22:59:02 lol, yip sure 22:59:07 well, unfortunately 22:59:09 pretty soon 22:59:13 thought so 22:59:19 as it is nearing 1 am where I am 22:59:19 it's 23 there or what? 22:59:22 oh 22:59:22 now on the other hand consider the loop command. it will call parse recursively, and _it_ will expect the remainder to start with ] 22:59:30 right, gmt+2 22:59:33 same as mine 22:59:34 yip 22:59:37 lol :) 22:59:44 if it doesn't, then you've got an unmatched [ 23:00:08 well, you could email me, or seeing as we are both gmt+2, I will be on tomorrow afternoon 23:00:43 nah, i'll just show it when i see you, it's just if you're leaving, i'm gonna implement a few features first, otherwise i'll start with the tutorial 23:00:55 in a case expression, oerjan 23:00:55 yeah, it's cool 23:00:57 can you do a guard? 23:00:59 i need 23:01:01 implement the features 23:01:02 yes you can 23:01:09 and I'll see tomorrow then 23:01:12 (program, rest, _, _) | rest starts with ] 23:01:14 ok, time to pack it in 23:01:14 or something 23:01:17 or rest is "" 23:01:17 cheers everyone 23:01:25 i will not be here tomorrow, for i need to go drink alcohol with my friends... kinda impossible to prevent on new years' :< 23:01:37 yeah, cya 23:01:37 and the wiki is up (against my best instincts) 23:01:44 (program, rest@('} 23:01:45 but tomorrow=31 no? 23:01:48 arh 23:01:57 Hiato: that's when the party is, here. 23:02:02 (program, rest@(']':_)) -> 23:02:05 parseCmdList (']':s) l c = ([], ']':s, l, c) 23:02:08 oh yaeh, duh 23:02:09 woops 23:02:10 oerjan: do i need to advance l or c there? 23:02:11 sorry 23:02:18 im a day behind at 1am 23:02:19 ok 23:02:20 to be specific, it's 31. already 23:02:20 cheers 23:02:30 bye 23:02:31 yes 23:02:32 Hppy New Year to ye all 23:02:35 in the futire 23:02:41 -!- Hiato has quit ("Leaving."). 23:02:41 years all around! 23:03:30 oerjan: parseCmd ('[':s) l c must change correct? 23:03:34 wait, i'll dump my current code 23:04:24 http://hpaste.org/4724 23:06:48 there is a problem there, parseCmd could run off the end 23:07:43 if there is an unmatched [ and the file ends with non-commands 23:08:24 *Main> parseCmdList ",[xxx" 1 1 (,[*** Exception: /Users/ehird/Code/Frainbuck/Frainbuck.hs:(32,0)-(41,40): Non-exhaustive patterns in function parseCmd 23:08:25 ghasp 23:08:27 sheesh 23:08:31 all of this and i'm not even compiling bf code yet 23:08:38 this is a 20-liner in scheme, everything i have :-) 23:11:39 btw this is why ReadS wraps its result in a list: to be able to signal that nothing was parsed, with an empty list 23:12:26 Scheme interlude. 23:12:35 > (define x (delay (force x))) 23:12:37 # 23:12:41 > (force x) 23:12:45 ............................................ 23:12:50 Ok, back to Haskell 23:13:03 So, oerjan -- what do I do? :P Maybe if you gave me an example I'd understand better 23:14:09 * oerjan is getting too tired 23:14:37 :( 23:14:44 i'll be going to bed i think 23:14:53 aww 23:15:46 Main = Test [1 2 3 4 5] 23:15:46 Test x:xs :: l 23:15:46 <-> xs 23:15:58 lol, i didn't even have to do anything for that to work :P 23:16:13 whoops 23:16:17 l should be x there 23:16:21 -!- oerjan has quit ("Good night"). 23:16:21 what's that, oklopol? haskell? :P 23:16:26 nope, graphica 23:16:29 : is just cons 23:16:53 that's all i needed to do to make pattern matching like that work 23:23:19 show me an example graphica program 23:23:57 http://www.vjn.fi/pb/p123363511.txt 23:24:00 there's three 23:24:19 quite trivial ones, now that it has lists, you can easily get much more complicated stuff 23:24:40 ...i think 23:24:48 i haven't actually *tried* anything :P 23:25:10 ehird`_: the examples are at the bottom 23:25:22 hello world plz 23:25:40 lol, a graphica program cannot do anything but specify a graph. 23:25:51 you need to decide a representation of a string first. 23:26:28 it can of course create a node that is connected to itself, and whose tag is the characters of "hello world" as a list or smth 23:26:40 where characters are their ascii values. 23:27:28 main = [...] <-> main 23:28:02 umm sorry 23:28:05 main :: [...] <-> main 23:28:06 lol 23:31:14 H connected to e ... connected to d 23:31:32 oh, right. 23:31:42 that'll be easier with the shorthands, but i can write it 23:31:44 wait 23:32:07 and then a main that takes that and does something with it, i don't know :P 23:34:31 -!- dak has quit (Remote closed the connection). 23:34:54 Finally the tape machine has come back to its root! 23:35:00 It can now play the piano! 23:35:06 Although quite slowly apparently. 23:35:27 ehird`_: this may take a while, there seems to be another bug. 23:38:37 [a[cr:F#57DIF#58DINO1DID55DIF#55DIG55DIA55DINO1DIG55DIF#55DIE55DINO2DIF57DINO1DIF55DIE55DIF55DIE55DID55DID59DIHA:a]][0=#;ims=a;nd;nh;etFecF;t1] 23:38:52 Finally, a Turing machine can play the Monkey Island theme! 23:39:09 Heh. 23:46:16 Oh god really??!?! 23:47:22 http://paste-it.net/5502/ 23:47:30 There's a little nothing for mankind. 23:47:38 [a[cr:F#57RIF#58RINO1RID55RIF#55RIG55RIA55RINO1RIG55RIF#55RIE55RINO2RIF57RINO1RIF55RIE55RIF55RIE55RID55RID59:b]|b[#:RI:c;cr:LE:b]|c[#:HA:c;cr:DIRI:c]][0=#;ims=a;nd;nh;etFecF;t1] 23:47:48 I'm no musician, but it's recognizable. 23:48:31 finally 23:48:32 Main = String [72 101 108 108 111 44 32 119 111 114 108 100 33] 23:48:33 String s = String s 0 23:48:33 String [] i :: [] 23:48:33 String x:xs i :: [x i] 23:48:33 -> String xs i+1 23:48:45 I can probably load the truckload of strange ASCII chars with musical notes and make some close to ASCII Brainfuck 23:48:56 hello world, represented by a graph in form of a linked list, basically 23:49:00 With the hope that no one will be foolish enough to use them! 23:49:30 a list will be a normal graph once i make graphs first class, so in the future that'd just be Main = "Hello, world!" 23:49:49 elif prog=="": 23:49:50 print "This programmer does not support empty programs as quine" 23:49:57 Slereah: are you just stuffing random stuff into this? :P 23:50:07 Maybe a little. 23:50:11 oklopol: But can you actually have "H" in there? 23:50:13 "e"? 23:50:16 etc 23:50:16 :D 23:50:21 there are no chars. 23:50:26 But well, it is fun! 23:50:28 there's ints, lists and graphs 23:50:33 and atoms 23:50:36 And possibly useful. 23:50:38 oklopol: atoms 23:50:42 oklopol: use atoms for chars 23:50:45 i'll make atoms be datatype tags, yes 23:50:45 like, in String 23:50:50 hmm? 23:50:55 if String sees an atom it looks up the ascii code for it 23:50:58 otherwise it uses the code 23:51:01 so 23:51:04 oh, no 23:51:14 String [H e l l o 44 32 W o r l d] 23:51:15 or whatever 23:52:57 i'll just make "..." be syntactic sugar for #string:[...], where ... have been replaced by their ascii values 23:53:13 althoug... i now realize that's a bad way to do type, and already came up with a good way 23:53:17 *although 23:53:23 *Types 23:53:25 *types 23:54:27 later, the nodes can actually have values; values are different from tags, in that two nodes can share a value, and a value can be changed 23:54:57 so... the that'll make typing trivial without being explicit 23:55:02 *-the 23:55:32 oh, right, the n-dimensional hypercube 23:55:35 * oklopol gets on it