00:00:39 OMG, i actually compiled a hello world! :D 00:02:22 oerjan: "What I tell you three times is true." 00:02:40 SimonRC: if you say so. 00:02:51 ...three times 00:02:54 that did not fit the current context, however. 00:03:09 it did if you applied my joke. 00:03:47 ... in the original form 00:03:55 did I show you people the weird language+IDE with the thermonuclear copy+paste? 00:03:59 what was it called? 00:06:05 -!- jix has quit (Nick collision from services.). 00:06:19 -!- jix has joined. 00:07:49 -!- jix has quit (Client Quit). 00:10:25 hey, i could actually write a loop :D 00:10:27 no fibonacci. 00:10:29 *now 00:10:49 ...perhaps printing numbers first 00:11:00 how could you make a bloom-filter-like structure, but with no false positives possible, only false negatives? 00:11:57 store the complement set? 00:12:22 too large, not possible 00:13:20 define "bloom filter" 00:13:31 ic. well iirc this is the first time i hear about them. 00:13:43 oklofok: awaken and read your PMs! 00:13:43 SimonRC: wikipedia 00:14:34 bah 00:15:03 i would paste the link if i hadn't already closed the window 00:29:14 http://en.wikipedia.org/wiki/Bloom_filter 00:29:46 bsmntbombdood: reverse the definitions of "positive" and "negative"? :-P 00:31:27 I guess that's what the complement is doing. 00:31:50 actually 00:32:03 -!- ehird` has quit (Read error: 104 (Connection reset by peer)). 00:33:27 hrm 00:34:54 zzzzzz 00:45:18 announce/reply, and if something gets caught in a reply, it needs to refactor itself... 00:45:37 ...of course? 00:45:55 Hmm. 00:47:05 First, announce it. If you get a reply, do it refactoredly. If you don't, do it normally. 00:47:17 (Wow, spellcheck accepts "refactoredly" but not "okay".) 00:47:17 oklobot: No it's not. 00:47:27 You do now how emulators tend to work, right? 00:48:18 ah 00:48:21 it's just a conversion 00:48:22 ? 00:48:34 i do not *know* 00:48:37 i may guess right. 00:49:20 Sukoshi: i recommend you use one of *my* nicks, not my bot's ;=) 00:49:55 i guess i should've given the bot a more inventive name 00:49:55 Hmm, my intuition is now reverting to the non-monadic. 00:50:18 oklofok: how many of you are there, exactly? 00:50:26 And how many of you are bots? 00:50:49 o 00:50:50 o 00:50:59 ololobot and oklobot are bots. 00:51:07 Where'd oklokok go? 00:51:16 he's rarely seen :) 00:52:15 Sukoshi: i know what emulators do, but no, i've never read an emulator's source 00:54:33 oklobot: No, because of all these names, I don't care *what* tab-complete gives me :P 00:54:43 Make a Chip8 emulator for very basic practice. 00:55:41 i found a dead mouse! 00:59:11 Sukoshi: should that be done by converting from instruction set to another or via interpretation of some sort? 00:59:19 i've never made an emulator 00:59:29 nor know how you actually go about doing them 01:11:46 You read each opcode from the rom file, and then you have to emulate the changes to a machine of those specs. 01:11:55 So it's interpretation. 01:13:17 you consider writing that in asm very basic practice? :) 01:13:21 err 01:13:34 you mean using a language i know already 01:13:37 ? 01:13:43 that shouldn't be too hard 01:14:47 Writing in C. 01:14:52 * oerjan notes that he is the only nick on o which doesn't belong to oklopol. Scary stuff. 01:14:59 You use ASM to optimize often-called routines. 01:15:19 Sukoshi: have you done that? 01:15:40 /nick ohipe 01:15:46 oklobot: Chip8 ? 01:15:47 you need sound output and all... i can't say i know how to do that. 01:15:49 in C 01:15:57 Read over the SDL docs. 01:16:00 and i can use sdl for images 01:16:03 and yeah 01:16:07 indeed, sounds too 01:16:25 Sukoshi: how much more complex is nes? 01:16:41 oklobot: Not *that* bad, but still. 01:16:53 would be nicer if i actually had a decent c compiler 01:17:01 ... What OS do you run ... ? 01:17:04 i'm using a 20-year-old microsoft one 01:17:06 gcc works fine. 01:17:08 win 01:17:16 gcc works on your toaster, man. 01:17:22 heh 01:17:27 kay, i'll dl it 01:18:06 i'm a decent c coder, but i'm definately not a good c compiler installer 01:18:10 so this might take a while, 01:19:11 Grabbing a GCC binary shouldn't be too hard. 01:19:42 it shouldn't, i admit that. 01:19:50 http://gcc.gnu.org/ 01:19:56 what i see here is random text. 01:19:57 :) 01:20:09 i'll search... perhaps i'll find someday. 01:20:27 http://gcc.gnu.org/install/binaries.html 01:20:31 this looks better 01:20:36 i'll click on a blue button. 01:20:51 * oerjan watches oklofok explode. 01:21:32 did it! 01:21:40 * oklopol dances a bit 01:23:30 argh then an installation of sdl 01:23:34 i need a secretary 01:25:51 shouldn't two bots be enough? :D 01:26:05 >>> install sdl 01:26:10 no? 01:26:23 i guess i could extend that. 01:27:14 >>> install sdl 01:27:15 sdl succesfully installed. 01:27:32 * oklopol is a helluva coder 01:27:36 APT-GET INSTALL GCC 01:27:55 hmm 01:29:53 still installing... must be a great program. 01:30:16 oklofok, oklopol, and ololobot? 01:30:25 bsmntbombdood: ? 01:31:01 bsmntbombdood: my theory is he is trying to crowd out the letter o to get rid of me. 01:31:22 or even worse, to steal my nick! 01:31:33 oerjan: you guessed correctly, actually both 01:31:49 -!- bsmntbombdood has changed nick to obsmntbombdood. 01:32:17 If you don't have APT, then mdo apt-get install apt 01:32:25 i think i've also been oklopok at some point 01:32:38 and also oklodok when i made an irc client 01:33:24 what is an oklopol, anyway? 01:34:12 it's a substance with a very bitter after taste 01:35:11 Käyttäjäryhmä: Peruskäyttäjä? 01:35:19 8| 01:35:26 user group, basic user 01:35:31 that's finnish 01:35:40 i can has polylingual too? 01:35:58 err... seven? 01:36:29 i don't want to sound as stupid as i am, but how do i compile with cygwin? 01:37:07 obsmntbombdood: where did you find those words? 01:37:31 ah 01:37:33 google 01:37:46 didn't know i'm a user somewhere 01:38:34 and god i was frightened when you pasted that. 01:38:50 why? 01:38:58 i do that sometimes 01:39:41 i thought i was seeing the words wrong 01:39:45 nothing serious 01:39:52 oklopol: Do you have gcc installed in Cygwin? 01:40:01 err... 01:40:11 perhaps i'll show you which button i pushed,. 01:40:18 hmm 01:40:21 i'd say no, actually 01:40:35 Use the Cygwin installer to install gcc. 01:40:51 See if you can get it to install all build-essential packages, actually. . . 01:41:09 okay... 01:41:16 which command is that? :) 01:41:32 The GUI installer. . . 01:41:36 cygwin-setup.exe 01:42:23 i... don't have that 01:42:41 looks like a windows-ed bash 01:42:50 cygwin.exe 01:44:40 here, you see, i pressed "The Cygwin Project": http://gcc.gnu.org/install/binaries.html 01:44:51 and i downloaded it and run cygwin.exe 01:49:42 *ran 01:49:57 ...thank you. 01:50:06 yw 01:56:25 -!- obsmntbombdood has changed nick to bsmntbombdood. 01:57:21 You download the Cygwin installer and do it. 01:57:37 on windows! 01:58:14 hmm 01:58:23 bsmntbombdood's way sounded doable, i'll try that 01:58:31 but then i can't use my laptop :< 01:59:35 Is this your first ever experience with Windows, by the way? 01:59:45 Sukoshi: no. 01:59:52 i've been using it for >13 years :) 02:00:01 well, dos at first 02:00:02 Then how come you don't know how to install a C compiler?! 02:00:21 :) 02:00:33 i don't know 02:00:43 .... :P 02:00:54 If you use Windows, then you'll have to write somewhat different ASM from me. 02:00:59 i'm really bad at software stuff unless i know exactly what to do. 02:01:05 i'll use ubuntu. 02:01:23 because the install could actually be done 02:01:47 I used to be really big into sysadminning too, but nowadays it's getting annoying. 02:01:58 I want to just program and not care about my system's idiotic hick-ups. 02:02:17 that's always been my logic 02:02:19 Still, I do like compiling most things, and I run Slack on this box. I may be getting a new box soon, and if I do, it'll run Gentoo. 02:03:01 gentoo is a linux distro, i have no idea about slack 02:03:13 anyway, let's check whether i can actually *use* gcc 02:03:23 Slack == Slackware. 02:04:39 the problem with the installation was that i just couldn't find any other "cygwin installer" than cygwin.exe, which was bash for windows. 02:04:49 ..... 02:05:07 and no, i do not know whether it's supposed to be bash for windows :) 02:05:26 anyway, it's all right now, i've got it 02:05:28 You seriously have never used C in Windows before? 02:05:54 i think i have some 100 programs 02:06:29 (made) 02:06:49 does that mean i have to have heard of cygwin? 02:08:02 Well, I'm assuming if you use Windows on a day-to-day basis, you have heard of the utilities necessary to live in a dev environment in it. 02:08:21 i've used microsoft visual c++ 6 02:08:26 ...... 02:08:32 :D 02:08:43 this is why i haven't been doing c++ for a while. 02:08:55 Emacs + GCC == Win. 02:09:00 Emacs + JVM == Win. 02:09:10 Emacs + Slime + SBCL/CLISP == Win. 02:09:14 Win == Lose. ? 02:09:17 Emacs + * == Win. 02:09:18 no 02:09:36 as an lvalue it means windows. 02:09:38 Win(Emacs, X). X=* 02:09:55 Well, it's Japanese time. Have fun mah dev friends. 02:10:15 gcc test.c will not compile :P 02:10:17 okay 02:10:19 bye 02:10:30 i'll be trying to install this for the next 24 hours, most likely. 02:10:35 i mean, get it working 02:11:25 ville@ville-desktop:~/cstuff$ dir 02:11:26 test.c 02:11:26 ville@ville-desktop:~/cstuff$ gcc test.c 02:11:26 /usr/bin/ld: crt1.o: No such file: No such file or directory 02:11:26 collect2: ld returned 1 exit status 02:11:30 once again my intuition fails. 02:12:17 if someone wants to tell me how to use that, be my guest 02:13:13 ``gcc -o test test.c'', assuming you're using things like stdio.h 02:13:17 Well, Japanese time. 02:14:11 ville@ville-desktop:~/cstuff$ gcc -o test test.c 02:14:11 /usr/bin/ld: crt1.o: No such file: No such file or directory 02:14:11 collect2: ld returned 1 exit status 02:14:27 have fun @ your japans. 02:16:54 -!- immibis has joined. 02:23:07 -!- GreaseMonkey has joined. 02:39:05 -!- GregorR-L has joined. 02:46:23 Why is it asking for crt1.o? 02:46:29 What's it linking against? 02:46:56 i've done apt-get and written what you told me to 02:47:05 i don't know that crt1.o is 02:47:11 Wait. In Windows? 02:47:17 no 02:47:18 in ubuntu 02:47:31 What's the contents of test.c ? 02:47:35 Sukoshi: It should be linking against libc and GCC's support library. . . 02:47:35 empty 02:47:42 oklobot: You're missing either libc-devel or libgcc-devel 02:47:59 just give me the necessary lines :) 02:48:02 Well, crt1.o is part of libc, IIRC. 02:48:14 oklopol: .... 02:48:15 Odd. I don't *have* crt1.o 02:48:18 Sukoshi: I've seen it put into all sorts of strange packages :P 02:48:27 Sukoshi: But yeah, it comes with glibc 02:48:27 Oh. I located for crt1.so. XD 02:48:33 oklopol: Learn to use your computer at least *somewhat* please? 02:48:55 i know enough, usually. 02:48:56 In Ubuntu, there was a specific apt-get you use to get this stuff, but I forget what it was. 02:49:01 oklobot: Just run your favorite GUI package manager and you won't have to do any nasty typing that hurts boo-hoo 02:49:07 apt-get build-essential 02:49:11 Err. 02:49:13 There we are. 02:49:13 i already typed the boo-hoo 02:49:14 apt-get install build-essential 02:49:20 will a graphical one do it better? 02:49:29 i'll install that huh? 02:49:44 Yeah; that provides a full build environment in *buntu. 02:49:58 Sukoshi: memorizing package names isn't really learning to use a computer 02:50:17 but i'll read if you give me a computer tutorial :) 02:50:24 try 'apt-get upgrade libc-devel' 02:50:30 anyway, build-essential does not work. 02:50:35 whoops 02:50:38 not sure if the command is upgrade, though, it might be something else 02:51:15 apt-get update iirc 02:51:24 but i never recall correctly. 02:51:31 isn't update for updating the list of available packages? 02:51:38 ah 02:51:40 apt-get upgrade PACKAGENAME 02:51:45 or install if you don't have it 02:51:45 i see 02:51:59 anyway 02:52:02 oklobot: Then learn to use Google? :P 02:52:04 i installed gcc an hour ago. 02:52:13 you didn't have gcc? 02:52:16 apt-get build-essentials ? 02:52:18 Sukoshi: i know how to use it, that doesn't help. 02:52:19 how can anyone survive without gcc? 02:52:25 immibis: Magic. 02:52:32 See. I don't understand how he lives without gcc. 02:52:49 i don't use this computer for programming 02:52:49 I use Gentoo. . . You can't even *install* anything without gcc. 02:52:58 what is gcc? 02:53:02 oops wrong channel 02:53:03 and the windows machine has visual c++ 6, as i said :) 02:53:05 i was testing toboge 02:53:09 GNU Compiler Collection. 02:53:13 Oh. 02:53:21 immibis: hah, that is what you want us to think 02:53:27 i knew that 02:53:34 oklopol: Eeeew. 02:53:41 Meh. I have dev environments on all the machines I access. 02:53:41 what is gcc? 02:53:50 oops toboge isn't on this channel 02:53:52 what the fuck, it actually worked. 02:53:55 -!- toBogE has joined. 02:53:59 what is gcc? 02:53:59 gcc is a necessity of life 02:53:59 thanks all, i'll do some programming now 02:54:17 see, it IS a necessity of life 02:54:17 oklopol: gcc is a much nicer compiler, IMO. . . 02:54:31 and? visual c++ 6 has an ide. 02:54:59 RodgerTheGreat: (06:53:25 PM) ---: Ah - well you can tell him his work received props 02:55:07 * pikhq couldn't live without constructs like (int []){1, 2, 3}; or case '0'...'9' 02:55:07 RodgerTheGreat: [re your avatar] 02:55:15 immibis: I'm no IDE man. ;) 02:55:18 cool 02:56:30 oklopol: You can do some really, really evil stuff if you just assume GNU C. 02:56:56 thanks, GregorR-L 02:57:12 pikhq: i don't know what gnu is :) 02:57:17 gnu's not unix. 02:57:19 i assume it's a company 02:57:25 toboge, gnu is not unix 02:57:27 what is gnu? 02:57:28 gnu is not unix 02:57:45 oklobot: Ow. 02:57:45 toboge, everything is dark right now 02:57:49 oklopol: GNU is an operating system and a project around making that operating system. 02:57:52 what is everything? 02:57:52 everything is dark right now 02:57:52 Erm 02:58:08 pikhq: interesting. 02:58:35 You are currently using a large part of that operating system. . . It's properly called GNU/Linux in most people's case. 02:58:52 toboge, is gnu not unix? 02:59:02 The GNU project has written things like GCC, bash, libc, etc. 02:59:05 it does not do natural language parsing, ihope 02:59:18 i programmed it with a regex to understand 'toboge, X is Y' and similiar things. 02:59:26 also it understands 'what is X?' 02:59:27 immibis: add that next, then. 02:59:34 what is gnu? 02:59:34 gnu is not unix 02:59:42 isn't natural language parsing supposed to be impossible? 02:59:47 what is ihope? 02:59:47 ihope is a user on IRC. See Ihope127. 02:59:53 immibis: Not really. 02:59:54 Supposed to be? 03:00:00 * immibis shrugs 03:00:01 Really hard, maybe... 03:00:09 Lojban parsing is trivial. 03:00:16 !regex who-is [wW][hH][oO] [iI][sS] ([^ ]*)? replace ?$1 03:00:19 who is ihope? 03:00:20 Huh? 03:00:20 No such factoid ihope? 03:00:27 !delregex who-is 03:00:30 Huh? 03:00:32 !regex who-is [wW][hH][oO] [iI][sS] ([^ ]*)\? replace ?$1 03:00:34 Huh? 03:00:35 who is ihope? 03:00:36 ihope is a user on IRC. See Ihope127. 03:00:40 who is Ihope127? 03:00:41 No such factoid Ihope127 03:00:48 toboge, Ihope127 is >ihope. 03:00:53 who is Ihope127? 03:00:53 No such factoid Ihope127 03:00:58 toboge, Ihope127 is >ihope 03:01:00 who is Ihope127? 03:01:00 Ihope127->ihope 03:01:00 ihope is a user on IRC. See Ihope127. 03:01:04 !daemon bf regex +[,] 03:01:04 Caught a java.lang.ClassNotFoundException! toboge.Execer_daemon 03:01:04 finally 03:01:06 Huh? 03:01:06 Bot spam. Yet again :P 03:01:07 !daemon bf delregex +[,] 03:01:07 Caught a java.lang.ClassNotFoundException! toboge.Execer_daemon 03:01:10 Huh? 03:01:23 !daemon regex bf +[,] 03:01:24 Caught a java.lang.ClassNotFoundException! toboge.Execer_daemon 03:01:26 !daemon delregex bf +[,] 03:01:26 Caught a java.lang.ClassNotFoundException! toboge.Execer_daemon 03:01:28 Dankon. 03:01:43 !regex THIS SHOULD BE IGNORED BY EGOBOT replace yes, it should. 03:01:43 having had linux for a few months, how do i *run* a program after compiling it? :) 03:01:43 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 03:01:53 -!- EgoBot has joined. 03:01:56 oklopol: What was the argument to -o? 03:01:58 or am i getting kickbanned for noobity soon? 03:02:03 pikhq: huh? 03:02:10 in a terminal: go to where it is, chmod +x PROGRAM_NAME then ./PROGRAM_NAME 03:02:11 err 03:02:11 "gcc -o foo foo.c" 03:02:15 where PROGRAM_NAME is the output 03:02:16 test 03:02:19 by default it is a.out 03:02:20 ./foo 03:02:26 i know what the file is named... 03:02:29 immibis: No need. gcc does +x by default. 03:02:34 oh, ok 03:02:36 ./ name? 03:02:39 okay. 03:02:40 no space 03:02:41 Yeah. 03:02:45 oklobot: ``man gcc'' 03:02:46 Since it's in your current directory. 03:02:50 Reading, it's what you do ;) 03:03:09 i haven't used linux for ages because the only linux computer i have has a 4GB hard drive, 64MB of ram, runs ubuntu linux 5, and takes about 10mins to start. 03:03:31 Sukoshi: i don't wanna learn anything anymore, i have a working c compiler :) 03:03:32 Then uh, get a better Linux machine? :P 03:03:37 oklobot: .... 03:03:43 \o/ 03:03:46 Sukoshi: ? 03:04:02 oklobot: ``man gcc" 03:04:04 Learning isn't neccesarily a bad thing :P 03:04:08 what does oklobot do? 03:04:13 what is oklobot? 03:04:14 No such factoid oklobot 03:04:15 why learn more about gcc than compiling? 03:04:45 So you can optimize, make it unroll loops for you, profile, enable GDB symbols, do advanced linking, inline assembly, make C99 compatible, etc. ? 03:04:47 i'll check what it optimizes if i make something big. 03:04:50 don't see what else 03:05:06 who is oklobot? 03:05:06 oklobot is oklobot!n=oklobot@194.251.101.183, a user on irc.freenode.net 03:05:10 Learn about the GNU C extensions? 03:05:14 those are things i can quickly check if i need them. 03:05:17 who is ololobot? 03:05:17 ololobot is ololobot!n=ololobot@194.251.101.183, a user on irc.freenode.net 03:05:26 And also so that you can be a learned person? 03:05:33 Who values learning and knowledge and employs it in practice? 03:05:41 and why do you have so many nicks from the same ip - freenode has a maximum number of simultaneous connections from the same ip. 03:06:03 Sukoshi: everyone know so much more about unix i might as well just stay noob. 03:06:06 *knows 03:06:20 Lots of people know about Electrics and CS, doesen't stop me from wanting to know myself ;) 03:06:31 learning about a random program isn't interesting to me 03:06:44 well, i guess in the same sense that learning a random sequence of numbers is 03:06:52 Replace unix with anything else (like "living outside of mom's basement"), and you'll see the uselessness of your argument. 03:07:03 but why learn the same random sequence everyone else is memorizing 03:07:10 BTW, you don't have to go at it in one go. . . 03:07:18 It's not random because you'll be using your tools on a regular basis. Ever heard the saying ``Know your tools and they will work wonders for you'' ? 03:07:24 I find the best way to learn UNIX is to just use it. 03:07:46 pikhq: i doubt my mom's basement is the only thing i know a lot about :) 03:07:55 if that's what you meant 03:08:00 (for me, "using it" involves toying once in a while with features I don't know about, just for the sake of it) 03:08:27 oklopol: No, I'm just saying that that argument, applied to its logical conclusion, will live you right there. 03:08:42 s/live/leave/ 03:08:48 well, okay, it was a bad argument 03:09:21 anyway, of course i'd know a lot about linux if i'd wanted to learn about it sometime 03:09:29 but i've never wanted 03:09:42 Why though? I know a lot about Windows too. 03:09:50 me too. 03:10:04 because i've been interested 03:10:39 I know what benefits me every day. I know basic shell scripting, because I use it to automate tasks. I know a lot of ZSH-foo because I use ZSH. *Sure* I could use Linux like a dumb user but then, what makes you unique in that? 03:10:58 Be the best at what you do, I say. And being the best involves knowing how to do things better than other people. 03:11:26 perhaps someday i'll understand what's good in this os and read about it. 03:11:39 sofar i've seen slight enhancing of windows 03:11:50 Understanding what's good is hard to do without *learning* it. 03:12:07 You don't care hackability, customizability, security, etc. ? 03:12:10 *about 03:12:25 yeah, but hey, i'm not gonna need your help anymore, please let me do what i *am* interested in, and code, kay? :) 03:12:41 The UI layer is easy to do that with. With other layers, it's hard to understand what's better. . . 03:12:45 Sukoshi: yes, i'm interested in those 03:12:54 as concepts 03:13:06 But in the end, you just want to point and click? 03:13:11 ? 03:13:12 No such factoid 03:13:29 toboge, is ! 03:13:31 ? 03:13:32 No such factoid 03:13:35 (really, without knowing about kernels, how are you supposed to know how, say, the Linux scheduler is better than the Windows one?) 03:13:53 The source code is all there. There are dozens of APIs at every level to insert your code in whatever language you want to do whatever you want. It's a darn lot of fun living in a world where hacking is encouraged. 03:13:53 Sukoshi: i hate if i don't have to do something myself. 03:13:56 oklopol: In the UNIX world, these aren't concepts. . . These are things we try to make our software do. 03:14:22 pikhq: i'm interested in doing them, i just don't see a connection between that and linux 03:14:34 The whole system is designed around it. 03:14:59 what is ? 03:15:00 err okay, well i don't like open source, i like doing things myself 03:15:00 No such factoid 03:15:29 and i don't like to point and click, it's just it'd take long to program a c interpreter in bash. 03:15:35 so i'll dl it 03:15:49 Hell. . . Applications include a scripting language as par for the course. 03:15:55 that isn't done in a decent language in linux, so why would i want to learn the language? 03:16:14 i really do not see your point 03:16:18 i don't care about linux 03:16:20 period. 03:16:30 what so evil about that? 03:16:46 Nothing, if you don't want to learn. 03:17:13 people who don't use kde aren't evil so people who don't use linux aren't evil 03:17:16 its just another choice 03:17:23 well, i'd like to learn linux, but it's not my first choise for a thing to learn. 03:18:14 i use linux every day, but i am interested in programming, not linux, so why would i want to learn that when there are programming concepts to be learned? 03:18:34 can you write bash scripts on windows? 03:18:36 perl? 03:18:38 python? 03:18:42 ok, maybe perl and python 03:18:48 but probably not bash 03:18:48 toboge, is ! 03:18:49 i have a python interpreter. 03:18:50 ? 03:18:52 No such factoid 03:18:56 and i have a perl interpreter. 03:18:59 immibis: He's got cygwin. 03:19:00 You can write bash scripts if you have bash... 03:19:04 oh, ok 03:19:10 oklofok: The answer to that is simple. 03:19:15 Though Windows doesn't quite handle shebangs. 03:19:32 Sukoshi: please tell. 03:19:45 Think of it like this: Many years ago, artists used to all have to mix their own pigments. 03:19:55 err yes 03:20:02 ihope: the solution to that is to name all your bash scripts with the extension .bash and to associate .bash with bash 03:20:06 oklofok: Imagine if you decided "I don't want to learn tools; I'm interested in construction concepts, not tools." 03:20:11 !! 03:20:12 Caught a java.lang.ClassNotFoundException! toboge.Execer_! 03:20:14 Huh? 03:20:20 !! 03:20:30 Nowadays, most nobody does. But there are some people who do make their own pigments (maybe not from scratch, but, still themselves). It's called pride in workmanship. 03:20:46 err okay. 03:20:58 !toboge, question marks and exclamation marks is !? ? ! ! ? ! ? ! ? ! ? ! ? !? ?! ? ! ! ! 03:20:58 Caught a java.lang.ClassNotFoundException! toboge.Execer_toboge, 03:20:59 so i have pride. 03:21:00 Huh? 03:21:01 toboge, question marks and exclamation marks is !? ? ! ! ? ! ? ! ? ! ? ! ? !? ?! ? ! ! ! 03:21:02 is that bad? 03:21:08 Huh? 03:21:09 is what bad? 03:21:13 You *don't* have pride in workmanship. 03:21:34 For an intellectual to create the tools to test their concept themselves is a pride in themself. Just the same as the engineers who either order cheap low-wage workers to do their job for them, while they focus only on the engineering, or they build models at home themselves that work on a smaller scale. 03:21:35 -!- oklobot has quit (Read error: 104 (Connection reset by peer)). 03:21:36 ...because i'd rather write my c compiler myself rather than learn how to do it the easy way? 03:21:40 oklobot sucks <3 03:21:57 oklofok: http://www.thomasscoville.com/PCarticle.html 03:22:14 you still haven't answered my question "what does oklobot do?" 03:22:25 immibis: runs the oklobot language. 03:22:37 ~help() 03:22:41 It's what rubs me about most engineering professions but electrical -- you have no pride in workmanship. You can't build a system up with your hands. 03:23:03 It's a show of true intellectual prowess to display that you have enough knowledge not to rely on the knowledge of others. 03:23:39 oaky. 03:23:47 It's basically the hacker mentality. Hacking it together *yourself*. 03:23:47 i do rely on other people's things 03:23:52 i didn't invent numbers 03:23:56 and such 03:24:16 But you should take a day some day to investigate number systems and maybe rewrite the math axioms from the axioms, no? ;) 03:24:29 yeah 03:24:31 *math relationships from the axioms 03:24:38 and i should make my own os some day as well 03:24:45 As a concept, yeah. 03:24:53 a real os. that'd be cool 03:25:44 anyway, i still don't know your point 03:25:57 it seems you have somewhat misunderstood me somewhere, but hey, that's life 03:26:10 UNIX is the OS for people who think like that. . . 03:26:23 Exactly. 03:26:28 who think like what? 03:26:33 that making an os would be cool? 03:26:36 We all have our own imaginary operating systems and programming languages, don't we? 03:26:51 ihope: oklotalk & okloOS 03:26:51 For people who find pride in building things from the ground themselves. 03:26:54 ;) 03:27:13 um, i have a real operating system and programming language 03:27:17 although neither is very good 03:27:29 oklofok: how imaginary is oklotalk? 03:27:36 Sukoshi: okay, unix seems to be just *made* for me... does it make me a bad person i don't think it'd actually make my life any better? 03:27:39 still 03:27:49 oklofok: if you want to make an os, i suggest you join #osdev and browse to http://osdever.net/bkerndev/ 03:27:55 ihope: it is in the sense it's not real yet. 03:28:01 numbda is kinda close to it 03:28:06 but it's a long way still :) 03:28:12 oklofok: Do you use an OS as a tool or do you use it as a way of life? 03:28:17 (plus numbda is a bit different in other ways too) 03:28:34 Sukoshi: tool, unless someone makes a good one some day 03:28:45 i mean, one i find good. 03:28:54 There's the distinction. 03:28:59 i haven't seen aything good about unic, about which i'm sorry 03:29:04 *unix 03:29:13 Most UNIX hackers use it as a way of life, for which Windows is a failure. 03:29:41 There is no one killer app that makes UNIX superior. 03:29:44 immibis: i actually joined already :) 03:29:49 UNIX is a superior system, not a system with a superior tool. 03:30:48 err... sure 03:31:01 toboge, Linux is superior to UNIX. 03:31:03 toboge, Linux is superior to UNIX 03:31:08 toboge, UNIX is inferior to Linux 03:31:16 Well, there's some truth to that too :P 03:31:29 what is Linux? 03:31:29 Linux is superior to UNIX 03:31:32 immibis: Sounds like you need Prolog. 03:31:39 heeh 03:31:41 what is prolog? 03:31:41 *heh 03:31:42 No such factoid prolog 03:31:43 superior(Linux, UNIX). 03:31:55 inferior(UNIX, Linux). 03:31:57 hmm 03:32:07 sukoshi: what 03:32:17 superior(Linux, Windows). 03:32:21 superior(UNIX, Windows). 03:32:25 superior(MacOS, Windows). 03:32:28 superior(BSD, Windows). 03:32:31 superior(Hurd, Windows). 03:32:32 better(X,Y) :- superior(X, Y), inferior (Y, X). 03:32:38 superior(DOS, Windows) 03:32:43 wtf 03:32:47 superior(Windows, DOS) 03:32:49 better(DOS, Windows). 03:32:58 windows may be inferior to a lot of things, but not dos! 03:33:04 Sukoshi: i think lowercase is for atoms 03:33:08 better(Windows, DOS) 03:33:14 * pikhq listens to Pink Floyd - The Wall 03:33:23 err 03:33:26 no they aren't. 03:33:29 worse(Y,X) :- better(X, Y) 03:33:35 worse(DOS, Windows) 03:33:41 You're forgetting the `.' 03:33:43 ;) 03:33:45 err 03:33:47 yes they are. 03:33:47 immibis: I'd much rather use DOS than Windows. 03:33:59 1) start windows 03:33:59 superior(windows,dos). then 03:34:01 (and yes, I *have* done so) 03:34:05 2) start -> run -> command.com 03:34:12 3) press alt-enter 03:34:43 better(windows,dos) 03:34:45 better(windows,dos). 03:34:49 better(linux,windows). 03:34:54 Learn Prolog y'all! 03:34:58 better(unix,windows). 03:35:02 better(macos,windows). 03:35:06 everyone knows prolog! 03:35:06 better(bsd,windows). 03:35:09 better(hurd,windows). 03:35:13 wtf is prolog? 03:35:17 immibis: .... :P 03:35:29 That's like saying ``WUTZ LISP?!'' 03:35:30 better(windows,hurd). 03:35:34 even my father's 60-year-old professor friend knows prolog 03:35:36 good question. what is lisp? 03:35:58 immibis: those are two programming languages, old, but kinda nice 03:36:01 better(linux, X). X={unix, windows, dos). 03:36:18 better(windows,dos). 03:36:23 Errr X={unix, windows, dos}. 03:36:25 better(oklofok,sukoshi). 03:36:27 Sukoshi: you sure about that? 03:36:43 errrrrrrrrrrr you should be sure about it 03:36:47 immibis: the question. 03:37:01 *same 03:37:05 what question? 03:37:12 you sure about that? 03:37:22 better(ubuntu6,debian3). ubuntu6=linux. debian3=linux. 03:37:23 i've just been trying to install gcc for 2 ohurs. 03:37:34 you don't make me arg1 of better() ;) 03:37:39 *hours 03:37:53 don't you need gcc to install gcc? 03:37:57 ok then 03:38:02 better(sukoshi,oklofok). 03:38:08 better(X,Y). X=Y. Y=X. 03:38:33 oklofok, how do you ask oklobot which is better out of a set of two things? 03:38:45 that is not correct Prolog. 03:39:05 oklobot uses prolog? 03:39:12 immibis: your code isn't 03:39:15 oklofok said it used oklobotspeak. 03:39:26 better(X,Y). X=linux. Y=linux. 03:39:29 is that? 03:39:30 we tried to let you away with it, but oerjan just couldn't :) 03:39:31 i don't know prolog 03:39:48 and Sukoshi's wasn't correct either. 03:39:52 immibis: i don't have an in-built better-than function. 03:39:52 print X. 03:39:55 print linux. 03:40:04 Now if i could just remember what the correct way was... 03:40:05 oerjan, you need :-? 03:40:20 I think better(X,Y) declares that better always gives yes. 03:40:20 better(X,Y). X :- Y. Y :- X. 03:40:22 :- and commas 03:40:28 better(X,Y). X :- Y, Y :- X. 03:40:30 s(A,B):-A,B. 03:40:31 better(linux,linux) 03:40:40 , is & 03:40:41 s(linux,linux) 03:40:43 ; is | 03:40:44 & is and 03:40:46 | is or 03:40:54 periods at the end of statements 03:41:01 how to output? 03:41:09 immibis: you usually don't 03:41:15 but "print"? 03:41:18 i don't remember 03:41:19 then whats the point. 03:41:23 print "Hello". 03:41:32 print "Hello World!" 03:41:35 print "Hello World!". 03:41:39 you probably need parentheses 03:41:40 immibis: it brute forces you results and gives them to you :) 03:41:47 print("Hello World!"). 03:41:51 not strictly brute forces 03:41:53 print(Hello World!). 03:41:58 but it seems it does 03:42:03 it's magic you know 03:42:05 print(i suck if i can't output!). 03:42:15 print("Hello World!"). i'd say 03:42:22 i suck if i can't output! 03:42:34 Hello World! 03:42:54 print("Hello World!"). 03:42:54 aaaa 03:43:00 it's not print 03:43:02 it's write. 03:43:05 printf("Hello World1"); 03:43:09 write("Hello World!"); 03:43:10 write("Hello World!"). 03:43:15 write "Hello World!" 03:43:16 write "Hello World!". 03:43:24 write(X). X=linux 03:43:26 write(X). X=linux. 03:43:37 immibis: wrong again 03:43:40 is prolog an esoteric language? 03:43:43 no 03:43:49 it's a logic language 03:43:54 X=linux, write(X). 03:43:55 one of the dying categories 03:44:02 write(hello).? 03:44:03 X=linux, write(X). 03:44:06 write(hello). 03:44:09 ihope: 'hello' 03:44:13 logic languages are not dying! 03:44:15 write('hello') 03:44:16 write('hello').? 03:44:16 write('hello'). 03:44:23 X='hello', write(X). 03:44:26 oerjan: oh 03:44:41 i thought functional languages addressed all their positive shitz. 03:44:51 hmm 03:45:02 parsers are actually hellishly easy to make in prolog 03:45:13 they seem to be even simpler than haskell ones 03:45:18 logical variables are awkward in functional languages. 03:45:25 Hellish ease is nice. 03:45:55 oerjan: are there logic languages used widely? 03:46:17 i have no idea what's going on, really, i just predict and miss. 03:46:17 :P 03:46:31 i don't know what's big. 03:47:07 Haskell is still smaller than Prolog, i believe. 03:47:09 a char[1024*1024*1024*1024] is big 03:47:16 Smaller than Prolog? 03:47:20 As in less used? 03:47:32 21 users on #prolog, 340 on #haskell 03:47:37 a char[SIZE_T_MAX] is big. ;) 03:47:40 I thought Prolog wasn't a practical language. 03:47:49 someone posted a link of some comparison 03:47:56 site 03:48:35 what is size_t_max? 03:48:36 No such factoid size_t_max 03:48:48 actually there were 20, oklofok. 03:48:51 oerjan: you know other logic languages? 03:48:54 immibis: i was one. 03:49:01 just got out fast before you came. 03:49:08 immibis: The maximum size of a size_t. 03:49:25 (size_t being the return type of the sizeof operator) 03:49:36 actually, a char[1024*1024*1024*1024] is so big you need a 64-bit processor. 03:49:43 heh 03:49:44 one terabyte. 03:49:51 SIZE_T_MAX scales with bits. 03:49:55 Mercury, Curry (based on Haskell) 03:50:01 ...Scales with bits? 03:50:05 What's Mercury? 03:50:06 On my system, that's a char[pow(2,64)] 03:50:12 the more the bits, the bigger it is. 03:50:23 a pure logical language, statically typed 03:50:24 that guy has gotten quite a lot of stuff after his name 03:50:26 The bits don't change size, you mean? 03:50:33 ...oh. 03:50:37 er, no 03:50:53 SIZE_T_MAX depends on the bittage of the processor? 03:51:07 (Eek, spellcheck things "bittage" is a word but "okay" isn't.) 03:51:11 the bittage of the processor gcc was compiled on, more likely. 03:51:37 Oh, spellcheck isn't enabled. 03:51:53 No wonder it wasn't saying "no, not a word". 03:52:01 Indeed, it rejects. 03:52:07 a long long[1000000000][1125899906842624] is amazingly big. 03:52:09 hmm 03:52:23 eight billion petabytes 03:52:28 mercury seems to be a bit more purer about output 03:52:32 *-more 03:52:36 what is mercury? 03:52:36 No such factoid mercury 03:52:38 immibis: pff, tiny. 03:52:43 It will be, that is. 03:52:49 The bittage of the target arch, actually. 03:53:32 ok, 2.076918743413931051412198531688e+34 is 2^64 03:53:39 is that big? 03:53:46 what is 1 + 1? 03:53:46 1 + 1 is 2, but that's all i'll ever calculate. 03:53:51 what is 2 + 2? 03:53:51 2 + 2 is not compute. 03:54:42 what is 3 + 3? 03:54:43 No such factoid 3 + 3 03:54:50 toboge, 3 + 3 is 65536 03:55:07 also Oz is a multiparadigm language with logical bits, used in the quite well-received textbook Concepts, Techniques, and Models of Computer Programming (which i haven't read) 03:56:29 mercury made me wonder if definite clause grammars (which mercury uses to wrap up i/o) is some logical version of monads. 03:56:37 oerjan: of those languages i've just bumped into prolog and most programmers i know have no idea about that even; hence my "dying category" definition 03:56:40 couldn't find anything about it though. 03:56:48 toboge, Oz is a multiparadigm language with logical bits, used in the quite well-received textbook Concepts, Techniques, and Models of Computer Programming (which oerjan hasn't read) 03:56:53 yeah, i had that exact thought myself 03:57:08 but i don't actually know monads that well, so... 03:57:08 :P 03:58:22 -!- GregorR-L has quit (Read error: 110 (Connection timed out)). 03:58:27 Sukoshi: making that interpreter shouldn't take that long (if i get sdl installed... which i doubt), but it'll have to wait till i get new batteries for my keyboard 03:58:32 it died just now 03:58:43 Ha. http://en.wikipedia.org/wiki/Orders_of_magnitude_%28data%29 03:58:48 i do have another keyboard though, so forget what i said. 03:58:52 The biggest thing there is "amount of information which can be stored in 1 gram of DNA" 03:59:02 2.25 zettaoctets... 03:59:21 oklofok: ;P 03:59:45 Not quite. 03:59:52 So we won't run out of storage space any time soon. 03:59:53 * pikhq imagines 1kg of DNA 04:00:00 I'm gonna have to resume Esperanto studies before college, so I can Esperanto-localize everything before I leave, so that nobody can understand my desktop in the off-chance it's unlocked when they are there. 04:00:14 since categorical monads exist in a lot of categories other than functions... 04:00:41 but i know just about nothing about those 04:02:52 i've been thinking about creating myself a font with no connection to this one and learning to read and write it 04:02:56 that'd be fun 04:03:14 connection=similarity 04:03:38 How easy would English be if word order were reversed? 04:03:44 now co[dk]e -> 04:04:11 Say i'ld, easy pretty. 04:04:17 ihope: easier to learn for me, a *lot* easier to crack 04:04:34 is it wise to install every single extension when you upgrade php? 04:04:36 * pikhq shrugs 04:04:51 oerjan: "i'ld"? 04:05:31 * ihope suddenly goes to bed 04:07:36 * oerjan thought that was the correct contraction for "I would" 04:07:46 oerjan: i'd 04:07:47 err 04:07:53 that's not what i was gonna say 04:08:21 oerjan: state variables in mercury, they anywhere near monads ? 04:08:33 i guess you don't remember that language fully, though. 04:08:58 indeed not. 04:09:14 which one? 04:09:52 i'll assume the latter and keep reading. 04:11:09 * oerjan wonders how he could have messed up such an elementary part of english grammar. 04:11:42 you do io_action(arg, io_state1, io_state2), io_action(arg, io_state2, io_state3) normally to chain the action in the correct sequence 04:11:46 oerjan: Did your parser miss a case? 04:12:52 and you can have a state variable !var that can be used like io_action(arg, !IO), io_action(arg, !IO) 04:12:59 actually it seems to have added one that wasn't there :) 04:13:00 for a syntactic sugar for the chaining 04:13:56 oerjan: do you use contractions? 04:14:04 normally 04:14:17 i don't recall you using that before 04:14:42 well i use don't and can't and such, at least 04:14:58 i use "i'd've" pretty often 04:15:04 it's my favorite 04:15:46 "i'll've" beats it though, but that's even iffier and i've never seen it used :) 04:16:59 what about "i'll've'nt"? 04:17:06 i will have not 04:17:20 err, "i'll'ven't" 04:17:24 it's "i will not have" 04:17:25 yeah 04:17:30 err 04:17:31 no 04:17:47 "'nt" must end the contraction 04:17:51 (imo) 04:18:03 this is a matter of opinion, obviously. 04:18:06 i'll is i will 04:18:16 anyway, where is my code, where is my coke? 04:18:17 've is have 04:18:20 and n't is not 04:18:22 not here, i say. 04:18:33 immibis: sorry, "n't" must be last 04:18:36 i 04:18:37 .. 04:18:48 i'lln't've 04:18:55 not i'll'ven't 04:19:05 i will not have 04:19:14 yeah 04:19:28 i will not have had = i'lln't've'd 04:20:09 i'm pretty sure i'lln't've'd sex before i'm 40 04:20:25 because i use comtraction extensively 04:20:43 *contractions 04:24:05 -!- ihope has quit (Connection timed out). 04:51:04 -!- immibis has quit (Excess Flood). 04:51:21 -!- immibis has joined. 05:01:20 -!- suifur has quit ("leaving"). 05:12:10 -!- immibis_ has joined. 05:12:58 -!- immibis has quit (Nick collision from services.). 05:13:01 -!- immibis_ has changed nick to immibis. 05:16:14 -!- toBogE has quit (Nick collision from services.). 05:16:42 -!- toBogE has joined. 05:23:28 !bf_txtgen ACTION is a bot. Didn't you know that? 05:23:28 Caught a java.lang.ClassNotFoundException! toboge.Execer_bf_txtgen 05:24:50 331 ++++++++++++[>+++++++>+++++>+++>+++++<<<<-]>>+++++.++.<.>++++++.++++++.-.>----.<<+++++++++++++++++++++.++++++++++.>>.<+++++++++++++++++++.>.<+.<----.+++++.>>>--------------.<.>++++++++++++++++++++++.<<<-----------.>++.<+++++.>>+++++++.<++++++++++++++++.>-------.<+++++.<+.>----.>.<<----.+++.+.>++.>.<---.<-------.-------.>.>>-----. [948] 05:25:42 !bf8 ++++++++++++[>+++++++>+++++>+++>+++++<<<<-]>>+++++.++.<.>++++++.++++++.-.>----.<<+++++++++++++++++++++.++++++++++.>>.<+++++++++++++++++++.>.<+.<----.+++++.>>>--------------.<.>++++++++++++++++++++++.<<<-----------.>++.<+++++.>>+++++++.<++++++++++++++++.>-------.<+++++.<+.>----.>.<<----.+++.+.>++.>.<---.<-------.-------.>.>>-----. 05:25:43 ACTION is a bot. Didn't you know that? 05:25:44 ACTION is a bot. Didn't you know that? 05:26:22 !bf8 +.+++++++++++[>+++++++>+++++>+++>+++++<<<<-]>>+++++.++.<.>++++++.++++++.-.>----.<<+++++++++++++++++++++.++++++++++.>>.<+++++++++++++++++++.>.<+.<----.+++++.>>>--------------.<.>++++++++++++++++++++++.<<<-----------.>++.<+++++.>>+++++++.<++++++++++++++++.>------ -.<+++++.<+.>----.>.<<----.+++.+.>++.>.<---.<-------.-------.>.>>-----.[-]+. 05:26:23 * toBogE is a bot. Didn't you know that? 05:26:26 * EgoBot is a bot. Didn't you know that? 05:26:29 that was what i originally wanted it for 05:27:26 i guessed as much. 05:28:50 niiice 05:29:09 "wouldn't've'd to've" 05:29:39 !help 05:29:39 All known commands: !bf !bf8 !binascii !chanlist !delregex 05:29:41 !factoid !hello !help !irp !magritte !minimum !nil 05:29:42 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 05:29:43 !persist !raw !regex !rot13 !userlist 05:29:44 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 05:29:46 Huh? 05:29:48 Huh? 05:30:35 !help is what you should not say at the beginning of a line 05:30:35 All known commands: !bf !bf8 !binascii !chanlist !delregex 05:30:37 !factoid !hello !help !irp !magritte !minimum !nil 05:30:38 To use an interpreter: Note: can be the actual program, an http:// URL, or a file:// URL which refers to my pseudofilesystem. 05:30:39 !persist !raw !regex !rot13 !userlist 05:30:40 Huh? 05:30:42 Huh? 05:31:41 it might be a good idea to have toBogE use a different command prefix. 05:32:22 or make egobot ignore it 05:32:35 !daemon factoid +[,[-]+] 05:32:35 Caught a java.lang.ClassNotFoundException! toboge.Execer_daemon 05:32:41 But EgoBot was here first. 05:32:41 !daemon persist +[,[-]+] 05:32:42 Caught a java.lang.ClassNotFoundException! toboge.Execer_daemon 05:32:52 but toboge was here before egobot joined, as well 05:33:00 !help 05:33:00 All known commands: !bf !bf8 !binascii !chanlist !delregex 05:33:02 !factoid !hello !help !irp !magritte !minimum !nil 05:33:02 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 05:33:04 !persist !raw !regex !rot13 !userlist 05:33:04 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 05:33:06 Huh? 05:33:08 Huh? 05:33:11 EgoBot's been in this channel for ages. 05:33:21 yes but i wrote toboge when it wasn't. 05:33:26 !raw PART #esoteric 05:33:28 -!- toBogE has left (?). 05:33:44 Are you being idiotic on purpose? :P 05:34:08 i say so 05:34:27 So this is weird. One element is randomly not being added to the hash table. 05:34:32 And I have absolutely no idea why. 05:34:57 It's being read and parsed, but not being added, for reasons I can't understand. 05:35:19 is it already in the hash table? 05:35:44 No. 05:36:03 Stupid faulty hash table implementations. *Grumble*. That's what you get for relying on others. 05:37:59 and a randomly changing element, too? 05:41:08 Yeah. 05:43:24 -!- pikhq has quit (Read error: 110 (Connection timed out)). 06:11:46 -!- Sgeo has quit ("Ex-Chat"). 07:10:27 -!- oerjan has quit ("leaving"). 07:23:33 'night, guys 07:23:41 LIke you talked a lot :P 07:23:50 <:/ 07:23:58 silence can be a virtue... 07:24:13 virtue(silence) -> no. 07:24:16 would you prefer I babble mindlessly? 07:24:31 Yes. Like immibis and his bot testing. 07:25:00 well, then, I'll start bringing Archos, my chatterbot, in here more often 07:25:19 Yes. Do it. And spam!!! 07:25:41 By the way, this Hashtable seems to randomly place null instead of one element each time I use it. 07:25:47 And the element changes each time it runs. 07:25:47 your will is my command, oh queen of #Esoteric 07:26:18 -!- RodgerTheGreat has quit. 07:46:18 uprhghg' 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:40:54 -!- sebbu has joined. 08:48:45 -!- edwardk has left (?). 09:29:17 -!- immibis has quit ("Man who run behind car get exhausted"). 10:33:58 -!- jix has joined. 10:38:36 night all 10:39:07 -!- GreaseMonkey has quit ("MULTIPLAYER NOTEPAD IS WORKING! :D Will release it tomorrow."). 11:51:29 -!- ehird` has joined. 12:06:07 -!- jix has quit (Nick collision from services.). 12:06:21 -!- jix has joined. 13:20:30 -!- ihope__ has joined. 13:20:48 -!- ihope__ has changed nick to ihope. 13:29:12 Well, I've figured out just what it is I want with this lambda/SKI and monad stuff. 13:30:47 I want to be able to pretend that every lambda calculus construct has an equivalent SKI calculus construct. 13:31:30 it does 13:34:05 ihope: ololobot has a convertor for that 13:35:08 That to convert \x.E to SKI, you can convert E to SKI and return something that includes the result. 13:35:57 i don't understand 13:36:06 >>> pl ^xE 13:36:07 `kE 13:36:27 Where E is some expression that may or may not contain x. 13:36:56 you want to convert any expression from lambda to ski? 13:37:10 Yup. 13:37:15 pl. 13:37:18 >>> pl ^xx 13:37:18 `kx 13:37:21 >>> pl ^xy 13:37:21 `ky 13:37:27 >>> pl s 13:37:28 s 13:37:30 >>> pl `ss 13:37:30 `ss 13:37:33 It translates ^xx to `kx? 13:37:42 oh 13:37:44 it uses $ 13:37:44 >>> pl ^a^b^c``$c$b$c 13:37:45 ``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s`kk`ki``s``s`ks``s`kk`kk`ki``s`kk`ki 13:37:47 >>> pl ^x$x 13:37:48 i 13:37:51 it has no optimization 13:37:53 >>> pl ^x^y`$x$y 13:37:54 ``s``s`ks``s`kki`ki 13:38:01 >>> pl ^x$x 13:38:02 i 13:38:03 ``s``s`ks``s`kki`ki is the apply function. i didn't know that. 13:38:11 Why does it do that? 13:38:13 >>> pl ^x^y^z``$x$y$z 13:38:14 ``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kki``s``s`ks``s`kk`kk`ki``s`kk`ki 13:38:15 ehird`: the apply function? 13:38:23 >>> pl ^x^y^z``$x$z`$y$z 13:38:24 Oh, hmm. 13:38:24 ``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kki``s`kk`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk`ki``s`kk`ki 13:38:29 why doesn't that optimize to S 13:38:29 Indeed, that's sort of bad. 13:38:45 ehird`: it does *not* optimize *anything* 13:38:55 >>> pl ``^x^y^z``$x$z`$y$z^x^y$x^x^y$x 13:38:55 ``^x^y^z``$x$z`$y$z^x^y$x^x^y$x 13:38:56 i have a list of lenght optimizationsi gathered 13:39:02 ... that is broken 13:39:03 but didn't implement yet 13:39:07 >>> pl ``^x^y^z``$x$z`$y$z^x^y$x^x^y$x # broken 13:39:08 ``^x^y^z``$x$z`$y$z^x^y$x^x^y$x 13:39:16 hmm 13:39:16 ``xz`yz -> ``sxy -> `sx -> s 13:39:22 it seems so 13:39:26 ihope, 'xactly 13:39:30 that's SKK, aka I 13:39:37 x -> `kx -> k 13:39:38 but, it doesn't even fully convert 13:39:42 i've always kept separately application and lambda creation 13:39:46 shouldn't be hard to fix 13:40:13 ehird`: it seems i don't recurse on application. 13:40:16 i'll try and fix that now 13:40:19 :P 13:41:24 oklopol, back to optimization/compilation/interpretation: would you be happy if pl reduced the whole lambda expression, then just gave you the >result< of evaluating it in SKI? 13:41:28 it wouldn't be a compiler would it? :) 13:42:16 that's a convertor, not a compiler :| 13:42:25 Same thing, really. 13:42:36 Except that with a compiler, you're generally converting downward. 13:42:38 ehird`: also, it returnsthe result 13:42:44 *returns the 13:42:58 it should, that is. 13:43:04 ihope, i was responding to how oklopol said that a brainfuck compiler should optimize so much, that anything without input should be optimized to its result 13:43:21 so e.g. a factorial function called with hardcoded 7 would be compiled as just "7"... it'd execute at compiletime 13:43:30 ++++++++++++++++++++++++++++++++++++++++[.] 13:43:54 well, if you wrote a factorial for 7 - code to do it - in BF 13:43:57 then compiled that 13:44:00 the resulting c code would be like 13:44:13 "*p = 5040; putchar(*p);" 13:44:17 and it'd have run at compile time 13:44:19 i think that's absurd. 13:45:10 -!- RedDak has joined. 13:47:55 no wonder 13:47:57 elif a[1][0]!='`': 13:47:57 ret=["`",["k"],a[1]] 13:48:10 it effectively just returns whatever was given unless it's a lambda. 13:48:29 Whoa. 13:48:29 >>> pl `^x$xi 13:48:31 `^x$xi 13:48:38 actually 13:48:40 >>> pl `hello, world! 13:48:40 `he 13:48:44 Darn. 13:48:54 why not `k^x$xi? 13:49:24 ihope: normal application applied still, though :) 13:49:27 >>> pl ^x^y^z``$x$z`$y$z 13:49:28 ``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kki``s`kk`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk`ki``s`kk`ki 13:49:37 beware excess flood... 13:49:45 >>> pl ``^x^y^z``$x$z`$y$z^x^y$x^x^y$x 13:49:46 ``^x^y^z``$x$z`$y$z^x^y$x^x^y$x 13:49:49 :/ 13:49:50 ski is a bit verbose, especially unoptimized and autoconverted 13:49:53 oklofok: er, does `k^x$xi make sense? 13:50:16 ihope: that'd be wrong, indeed. 13:50:23 >>> pl ^x```sksk 13:50:24 ``s``s``s`ks`kk`ks`kk 13:50:31 haha 13:50:37 oh, may be correct 13:50:40 that's muddled 13:50:42 >>> pl ^x`s`s`s`s`s`s`s`ss 13:50:42 heh 13:50:43 ``s`ks``s`ks``s`ks``s`ks``s`ks``s`ks``s`ks``s`ks`ks 13:50:48 Yah, fix. 13:50:49 sksk does what? 13:50:53 SKSK=K 13:50:59 >>> pl ^x```sksk 13:51:00 ``s``s``s`ks`kk`ks`kk 13:51:03 oh no wait 13:51:05 SK(SK) = K 13:51:05 ```sksk -> ``kk`sk -> k 13:51:06 >>> pl ^x`$x$x 13:51:07 ``sii 13:51:14 ihope, it's ``sk`sk 13:51:14 >>> ul ````s``s``s`ks`kk`ks`kk i i 13:51:15 -> ('k', 'i') 13:51:17 >>> pl ^x`$x$x 13:51:17 ``sii 13:51:21 well that works! 13:51:21 >>> ul ````s``s``s`ks`kk`ks`kk A B 13:51:22 -> ('k', 'B') 13:51:26 ehird`: um, I have it ```sksk. 13:51:26 hmm... 13:51:30 >>> pl `^x`$x$x^x`$x$x 13:51:31 `^x`$x$x^x`$x$x 13:51:35 ihope, well, that's wrong i think =p 13:51:38 >>> ul `````s``s``s`ks`kk`ks`kk A B C 13:51:39 -> B 13:51:44 Wrong? 13:51:47 >>> pl `^x`$x$x^x`$x$x <-- should translate to ```sii``sii 13:51:48 `^x`$x$x^x`$x$x 13:51:52 >>> pl ^x`$x$x 13:51:53 ``sii 13:51:57 but ` is still borked. 13:52:00 you need to recurse 13:52:04 okay, i'm pretty sure that works correctly unless you actually apply a lambda :) 13:52:08 yeah 13:52:23 I think we've concluded that the bot is terribly horribly not well very badly broken. 13:52:42 and cue.... 13:52:50 And cue? 13:52:55 and cue... 13:53:04 -!- blahbot` has joined. 13:53:19 blahbot to the rescue! 13:53:32 ah, *now* i found the problem 13:53:39 else: 13:53:40 ret=a 13:53:42 my bad influence? 13:53:49 it effectively just returns with *no* conversion. 13:54:12 i like bots! 13:54:16 >>> pl ``sii 13:54:17 ``sii 13:54:29 >>> pl ^x^y$y 13:54:30 `ki 13:54:57 >>> pl ^x^y^z^a^b^c``$x$a``$b$c$z 13:54:58 -!- ololobot has quit (Excess Flood). 13:55:00 heh 13:55:14 how long was that 13:56:41 hmm 13:56:45 i cantry on console 13:56:51 *can try 13:58:15 oph btw 13:58:23 it should be fixed 13:59:03 restart it 13:59:11 oh 13:59:12 hehe 13:59:15 wait 13:59:37 i should really make threading and autoreconnect... 14:00:00 threading is simple 14:00:03 what language is ololobot in 14:00:08 http://www.vjn.fi/pb/p652565215.txt 14:00:08 if ruby, then killing threads is really easy 14:00:10 c++ 14:00:12 ewww 14:00:13 err 14:00:17 it's python. 14:00:21 oh 14:00:26 it's easy in ruby 14:00:29 ps = Thread.list 14:00:29 anyway, there's your lambda 14:00:32 i mean 14:00:33 ski 14:00:34 kill = Thread.list[x].kill 14:00:40 thats an insane lambda 14:00:44 %cmds 14:00:45 quit, eval, ps, kill, cmds, help, reload, join, part, send, topic, raw, bf, parse, reduce (use %help for argument information) 14:00:45 yeah, not that easy in python, but almost 14:00:51 i should get rid of reduce 14:00:52 it doesn't work 14:00:54 hmm 14:00:59 * ehird` wonders what to add to it 14:01:02 i should make >>> help me 14:01:06 any particularly interesting languages> 14:01:08 >>> help 14:01:10 >>> commands 14:01:24 %bf +++++++. 14:01:30 %bf +[] 14:01:31 %ps 14:01:32 0. bf +[] 14:01:32 1. ps 14:01:34 %kill 0 14:01:48 i'd love to add stuff to my bot if you gimme btw, any python program that has a function run() that takes a string and returns a string 14:01:50 !help 14:01:53 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 14:01:55 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 14:02:20 i assume malbolge uses an external interp 14:02:26 (though i'll change it to take as arguments a string and give it an object to use for message passing or something alike) 14:02:35 ehird`: they all do 14:02:47 i embedded a BF interpreter for my bot 14:02:51 whooops 14:02:52 more elegant i think considering its simplicity 14:03:00 forgot to join the bot here 14:03:16 -!- ololobot has joined. 14:03:28 >>> `^x$xi 14:03:35 >>> pl `^x$xi 14:03:36 `ii 14:04:03 >>> pl `^x`$x$x^x`$x$x 14:04:03 ```sii``sii 14:04:06 good 14:04:12 test its correctness will you? i can't test my own programs, i'm just too empathetic about hem... 14:04:13 *them 14:04:16 nice 14:05:04 Hmmmmmmmmmm 14:05:29 >>> pl ^x$x 14:05:30 i 14:05:35 >>> pl ^x^y$x 14:05:36 ``s`kki 14:05:41 Wrong. :-P 14:05:42 A brainfuck with two bignums is turing-complete, right? 14:06:06 with +, -, *, / (* / = +- for second int), and [] and {} 14:06:13 err nope 14:06:15 ah 14:06:22 then it might just be 14:06:37 minksy machine or something 14:06:44 minsky isn't tc 14:07:02 it is, isn't it? 14:07:02 hmm 14:07:13 http://esoteric.voxelperfect.net/wiki/Minsky_machine 14:07:15 i could make the bot upload long returns automatically 14:07:16 Minsky machines with two or more registers have been shown to be in the same computational class as Turing machines. Because of this, and because of their simplicity, they can be used to prove several esoteric programming languages to be Turing-complete as well. 14:08:02 okay, sorry, i confuse terms quite often. 14:08:10 well, anyway, some machine was not tc. 14:08:49 hmm 14:08:56 actually you don't even need * and / 14:09:08 you don't have < > so yes you do 14:09:22 +-*/[]{} 14:10:04 not according to that page 14:10:24 why not 14:10:31 >+ -> * 14:10:36 >- -> / 14:10:42 >[ -> { 14:10:54 i guess maybe you need to wrap the poiner 14:11:38 according to that page you need two numbers, + and - 14:13:13 * ehird` keeps thinking what language to botify 14:14:43 ehird`: wanna tell me how to list all files in a folder in python? 14:14:50 guess i could google. 14:15:06 !ls 14:15:09 bf/, glass/, linguine/ 14:15:11 wtf! 14:15:15 egobot exposes the fs?! 14:15:18 !ls bf 14:15:21 LostKng.b, numwarp.b 14:15:44 !ls `echo hi > bf/hello` 14:15:47 /bin/ls: ./files/`echo hi > bf/hello`: No such file or directory 14:15:53 !ls $(echo hi > bf/hello) 14:15:55 /bin/ls: ./files/$(echo hi > bf/hello): No such file or directory 14:15:58 !ls ;echo hi > bf/hello 14:16:01 /bin/ls: ./files/;echo hi > bf/hello: No such file or directory 14:16:11 !ls --help 14:16:15 /bin/ls: ./files/--help: No such file or directory 14:17:31 hmm 14:17:42 is a language comprising of this TC: 14:18:19 ? - if the next char in the source code is greater than \000, jump one character after it and ignore the next ?. Otherwise, jump to after the next ?. 14:18:22 anything else - nop 14:18:35 maybe anything else - add to tape 14:18:45 no i don't think it is... 14:18:52 maybe if you had ! replace the next char with the previous one 14:19:37 -!- pikhq has joined. 14:19:38 it's not tc 14:19:41 it's finite 14:19:53 ah yes 14:19:57 you'd need infinite source code 14:21:34 hehe, you could add a metalanguage to that 14:22:05 hmm... a finite language that produces a new code in it to run 14:22:10 and yes,i realized that's been done. 14:22:31 what's it callednow... 14:23:42 i'm working on a spec 14:23:58 -!- RedDak has quit (Remote closed the connection). 14:25:28 http://pastie.caboo.se/81136 this should be able to do something 14:25:56 wait, also : duplicate tape head 14:27:56 http://pastie.caboo.se/81137 new spec 14:29:24 >>> help programs 14:29:25 bf, bs, expr, help, install, numbda, otools, pl, pybooot, ul 14:29:34 you can't have just help yet 14:29:47 also 14:29:59 that also shows the bot and otools. 14:30:10 neither of which is usable... i hope :P 14:31:14 hmm, pybooot should return "". 14:31:18 >>> pybooot okokokokokokokoko 14:31:53 err... except it also reconnects the bot xxxxxxxxxxxxxD 14:32:19 perhaps... i make a separate folder for external programs... 14:32:26 -!- ololobot has quit (Read error: 104 (Connection reset by peer)). 14:34:50 %reload 14:34:50 Reloaded. 14:34:52 %cmds 14:34:52 quit, eval, ps, kill, cmds, help, reload, join, part, send, topic, raw, bf, parse, reduce, wapr (use %help for argument information) 14:34:57 %wapr A 14:34:57 -!- blahbot` has quit (Remote closed the connection). 14:35:24 -!- blahbot` has joined. 14:35:27 %wapr A 14:35:50 %wapr A 14:35:53 %cmds 14:35:53 quit, eval, ps, kill, cmds, help, reload, join, part, send, topic, raw, bf, parse, reduce, wapr (use %help for argument information) 14:35:54 %wapr 2 14:36:02 %ps 14:36:02 0. wapr 2 14:36:02 1. wapr A 14:36:02 2. wapr A 14:36:02 3. ps 14:36:05 %kill 0 1 2 14:36:07 %kill 0 14:36:08 %kill 1 14:36:10 %kill 2 14:36:10 PID 2 out of range 14:36:11 %ps 14:36:11 0. wapr A 14:36:11 1. ps 14:36:13 %kill 0 14:36:17 %ps 14:36:17 0. ps 14:36:21 %wapr 2 14:36:23 %ps 14:36:23 0. wapr 2 14:36:23 1. ps 14:36:25 %kill 0 14:36:26 %reload 14:36:26 Reloaded. 14:36:28 %wapr 2 14:36:28 [18] 14:36:52 %wapr ~ 14:36:52 [94] 14:36:57 %wapr ~~+ 14:36:57 [188] 14:37:22 %wapr "? 14:37:24 %ps 14:37:24 0. wapr "? 14:37:24 1. ps 14:37:26 %kill 0 14:37:40 ok, " #?" (anything apart from space for #, well apart from ? - ! + :) 14:37:43 is an infinite loop 14:37:49 because # is above 0 14:37:52 and the spaces are 0 14:37:56 so it jumps to 0, and repeats 14:38:03 so, this thing can do infinite loops 14:38:13 %wapr # 14:38:13 [3] 14:38:15 %wapr ##+ 14:38:15 [6] 14:38:20 %wapr #:-+ 14:38:20 [0] 14:38:29 %wapr #,. 14:38:29 [3, 12, 14] 14:39:43 %reload 14:39:43 Reloaded. 14:40:14 %wapr % 14:40:14 [10] 14:40:27 %reload 14:40:28 Reloaded. 14:40:28 %wapr % 14:40:28 [17] 14:40:37 %reload 14:40:38 Reloaded. 14:40:38 %wapr % 14:40:38 [nil] 14:40:44 %reload 14:40:45 Reloaded. 14:40:45 %wapr % 14:40:46 [nil] 14:40:55 %reload 14:40:55 Reloaded. 14:40:57 %wapr a 14:40:57 [60] 14:40:59 %wapr % 14:40:59 [nil] 14:41:02 %wapr & 14:41:02 [1] 14:41:05 %wapr % 14:41:05 [nil] 14:41:12 %eval ?% 14:41:13 => 37 14:41:19 %eval (?% % 127) 14:41:19 => 37 14:41:21 %eval (?% % 127) - 37 14:41:21 => 0 14:41:26 so WHY is it pushing nil... 14:41:26 OH 14:41:49 %reload 14:41:49 Reloaded. 14:41:51 %wapr % 14:41:51 [0] 14:41:56 %wapr &+ 14:41:56 [1, 6] 14:41:59 %wapr & 14:42:00 [1] 14:42:23 %eval s = [1]; x, y = s.pop, s.pop; puts y + x 14:42:23 NoMethodError: undefined method `+' for nil:NilClass 14:42:26 odd 14:42:28 oh well 14:42:55 %wapr %%& 14:42:55 [0, 0, 1] 14:42:57 grr 14:43:32 %reload 14:43:32 Reloaded. 14:43:36 %wapr & 14:43:51 %ps 14:43:51 0. ps 14:44:36 %reload 14:44:36 Reloaded. 14:44:37 %wapr & 14:44:37 [2] 14:44:43 %reload 14:44:43 Reloaded. 14:44:44 %wapr & 14:44:44 [1] 14:44:49 %reload 14:44:50 Reloaded. 14:44:54 %reload 14:44:54 Reloaded. 14:45:08 %reload 14:45:08 Reloaded. 14:45:16 %reload 14:45:16 Reloaded. 14:45:22 %wapr a a 14:45:23 [59, 59] 14:45:25 good 14:45:39 %wapr & 14:45:40 [0] 14:45:49 %wapr &&'! 14:45:50 %ps 14:45:51 0. wapr &&'! 14:45:51 1. ps 14:45:52 %kill 0 14:48:09 ok final wapr spec: http://pastie.caboo.se/81141 14:48:29 first person to write tape = [hello world] wins :) 14:48:43 (You can even do something silly like 0=h,1=e...) 14:49:08 -!- pikhq has quit (Read error: 110 (Connection timed out)). 14:49:12 hmm 14:49:54 for a second i was hoping the name of the language was "jumping to -1 is exciting" 14:49:57 :D 14:50:00 haha 14:50:01 ok 14:50:04 that is its name 14:50:06 and all in lowercase 14:50:22 ([0,1,2,2,3,4,5,3,6,2,7] -> 0=h,1=e,2=l,3=o,4=space,5=w,6=r,7=d) 14:50:35 (As long as you didn't just write the values for that in its literals...) 14:50:39 (Calculation :P) 14:51:15 how does jump work? 14:51:56 well 14:51:59 jump X jumps to X position in code 14:52:05 first char = 0, second char = 1 etc. 14:52:20 maybe, i will add a "continuation" function, which appends the current character to the tape) 14:52:51 i can't print, hard to do hello world 14:53:59 ([0,1,2,2,3,4,5,3,6,2,7] -> 0=h,1=e,2=l,3=o,4=space,5=w,6=r,7=d) 14:54:01 produce that tape 14:54:06 also: http://esoteric.voxelperfect.net/wiki/Jumping_to_-1_is_exciting 14:54:23 i think it's TC 14:54:31 the problem is i can't see output 14:54:51 yes you can 14:54:55 the tape is displayed at the end 14:55:03 %wapr ''+ 14:55:03 [1, 1, 5] 14:55:06 ah 14:55:07 hm wtf 14:55:08 that's wrong 14:55:14 oh 14:55:17 i got the commands wrong 14:55:20 %wapr ''$ 14:55:20 [2] 14:55:21 well, you know, i'm blind. 14:55:34 i'llplay with that soon 14:55:41 you're IRCing while blind and with no screen reader? :P 14:55:45 1337 sk1llz! 14:55:57 brairclle 14:56:02 i'm brainblind 14:56:12 hehe 14:56:18 just use the rules 0=h,1=e,2=l,3=o,4=space,5=w,6=r,7=d 14:56:26 which means you want to produce the tape [0,1,2,2,3,4,5,3,6,2,7] 14:56:31 but without just using the literals ;) that's cheating 14:56:37 with literals it's 14:57:10 %wapr &'(()*+),'- 14:57:11 [0, 1, 2, 2, 3, 4, 5, 3, 6, 1, 7] 14:57:18 err 14:57:21 %wapr &'(()*+),(- 14:57:22 [0, 1, 2, 2, 3, 4, 5, 3, 6, 2, 7] 14:57:28 but, to do it programmatically... :) 14:58:19 what do you mean programmatically? 14:58:26 well you could write a BF hello like 14:58:34 add up to H>add up to e....... 14:58:42 but instead, you use loops etc to shorten the program 14:59:08 i'll can the ascii codes 14:59:10 *make 14:59:58 %wapr &&'"$&! 15:00:00 %ps 15:00:00 0. ps 15:00:01 good 15:00:05 jump -1 works 15:02:55 i am inclined to think it is turing complete 15:02:58 i think i can compile BF into it 15:03:22 Well maybe a bit hard because of the pointer 15:03:25 but i think it's possible 15:03:28 if the pointer is the top of the stack 15:03:41 and you keep using # to grab from the tape itself 15:04:05 + is just GETPOINTER&#'$ and then putting it back 15:04:24 def curry(f):return (lambda x:eval(reduce(lambda a,b:a+b,["lambda "+i+":"for i in x])+f.__name__+"("+",".join(x)+")"))(__import__("pydoc").inspect.getargspec(f)[0]) 15:04:37 is that a python currier 15:04:43 somewhat 15:04:44 -!- pikhq has joined. 15:04:51 it can't curry a lambda yet 15:05:17 def k(a,b):return a 15:05:22 curry(k)(5)(2) >>> 5 15:05:43 %eval def curry(f, x); proc {|y| f(x, y);}; end; curry(puts, "Hello") 15:05:43 => # 15:05:52 %eval def curry(f, x); proc {|y| f(x, y);}; end; curry(method(:puts), "Hello") 15:05:52 => # 15:05:55 %eval def curry(f, x); proc {|y| f(x, y);}; end; curry(method(:puts), "Hello").call("world") 15:05:55 NoMethodError: undefined method `f' for # 15:05:57 hmmmm 15:06:05 i do it really badly, don't know how to do assembly in python 15:06:06 i mean 15:06:09 python bytecode 15:06:19 %eval def curry(f, x); proc {|y| f.call(x, y);}; end; curry(method(:puts), "hello").call("world") 15:06:19 hello 15:06:19 world 15:06:19 => nil 15:06:39 %eval def curry(f, x); proc {|y| method(:f).call(x, y);}; end; curry(:puts, "hello").call("world") # prettier 15:06:39 NameError: (eval):1:in `method': undefined method `f' for class `Blahbot' 15:06:41 er. 15:06:43 oh whatever 15:06:45 you get the idea 15:06:54 hmmm 15:06:58 err 15:07:00 wait 15:07:31 you want a function that takes a function as argument and returns the curried function. 15:07:37 %eval class Proc; alias :old_call :call; def call(*args); if args.length < arity; proc {|x| self.call(*args, x)}; else; old_call(*args); end; end 15:07:37 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting tAMPER 15:07:59 %eval class Proc; alias :old_call :call; def call(*args); if args.length < arity; proc {|x| call(*args, x)}; else; old_call(*args); end; end 15:07:59 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting tAMPER 15:08:02 %eval class Proc; alias :old_call :call; def call(*args); if args.length < arity; proc {|x| call(*args, x)}; else; old_call(*args); end; end; end 15:08:02 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting tAMPER 15:08:05 %eval class Proc; alias :old_call :call; def call(*args); if args.length < arity; proc {|x| call(*args, x)}; else; old_call(*args); end; end 15:08:05 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting tAMPER 15:09:20 %eval class Proc; alias :old_call :call; def call(*args); if args.length < arity; proc {|x| call(*args, x)}; else; old_call(*args); end; end 15:09:21 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting tAMPER 15:09:22 %eval class Proc; alias :old_call :call; def call(*args); if args.length < arity; proc {|x| call(*args, x)}; else; old_call(*args); end; end; end 15:09:23 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting tAMPER 15:09:24 hmm 15:09:43 can you ask a function how many arguments it takes in ruby? 15:10:08 actually i could just do the currying "the right wya" 15:10:10 *way 15:10:13 i'll do it now 15:10:46 yes you can 15:10:50 it's called arity 15:11:05 %eval proc {|x,y|x}.arity 15:11:05 => 2 15:11:09 %eval proc {|*a|a}.arity 15:11:09 => -1 15:11:11 %eval proc {|x,*a|a}.arity 15:11:12 => -2 15:11:17 %eval proc {|x,y,a=2|a}.arity 15:11:17 SyntaxError: (eval):1: syntax error, unexpected '=', expecting '|' 15:11:19 er 15:11:20 actually, i don't think you can do that in python without evaö 15:11:21 *eval 15:11:26 you don't have atoms. 15:11:33 -> impussible 15:11:54 you do have atoms 15:12:02 strings are atoms in python 15:12:06 do you mean rubys symbols? 15:12:07 :x 15:12:13 that's more like smalltalk's #x symbols 15:12:17 not lisp's (quote x) or 'x 15:14:36 well, strings aren't really atoms... 15:14:46 they can be used as such in python, yeah 15:15:24 i don't know ruby that well, all i know is what you taught me some days ago. 15:16:30 hmmmmmmm 15:16:54 %eval def compose(x, y); proc {|*args| x.call(y.call(*args))}; end 15:16:54 => nil 15:17:03 hmmm, i want to write a @pl 15:17:04 but for what lanuage. 15:17:06 *language 15:19:14 someone should make a board game based on cellular automata 15:19:32 but like, where you can move peices according to rules 15:19:37 and... don't say "Game of Life" :P 15:19:45 because thats cheesy 15:21:01 Game of Life where you can modify the board a little bit when it's your turn? :-P 15:21:19 heh 15:21:30 im thinking of colours for cells 15:21:43 and you arrange an initial pattern, then you can move each cell and it's subjected to the death/birth rules etc 15:21:46 and maybe an extra rule for capture 15:21:47 or something 15:21:53 Game of Life with colors where you can modify the board a little bit when it's your turn? :-P 15:21:58 heh 15:22:09 hmm, ehird`: did you make currying? 15:22:20 oklopol, currying in ruby is simple, relaly 15:22:22 *really 15:22:30 well, the 15:22:32 can i see it in action? :)) 15:22:36 curry(f, x).call(y) -> f(x, y) type 15:22:55 the curry(f).call(x).call(y) -> f(x, y) type requires that ruby extension allowing you to see methods parsetrees 15:23:38 all i care about is whether you can show me that :P 15:23:39 try and implement it yourself, all you need is to override Proc#call, while alias :old_call :call, and use Proc#arity, to check if enough arguments 15:23:39 also 15:23:47 def m(*a) makes a a list of all the arguments 15:23:55 for some reason, mine syntax errors on one line 15:23:55 hmm 15:24:41 and you think *i* might do better with my unbelievable ruby experience :D 15:24:54 hmm 15:25:10 how do i get the arity of a function? 15:25:42 i told you - Proc#arity 15:25:52 Class#method means (an_instance_of_Class).method 15:26:01 aaaa 15:26:33 %eval def test(n);3;end 15:26:33 => nil 15:26:39 %eval def test(n);3;end;test(4) 15:26:39 => 3 15:26:58 %eval def test(n);Proc#arity(n);end;test(4) 15:26:58 SyntaxError: (eval):1: syntax error, unexpected $end, expecting kEND 15:27:10 Class#method means Class_instance.method 15:27:12 %eval def test(n);n.arity;end;test(4) 15:27:12 NoMethodError: undefined method `arity' for 4:Fixnum 15:27:18 ... 15:27:22 4 is a number... 15:27:23 %eval def test(n);test.arity;end;test(4) 15:27:23 ArgumentError: (eval):1:in `test': wrong number of arguments (0 for 1) 15:27:23 not a function. 15:27:28 oh 15:27:30 you want 15:27:33 method(:test).arity 15:27:38 test.arity is test().arity 15:27:53 ehird`: do not correct me right away, i get it as fast as you but it takes a second to fix 15:27:55 :P 15:27:56 :P 15:28:06 %eval def test(n);test.arity();end;test(4) 15:28:07 ArgumentError: (eval):1:in `test': wrong number of arguments (0 for 1) 15:28:09 %eval def test(n);test.arity(test);end;test(4) 15:28:09 ArgumentError: (eval):1:in `test': wrong number of arguments (0 for 1) 15:28:25 now you can correct me. 15:28:37 %eval def test(n);test.arity(3);end;test(4) 15:28:37 ArgumentError: (eval):1:in `test': wrong number of arguments (0 for 1) 15:28:41 method(:test).arity 15:28:47 guess i did need to correct you.. 15:28:51 %eval def test(n);method(:test).arity(3);end;test(4) 15:28:52 ArgumentError: (eval):1:in `arity': wrong number of arguments (1 for 0) 15:28:55 why (3) 15:28:56 ... 15:28:58 %eval def test(n);method(:test).arity();end;test(4) 15:28:58 => 1 15:29:04 because i suck! 15:29:05 :P 15:29:12 copypaste. 15:29:14 %eval def test(n); method(:test).arity; end; test(4) 15:29:14 => 1 15:29:16 %eval def test(n, x=2); method(:test).arity; end; test(4) 15:29:17 => -2 15:29:22 %eval def test(n, x=2, *args); method(:test).arity; end; test(4) 15:29:22 => -2 15:29:26 %eval def test(n, *args); method(:test).arity; end; test(4) 15:29:26 => -2 15:29:31 %eval def test(n, x=2, y=3); method(:test).arity; end; test(4) 15:29:31 => -2 15:29:38 %eval def test(n, b, x=2, y=3); method(:test).arity; end; test(4) 15:29:38 ArgumentError: (eval):1:in `test': wrong number of arguments (1 for 2) 15:29:42 %eval def test(n, b, x=2, y=3); method(:test).arity; end; test(4, 2) 15:29:42 => -3 15:29:49 see how that works? 15:29:53 with optional arguments, arity is: 15:29:54 it doens't have to account for * or = in argument lists 15:29:55 err 15:29:58 -(number of required arguments + 1) 15:30:08 otherwise, it's (number of arguments) 15:30:17 %eval def test(n); method(:test).arity; end; test(4, 2) 15:30:17 ArgumentError: (eval):1:in `test': wrong number of arguments (2 for 1) 15:30:19 %eval def test(n, bmethod(:test).arity; end; test(4, 2) 15:30:19 SyntaxError: (eval):1: syntax error, unexpected '(', expecting ')' 15:30:24 %eval def test(n, b); method(:test).arity; end; test(4) 15:30:25 ArgumentError: (eval):1:in `test': wrong number of arguments (1 for 2) 15:30:25 i see, i'm not going to care about those. 15:30:26 %eval def test(n, b); method(:test).arity; end; test(4, 2) 15:30:26 => 2 15:30:26 though 15:30:29 OK 15:30:39 unless you can tell me how to react to them when currying 15:31:04 i'm not making a lazy() function to make it possible to curry a variable number of arguments into a function... 15:31:39 convert this into a oneliner: 15:32:02 http://pastie.caboo.se/81146 15:32:20 what is *args for? 15:32:43 %eval def x(*args); args; end x(34324, 2, 3, 3) 15:32:43 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting $end 15:32:47 %eval def x(*args); args; end; x(34324, 2, 3, 3) 15:32:47 => [34324, 2, 3, 3] 15:32:52 %eval def x(*args); args; end; x() 15:32:52 => [] 15:32:53 %eval def x(*args); args; end; x(2) 15:32:53 => [2] 15:33:00 %eval def x(a, b, *args); args; end; x(2, 3, 4, 5) 15:33:01 => [4, 5] 15:33:03 you see 15:33:05 va-args. 15:33:16 also that #call doesn't support va-args, yet, but meh 15:33:24 i see now 15:33:41 you can make currying implicit in ruby 15:33:59 i mean 15:34:12 hm 15:34:13 hmm 15:34:16 yes 15:34:18 my mod makes 15:34:33 def hello(x, y, z); z; end; method(:hello).call(1, 2).call(3) -> 3 15:34:34 can you really do x([list],another_arg)? 15:34:46 if x takes a variable number of args 15:35:00 i mean, that should make it x([list,another_arg]) 15:35:06 which is wrong when currying 15:35:15 def x(*args); args; end; x([1,2],3) 15:35:19 lists are nested 15:35:21 %eval def x(*args); args; end; x([1,2],3) 15:35:21 => [[1, 2], 3] 15:35:36 proc {|x| call(*args, x)} -> proc {|x| call(*args+[x])} ? 15:35:57 ah - thanks for finding my bug 15:36:00 if *argsis a list 15:36:04 you're right, it should be *(args + [x]) 15:36:06 yar 15:36:11 ah that way around 15:36:26 that is the bug i think 15:36:28 it should work now 15:36:34 replcae the newlines with ; and try it 15:36:38 kay 15:37:27 %eval class Proc;alias :old_call :call;def call(*args);if args.length < arity;proc {|x| call(*args, x)};else;old_call(*args);end;end;end 15:37:28 SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting tAMPER 15:37:34 tAMPER? 15:37:38 tAMPER = & 15:37:48 you didn't fix the bug 15:37:51 ity;proc {|x| call(*args, x)} 15:37:54 %eval class Proc;alias :old_call :call;def call(*args);if args.length < arity;proc {|x| call(*(args+[x])};else;old_call(*args);end;end;end 15:37:54 SyntaxError: (eval):1: syntax error, unexpected '}', expecting ')' 15:38:00 %eval class Proc;alias :old_call :call;def call(*args);if args.length < arity;proc {|x| call(&(args+[x])};else;old_call(*args);end;end;end 15:38:00 SyntaxError: (eval):1: syntax error, unexpected '}', expecting ')' 15:38:05 get rid of & 15:38:06 you want * 15:38:13 %eval class Proc;alias :old_call :call;def call(*args);if args.length < arity;proc {|x| call(*(args+[x])};else;old_call(*args);end;end;end 15:38:13 SyntaxError: (eval):1: syntax error, unexpected '}', expecting ')' 15:38:16 just tried. 15:38:25 because it asker for the ampersandorz 15:38:28 *asked 15:38:37 %eval class Proc;alias :old_call :call;def call(*args);if args.length < arity;proc {|x| call(*(args+[x]))};else;old_call(*args);end;end;end 15:38:37 NameError: (eval):1:in `cmd_eval': undefined method `call' for class `Blahbot::Proc' 15:38:59 hmm 15:39:24 %eval class Proc;alias :old_call :call;def call(*args);if args.length < arity;proc {|x| call(*(args+[x]))};else;old_call(*args);end;end;end; Proc 15:39:24 NameError: (eval):1:in `cmd_eval': undefined method `call' for class `Blahbot::Proc' 15:39:29 somethign is wrong 15:39:57 hard to say... what's alias 15:39:57 ?= 15:40:12 class X; alias :x :y; end; X.x -> X.y 15:40:32 hmm 15:40:33 that code works in irb 15:40:37 just not on the bot 15:40:42 probably i need an extra thread 15:40:43 oh 15:41:10 but it curries every function when you do that? 15:41:15 that's like insanely cool 15:41:18 well 15:41:25 you can't do func(blah) to curry 15:41:27 because I changed Proc 15:41:33 you need method(:func).call(blah) 15:41:35 which is a but ugly 15:41:38 but yeah 15:41:39 apart from that. 15:42:06 heh nice 15:42:13 irb(main):024:0> proc {|x,y|x}.call(2).call(3) 15:42:14 => 2 15:44:29 god i wish i had oklotalk... 15:44:44 implement it :) 15:44:52 doing file io in *any* language is a pita 15:45:20 in which sense - implementing the IO for oklotalk is why you're not implementing oklotalk? or the fact that you want to do file IO only in oklotalk and that's why you want it 15:45:45 errr... hmm 15:45:56 latter 15:46:18 i'm willing to implement oklotalk :P 15:46:21 if you can give me a rough spec.. 15:46:47 meh, i'm making progress, and as long as i am, i 15:46:51 'd rather do it myself. 15:46:59 so it's mine. 15:47:02 ok then 15:47:12 i'd implement my own anyway :) 15:47:22 still, you'd have it sooner for the time being 15:47:41 you think you'd implement it fast? :) 15:48:05 i can tell you it's harder than c to parse. 15:48:26 parser generators work wonders, sometimes 15:48:32 especially if you can manually extend them 15:49:00 well, try oklotalkspec @ www.vjn.fi/mb 15:49:11 ask me if you don't get something 15:50:04 how on earth do you work that 15:50:08 :P 15:50:12 ah, i see 15:50:16 shitty interface =p 15:50:29 it's removed 15:50:39 what's wrong with the interface? 15:50:43 Any '"' will begin a character array ending in another '"', '\' can be used for escapes. '\n' for linefeed, '\\' for '\', more added as needed, most likely the same ones as in other langs. <-- why not have " as a command 15:50:47 you specify project name and press load. 15:50:57 as a command? 15:51:30 i do not understand. 15:51:36 what's wrong with the interface? 15:51:42 For example "($$: :." would be tokenized into ["($$:", ":", "."]. <-- don't tell people how to tokenize, or how their parse tree should look... just describe the syntax ;) 15:51:45 it's better 15:51:52 oklopol, i wasn't talking about the interface 15:52:11 shitty interface =p 15:52:37 ehird`: how should i describe syntax then?= 15:52:38 wow, you "fix" misplaced brackets 15:52:40 that's insane! 15:52:54 oklopol, just... don't tell people how their final picture should look, just say what is valid and what is not 15:53:21 in oklotalk, everythingis legal. 15:53:25 *everything is 15:53:27 so... 15:53:32 i can rewrite the spec for you 15:53:45 .* <- check for that regex 15:53:46 :P 15:54:18 ture 15:54:32 you can make the parser faster than me. 15:54:41 because i want to do it a bit differently than that. 15:57:35 ehird`: that's the basic guidelines, the spec is not complete 15:58:22 also, that is oklotalk 1, in oklotalk 2, there's also typing and real-time parsing, which kinda affect parsing. 15:58:36 oklotalk 1 was so that i could actually get something done. 15:58:50 i design about 100 times faster than i implement 16:03:28 i think i might put down, in words, my syntax-morphing language, 16:03:32 and my functional language 16:03:53 that spec is wrong in saying the tokenization isn't always greedy 16:04:06 the concept i actually mean i think doesn't have a term 16:04:17 ehird`: go for it 16:04:37 Tokenizing is the easy part 16:04:54 i just need to write a list of terminals, and some extra rules 16:06:21 i see. 16:06:48 tokenizing is easy, i wasn't saying it isn't 16:07:05 i'm just saying one sentence was wrong 16:09:07 -!- ololobot has joined. 16:09:14 okay,got it working 16:09:21 but not the way i wanted to :| 16:10:26 ehird`: what languages have you implemented? 16:10:38 a few 16:10:44 what? 16:10:53 i've implemented a few. which one do you mean? 16:10:57 there's a bit of a difference between languages :=) 16:10:59 i mean 16:11:01 what languages :D 16:11:04 list a few 16:11:11 i don't know, i implement languages all the time 16:11:17 esoteric or non-? 16:11:24 non 16:11:31 esotericones are usually trivial 16:11:37 *' ' 16:11:57 i mean, do you know your parsing, oklotalk has the hardest parsing i know of 16:12:12 parsing is trivial 16:12:19 i see. 16:12:48 what have you implemented, now out of curiousness? 16:13:07 i don't understand. i implement lots of languages, why do you want a complete list? 16:13:15 :| 16:13:22 a random example. 16:13:24 no reason 16:13:28 just asked 16:13:34 you don't have to tell me :D 16:13:39 well, i've implemented lots, mostly simple 16:13:57 lots of stack-based ones, a Lua-alike called slang for Simple Languge 16:13:59 those are the main ones 16:14:02 i just never found parsing trivial. 16:14:04 i'm generally minimalistic in syntax, though 16:14:09 but i can parse more complex things 16:14:12 oklotalk isn't easy, though 16:14:28 then again, i don't use regexes or parser generators of course, might make it trivial 16:14:33 and skill as well. 16:15:45 i mean, you can't know parsing is trivial if you never tried, so i asked if you ever tried. 16:17:18 (on an unrelated note, here's an example of my self-morphing parser: http://pastie.caboo.se/81154) 16:17:23 (it can even create tokens on the fly)| 16:17:49 error in there, you need e.g. cond instead of 16:17:55 cond, maybe better 16:17:58 but you know what i mean 16:19:07 tokenization isn't fully free there, but of course, it can never be. 16:19:30 hmm 16:19:32 why not? 16:19:33 yes it can 16:19:36 you can delete tokens and everything 16:19:52 you could, for example, replace the whole syntax with lisp s-expressions 16:19:58 and make everything else illegal 16:20:03 anyway, that isn't fully extendable 16:20:06 or is it? 16:20:07 yes it is 16:20:13 see above 16:20:30 make if BEGIN END mean if { } 16:20:41 ok: 16:21:36 tokens("BEGIN", "END"); syntax begin_end = ("BEGIN", exprs, "END") = ; 16:21:43 actually, make that 16:21:45 tokens("BEGIN", "END"); syntax begin_end = ("BEGIN", exprs, "END") = block; 16:21:49 you get the idea, though 16:22:24 actually, you could drop exprs and make it 16:22:29 since it's just passing the params to block 16:22:58 expr? 16:23:08 is like 16:23:09 the pointer to the upmost rule? 16:23:21 syntax X = (blah); lets you use 16:23:24 in other syntaxes. 16:23:30 it's just a reference to a rule 16:23:44 although, for BEGIN->END you probably want 16:23:46 which is statements 16:23:49 (For the ; seperation) 16:24:06 (Statements are just expressions with a seperator) 16:25:59 write a parser for it and i'll learn it fully :) 16:26:07 i'll be coding now, see ya! -> 16:26:12 !/gh 16:26:15 Huh? 16:27:16 i don't see why i need to parse that for you to understand it :P 16:28:06 i don't see why i'llneedto understand it if no one will parse it for me :P 16:28:12 *i'd need to 16:28:31 i do understand that much, of course 16:28:49 that's a pretty straightforward c-style syntaxextension :| 16:28:53 anyway, gooone -> 16:29:11 how come? the whole syntax, is definable in terms of the syntax objects 16:29:15 you can manipulate them, change them, etc 16:29:21 you could even change the "syntax" syntax 16:29:26 hmm 16:29:50 a syntax command will affect parsing after it? 16:30:00 you didn't tell me *what* parsing it affects 16:33:41 i "got the main idea", i do *not* know the spesifics 16:34:24 and i'm pretty sure the complete spesification wasn't implicit in the few examples you showed :) 16:34:32 but really, code. 16:43:11 yes, it will 16:43:14 it affects all parsing 16:43:29 that example is a program 16:43:32 well, if you get rid of the initial "if" 16:43:34 "all parsing" ...after that line 16:43:36 it parses fine 16:43:41 there'sa crucial difference 16:43:54 *there's a 16:43:59 as soon as you run tokens() you can use those tokens in the "syntax" syntax 16:44:06 the "syntax" syntax, after it, adds that syntax to the parser. 16:46:28 will everything be parsed once or can you affect the parser in a loop? 16:46:48 there's a million things i don't know yet based on your explanation :) 16:47:50 void*(*matchers[])(char*)={num_match,oper_match}; you gotta love c 16:54:40 everything is parsed as much as possible 16:54:44 yes you could do it in a loop 16:54:55 the speed penalty doesn't matter much, today's interpreters/compilers can optimize to hell 16:55:18 also 16:55:26 void*(*matchers[])(char*)={num_match,oper_match}; does that actually change c's syntax? 16:55:32 because im 99% sure c's syntax is fixed 16:55:49 ..huh? 16:55:53 that was just c code :) 16:56:08 i should use 16:57:29 =P 16:57:35 oh is that from the oklotalk parser 16:57:46 i'm making numbda in cfirst 16:57:49 ah 16:57:49 *c first 16:58:00 i suggest using something like, ML for oklotalk parsing 16:58:05 it'd make things a lot simpler 16:58:14 doesn't sound like something i would do :) 16:58:18 ML? 16:58:35 aaa 16:58:54 SML 16:58:59 i like SML 16:59:01 i dont like ocaml 16:59:04 i'm making it in c, it has to be low. 16:59:40 i'd make it if in asm, but i've become a coward after using so much python the whole summer 16:59:57 why does it have to be low? SML can be compiled. 17:00:01 >>> numbda ulkiuliuli 17:00:01 nonsensical 17:00:02 error:no-such-variable:ulkiuliuli(-1) 17:00:28 ehird`: anyway, i do not care what is sensible, i'll make it in c. 17:00:42 i just want to code, the harder the better 17:00:44 naturally 17:09:54 i forgot how unbelievably great this language is<3 17:10:01 (c) 17:17:56 haha, segmentation fault 17:18:02 this language is great 17:19:25 C sucks =P 17:19:57 yeah, perhaps 17:20:02 but i kinda like it 17:20:40 hmm... i can't imagine anything more fun than making a generic list construct in c. 17:20:48 i'll make it now 17:23:48 heh 17:24:07 SML ftw 17:25:12 sml looks easy to learn 17:29:51 c is actually pretty functional, i wonder why i was so afraid of function pointers when i was little 17:31:29 SML combines the nice syntax of Haskell with the imperativeness of scheme 17:31:38 beware the evil OCaml 17:34:19 why? 17:34:23 because it is horrid 17:34:35 # let rec fact n = 17:34:36 if n =/ Int 0 then Int 1 else n */ fact(n -/ Int 1);; 17:34:40 oh, it killed your father and raped your mother? 17:34:42 don't tell me that looks nice. 17:34:53 hey, i love every language :) 17:35:07 hehehe 17:35:09 why the /? 17:35:15 you have to use different operators for floating-point stuff too 17:35:19 3 / 1.0 MMMNOPE 17:35:20 .+ 17:35:25 3 ./ 1.0 ewwww 17:35:25 +. i mean 17:35:25 ? 17:35:26 exactly 17:35:29 +. 17:35:32 3.0 +. 1.0 17:35:35 I just realised that functional programmers don't often suffer from the exit-from-middle-of-loop problem 17:35:58 Also ". .~(power 5 ..)>.;;" do you like how that looks. 17:35:59 true 17:36:44 what about: 17:36:47 i don't understand that 17:36:51 code 17:36:55 let rec init n f = if n=0 then [] else init (n-1) f @ [f n];; 17:37:21 what's that do? 17:37:29 Ah, this is the best example: 17:37:31 i can't quite figure the end 17:37:39 Compare http://www.codecodex.com/wiki/index.php?title=Insertion_sort#OCaml and http://www.codecodex.com/wiki/index.php?title=Insertion_sort#Standard_ML 17:37:43 the standard ML one is much nicer/. 17:38:56 What about, calculating, say, e? 17:38:57 # let rec e ?(fact=1) ?(i=1) = function 17:38:58 | 0 -> 0. 17:38:58 | n -> 1. /. float fact +. e ~fact:(i*fact) ~i:(i+1) (n-1);; 17:38:58 val e : ?fact:int -> ?i:int -> int -> float = 17:39:01 that's some ugly code. 17:39:18 so, yes, beware of OCaml, don't beware of SML. 17:40:04 float = ... that's what a lazy swimmer would say 17:40:13 hahaha 17:40:46 to be honest i don't mind it's looks, but i can't imagine a syntax i wouldn't like :)( 17:40:47 :) 17:40:52 *its 17:41:12 more fuel: http://www.podval.org/~sds/ocaml-sucks.html 17:41:15 why ocaml sucks :P 17:41:53 most of the more serious of those problems do not exist in SML 17:45:04 good for him :) 17:49:34 i'll use sml if i ever have to choose between those two. 17:50:08 SML is a good language for implementing languages :) 17:54:13 -!- Sgeo has joined. 18:08:02 c is hard to debug though, unless i actually get a debugger 18:08:14 (or already have one and start using it.) 18:10:31 gdb, i guess 18:10:45 but hooray for debugging-is-just-loading-your-program-and-running-a-repl languages 18:10:48 (Forth, Lisp, etc) 18:45:26 -!- RodgerTheGreat has joined. 19:02:59 GregorR: your egobot's brainfuck code is really, really, terrible 19:08:03 ? 19:09:33 he uses global variables to pass parameters to functions 19:09:46 his brainfuck-interpreter? 19:09:50 *-- 19:14:41 But SML is a weenie-only language :( 19:15:13 just for boys? 19:16:01 SML is rock language! 19:16:05 :P 19:18:43 Weenies == Those who get nothing but algorithms done in life (goes the joke). 19:19:58 hmm 19:20:04 that's a funny one 19:20:06 :) 19:28:45 bsmntbombdood: I assume you mean egobfi? 19:28:51 yes 19:29:07 I'd say that it's a damned efficient interpreter. . . 19:29:15 Although it's tempting to rewrite some bits. 19:29:17 it all compiles the same 19:37:53 I'm a little confused here. Why is one entry not being added to the Hashtable?! Is the implementation not perfect, or something? 19:38:11 I *know* it's being attempted to be added, the table just doesen't want it though. 19:38:23 Grrrr! 19:39:06 are you using the wrong form of datastructure? Possibly using a Map when you want a Dictionary? 19:39:20 not to insult your intelligence or anything, but it's an easy mistake to make 19:39:51 isn't a map a dictionary? 19:40:00 a map is a dictionary 19:40:05 a dictionary is not a map 19:40:15 map (1 key to one result) 19:40:29 dictionary (1 key to several results) 19:40:34 Well, it could be, because I'm not certain what the equivalent Java classes are. But conventionally, I'd use a hash table that accepts an object as a key and then I get a value. 19:40:45 No. 1 key to 1 result. 19:41:01 ok, then a HashMap is what you want. hm... 19:41:05 That's what a hash table *is* after all. 19:41:25 use an alist! 19:41:35 ... :P 19:41:42 Use a binary tree! 19:42:02 I may just use an alist because the elements aren't too huge. 19:42:12 But a hash table should scale infinitely huge, if neccessary. 19:42:20 (Which is why I want it.) 19:42:31 size of elements doesn't matter, just number of them 19:42:38 Obviously. 19:42:49 that's not what you said 19:42:51 Since pointers are probably stored in the table anyways. 19:43:00 *number of elements aren't too huge. 19:43:56 In the interface to the HashTable I have the key to be added printed out before its added, so I can tell it's *trying* to be added, but then when I loop through the Enumeration containing the keys, the Enumeration gives me the correct number of elements, but one of these elements is null. 19:44:01 scheme48 has a function named ASS, hurr hurr 19:44:16 Programatically, it seems that I'm doing nothing wrong. 19:45:00 Also bsmntbombdood, size *does* matter, because the hashing algorithm has to able to operate on something the size of the element that is the key. 19:45:20 ? 19:45:25 not in an alist 19:45:37 Sukoshi: java? 19:45:38 An alist isn't a HashTable. 19:45:41 oklofok: Yeah. 19:46:00 it uses the addressof the object as the hashvalua 19:46:03 *hashvalue 19:46:09 *address of 19:46:32 Yeah, but a larger pointer will not fit into an algorithm meant for a smaller one :P 19:46:50 so java's builtin hashtables don't work? 19:47:05 Sukoshi: huh? :) 20:06:53 I'm guessing so? 20:07:22 a larger pointer? 20:07:35 oklofok: 64-bit pointer vs. 32-bit pointer. 20:07:59 i... kinda think only one type is used at a time 20:08:42 Well you know, just in case. 20:08:44 ;P 20:11:25 err... sounds feasible. i haven't read *every* jvm's binary. 20:12:58 128 bit pointers for wins 20:13:49 bignum pointers 20:21:23 new proccessors should have 128 bit addresses and 260 bit words 20:22:23 260? 20:22:28 err why? 20:22:47 4 tag bits and 256 data bits 20:25:08 i see 20:25:38 New processors should have scaling pointers. 20:34:10 Scaling pointers? 20:34:32 Wouldn't you have to store their length somewhere? 20:35:09 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)). 20:38:25 -!- GregorR-L has joined. 20:40:31 -!- Sgeo has joined. 20:42:35 ihope: It works via magic, of course. 20:42:50 Ah. 20:42:56 Bigpointers! 20:43:01 Actually, bigpoints! 20:43:12 I know one way for it to work. . . 20:43:22 0-delimited unary. :p 20:43:45 -!- atrapado has joined. 20:49:21 Now I can sit down and code again. 20:49:37 So, either I get this Hashtable to work or I have to write an AList class. 20:50:44 -!- RedDak has joined. 20:59:03 is an infinite board go tc if considered a multiway system? 20:59:17 hmm 20:59:40 Where did this myth that languages cannot be sow come from? 20:59:51 Languages can be slow. 20:59:58 Doubtful, since one has no control over the two players. Now, if you specify how the two players play, it might be. 21:00:07 For example Oroogu is a slow language, as is BF 21:00:14 pikhq: do you know what a multiway system is? 21:00:20 oklopol: Apparently not. 21:00:41 SimonRC: Brainfuck's not terribly slow, actually. . 21:00:41 it means *every* *single* way to play it is simultaneously played. 21:00:47 Oh. 21:00:53 Possible. 21:01:10 A slow language is one for which it is a PITA or even impossible to create a fast implemtation. 21:01:15 * pikhq is interested in how one could test it 21:01:22 hmm 21:01:27 SimonRC: Define "fast". 21:01:44 i think ankos had some multiway system proofs... or just one... i could check there how to do it 21:02:01 I mean that the program goes (almost) as fast and anything one could write by hand. 21:02:16 A good C or LISP compiler is "fast" 21:02:35 it produces asm as good as or better then humans 21:02:47 Ah. 21:02:57 * pikhq would argue that Egobfc is fast, then 21:03:09 OTOH, Python is not as fast, especially in the OO areas. 21:03:13 SimonRC: any language that has the same level operators the underlying system has is *fast*. 21:03:27 yes 21:03:31 but not just those 21:04:16 well, if you must somehow do thing *harder* than the asm will, the ocmputer cannot always convert it to the fastest possible asm 21:04:21 *things 21:04:25 *computer 21:04:36 but often nearly gets there 21:04:37 if not that, then it most likely can 21:04:50 yes, but i'm talking in theory 21:04:54 and i am very very hungry 21:04:55 Python is non-fast because you often need lots of work to prove that (e.g.) methods can be resolved at compiler time. 21:05:11 yeah, which asm doesn't have to do 21:05:39 The more you can fuck around with things at runtime, the slower the language will be, roughly. 21:05:40 BF is difficult but entirely possible to optimize via compiler, generating fast code. I'd gauge "slowness" of a language by the difficult in efficiently translating the language into machinecode (when compiled). 21:05:41 Assembly notation is fast. ;) 21:05:55 *difficulty 21:06:24 RodgerTheGreat: As proven by Gregor's Egobfc, which does a whole lot of loop unrolling, detects copy loops, etc... 21:06:28 Now that I'm implementing an AssocList class in Java, I'm finding less and less reason not to use Lisp :P 21:06:52 Also, would someone mind testing for me if gcj supports the generics when specifying LinkedLists ? 21:07:00 (Or other such things.) 21:07:44 it's fairly easy detecting stuff like copying and carrying a value aroung in the memory, but once you start doing stuff like division, the compiler is screwed 21:08:48 oklopol: yes 21:09:14 then again, division isn't all that fast on the asm level either 21:09:27 if you've seen the stuff people do to avoid it... 21:09:47 like 20 lines of assembly to avoid a division 21:09:55 Ah, I have discovered why laziness sucks. 21:10:02 ? 21:10:09 why? 21:10:21 Forget all the talk about space and time usage, and unpredicatbility... 21:10:33 forgotten. 21:10:56 It stops you from re-defining things at run-time! 21:11:07 you can't change function definitions at run-time 21:11:20 you can't change classes at run-time 21:11:20 etc 21:11:24 sure you can 21:11:54 the function will check it's location in memory, if there is a pointer to it, it will not mutate in-place, 21:12:00 that simple 21:12:01 no? 21:12:20 pikhq: yes- the entire challenge of good BF optimized compiling is *recognizing* the structures you can translate into higher-level (and faster) operations 21:12:25 oklopol: well... 21:12:33 suppose you have: 21:12:40 Here's an oddity. A Hashtable shouldn't even accept a null value. 21:12:43 the language allows for the creation of these things, but they're harder to pick out than, say, C or BASIC. 21:12:45 RodgerTheGreat: My method for doing that is cheating. . . 21:12:47 Grr. 21:12:52 foo = zipWith bar xs ys 21:13:05 I've just got a higher-level language, wherein you just say that you're using those structures. ;) 21:13:06 SimonRC: o 21:13:13 Makes it easier to recognise when compiling to C. 21:13:26 now, after having read a few elements of foo, you change the definition of bar... 21:13:31 pikhq: naturally, if you use libraries to *create* these synthetic high-level things, you know exactly how to recognize and translate them 21:13:42 pikhq: why don't ya secretly ignore the assembly completely ;) 21:13:46 err 21:13:49 haha 21:13:54 s/assembly/braeinfuk 21:13:55 ,., 21:14:02 we all got what you meant 21:14:04 would you use the new or old definition when you look at new elemnts of foo 21:14:05 okay, i can't type 21:14:07 yeah 21:14:08 :P 21:14:09 what about old elements of foo? 21:14:22 SimonRC: old 21:14:25 right 21:14:42 so, we have static lexical scope 21:14:49 err yeah 21:14:57 heh scoping in assignation 21:15:02 err 21:15:10 therefore, when you load a new definition of a function, no-one will use it, making it a bit pointless 21:15:11 anyway, something funny i found about that. 21:15:31 you can just use it after changing it. 21:15:43 or allow mutators 21:16:08 define "using" it 21:16:23 RodgerTheGreat: Like I said: cheating. 21:16:29 yeah 21:16:31 err... redoing foo= bar etc zippers 21:16:41 ok... 21:16:48 i mean 21:16:53 it's there for efficiency 21:17:01 what if the function is used in 12 places in your program... 21:17:02 you want it to behave as if it didn't exist 21:17:11 hih? 21:17:14 huh? 21:17:22 err... that is why you don't mutate. functions 21:17:25 *-. 21:17:38 because it gets hard to read 21:17:47 you will need to re-define everything that uses it to get the new definition to be used 21:17:59 no, if you allow mutators 21:18:05 this isn't lazinesses problem 21:18:17 that exact same thing happens lazy or not. 21:18:20 ah, ok 21:18:44 anyway, laziness lets you do more complete in-place mutation 21:18:49 if you wanna do it 21:18:51 erm... 21:18:54 and who doesn't. 21:19:20 of course it does, you can even mutate a calculation that was done in the past if it wasn't actually done. 21:19:26 but lazied out. 21:19:39 in some languages, you can re-define a function and the new definition gets used immediately, because the idea of whether a function call has taken place at a particular time makes sense. 21:19:57 that works for laziness as well. 21:20:00 oklopol: you aren't making much sense. 21:20:02 well, in that case 21:20:03 waiut. 21:20:05 wait. 21:20:12 you can just evaluate, then change. 21:20:18 be lazy when you need to. 21:20:25 don't be if it hurts you 21:20:30 i mean 21:20:43 you can evaluate whatever had the function non evaluated 21:20:46 you can just evaluate, then change. <-- what exactly does that mean 21:20:53 argh 21:21:03 so hard to type i'm concentrating on that :P 21:21:07 okay 21:21:08 oklopol: you aren't making much sense. 21:21:12 hmm, let me collect my thoughts. 21:21:51 and a good compiler for a lazy language will spot strictness in lots of places, so the amount of optimisation will affect the behaviour of the program! 21:21:59 so... why does it matter if a function changes its meaning in a lazy language? 21:22:29 because laziness is fundamentally about not knowing when a function call has been evaluated yet 21:22:29 you can use the old definition if you do as i said and just not change it in-place 21:23:03 * SimonRC tpyes 21:23:17 well, i've always thought about it as an optimizing technique and a way to have infinite structures, what are you referring to about it ? 21:23:26 i mean 21:23:33 let me finish! 21:23:39 i'm referring to stuff where the programmer need not know it's there 21:24:03 But if you don't mutate in-place, then you can only update to use the new version by re-defining the things that use it. And the things that use those. And so on, so you end up needing a mechanism to re-define lots of things. 21:24:21 I am talking about laziness that is in the language, not just the implementation 21:24:25 e.g. Haskell 21:24:26 and you don't need that if you'd already evaluated those things? 21:24:48 hmm 21:25:12 yes 21:25:16 I think 21:25:28 well, i don't see how it can ever be a problem, you just have a way to tell what kinda mutation to use at each assignation 21:25:41 erm... 21:25:43 um... 21:26:16 in-place (all the thing you know aren't evaluated, will evaluate the new way) or out-of-place evaluation 21:26:17 that doesn;t help much 21:26:24 wwwwwwwwhy? 21:26:41 because you often don't know what has been evaluated 21:26:59 and different compilers will do different optimisations 21:27:04 then you don't have the laziness as a usable helper in the language. 21:27:10 if you don't always know whether it's being used 21:27:15 why? 21:28:04 hey 21:28:07 argh 21:28:08 very hard 21:28:11 to explain 21:28:17 when typing is like aoeirjhg 21:28:26 my keyboard is not my favorite. 21:28:30 ah, ok 21:28:37 err... i'll try to rephrase 21:29:44 i think most languages have lazyness in such a way that the programmer need never get vad consequences out of it, right? they can code as they would without lazyness, BUT they can also do stuff they couldn't do without it, like infinite stuff, right?= 21:29:54 *bad 21:30:33 correct 21:30:52 so basically you can just have *everything* be done as if nothing was lazy and the language just happened to have infinite storage, because the laziness is just something to keep the infinite math fun going. 21:31:06 yes 21:31:08 (infinite math fun... stuff that can't exist but can be toyed sith) 21:31:10 yeah 21:31:27 okay, well then just have everything not mutate in-place as you would without laziness 21:31:38 so that everything is *as if* it had been evaluated 21:31:48 even though the advanced programmer knows it's not. 21:32:44 ok... 21:32:56 suppose bar uses foo, and you re-define foo. 21:33:16 do you ned to re-define bar to get it to use the new version of foo? 21:33:30 if you *want* to change a function so that something will be affected somewhere else (because there were copies of that function unevaluated), you're in a luck, you *can* do that in a lazy language if you know exactly what hasn't been evaluated 21:33:48 I win \o/ 21:33:52 SimonRC: either yes or know, lazy or not. 21:34:03 Hashtable is faulty, someone needs to tell Java about that. HashMap works fine though. 21:34:10 Sukoshi: me and SimonRC's conversation? 21:34:11 oh 21:34:25 Sukoshi: you tell those bastards 21:34:31 oklopol: when yes and when no? 21:34:32 oklofok:Alright. I will. 21:34:40 is it faulty in all implementations? 21:34:44 you said you tried multiple 21:35:05 SimonRC: whichever you want in a lazy language 21:35:13 right 21:35:17 laziness only gives you another possibility 21:35:25 There is a replacement for the Haskell list functions that uses stream fusion. This ultimately means that you can write a function that is completely strict where it can be and lazy to some degree otherwise. The programmer cannot be expected to know where it is strict and where it is lazy. 21:35:40 but the possibility is uncontrollable ^^^ so you can't really use id 21:36:18 yes, so he'll just use everything as if it had been evaluated 21:36:46 only if you know it hasn't been evaluated will you be able to mutate in-place 21:36:51 I don't call that a useful form of re-definition. 21:37:01 well you don't have to do that 21:37:02 oklopol: if *who* kows? 21:37:05 but you *can* 21:37:09 the programmer... 21:37:25 the programmer *can't* know 21:37:29 almost never can know 21:37:50 evaluation can be anywhere from speculative to completely optimised away 21:37:55 if it isn't useful, why did you say you will need to re-define everything that uses it to get the new definition to be used 21:38:11 so anything that depends on the order of evaluation sux 21:38:18 Gawd. The more I use Java, the more I'm missing dynamic languages ;-; 21:38:21 oklopol: to check which you meant 21:38:32 i see 21:39:05 anyway, you don't have to use that and it doesn't sound like something you want to do (and if you do, you'll most likely want to mark it lazy *explicitly*) 21:39:19 Sukoshi, the cry of the lisp -- do you hear it? 21:39:29 it says "metapatterns, metapatterns" 21:39:30 i just said it can be done in lazy evaluation, because you said it has *less* mutating capability 21:39:40 while in fact it has more imo 21:39:44 and cars which fortook. 21:39:47 ehird`: Actually, it's saying ``REPL, REPLLLLL'' 21:39:49 So you have one option (use old defs) that doesn't really count as "re-defining" and one option (replacing things that are not yet evaluated) that is unpredictable. 21:39:57 Sukoshi, Syntax error :r1 Abooooooort 21:40:04 :( 21:40:07 SimonRC: then just use the first one 21:40:12 I want my SLIME inspector to inspect data structures on the fly. 21:40:26 Having to run j/gdb is a PITA compared to on the fly debugging. 21:40:27 oklopol: right 21:41:05 the latter can be used if you *know* what's not evaluated - and you sometimes do - usually you don't, in which case just pretend it's already evaluated and use it as if it was. 21:41:30 i hate water, why don't i have a coke tap. 21:41:33 608 lines and going. 21:41:42 you can never be certain something in Haskell isn't evaluated 21:42:05 SimonRC: well you were the one saying laziness is somehow inherent in it 21:42:10 oklopol: Anyway, we have just concluded that there is something LISP can do that lazy languages will never be able to do sanely. Therefore, laziness sucks (even if only a bit). 21:42:12 oklofok: Because Haskell is st00pd! *leaves quickly*. 21:42:32 err 21:42:37 what can it do more sanely? 21:42:47 LISP can 21:42:50 laziness can always simulate non laziness, that's what i've been saying 21:42:56 no 21:43:01 oklofok: No, other way 'round. 21:43:02 errr 21:43:07 tell me an example 21:43:08 even better, Smalltalk can 21:43:19 oklofok: Read the SICP exercise that implements lazy streams in Scheme. 21:43:32 i'm not sure i will :) 21:43:34 you can gimme alink 21:43:36 *a link 21:43:38 .... :P 21:43:42 and i might 21:43:50 otherwise, doubt it :) 21:44:05 in smalltalk, all method lookup is dynamic 21:44:05 i have a lot of stuff to do, not important, but a lot 21:44:17 Smalltalk :33 21:44:25 whn can't laziness simulate strictness? 21:44:27 if you re-define a method, everything instantlyswitches to the new version 21:44:28 *when 21:44:44 SimonRC: there's no problem in laziness with that 21:45:03 because with strictness you have a defined order of evaluation and with laziness you don't 21:45:12 oklopol: yes there is 21:45:20 just evaluate the stuff that was lazy and you have everything as if strict evaluation had been used all along. 21:45:41 laziness will just not do it if not necessary. 21:45:45 that's the idea. 21:46:02 mutation can always be simulated in it, any way. 21:46:15 oklopol: if you computer something with the old version, then switch to the new version, in a not-explicitly-lazy language you would expect the computation to use the old version 21:46:53 in a strict language the old one would be used? 21:47:02 well, you can do that in a lazy language as well., 21:47:23 oklofok: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 21:47:48 Shame shame if you haven't read SICP. 21:47:52 SimonRC: am i wrong in what i said? 21:47:53 heh 21:47:57 i don't know lisp 21:48:03 But it's SICP!!! 21:48:36 hmm 21:48:38 SICP is incredible in how it teaches your basic, interested, lay person how to think about computer programs in terms of abstractions and computations. 21:48:46 It's lovely in that way, in fact. 21:48:57 I think I may have got a bit confused, but only a bit... 21:49:22 Sukoshi: you think i lack basics or..? 21:49:30 i will read that, sure, but why? 21:49:38 i know what laziness is 21:49:51 Practice != theory. 21:49:58 err 21:49:59 anyway 21:50:30 if you do do { r1 <- comp ; change_foo ; r2 <- comp ; return (r1, r2) } ... 21:50:38 You do SICP for the same reason you do brain teases -- to keep your mind sharp. 21:51:11 then it is a PITA to sort out where you should use the new and old definitions of foo 21:51:16 err okay, anyway, in what case is lazy evaluation unable to carry out what strict evaluation would? 21:51:45 actually, it is able to do so 21:52:02 it is just difficult to implement 21:52:07 SimonRC: i think in my first sentence i explained how to make that code do the exact same thing lazy or not. 21:52:17 first sentence in this thread of lazying 21:53:08 I was mentally editing it into something that could be implemented sanely 21:53:22 to be able to do do { r1 <- comp ; change_foo ; r2 <- comp ; return (r1, r2) } ... 21:53:23 Sukoshi: i can assure you i read enough theory to keep my brain teased. 21:53:46 Sukoshi: i've *never* used laziness in practice 21:53:52 i misread what you said earlier 21:53:57 ... you must track down every reference to foo and figure out if it should point to the new version. 21:54:29 err no 21:54:53 the old function definition will be left alone, the new one finds some other place in memory 21:55:08 once the old functions are evaluated, they are gc'd 21:55:31 and if you don't want that, you just evaluate every copy of the function when you change the function. 21:55:59 no, it's not that much more inefficient, you just do what you didn't do earlier 21:56:06 should the runtime create a second version of comp that uses te new version of foo? 21:56:23 suppose that there are an infinite number of invocations of foo possible... 21:56:59 i see what you mean now, anyway, here you'd have to evaluate all lazy things. 21:57:32 the copying thing doesn't always work with globals 21:57:46 well not globals, but external variables 21:58:11 globals don't exist in many lazy languages. 21:58:17 If comp uses bar, and bar uses foo, then after loading the new version of foo you would have two copies of each function lying around, until r1 was GCed 21:58:56 SimonRC: okay, i admit that's a problem, however, most problems of that kind can be fixed at compile time 21:59:23 a function using non-argument variables would give a warning that it can't be lazy 21:59:42 and that's it. 21:59:49 of couse, there is a silly way around it... 22:00:30 how many functional language interpreters lambda lift all functions then convert them to macros? 22:00:34 with pattern matching 22:00:36 i.e. a list of replacements 22:00:50 it seems like that's not a conventional way, mostly interps seem to use a call stack... traditional way 22:00:54 I suspect you can write wrapersthat do all the lookup at runtime by reading IORefs, assuming that you are only redefining IO action functions 22:02:54 Sukoshi: i now see that is structure and interpretation of computer languages and not a random article 22:03:00 i mean, the book 22:03:09 :/ 22:03:15 i do know *that*, but apparently not it's acronym 22:03:53 i admit i should read that, sorry, everyone should read that :) 22:04:12 also ankos, you should read it 22:05:52 i guess its not common 22:06:13 (also with rewrite rules like that youd need to convert "if"s to inner functions with pattern matching) 22:07:25 Yeah. SICP is Structure and Interpretation of Computer Programs. 22:07:32 didn't realize that 22:08:27 i'll read it now 22:09:39 Do the exercises. 22:10:12 yes, ma'm. 22:10:45 i'm pretty sure i won't get a lisp interpreter :) 22:11:00 It introduces you to Scheme along the way. 22:11:11 oklofok, SICP makes you write a scheme interpreter in a scheme interpreter 22:11:15 that is what it is all about 22:11:18 also, i'm pretty sure i know lisp already, just from reading stuff over the years. 22:11:21 you >must< follow it along, step by step. 22:11:24 it's enlightening 22:11:31 heh 22:11:34 sounds fun 22:11:51 eventually, you used a highly structured, metaprogramming-supporting language to implement itself, peice by peice reimplementing everything 22:11:53 it's nice 22:12:11 i admit that sounds cool 22:12:15 By the end of SICP, you'll realize why all the dynamic languages suck. 22:12:21 but isn't scheme insanely easy to implement anyway? 22:12:32 In *theory* ;) 22:12:39 i see. 22:12:41 :\ 22:12:55 Sukoshi, dynamic languages don't suck :) 22:13:01 dynamic languages lend themselves to metaprogramming 22:13:02 scheme has static scoping or...? 22:13:04 metaprogramming can be very useful 22:13:06 oklofok, of course 22:13:15 scheme is a modern language used in both academia and production. 22:13:32 i like dynamic more. 22:13:35 s/suck/don\'t suck/ 22:13:36 Sorry. 22:13:38 scheme is dynamic :P 22:13:39 Sukoshi, ah 22:13:45 scheme is far more well-designed and "pure" than common lisp (ugly!) 22:13:48 I meant why all the static languages suck. 22:13:55 I love CL. Moret than Scheme. 22:14:04 if you're not quite uptodate on scheme, read http://en.wikipedia.org/wiki/Scheme_%28programming_language%29 22:14:21 The brevity of Scheme seems to make it more useful for academic purposes, and its SRFIs destroy it. 22:14:36 no way, Sukoshi 22:14:40 srfis are golden 22:14:54 all of scheme is a wonderful little powerful gem 22:15:03 common lisp is a sprawling, over-engineered system of doom 22:15:13 Purity almost *never* translates into an oft-used-language. 22:15:22 Because real world problems are ugly. :) 22:15:33 scheme allows you to express ugliness purely. :) 22:15:48 If you want to program and go ``Oooh. Aaah. Beautiful.'' use Scheme, if you want to program and get things done, use CL, says I. 22:15:59 That's what Paul Graham says. Incidentally, he's wrong. 22:16:07 Scheme is a beauty to get things done in. 22:16:16 Don't dismiss it because of its academic roots 22:16:18 If you want to program and go "Oooh. Aaah. Beautiful." use combinator logic. 22:16:35 I'm not dismissing it because of its roots, I'm dismissing it because *I've* gotten a lot more done in CL than I have in Scheme. 22:16:39 pikhq, haha 22:16:50 if you want to program and go "Oooh. Aaah. Beautiful" use iota. 22:16:57 it's so nice and simple and elegant ;) 22:16:57 You see? 22:17:16 Sukoshi, Maybe because you didn't really try. 22:17:24 ehird`: Why does *everyone* say that? :P 22:17:44 Plus Scheme pushes functional style too much over imperative style. 22:17:53 Sukoshi, Because everybody that everybody knows who has really tried scheme loved it. 22:17:56 The rest didn't really bother. 22:18:03 And Scheme is an imperative language... 22:18:06 It just has a functional core. 22:18:07 ehird`: I love it too ... for academic purposes. 22:18:34 i ought to write a lengthy rant about scheme not being just for academic purposes. 22:18:35 :P 22:18:35 But the lack of standardization of anything *but* the language core kills a lot. 22:18:43 SRFIs are basically standards. 22:18:56 ... Which different implementations implement differently :P 22:19:17 The main implementations implement the vast majority of *useful* SRFIs in much the same way 22:19:27 Most scheme interpreters are just someone's toy 22:19:46 * oklofok likes every languages, some for the easy programming, some for the challenge in it 22:19:49 *language 22:20:01 i like... well most languages with PHP being a notable exception 22:20:08 Plus there are even fewer libraries written in Scheme than there are in CL. 22:20:53 CL suffers from library creep. :) 22:21:01 And Scheme doesen't even include a default object system or any functions for binary data manipulation! 22:21:11 (To change somewhat in R6RS, I know.) 22:21:28 Anyways, I think it's time we drop this, before we restart the ages old Scheme vs. CL debate. 22:21:32 -!- jix has quit (Remote closed the connection). 22:21:34 Tcl doesn't include a default object system, but that doesn't make it useless. . . 22:21:45 (although you may argue that point. :p) 22:21:51 object systems are generally not needed by default.. 22:21:58 especially in lisps. 22:22:07 Neither are hash tables, huh? ;D 22:22:10 Suuure. 22:22:22 Implement everything in a list and make everything O(n) and slow. Suuure. 22:22:24 hash tables are in an srfi 22:22:49 Anyways, this debate is pointless, because I like CL more than Scheme and you like Scheme more than CL. 22:23:13 And I think both of us have used the two enough to realize that this petty argument won't change our opinions. 22:25:38 -!- jix has joined. 22:26:47 what is the difference between oklofok and oklopol 22:27:06 computer. 22:27:46 i have two now, but i usually have fullscreen irc only on the other 22:27:55 have you not heard of ssh? 22:28:20 :-) 22:30:27 SimonRC: yes 22:30:31 a lot 22:30:36 SimonRC: klo^3(fk-lp) 22:30:37 what is it? 22:30:49 a way to communicate between computers? 22:31:07 ah 22:31:08 oklofok: pretty much, I'd say. 22:31:16 * ihope nods 22:31:18 takes me a while, i know exactly what it is. 22:31:35 anyway, what good would that be? 22:31:39 i'd have one nick :O 22:31:45 :O? 22:31:50 i'd feel like i was buried alive. 22:31:54 Oh noes. The unspammage. 22:32:08 i'd feel like i was buried alive. 22:32:10 all i can say 22:32:11 oklofok: you'd feel trapped? 22:32:13 yes 22:32:15 very. 22:32:17 Like atrapado over there? 22:32:30 :) 22:32:58 Sukoshi: spammage? 22:33:05 is it spamming to have multiple nicks :) 22:33:18 but yes, i couldn't live without spamming 22:33:20 Yup. Reffered to as nick spamming on lots of networks. 22:33:28 Spamming the nick list! 22:33:37 that's not spamming. 22:33:38 What's it do that's bad? 22:36:57 oh my god i've been an idiot... 22:37:20 just realized what i didn't manage to do yesterday with numbda could be done by a dead monkey 22:37:31 Sukoshi: how long is this book? 22:39:35 oklofok, long, i guess: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html 22:39:41 certainly not for one reading 22:40:08 that doesn't look all that long to me... 22:40:18 if it's < 500, i'll prolly read it tonight 22:40:29 unless people start harrassing me about something :) 22:40:39 OKLOFOK PLEASE BRING LESS BOTS HERE 22:40:44 Do the exercises! 22:40:48 * oklofok likes his bots <3 22:40:56 Sukoshi: i promise i might 22:41:27 i can try and find a scheme interpreter if it's that important to you 22:41:30 but you owe me. 22:42:18 Sukoshi: since i'd do every exercise in my head otherwise, that can only speed up the process. 22:42:18 chicken 22:42:24 haha 22:42:29 err 22:42:29 evaluating an interpreter in your head. 22:42:31 Suuure. 22:42:33 :P 22:42:36 Yeah. Chicken is awesome. 22:42:37 and i have no idea what my point was 22:42:38 http://www.call-with-current-continuation.org/chicken.html chicken scheme 22:42:51 or i guess http://www.gnu.org/software/mit-scheme/ if you're crazy 22:43:03 Hey. That's the implementation I started with. 22:43:05 I liked it a lot too. 22:43:12 yeah but chicken is nicer, i think, 22:43:16 It is. 22:43:19 not so much on the debugging side, but on the other sides. 22:43:25 Sukoshi: well, i tend to do everything except the stuff that aren't about "coming up with a solution" but rather about keeping it together, since my head has quite limited memory. 22:43:39 What I miss, is something like a cross between Forth and the CLISP implementation 22:43:40 "keeping it together" 22:43:42 -!- jix has quit ("CommandQ"). 22:43:47 You can debug and fix on the fly 22:43:58 You can do that in SBCL also! 22:44:01 Chicken sucks at it, MIT only marginally better 22:44:10 oklofok: You don't actually learn something until you do the exercises. 22:44:11 Forth is basically the best at it 22:44:17 Forth debugging, well, IS forth 22:44:21 Sukoshi: i do not think that is true. 22:44:29 And, I guess for the cynical, you can say Forth = Forth debugging :) 22:44:35 Reading makes you like, a historian. Like an Art Historian, or a Military Historian. 22:44:35 oklofok, SICP is different 22:44:52 oklofok, SICP is all about EVAL :) 22:45:18 well, why don't you stop trying to make me think that way by *saying it's so* and just let me dl the interpreter and do it? i *did* promise i will 22:45:40 Switch windows? :P 22:46:42 err.. god idea, perhaps it isn't entirely your responsibility. 22:46:50 whether i read 22:47:00 *switch!* 22:48:14 Sukoshi: how long is the book? 22:48:22 i assume you know that 22:48:28 because 1) you've read it 22:48:35 and 2) you've read a live version of it 22:48:57 I haven't done 2. 22:49:04 With the exercises? It takes a while. 22:49:24 i just care about lenght, how much time you and me take may be different. 22:49:35 (i'm slower prolly, that is) 22:49:48 I like the commenting fomat that SICP reocmmends. 22:49:58 hey, lambda-lifted rewrite rules are awesome for interpretation 22:50:05 but if you read online, then most likely you don't know, bye again -> 22:50:06 tail-recursion optimization? absolutely free! 22:50:09 It recommends that you mput in the information that you would put in a Haskell type sig. 22:50:12 :-P 22:50:19 complex call stacks? all gone! 22:50:21 -!- RedDak has quit (Read error: 104 (Connection reset by peer)). 22:50:24 Ewww. Haskell. 22:50:31 plus you can inspect a program replacement by replacement 22:50:36 that's gotta be a useful debugging tool! 22:50:40 * Sukoshi likes saying that over and over again for comic effect. 22:52:30 tried it? 22:53:51 Yeah. 22:54:09 Not bad, for its domains. And invaluable, IMO, for realizing just what state is useful for. 22:54:27 so i say to hell with lambda calculus! to hell with beta-reduction and alpha-conversion! 22:54:35 long live rewrite rules! 22:54:37 Then you throw that away and say, ``Holy Jeebus thank Turing for state!'' 22:55:36 holy jeebus thank rewrite for rules! 22:56:08 why didn't i think of rewrite rules before! 22:56:31 :p 22:56:45 Haskell made me a much better programmer, and I have to thank it for that. 22:56:51 I never programmed imperatively the same way again. 23:00:22 hmm... now i feel like writing a partial lisp interpreter into my bot :P 23:00:36 concentrate, oklofok, concentrate. 23:01:10 lisp is easy 23:01:30 it's basically lambda calculus with multiple arguments and macros. 23:01:36 and variables. 23:04:12 Well, of course Lisp is a superset of Lambda calculus. . . 23:04:16 Sure. 23:04:18 But it's not much more. 23:04:30 core lisp is simple 23:04:43 Most of the stuff in Lisp is trivial to do in Lambda calculus. . . 23:04:58 I think if you just add named functions and variables, the rest comes naturally. 23:05:20 Well, that *and* do it in sexp syntax. 23:06:03 named functions and variables - you only need the latter 23:06:14 just (set var func) 23:06:17 Well, yeah. . . 23:06:25 Sorry. 23:08:56 So, add some simple scoping, add macros, and add multiple function arguments.. 23:09:02 And parse it with sexps. 23:09:04 Tada, lisp, done. 23:09:46 If you're going to be really anal, implement some of Lisp's usual builtin functions. 23:10:06 Still, not all that hard. . . 23:10:18 Another disadvantage of Scheme: Only stupid Europeans use it ;) (This is a joke, if you don't understand.) 23:10:22 It's almost like doing Brainfuck in terms of P''. 23:11:13 pikhq, Sure -- Oh, you'll also want lists and atoms 23:11:17 Which are stupidly simple to implement. 23:13:06 -!- atrapado has quit ("e"). 23:16:08 lisp has arrays, strings and hashmaps, no? 23:16:15 hashmaps are not in core core lisp. 23:16:17 nor strings 23:16:25 nor arrays - lisp never uses arrays 23:16:30 lisp is drunk on linked lists 23:16:30 i think they all were in common lisp....... 23:16:40 common lisp is not core lisp... 23:16:43 common lisp is bloated lisp 23:16:43 i see 23:16:46 oh 23:16:53 i thought it was teh olde one. 23:17:03 common lisp is quite modern 23:17:24 it was standardized by ansi in 94 23:17:52 ehird`: No, CL uses arrays. 23:17:56 Quite regularly. 23:18:00 Sukoshi, Common Lisp Is Not Core Lisp! 23:18:05 Oh, Core Lisp. 23:18:12 Yeah. Core Lisp does not have arrays. 23:18:18 Common Lisp Is Not A Pure, Functional Lisp That You Might Implement For A Simple IRC Bot! (TM) 23:18:27 I Hate People WHo Talk Like This. 23:58:37 The Python triple-quote convention is great for real life too.