←2008-02-20 2008-02-21 2008-02-22→ ↑2008 ↑all
00:00:45 <ehird`> Slereah: basically
00:01:02 <ehird`> if you have a monadic option linking output, getting a line, some pure stuff, and outputting another line,
00:01:24 <ehird`> the pure stuff is done lazily but the IO depends on the previous one so the evaluator HAS to do it in order
00:01:28 <ehird`> while requiring no changes
00:02:14 <Slereah> Even if the output is itself a function?
00:02:53 <Slereah> It will basically be like this. You've got 0, you've got + for successor, a bunch of functions.
00:02:55 -!- puzzlet_ has joined.
00:02:59 <ehird`> Slereah: Look
00:03:01 <ehird`> just go into #haskell
00:03:04 <ehird`> and ask loads of questions
00:03:04 <ehird`> :P
00:03:13 <Slereah> I'm scared.
00:03:22 <Slereah> There's people there. Talking about Haskell.
00:03:25 <ehird`> #haskell is the friendliest programming language channel around
00:03:34 <Slereah> Haskell was that black guy in cube Zero. Killed the fat guy!
00:03:46 -!- Corun has quit ("I'm nuts and Neil's a nut, therefor I am NEILS!").
00:09:41 * Slereah be printing the Haskell tutorial
00:10:42 <ehird`> Slereah: YAHT?
00:10:52 <Slereah> The Wiki one
00:11:09 <ehird`> no
00:11:10 <ehird`> don't
00:11:11 <ehird`> do YAHT
00:11:13 <Slereah> :o
00:11:31 <ehird`> there, i shoved you into #haskell
00:11:36 <ehird`> don't worry. we don't bite. :)
00:13:30 -!- jix has quit ("CommandQ").
00:14:41 -!- puzzlet has quit (Read error: 110 (Connection timed out)).
00:14:45 <ehird`> Slereah: boo! talk!
00:15:35 <Slereah> YAHT is printing.
00:15:41 <Slereah> 192 pages, it's going to be a while.
00:16:19 <olsner> printing? :S
00:16:43 <Slereah> You know, throwing ink on paper in shapes
00:17:13 <ehird`> Slereah: why not just read it
00:17:31 <Slereah> What, you want me to read that on a screen?
00:17:37 <ehird`> um
00:17:37 <ehird`> yes
00:17:46 <ehird`> get a nice big font and a good pdf reader
00:17:48 <ehird`> it's comfy
00:17:57 <ehird`> you need to do YAHT interactively, anyway. it's best.
00:17:59 <Slereah> My chair isn't that comfy though.
00:18:37 <ehird`> You're going to do it away from a computer ...?!
00:18:40 <ehird`> You'll never learn Haskell!
00:18:43 <Slereah> :o
00:18:50 <ehird`> You need to have Emacs and ghci there, open. :-P
00:19:02 <Slereah> I don't have Emacs :o
00:19:06 <Slereah> I use Kate.
00:20:00 <Slereah> It has Haskell highlighting.
00:20:17 <olsner> emacs!? you *never* need emacs :P
00:20:43 <pikhq> It's not that you need Emacs.
00:21:04 <pikhq> You don't need to live, either.
00:22:09 <Slereah> What does macs have besides highlighting?
00:22:48 <ehird`> Slereah: emacs is the only solution for haskell code
00:22:52 <ehird`> well some people use vim (masochists)
00:23:00 <Slereah> But why!
00:23:03 <ehird`> Slereah: haskell's syntax is indentation-based
00:23:08 <ehird`> its very tedious to do manually
00:23:12 <ehird`> haskell-mode for emacs is VERY smart
00:23:15 <Slereah> Oh.
00:23:18 <ehird`> it also has an integrated ghci
00:23:20 <ehird`> in a bottom pane
00:23:22 <ehird`> and all sorts of stuff
00:23:33 <ehird`> basically, haskell development without it is 99% repetetive key mashing
00:23:34 <ehird`> :P
00:24:10 <Slereah> Let's get them Emacs then.
00:25:06 <ehird`> indeed
00:25:20 <ehird`> Slereah: sudo apt-get install emacs-snapshot-gtk emacs-goodies-el
00:25:29 <ehird`> that will get you the best emacs for general use
00:25:30 <Slereah> No need.
00:25:34 <Slereah> "Adept installer"
00:25:35 <ehird`> no
00:25:36 <ehird`> no
00:25:36 <ehird`> no
00:25:39 <ehird`> that gets you the wrong emacs
00:25:40 <ehird`> an older one
00:25:42 <ehird`> and no goodies
00:25:43 <Slereah> D:
00:25:53 <ehird`> blame ubuntu
00:25:53 <ehird`> :P
00:26:04 <Slereah> Damn you Ubuntu!
00:29:51 <Slereah> "No space left on device"
00:29:51 <ehird`> SCIENTOLOGY:
00:29:52 <ehird`> $ grep thetans /dev/soul | xargs rm -rf
00:29:53 <Slereah> Oh shi-
00:32:38 -!- timotiis has quit ("leaving").
00:34:32 <Slereah> Seems my porn folder is hogging space on the Linux partition!
00:34:37 <Slereah> Time to move it
00:38:20 * Slereah has Emacs
00:38:54 <ehird`> Slereah: The right one?
00:39:10 <ehird`> If so, then you have emacs in some menu somewhere.
00:39:19 <ehird`> Start it, then type 'C-h t' (CTRL-h, t)
00:39:24 <ehird`> follow it through.
00:39:28 <ehird`> now you know how to use emacs. :P
00:40:39 <Slereah> [Middle of page left blank for didactic purposes. Text continues below]
00:40:46 <Slereah> That statement is so self-defeating
00:40:56 <ehird`> Slereah: whatever.
00:40:59 <ehird`> just do what it says
00:41:01 <ehird`> and nothing else :P
00:41:10 <ehird`> oh, and throw your mouse to the back of your desk until you're done.
00:41:48 <Slereah> Not Mousey!
00:42:59 <Slereah> They use ctrl x-c-v for something else than copypasta?
00:43:04 <Slereah> What madhouse is this!
00:44:16 <ehird`> Slereah: The madhouse of productivity and speed.
00:44:24 <ehird`> JUST SAYIN'
00:44:29 <ehird`> also, Slereah ...
00:44:35 <ehird`> say goodbye to your arrow keys.
00:44:41 <Slereah> Nooooooooooooooooooooooooooooooooooo
00:44:43 <ehird`> Ctrl-N, Ctrl-P, Ctrl-F, Ctrl-B are your gods now.
00:45:05 <ehird`> (Note: emacs came around before any of these things that you're used to existed. It's not just difference for the sake of it; and most people who use emacs today find them nicer.)
00:45:20 <ehird`> (Emacs came around circa 1980s at MIT.)
00:45:23 <Slereah> What if I don't?
00:45:35 -!- puzzlet has joined.
00:45:58 <Slereah> I'm already not that fond of remembering which alt key actually works
00:46:34 <ehird`> Slereah: You've used emacs for about 5 minutes, and even then not much.
00:46:34 -!- puzzlet_ has quit (Remote closed the connection).
00:46:34 <ehird`> You've used ctrl x-c-v, and the arrow keys, your entire computing experience.
00:46:35 <ehird`> Of course you're not faster yet.
00:47:01 <Slereah> The arrow keys seems to work fine on their own though
00:47:45 <ehird`> Slereah: No.
00:47:51 <ehird`> They do function
00:47:54 <ehird`> But you shouldn't use them.
00:47:55 <ehird`> Just don't.
00:48:01 <ehird`> They make your hands move more.
00:48:15 <Slereah> So does the bfnp :o
00:48:34 <Slereah> They're not even in a cluster, or with some logic in their disposition.
00:49:22 <ehird`> Slereah: Back,Forwards,Next,Previous
00:49:26 <ehird`> And.. you can touch-type, right?
00:49:45 <Slereah> Pretty much.
00:49:53 <ehird`> home row?
00:49:59 <ehird`> If so, then you'll get used to it pretty quickly.
00:50:04 <Slereah> Home row?
00:50:08 <ehird`> err
00:50:10 <ehird`> asdfghjkl
00:50:13 <ehird`> you know?
00:50:22 <Slereah> Apparently not.
00:50:24 <ehird`> with the dent on f and j..
00:50:29 <ehird`> and you keep your fingers there...
00:50:33 <ehird`> :| you can't touch-type, can you
00:50:36 <olsner> don't you mean aieo htns? :P
00:50:43 <ehird`> olsner: i doubt Slereah uses dvorak.
00:50:48 <ehird`> if he doesn't know how to touch-type.
00:51:02 <olsner> hehe, just saying...
00:51:05 <Slereah> I use AZERTY.
00:51:20 <Slereah> And I indeed don't need to look much at it.
00:51:41 <Slereah> Though I keep my eyes on the screen. Once in a while, I'm one key off and write gibberish.
00:52:18 <ehird`> Slereah: Do you keep your fingers onthe middle row?
00:52:25 <ehird`> And never stray from it, just moving your fingers to the keys?
00:52:32 <ehird`> If not -- you can't touch-type. Go learn that, first.
00:52:47 <Slereah> I do not do that, no.
00:52:58 <ehird`> olsner: Can you please be my window of sanity?
00:54:16 <ehird`> olsner: Please? :(
00:54:18 <olsner> sanity!? mind you, it is in #esoteric you're asking this question
00:54:32 <ehird`> olsner: More than Slereah?
00:55:30 <olsner> I don't really touch-type though... more like mostly-hitting-the-right-key
00:55:56 <ehird`> :'(
00:56:14 <Slereah> Same here. And really, I'm not sure I need to learn sum touch typing.
00:56:20 <Slereah> I'm not in a speed competition.
00:56:32 <olsner> I mostly keep my fingers at the home row, but often happen to use some other position... which happens to work since I know where my fingers are
00:57:04 * Slereah doesn't even use moar than two fingers :o
00:57:12 <olsner> also, coding on a swedish keyboard require a lot of AltGr:ing
00:57:36 <olsner> latex is especially gruesome, {[]}\~ all being AltGr combinations
00:57:40 <ehird`> Slereah: what? you type with TWO FINGERS?!
00:57:41 <ehird`> hunt and peck?!
00:57:45 <Slereah> Yes.
00:57:47 <Slereah> Yes I do.
00:57:49 <ehird`> how the heck did you get into esolangs.
00:58:04 <oklopol> ehird`: lol D:
00:58:09 <Slereah> Because I can type fast enough.
00:58:11 <olsner> the need for an ultra-terse language? heh
00:58:37 <Slereah> Plus, I don't need to type fast for esolangs.
00:58:47 <ehird`> oklopol: are you as sad as i am
00:58:47 <Slereah> Who codes in brainfuck as fast as he types?
00:58:49 <ehird`> D:
01:00:17 <oklopol> ehird`: nope
01:00:21 <oklopol> i'm not sad
01:00:37 <oklopol> i know a guy who uses two fingers and types error-free, and as fast as me
01:01:08 <Slereah> After using the keyboard for ten years, you know where the keys are!
01:01:08 <oklopol> i don't type error-free, not on the computer, not on paper.
01:01:50 <oklopol> and it's not that i typo, i just simply write wrong letters.
01:03:38 -!- ehird` has quit ("K-Lined by peer").
01:04:11 <Slereah> It was too much for him.
01:05:20 * Sgeo starts forcing down "April 4th of September" down people's throats
01:10:14 <oklopol> Sgeo: btw. are you going to start something new after psox?
01:10:28 <Sgeo> "after PSOX"?
01:10:40 <Sgeo> Probably lose interest and go back to SL or something
01:10:49 <oklopol> sl?
01:11:04 <Slereah> Second Life.
01:11:21 <oklopol> oh
01:11:38 <Slereah> I might not know your computer stuff, but I sure know the nerd stuff!
01:12:27 <oklopol> i have no idea about anything.
01:27:05 <Sgeo> Is it just me, or is DeVeDe slow?
01:27:18 <Slereah> Whut?
01:28:16 <Sgeo> DeVeDe == DVD video making thingy
01:28:24 <Sgeo> And it seems to be SLOW
01:28:30 <Sgeo> Although it is converting from flv..
01:42:46 * Slereah 's hungry
03:29:51 -!- immibis has joined.
03:43:39 -!- Sgeo has quit (Read error: 110 (Connection timed out)).
03:45:46 <RodgerTheGreat> so, did anyone actually see these?
03:45:47 <RodgerTheGreat> http://rodger.nonlogic.org/dump/images/1203488516-art1.png
03:45:51 <RodgerTheGreat> http://rodger.nonlogic.org/dump/images/1203488528-art2.png
03:46:42 -!- Sgeo has joined.
03:46:50 <immibis> sgeo didn't.
03:47:39 -!- AlliedEnvy has joined.
03:49:58 <RodgerTheGreat> also, here's a really old comic from several years ago: http://www.nonlogic.org/dump/images/1203565552-urge.gif
03:50:24 <immibis> http://qdb.us/143471
03:50:58 <pikhq> Your name's John?
03:51:42 <RodgerTheGreat> woah, since when did the qdb auto-accept shit?
03:51:47 <RodgerTheGreat> pikhq: correct
03:51:59 <pikhq> Then. . . Why Rodger?
03:52:10 <RodgerTheGreat> complicated
03:52:44 <pikhq> 'Complicated', as in 'requires a small doctoral dissertation'?
03:53:19 <pikhq> olsner: Ouch; that keyboard sounds horrible for coding.
03:54:21 * pikhq prefers his US keyboard
03:54:25 <pikhq> AltGr? Bah.
03:54:32 <pikhq> Shift at the most.
03:54:41 <pikhq> Granted, it doesn't do more than ASCII. . . ;)
03:54:59 <immibis> so your name's john and your address is somewhere near Townsend Drive, Houghton, MI 49931-1295, USA
03:55:10 <RodgerTheGreat> yup
03:55:17 <RodgerTheGreat> I make it no secret that I go to MTU
03:55:21 <pikhq> I assume that's where the dorms are?
03:55:36 <RodgerTheGreat> you could even use the MTU directory search to dig up more info on me, like my room phone number! Woo!
03:55:42 <immibis> duh....[16:53] ->> RodgerTheGreat is n=Rodger@wads-5-233-27.resnet.mtu.edu (Rodger)
03:55:55 <RodgerTheGreat> 'course, I don't have a phone plugged in, so your options will be limited
03:56:12 <RodgerTheGreat> there is no such thing as anonymity on the internet
03:56:19 <immibis> tor?
03:56:29 <pikhq> Anonet?
03:59:41 <immibis> there appears to be at least one car driving around near mtu. Not that's important information.
04:00:04 <immibis> no wait, there are quite a few for the middle of the night.
04:01:17 <immibis> pretty cold over there, isn't it?
04:01:23 <RodgerTheGreat> yes, rather
04:02:04 <immibis> -14 degrees C
04:02:25 <RodgerTheGreat> so, no comments on any of those images aside from creepy internet detective activity?
04:04:27 * immibis looks at the images
04:06:53 -!- GreaseMonkey has joined.
04:07:00 <RodgerTheGreat> hey, GreaseMonkey
04:07:24 <GreaseMonkey> 'lo
04:35:53 <Sgeo> I didn;t what?
04:35:57 <Sgeo> also, brb
05:38:09 -!- Tritonio_ has joined.
05:40:08 -!- Tritonio__ has quit (Read error: 110 (Connection timed out)).
05:52:03 -!- Sgeo has quit (Read error: 110 (Connection timed out)).
06:03:18 -!- oerjan has joined.
06:24:01 -!- puzzlet_ has joined.
06:24:46 -!- puzzlet has quit (Remote closed the connection).
06:25:43 -!- BMeph has quit ("calls it a night").
06:31:51 -!- cherez has quit (kornbluth.freenode.net irc.freenode.net).
06:32:19 -!- cherez has joined.
07:46:12 -!- bsmntbombdood__ has joined.
07:47:16 -!- bsmntbombdood has quit (Nick collision from services.).
07:47:18 -!- bsmntbombdood__ has changed nick to bsmntbombdood.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:03:49 -!- immibis has quit (Client Quit).
08:10:02 -!- AnMaster has quit (Connection timed out).
08:22:39 -!- GreaseMonkey has quit ("Hi Im a qit msg virus. Pls rplce ur old qit msg wit tis 1 & hlp me tk ovr th wrld of IRC. and dlte ur files. thx.").
08:32:44 -!- AnMaster has joined.
08:56:39 -!- oerjan has quit ("leaving").
09:42:18 -!- jix has joined.
10:45:42 -!- Corun has joined.
10:55:17 -!- Corun has quit ("This computer has gone to sleep").
13:05:02 -!- uvanta has joined.
13:16:11 -!- wildhalcyon has joined.
13:47:42 -!- smg has joined.
13:48:10 -!- smg has left (?).
13:54:30 -!- RedDak has joined.
14:29:29 -!- uvanta_ has joined.
14:48:10 -!- uvanta has quit (Read error: 110 (Connection timed out)).
14:58:23 -!- puzzlet_ has quit (Remote closed the connection).
14:58:27 -!- puzzlet has joined.
15:35:01 -!- olsner has quit ("Leaving").
16:02:24 -!- olsner has joined.
16:18:53 -!- RedDak has quit (Read error: 113 (No route to host)).
16:24:01 -!- Tritonio_ has quit ("Bye...").
16:26:38 -!- Corun has joined.
16:28:50 -!- RedDak has joined.
16:50:27 -!- timotiis has joined.
17:00:19 -!- puzzlet_ has joined.
17:00:40 -!- puzzlet has quit (Remote closed the connection).
17:12:59 -!- AlliedEnvy has left (?).
17:26:40 -!- Corun has quit ("This computer has gone to sleep").
17:43:10 -!- olsner has quit.
17:45:23 -!- RedDak has quit ("I'm quitting... Bye all").
17:57:59 -!- ehird_ has joined.
18:02:00 -!- RedDak has joined.
18:09:38 -!- ehird_ has changed nick to ehird.
18:10:00 -!- ehird has set topic: Is this the esoteric programming languages channel on freenode?.
18:10:37 -!- faxathisia has set topic: This is NOT the esoteric programming languages channel on freenode?.
18:18:01 -!- lament has set topic: This channel has no relationship to the world hub for esoteric language design and development..
18:21:18 -!- faxathisia has set topic: This channel has no relationship to the world hub for esoteric language design and development, the world hub for esoteric language design and development is not even mentioned in the topic..
18:21:40 <lament> nice one
18:30:07 -!- ehird has set topic: #esoteric powers esoteric languages?.
18:30:10 <ehird> homespring!
18:35:52 -!- RedDak has quit (Remote closed the connection).
18:36:19 <faxathisia> Interesting question,
18:36:21 <faxathisia> "Who knows the value for the type of a lisp source file?"
18:36:53 <wildhalcyon> No idea.
18:37:18 <wildhalcyon> My lisp experience is limited to "What's that language with all the parentheses? Lisp? Oh"
18:37:21 -!- lament has set topic: This channel is now officially closed. Please proceed to ##overflow..
18:37:29 <faxathisia> aww
18:37:29 <faxathisia> :(
18:37:59 <faxathisia> wildhalcyon: I'd really recommend changing improving that :o
18:38:11 <ehird> no
18:38:12 <ehird> don't
18:38:15 <ehird> learn haskell!
18:38:20 <faxathisia> lisp is way too much fun to miss out
18:38:25 <ehird> ok
18:38:28 <ehird> but haskell is more fun
18:38:33 <ehird> and you can write lisp in haskell trivially if you want that
18:38:37 <ehird> the other way around, not so much
18:38:54 <ehird> imo lisp is the prototype, haskell is the result (version 1 :-P)
18:38:57 <faxathisia> ehird if you think so... maybe you can help fix my haskell code :P
18:39:06 <ehird> faxathisia: i'll try.
18:39:08 <faxathisia> ehird, but I find the reverse of hwat you said
18:39:22 <ehird> faxathisia: what, you can write a haskell compiler in lisp trivially?
18:39:42 <ehird> lisp isn't a functional language for one
18:39:45 <ehird> haskell is
18:40:00 <ehird> and haskell's syntax, while not as minimal as lisps, is just as simple and elegant
18:40:09 <ehird> and haskell has macros, because they're just functions, thanks to laziness
18:40:17 <ehird> their syntax is low-fat too -- no (lambda ...)
18:40:48 <faxathisia> oh I was not talking about compilers (I didn't think you were either)
18:40:52 <uvanta_> i totally agree with ehird
18:40:57 <uvanta_> haskell is way too cool
18:41:04 <ehird> :)
18:41:10 <ehird> it's too cool! it must be banned!
18:41:46 * faxathisia does not care for the syntax comparison
18:42:36 <uvanta_> but in here S Korea, there's not much people being aware of haskell
18:42:47 <uvanta_> even no single haskell book written in Korean
18:42:48 <ehird> faxathisia: syntax is fundamental to a language's style
18:43:11 -!- uvanta_ has changed nick to uvanta.
18:45:18 <lament> even better:
18:45:27 -!- lament has set topic: Sorry, this channel is full. Please proceed to ##overflow..
18:46:04 <lament> also, haskell rules, lisp drools!
18:46:13 -!- ehird has set topic: You've reached this channel because the channel you tried to enter has been configured with join throttling (+J). There may be a clonebot attack in progress there, or simply unusually heavy interest. Please leave this channel and try again. Your channel may also be "identified-only" (+r); join #please_register for more information. If you need help, message a freenode staffer or email staff@freenode.net .... Thanks!.
18:46:24 <ehird> i win
18:47:08 <lament> heh
18:48:22 <faxathisia> I can't believe you guys are dissing lisp..
18:48:30 <faxathisia> academics!!!
18:48:55 <ehird> faxathisia: i am not
18:48:59 <ehird> i am saying that haskell is superior
18:49:08 <faxathisia> Well have fun with your lambda calculus and type theory while I write web apps!
18:49:30 <uvanta> lambda calculus is from lisp
18:49:45 <uvanta> i mean, miranda derived it from lisp
18:49:51 <uvanta> and haskell derived it from miranda
18:51:39 <faxathisia> well it's kind of irrelevant but my opinion is if you don't know Lisp you are missing out on something really great
18:52:15 <ehird> faxathisia: i'm writing a web app in haskell right now
18:52:30 <faxathisia> ehird, I was just being silly
18:52:34 <ehird> and text.xhtml + network.fastcgi + a strongly typed database query module is far superior to any lisp shit you have
18:52:35 <ehird> :p
18:52:42 <ehird> and i know lisp
18:53:00 <ehird> specifically, i have memorized all the syntax, semantics and procedures in r5rs
18:53:01 <faxathisia> ehird, It's not superior, It's what you're finding more fun to work with at this point in time
18:53:07 <ehird> and the equiv in common lisp
18:53:09 <ehird> plus some more
18:53:13 <faxathisia> ehird, I was joking with all this arc fuss around at the present
18:53:30 <ehird> faxathisia: well, actually, that toolkit is far superior to any lisp web app framework that has been built yet.
18:54:07 <ehird> the fact that it makes me *warm* and *fuzzy* is just a nice extra
18:54:14 <faxathisia> I heard you can ensure W3C compliance of XML/XHTML in the type system
18:54:38 <faxathisia> so.. currently, you gotta restart the server just to make upgrades to the site?
18:55:17 <Slereah> LANGUAGE WAR
18:55:25 <ehird> faxathisia: no way
18:55:33 <ehird> haskell development server
18:55:36 <ehird> recompiles as it goes
18:55:50 <ehird> when you're done, you just compile yourself a binary, static or dynamic, and upload it to your server
18:55:57 <ehird> add the fastcgi info to your ws config and you're done
18:56:09 <ehird> and no reloads of the server
18:56:15 <ehird> just once you push out a new major change, restart the fcgi server
18:56:18 <ehird> which is as simple as SIGHUP
18:56:33 <faxathisia> ok so you have to restart the server..
18:56:36 <ehird> and you can ensure w3c compliance in the type system; but that would make Text.XHtml be absolutely crazy
18:56:38 <ehird> faxathisia: no
18:56:41 <ehird> if you want performance, yes
18:56:48 <faxathisia> It's not superior to the lisp setup I had
18:56:49 <ehird> but you can just run a dynamically reloading WS on the server.
18:56:54 <ehird> oh
18:56:56 <ehird> of course
18:57:10 <ehird> 99% of development time is PUSHING OUT MAJOR CHANGES ONTO YOUR SERVER WHICH TAKES 10 HOURS TO RESTART
18:57:34 <ehird> faxathisia: have you thought about the performance overhead of your lisp setup?
18:57:37 <faxathisia> Slereah, nah I use both languages
18:57:52 <lament> i don't like lisp because it's ugly
18:58:12 <lament> especially functions ending in things like p and f
18:58:25 <lament> disgusting
18:58:26 <ehird> lament: that's not there in scheme
18:58:30 <lament> i know!
18:58:33 <ehird> but it does have mutation and predicate annotations..
18:58:35 <ehird> ? and !
18:58:36 <ehird> which isn't ugly
18:58:39 <lament> yes
18:58:42 <lament> scheme is much prettier
18:58:42 <ehird> e.g. (number? x)
18:58:45 <ehird> (set! x y)
18:59:12 <lament> but scheme has terrible standartization problems
18:59:19 <lament> standardization
18:59:23 <ehird> r6rs seems ... kind of ok
18:59:31 <faxathisia> I think it's a bit too much of a superficial view
18:59:37 <wildhalcyon> Better than most esoteric languages. They usually have terrible bastardization problems
18:59:45 <faxathisia> really the names of some constants is not the matter
19:00:09 <Slereah> Don't be dissin' the eso dude.
19:00:32 <wildhalcyon> As a bastardized language creator, I'm not dissin', just telling it like it is.
19:00:35 <ehird> faxathisia: aesthetics are important
19:00:46 <lament> faxathisia: actually the main reason i haven't ever seriously tried lisp is the perceived lack of a good environment, and a perceived necessity for having one
19:00:47 <Slereah> Heh.
19:00:54 <Slereah> What's your esolangs?
19:01:02 <faxathisia> lamet, SLIME
19:01:10 <lament> faxathisia: ie, haskell doesn't feel like you need to have a huge environment in which to work with it; a text editor and ghc is enough
19:01:14 <lament> but lisp does
19:01:22 <lament> and unfortunately such environments tend to be emacs-based
19:01:27 <ehird> lament: but emacs, haskell-mode&inf-haskell, and ghc helps
19:01:27 <ehird> :-)
19:01:38 <lament> and i'm not a fan of emacs
19:01:42 <ehird> i am
19:02:21 <faxathisia> beh
19:02:34 <lament> compare with squeak... now that's an environment :)
19:04:06 <ehird> squeak is awesome
19:04:08 <ehird> well, kind of
19:04:12 <ehird> the idea is awesome
19:05:23 <lament> in any case, even if the environment did exists, something feels wrong about a language _needing_ one :)
19:05:38 <ehird> feels just right for squeak though
19:06:08 <lament> there's barely a programming language in squeak
19:07:57 <lament> http://www.flownet.com/gat/papers/pch.html
19:09:30 <uvanta> bastardization!
19:13:27 <uvanta> haskell... its lazy evaluation is... elegant
19:13:47 <uvanta> its code is... beautiful
19:14:36 <uvanta> right now i'm doing a part-time job using php and it SUCKS
19:14:41 <uvanta> i miss haskell
19:15:32 -!- zacuan has joined.
19:15:45 -!- zacuan has left (?).
19:15:46 <ehird> uur, php
19:17:32 <uvanta> i wanted to join that language war but i couldn't since ehird was saying everything i want to say before me
19:17:48 <ehird> hahah
19:17:49 <faxathisia> I'm not sure it was a war..
19:17:59 <faxathisia> I like both languages
19:18:07 <ehird> uvanta: unfortunately, if i actually said that before you said it, that would just be strange, because it makes no sense when i say it
19:18:49 <uvanta> what you say
19:19:26 <ehird> uvanta: shit, the next line is 'all your base are belong to us'
19:19:28 <ehird> you can't make me say that
19:19:30 <ehird> that's cruel
19:19:55 <uvanta> no, the next line is 'you have no chance to survive make your time'
19:20:01 <ehird> is it?
19:20:02 <ehird> ok
19:20:05 <ehird> well
19:20:07 <ehird> you just did that.
19:20:43 <uvanta> i don't really understand what's going on but... i'm sorry
19:27:35 <faxathisia> I think it was my fault :/
19:48:57 -!- ehird has quit ("Leaving").
19:50:48 <wildhalcyon> Anyone have any suggestions for what sort of commands an assembly language should contain?
19:51:16 <Slereah> One that will play the Super Mario theme on the PC speaker.
19:51:23 <Slereah> To answer your question, I don't know.
19:51:58 <faxathisia> subleq ?
19:51:58 -!- ehird has joined.
19:52:02 <wildhalcyon> Okay
19:52:03 <wildhalcyon> bah
19:52:04 <faxathisia> RSSB
19:52:14 <ehird> crispy
19:52:16 <wildhalcyon> Not quite sure where to go with it
19:53:04 <wildhalcyon> I'm leaning towards 32-bit, but 64-bit might work also.
19:54:58 <wildhalcyon> I'll probably need some sort of memory management instructions.
19:55:04 <wildhalcyon> And all the usual stack instructions.
20:02:26 -!- ais523 has joined.
20:02:55 <ais523> wildhalcyon: why not the MAX instruction?
20:02:58 <ais523> see MiniMAX on the wiki
20:03:20 <Slereah> ais523 is watching you type
20:03:29 <wildhalcyon> makin' me look up stuff... with the thing...
20:03:37 <ais523> actually, I was reading the logs and decided I wanted to join the conversation
20:03:47 <Slereah> Heh.
20:04:07 <wildhalcyon> So, what would the MAX instruction do then?
20:04:12 <uvanta> how can you read them in real-time?
20:04:24 <ais523> and wildhalcyon: it can be expressed as MOVSW LODSW ADD SI,AX XCHG SI,DI in x86 assembly language
20:04:30 <ehird> ais523: how long until you invent a log client that doesn't require an external log service and updates in real time without refreshing?
20:04:38 <ehird> then in another version add support for sending messages?
20:04:55 <ais523> basically, it copies one datum from the source to the destination pointers (which have to be set up beforehand), incrementing each pointer
20:04:57 <ehird> (p.s., it's really weird when someone joins and replies to a question asked minutes before they joined :P)
20:05:16 <ais523> then adds the datum at the source pointer to the source pointer, and increments it
20:05:21 <ais523> then swaps the source and data pointers
20:05:34 <wildhalcyon> what's the benefit of doing that now?
20:05:40 <ais523> ehird: minutes? I've replied to questions asked days earlier on occasion
20:05:47 <ais523> wildhalcyon: the instruction is TC by itself
20:05:49 <ehird> that's not as creepy
20:06:00 <ais523> it doesn't even need arguments...
20:06:02 <ehird> but replying something asked minutes before seconds after joining..
20:06:05 <ehird> that is creepy
20:06:06 <ehird> :D
20:06:07 <wildhalcyon> Oh, well.. that's almost useful then
20:06:12 <ais523> just memory to be set up correctly beforehand
20:06:17 <ehird> ais523: hm, if it requires no arguments, then ... oh
20:06:18 <ehird> :)
20:06:28 <ehird> well, you can pass around minimax programs really easily
20:06:39 <ehird> file = memory ... sentinel code ...
20:06:40 <ehird> where
20:06:50 <ehird> code = length of source encoded in base-255
20:07:01 <ehird> since MAX MAX MAX ... is just unary
20:07:02 <ehird> :-)
20:07:14 <ais523> I generally treat the program as being the contents of memory before the interp is run
20:07:24 <ehird> ah
20:07:30 <ais523> in DOS, you just append the program to the interp and it dutifully loads it into memory at the right place
20:08:03 <ais523> there's a 14-byte interp on the wiki that works like that (no I/O, though)
20:08:49 <ais523> it even handles quitting when you jump to a location 270 bytes (that is, 135 words) before the start of the program
20:09:14 <wildhalcyon> Damn it, no wonder I'm confused.
20:09:40 <wildhalcyon> I thought you meant regular wikipedia... didn't pay attention where you said "on THE wiki"...
20:10:05 <ais523> I normally mean Esolang when I say 'wiki' on this channel without a qualifier
20:10:18 <wildhalcyon> I'm not blaming you. It was my error
20:19:44 <wildhalcyon> Wow, ais. I really don't understand miniMAX.
20:19:50 <wildhalcyon> I get Fractran, but not miniMAX
20:22:12 <ais523> it's kind of hard to explain
20:22:22 <ais523> the example makes it just-about possible for other people to understand sometimes
20:22:58 <ais523> each command alters the previous command, and sets the distance between the command after it and the command before it
20:23:27 <wildhalcyon> I sort of get that part, but I don't get how its set up I guess.
20:23:35 <wildhalcyon> Plus, its not really helpful for my assembly language.
20:24:06 <ais523> wildhalcyon: the program is just loaded into memory, and the docs for the interp define where the 1st and 0th commands start
20:24:08 <ais523> so it isn't portable
20:24:18 <ais523> it was simply designed for very small TCness
20:24:26 <wildhalcyon> Fair enough
20:24:44 <ais523> (of course the 14-byte interp isn't TC because it can only address 64K memory, because it's a DOS .COM file)
20:34:30 <ehird> ais523: I am trying to write a fixed-point function in C
20:34:33 <ehird> I do not believe it is possible
20:34:37 <ehird> without inline asm
20:34:53 <ais523> what exactly do you mean by 'fixed-point function' in this context?
20:35:00 <ais523> and why would inline asm help?
20:35:12 <ehird> because you can do closures and stuff with inline asm
20:35:14 <ehird> anyway, ais523 --
20:35:32 <ehird> fix(F) => fun(...) => F(fix(F))(...)
20:36:36 <ais523> the naive implementation gives you an infinite loop because C is eager
20:36:51 <ais523> I remember reading something about an eager implementation of Y, though, I may have to look it up
20:37:01 <ehird> ais523: c does not have closures
20:37:04 <ehird> you cannot code the y combinator in it
20:37:11 <ehird> anyway
20:37:13 <ehird> eager Y is Z:
20:37:31 <ehird> Z = \f. (\x. f (\y. x x y)) (\x. f (\y. x x y))
20:37:49 <ehird> ais523: the point is you cannot return the appropriate function
20:37:58 <ehird> that iz,
20:37:59 <ais523> oh, of course
20:38:00 <ehird> in Z(f),
20:38:05 <ehird> f cannot return something meaningful
20:38:51 <ais523> lambda calculus is kind of tricky in C anyway, what with the total absence of a lambda operation
20:39:00 <ehird> ais523: it's impossible.
20:39:03 <ehird> lambda calculus uses closures.
20:39:06 <ehird> c does not have closures.
20:39:13 <ehird> short of writing an interpreter; you cannot do lambda calculus in C.
20:40:37 <ais523> that's what I meant by 'kind of tricky'
20:40:47 <ais523> in JavaScript, OTOH, it's built into the language
20:40:51 <ais523> and that acts kind of like C at a distance
20:41:45 <ehird> ais523: speaking of which
20:41:55 <ehird> if you reduce haskell to:
20:42:03 <ehird> a basic type system that at a glance looks like it,
20:42:10 <ehird> simplified version of the syntax,
20:42:14 <ehird> just standard lazy evaluation
20:42:23 <ehird> and only a few standard things (like, an IO monad)
20:42:31 <ehird> ais523: how short do you think an interpreter could be written?
20:42:54 <ais523> not sure
20:43:06 <ehird> http://www.laserpirate.com/tinyml.html tiny ml in <700 lines
20:43:09 <ehird> so, i think not too much
20:43:13 <ais523> with a minimal Prelude, maybe a kilobyte or two
20:43:30 <ais523> hmm... 2K is the IOCCC size threshold
20:43:37 <ais523> (4K counting whitespace)
20:43:44 <ais523> but C is not a very good language for golfing
20:45:12 <ais523> incidentally, I topped up anagolf to shinh's requested 5 problems at a time
20:45:23 <ais523> and got several entries within a couple of minutes of posting the problem
20:46:10 <ehird> ais523: i meant
20:46:13 <ehird> LOC
20:46:14 <ehird> mainly
20:46:23 <ais523> bytes is more fun
20:46:27 <ehird> well
20:46:31 <ehird> bytes mean nothing to me
20:46:37 <ais523> I'm pretty sure it's possible to write a Haskell interp in 1 line of code, in Brainfuck
20:47:46 <ais523> because newline has no meaning to a Brainfuck implementation, or ought not to
20:48:08 <ais523> (I came across a BF interp online that errored on any characters not in ,.<>[]+-, and also errored on EOF)
20:48:25 <ais523> (I'm pretty sure most BF standards would therefore not consider it conforming)
20:49:09 <ehird> ais523: I mean reasonable looking code.
20:49:11 <ehird> :-|
20:49:23 <Slereah> Hm.
20:49:36 <Slereah> I'm trying to make a factorial on LB.
20:49:49 <ais523> LB?
20:49:50 <Slereah> But I feel I'm recreating an imperative version of the factorial
20:49:55 <Slereah> Lazy Bird.
20:49:59 <ais523> Lazy Bird, presumably
20:50:33 <ais523> Slereah: in Unlambda-like languages, the iterative and recursive versions of factorial tend to come out identical
20:51:01 <ais523> because when you translate the loop of the iterative version into a recursive function so that it can be expressed in the language, you end up with code identical to the recursive version
20:51:14 <Slereah> My idea so far is using an ordered pair, first element being the result, second being what's left.
20:51:18 <ais523> at least if you make the loop count downwards to make the termination condition easy
20:51:22 <ehird> ais523: btw, all factoring programs i've found say their algorithm is dumb
20:51:27 <ehird> so why don't they improve it?! :|
20:51:50 <Slereah> So factorial 5 would start out as <1,5> and finish on <120,0>
20:51:55 <Slereah> Or something.
20:52:14 <ais523> Slereah: both the recursive and iterative versions work like that
20:52:19 <Slereah> Oh.
20:52:22 <Slereah> Thank goodness.
20:52:38 <ais523> in fact they're so similar it's hard to tell the difference; on occasion they can be identical
20:52:51 <ais523> because the argument to a recursive function is an argument
20:53:13 <ais523> a variable in an imperative version has to be converted to an argument to be remembered between iterations of the loop
20:53:19 <ais523> and so the two functions end up the same
20:55:18 <ais523> Slereah: I just read your note about the difficulty of I/O in Lazy Bird
20:55:34 <ais523> some sort of monad is generally the best option in pure lazy languages
20:55:35 <Slereah> Are you going to tell me about monads?
20:56:15 -!- oerjan has joined.
20:56:21 <ais523> a monad would be a bit hard to implement in an efficient form in Lazy Bird because input would need to return two arguments and output would need to take two arguments
20:56:45 <ais523> taking two arguments is fine due to currying, but returning two would mean some sort of officially sanctioned version of an ordered pair
20:57:18 <Slereah> Well, my first thought was to use some sort of function > such that ``>[A][B] converts to `[A][B] and then B is evaluated
20:57:46 <ais523> so some sort of eageriser
20:57:57 <Slereah> Yes. Anti-d.
20:58:03 <ais523> but it's kind of hard to ensure that the eageriser runs at the right time, because it would itself be lazy
20:58:18 <ais523> and more importantly the thing running it would be lazy
20:58:23 <Slereah> Is there a third choice?
20:58:25 <ais523> the program would have to be full of eagerisers
20:58:32 <ehird> ais523: by the way, i learned a disturbing thing yesterday
20:58:38 <Slereah> Yes, that's the problem I saw.
20:58:41 <ehird> the Y combinator cannot be typed in any language that does not allow arbitary recursive types
20:58:43 <ehird> and, with them,
20:58:51 <ehird> every lambda calculus term can be typed as "a = a -> a"
20:58:58 <ehird> thus, strong typing is destroyed
21:00:02 <oerjan> that's a bit exaggerated i think
21:00:33 <ais523> just thinking about monads in general... suppose you write infinite cat (that doesn't terminate on EOF) in a language like Haskell
21:01:04 <oerjan> hm wait
21:01:30 <ais523> if you do it by constructing an infinite list of commands input >>= \x -> output x >> input >>= \x -> output x >> input and so on, is there any guarantee that any of the commands actually runs rather than the interp spending an infinite length of time constructing the list without evaluating any of the monad-chained functions?
21:01:39 <ais523> the list of commands, that is
21:01:49 <ehird> oerjan: no, it's true
21:01:55 <ehird> and that's from #haskell, too :P
21:02:05 <ehird> ais523: um, yes
21:02:09 <ehird> because ... that construction is lazy
21:02:10 <ehird> :P
21:02:23 <ais523> it's an issue as to what is more lazy, the I/O or the list construction
21:02:23 <oerjan> ehird: hm, there may have to be a type that every term can be type with
21:02:27 <ehird> the interpreter executes as little as possible of the chain creation, runs that action, does it again, etc
21:02:31 <ehird> oerjan: yes
21:02:33 <ehird> think about it,.
21:02:47 <ehird> Let's call the lambda calculus function type T.
21:02:54 <ehird> now every LC function takes an LC function and produces an LC function.
21:02:55 <ehird> T = T -> T
21:03:12 <ehird> a = a -> a
21:03:14 <oerjan> the version of intersection types i read about that could type every weakly normalizing term used an omega for it. no other recursive types necessary
21:03:17 <ehird> (a = a -> a) is the type of all LC terms, and will type in a language that can type Y, thus strong typing is destroyed.
21:04:12 <oerjan> that type is not necessarily in your system
21:04:22 <ehird> oerjan: to type Y, it must be
21:04:29 <ehird> because:
21:04:33 <oerjan> Y :: (omega -> a) -> a was one legal type for Y, i think
21:04:53 <ehird> Y takes a function, and returns <SOMETHING> (let's say -- a)
21:05:07 <oerjan> ehird: note that a system need not have principal types. it may be that you need a different type for Y dependent on what you apply it to
21:05:13 <ehird> Now, if we say that Y is equiv. to '\f -> f (Y f)', then, what type is passed to the function?
21:05:14 <ais523> incidentally, is the topic a real error message that can actually come up, or was it just faked to look realistic?
21:05:21 <ehird> the return type of Y f, that's what.
21:05:31 <ehird> And the function returns some value 'b' -- but this must be the same value passed to a
21:05:39 <ehird> We get (a -> a) -> a, but that's just the fixed point type
21:05:47 <ehird> If you read the actual lambda definition of Y, it has an infinite type.
21:05:59 -!- wildhalcyon has quit ("ChatZilla 0.9.81 [Firefox 2.0.0.11/2007112718]").
21:06:00 <oerjan> ehird: you are assuming a system in which everything has exactly one type
21:06:18 <ehird> i'm assuming a sane system? well, that's odd.
21:06:36 <oerjan> ehird: there are _many_ interesting systems without that property
21:06:49 <ais523> ehird: noticing when you've made assumptions and acting a different way is a good way to come up with an interesting esolang
21:07:10 <ehird> oerjan: random note -- you used to code ocaml right?
21:07:21 <ehird> how can i tell the ocaml repl to load an ocaml source file and let me access its variables?
21:07:30 <oerjan> ehird: a little bit
21:07:51 <oerjan> open ? my memory is vague
21:08:57 * Slereah 's going to add >
21:09:06 <Slereah> At least it will be easy to insert in the interpreter.
21:09:38 <ehird> interesting
21:09:39 <oerjan> ehird: i think the repl syntax in ocaml is almost identical to file syntax
21:09:39 <ehird> ocaml -rectypes
21:09:40 <ehird> - : ('a -> 'a) -> 'a = <fun>
21:09:43 <ehird> i see no recursive type there
21:09:44 <ehird> (for Y)
21:10:18 <ehird> however, it doesn't actually run of course
21:11:14 <oerjan> another legal type for Y in that intersection system would be Y :: ((omega -> a) /\ (a -> b)) -> b
21:11:38 <oerjan> and so on, for any chain of types starting with omega
21:11:44 <ehird> oerjan: hm, how do i explicitly type annotate an ocaml function?
21:11:53 <ehird> if i know that, then I'm going to go fsck up ocaml's type system
21:12:07 <oerjan> ehird: with : somewhere
21:12:14 <ehird> somewhere
21:12:14 <ehird> great
21:12:23 <oerjan> possibly just before the =
21:12:53 <ehird> well, I just convinced ocaml that 'a -> 'a is a valid type for Y.
21:13:01 <ehird> though
21:13:01 <ehird> - : ('a -> 'a as 'a) -> 'a = <fun>
21:13:09 <ehird> i think i typed the argument
21:13:13 <ehird> hm
21:13:14 <ehird> can't be
21:13:45 <oerjan> is that precedence right? try parenthese around ('a -> 'a) to be sure
21:13:50 <oerjan> *s
21:13:55 <ehird> let y : ('a -> 'a) =
21:14:57 <ehird> ah i see
21:15:03 <ehird> "A as B" is "B = A"
21:15:07 <ehird> # Y.sii;;
21:15:07 <ehird> - : ('a -> 'b as 'a) -> 'b = <fun>
21:15:37 <ehird> but you can't put that in a source file heh
21:15:45 <oerjan> ah
21:16:13 <ehird> oerjan: there should be a minihaskell for experimenting with stuff like this
21:16:17 <ehird> like i asked ais523 about earlier
21:16:24 <oerjan> it's not legal base syntax since basic ocaml does not allow -rectypes
21:16:24 <ehird> i guess without layout, so the parser can be dirt simple
21:16:30 <ehird> and stuff.
21:16:34 <ehird> oerjan: i did -rectypes
21:16:35 <ehird> hh
21:16:36 <ehird> *heh
21:16:42 <ehird> and, if we had a minihaskell
21:16:43 <oerjan> i mean the basic is without it
21:16:47 <ehird> we could just add the a = b rule
21:16:53 <oerjan> stop misinterpreting me!
21:17:20 <ehird> y :: (a = a -> a) -> a
21:17:36 <oerjan> now wait
21:17:41 <ehird> y = \f -> (\x -> f (x x)) (\x -> f (x x));;
21:17:51 <oerjan> the usual type is (a -> a) -> a, for fix anyhow
21:18:24 <ehird> oerjan: yes, but this encodes it better
21:18:25 <oerjan> it's just that you cannot get that building from just lambda terms with the usual type system
21:18:32 <ehird> that one kind of ignores the whole recursive 'a' thing
21:18:39 <ehird> oh, wait
21:18:40 <ehird> you are right
21:18:41 <ehird> heh
21:18:41 <ehird> :)
21:18:54 <ehird> well, a nicer way of saying it (makes more sense to humans):
21:19:12 <ehird> y :: (a -> b) -> b where a = b
21:19:47 <ehird> churchN :: a = (a -> a) -> a -> a;;
21:19:48 <ehird> heh
21:19:49 <oerjan> i think the amount of humans for which that makes more sense is a pretty thin sliver :D
21:19:57 <ehird> (as in, behaves the same as pure LC churches)
21:20:14 <ehird> oerjan: it avoids starting to read it as a normal type then having to backtrack to get the recursion
21:21:36 <oerjan> in System F (where everything terminates) forall a. (a -> a) -> a -> a is the type of _precisely_ the church numerals
21:22:08 <ehird> oerjan: aha, but that's not the LC church numerals
21:22:08 <ehird> because there are more constraints on what can be passed in
21:22:10 <oerjan> System F btw does _not_ have principal types
21:22:35 <ehird> ais523: anagolf should add emacs lisp
21:22:35 <ehird> xD
21:22:51 <ais523> I'd like to see Underload as well
21:22:58 <ehird> ais523: egotist
21:22:58 <ais523> but I'm biased
21:22:58 <ehird> :P
21:23:54 <ehird> hm
21:23:57 <ehird> can you do stdout with elisp
21:24:16 <ais523> probably it would be better to do it the same way as they did vi
21:24:31 <ais523> input arrives in the buffer, output is the final version of the buffer
21:25:11 * ais523 keeps typoing the word 'buffer' with g rather than f. It's probably because their finger doesn't move back far enough after pressing the 'b'...
21:25:28 <ehird> oh, bugger. that must be bad.
21:25:42 <ehird> (badum-tish)
21:25:52 * oerjan is starting to get the impression from the topics that people here don't _want_ more channel members :D
21:25:53 <ais523> luckily I've memorised backspace backspace f f as part of the way my fingers have learnt the word...
21:25:53 <ehird> ais523: actually, hardly
21:26:01 <ehird> the emacs functions for buffer stuff are hideously verbose
21:26:18 <ais523> elisp is hideously verbose as a language
21:26:20 <ehird> oerjan: quite :D
21:26:28 <ais523> and 'format' isn't that wordy
21:26:42 <ehird> ais523: (require 'cl) makes elisp quite terse
21:27:00 <ais523> I'm unaware of cl
21:27:42 <ehird> cl=common lisp
21:27:46 <ehird> every sane elisp coder uses it
21:27:49 <ehird> (if there are any,,)
21:27:58 <ehird> basically, its a lot of useful stuff from CL
21:28:07 <ehird> and presumably anagolf would bundle it
21:28:26 <oerjan> since none of us is sane, why are you mentioning it?
21:28:33 <ais523> ehird: I have coded elisp before. I have never used the cl package, and I consider myself relatively sane, although some may disagree
21:28:42 <ais523> the fact that I'm in #esoteric is certainly evidence to the contrary
21:28:49 <ehird> oerjan: I meant 'sanity check' style :P
21:29:00 <ehird> ais523: well, then start using it. it's the only way to avoid dying at the hands of elisp
21:29:00 <ehird> :P
21:29:22 <ais523> nowadays I mostly only use elisp for writing major modes for esolangs
21:29:22 <oerjan> ehird: maybe you mean coder of sane elisp, not sane coder of elisp?
21:29:32 <ehird> oerjan: yes, thank you
21:29:33 <ehird> :P
21:29:40 <ehird> ais523: can i have esolangs.el, btw? :P
21:29:46 <ais523> not on this computer
21:29:50 <ais523> although I think I pasted it a while ago
21:29:52 <ehird> :<
21:30:22 <ais523> http://pastebin.ca/894042 is the version I pasted, apparently
21:30:54 <ais523> although I think that version has a bug in the BF indentation
21:31:13 <ais523> or at least, a strange-looking style choice where closing ] has to be on the same line as a lot of code to look sensible
21:31:38 <ehird> ais523: btw,
21:31:44 <ehird> you should add (provide 'esolangs)
21:31:46 <ais523> actually, that seems to be the version with the indentation corrected
21:31:47 <ehird> for just importing the lot
21:31:48 <ehird> :P
21:31:55 <ais523> it's actually probably the most recent version
21:31:59 <ais523> and that's a good idea
21:32:28 <ais523> I use a direct load of that file and (esolangs-recognize-extensions) in my .emacs
21:32:50 <ehird> ais523: could you lowercase the brainfuck mode name?
21:32:52 <ais523> and then get annoyed when people insist on using .bf as an extension for Brainfuck files...
21:32:52 <ehird> its purer
21:32:53 <ehird> :P
21:33:08 <ehird> omg, you highlight ,. +- <> the asme
21:33:09 <ehird> :(
21:33:17 <ais523> the word "brainfuck" starts with a capital when at the start of a sentence
21:33:33 <ehird> a modelien is not a sentence
21:33:45 <ais523> modelines are generally written in title case
21:33:50 <ais523> that is, every word initcaps
21:33:54 <ehird> also, ais523, that does no indentation of brainfuck at all
21:33:55 <ehird> :(
21:33:57 <ais523> after all, words like
21:34:08 <ehird> (define-key brainfuck-mode-map "\r" 'esolangs-indent-newline-indent)
21:34:08 <ehird> (define-key brainfuck-mode-map "\n" 'esolangs-indent-newline-indent)
21:34:10 <ehird> bad bad bad!
21:34:12 <ais523> ehird: it ought to
21:34:12 <ehird> don't do that.
21:34:14 <ehird> override C-j.
21:34:16 <ehird> not \r\n
21:34:17 <ais523> I did
21:34:24 <ehird> not \r\n.
21:34:32 <ais523> maybe I should have a minor mode that works on all of them that overrides \r and \n as well
21:34:37 <ehird> no
21:34:40 <ehird> people do that in their own .emacs
21:34:44 <ais523> I'm used to auto-indent, which I use in other modes
21:34:51 <ehird> ais523: set it up in .emacs.
21:35:04 <ehird> also, try (kbd ...) for keyboard keys
21:35:07 <ais523> I don't use it in every mode though, I'm inconsistent
21:35:07 <ehird> e.g.
21:35:09 <ehird> (kbd "RET")
21:35:09 <ais523> point taken, though
21:35:11 <ehird> (kbd "C-j")
21:35:22 <ehird> ais523: example of indenting using brainfuckmode?
21:36:06 <ais523> just typing the code in ought to work
21:36:16 <ehird> ,[(C-j)
21:36:19 <ehird> <<at indent 0
21:36:39 <ais523> the number of spaces at the start of each line is brainfuck-indentation-level times the number of [] levels you're inside
21:36:57 <ehird> so..1
21:36:58 <ais523> at the start of a line, or (if the line starts with ]) just after the initial ]
21:36:59 <ehird> but i'm at level 0
21:37:14 <ais523> what version of emacs are you using?
21:37:22 <ais523> I'll try it on this computer, which runs an ancient version
21:37:26 <ehird> 21.1.1
21:37:33 <ehird> and just then i got it to indent 2 spaces
21:37:36 <ehird> but cannot reproduce
21:37:45 <ehird> aha
21:37:49 <ehird> ,(ret)
21:37:52 <ehird> [abc(ret)
21:38:01 <ehird> def[(IT IS INDENTED WHEN PRESSING [)
21:38:04 <ehird> -->
21:38:05 <ehird> def[
21:38:28 <ais523> I have 20.4.1
21:38:35 <ehird> ais523: it ignroes the first level of indentation
21:38:36 <ehird> it seems
21:38:45 <ehird> also
21:38:51 <ehird> sometimes it disables RET!
21:38:55 <ehird> 'indentation would be in left margin'
21:38:56 <ais523> and just get "Symbol's definition as function is void: move-beginning-of-line"
21:39:03 <ehird> i did:
21:39:04 <ehird> [(RET)
21:39:05 <ehird> ]
21:39:08 <ehird> and now i can't do in those []
21:39:11 <ehird> *go
21:39:21 <ais523> definitely looks like there's an off-by-two error for you
21:39:27 <ais523> that code clearly needs cleaning up
21:39:27 <ehird> and maybe some logic bugs.
21:39:35 <ais523> what about the Forte indentation? Does that work?
21:39:46 <ehird> ais523: i don't know forte
21:39:48 <ais523> (it right-justifies the line numbers and left-justifies the statements)
21:40:02 <ais523> ehird: just type in some BASIC, it looks much the same to a syntax higlighter
21:40:42 <ehird> filext=
21:40:47 <ais523> 30 LET 9=7
21:40:48 <ais523> 40 PRINT 6*9
21:40:50 <ais523> that sort of thing
21:40:53 -!- jix has quit ("CommandQ").
21:40:55 <ais523> filext=.4te
21:41:13 <ehird> Start loop(ENTER)
21:41:20 <ehird> ->startloop indented one tab, current lien on one tab
21:41:34 <ais523> there isn't a loop instruction
21:41:42 <ehird> oh
21:41:46 <ehird> i copied the examplenotanexample
21:41:46 <ehird> xD
21:41:47 <ais523> it just indents the line number into a one-tab margin and the rest of the statement after it
21:42:06 <ais523> 100110 LET 110=110+3
21:42:08 <ais523> 109 LET 100110=108
21:42:09 <ais523> 110 PRINT "Looping...": LET 108=108+3
21:42:17 <ais523> that's how you do a loop in Forte
21:42:29 <ehird> ais523: the 10 rem won't highlight properly
21:42:29 <ehird> btw
21:42:49 <ais523> oh, because of the embedded colon-newline in the comment
21:43:01 <ais523> Emacs does that for other langs too, though, like // this is a C comment over 2 lines \
21:43:07 <ais523> this is also a C comment
21:43:21 <ais523> doesn't highlight the second line
21:43:23 <ehird> hm
21:43:25 <ehird> emacs sucks
21:43:26 <ehird> :P
21:43:41 <ais523> out of all the syntax higlighters I've tried, Kate's seems to be best
21:43:46 <ais523> but Emacs has better indentation
21:44:44 <ehird> ais523: the forte constants is:
21:44:49 <ehird> map Integer -> Integer
21:44:55 <ehird> default=[1=>1,2=>2,...]
21:44:56 <ehird> right?
21:44:58 <ais523> yes
21:45:00 <ehird> and the key integers never morph
21:45:09 <ais523> all integers can morph
21:45:20 <ais523> but generally it's a stupid idea to change the important ones like 1
21:45:25 <ehird> ais523: so wait, the keys '1' and '2' could morph in that default?
21:45:28 <ehird> so if i did
21:45:30 <ehird> LET 1 = 2
21:45:32 <ehird> it would become
21:45:37 <ehird> default=[2=>2,2=>2,...]?
21:45:41 <ehird> i highly doubt it
21:45:42 <ehird> it would become
21:45:46 <ehird> default=[1=>2,2=>2,...]
21:45:49 <ais523> oh, yes
21:45:53 <ais523> if you think about it like that
21:46:07 <ais523> it may be easier to think of it as map String -> Integer
21:46:16 <ais523> default=["1"=>1,"2"=>2,...]
21:46:21 <ehird> yes
21:46:23 <ais523> except that that is misleading
21:46:26 <ehird> exactly
21:46:30 <ais523> because every pair of parens triggers an extra conversion
21:46:31 <ehird> my parser will parse the numbers as Integer
21:46:44 <ehird> ais523: does this work
21:46:45 <ais523> as in:
21:46:45 <ehird> LET (2+2) = 5
21:47:11 <ais523> yes, according to the spec
21:47:18 <ais523> or at least it would do if you remembered to give the line number
21:47:29 <ehird> ais523: so I relaly need a map of expr->expr
21:47:35 <ehird> because presumably '4' wouldn't result in '5'
21:47:38 <ehird> just 2+2
21:47:42 <ehird> and what about (2+3)-1?
21:47:48 <ais523> no:
21:47:53 <ais523> 10 LET 4=5
21:47:57 <ais523> 20 PRINT (2+2)
21:47:59 <ais523> will print 5
21:48:04 <ehird> ais523: Okay, what about:
21:48:05 <ais523> so will (2+3)-1
21:48:10 <ehird> 10 LET (2+2)=5
21:48:14 <ehird> 20 PRINT ((2+3)-1)
21:48:23 <ais523> you get the answer 5
21:48:31 <ais523> an integer becomes completely unusable once it's been redefined
21:48:31 <ehird> ais523: okay, so EVERY operation has indirection
21:48:33 -!- Sgeo[College] has joined.
21:48:37 <Sgeo[College]> Hi all
21:48:59 <ais523> it becomes quite interesting because once an integer's been redefined, you can never use that integer's original value again
21:49:06 <ehird> ais523: what is forte's (1/0)
21:49:08 <ehird> and can I do
21:49:11 <ehird> LET (1/0) = 4
21:49:14 <ehird> PRINT (1/0)
21:49:30 <ais523> 1/0 isn't treated sensibly by the interp I came up with
21:49:34 <ais523> probably it's just an error
21:49:47 <ais523> although making it a constant that can be assigned to would probably be more interesting
21:49:56 <ais523> maybe I should add 'nullity' too...
21:50:01 <Sgeo[College]> lol
21:50:08 <ehird> ais523: what would my example do
21:50:31 <ais523> whatever dividing by 0 does in Perl
21:50:39 <ehird> okay
21:50:40 <ais523> probably die with an error
21:52:00 <ais523> it's probably also worth pointing out that the reference interp tends to go into an infinite loop if there are any errors in the original program, because I don't check for them, and likewise the language will infinite loop if no explicit END statement is given
21:52:35 <ais523> also worth mentioning that the line numbers are the only things that effect the order in which lines are run, and yes, they're indirected to
21:52:38 <ais523> s/to$/too/
21:53:26 <ais523> so you loop by redefining the numbers of earlier lines to have higher values so they're after the present line...
21:53:27 <ehird> type Program = M.Map Integer Statement
21:53:30 <ehird> :P unsorted programs
21:54:28 <ehird> INPUT. This works like LET, except that the redefinition of the number is taken from the input, not from an expression. The expression gives the number to redefine.
21:54:28 <ehird> GET. This works like INPUT, except that it inputs a character and redefines the number given by the expression to its ASCII code. It inputs 256 on end-of-file.
21:54:37 <ehird> ais523: so INPUT takes a decimal number?
21:54:41 <ais523> yes
21:54:52 <ais523> I believe it's completely unusable, sort of like gets in C
21:55:11 <ais523> because there's no restriction on what numbers the user can input
21:55:23 <ais523> GET and atoi code are more useful in practice
21:55:31 <ehird> ais523: if i 'LET 3 = 4', then get the input '3', is it redefined as '4'?
21:55:53 <ais523> LET 3 = 4
21:55:58 <ais523> INPUT 5
21:56:06 <ais523> will set 5 to 4 if the user inputs '3'
21:56:13 <ais523> and I'd remembered to put line numbers in
21:56:27 <ais523> there's no way to use an integer once it's been redefined...
21:56:52 <ehird> okay
21:57:00 <ehird> ais523: so even LET's lhs has the indirection?
21:57:09 <ais523> yes
21:58:58 <ehird> putInt :: Integer -> Integer -> Forte ()
21:58:59 <ehird> putInt a b = update (\m -> M.alter (\_ -> b) a m)
21:59:01 <ehird> tee hee
21:59:06 <ehird> ais523: what about
21:59:09 <ehird> LET 5 = 1
21:59:14 <ehird> LET 4 = 2
21:59:16 <ehird> err
21:59:16 <ehird> wait
21:59:17 <ehird> no
21:59:19 <ehird> LET 5 = 1
21:59:21 <ehird> LET 1 = 2
21:59:22 <ehird> PRINT 5
21:59:28 <ais523> you get 2
21:59:36 <ehird> ais523: so i need to iterate my finding
21:59:43 <ais523> yes
22:01:18 <ais523> BTW, looking at the interp working can be quite interesting
22:01:35 <ais523> if you change all occurrences of 'next' to 'next and print' you'll be able to see what it's doing
22:02:18 <ehird> ais523: welp i have getInt/putInt written
22:02:49 <ehird> ais523: gosh, the main loop will be hard
22:02:50 <ehird> xD
22:16:52 -!- ais523 has quit ("going home").
22:21:28 <Slereah> Shit. For some reason, input doesn't work anymore.
22:21:39 <Sgeo[College]> SlereahShit. For some reason, input doesn't work anymore.
22:21:48 <Sgeo[College]> You certainly said something successfully
22:22:05 <Slereah> Yes, but not on the lazy bird!
22:22:37 <Slereah> Hm.
22:22:47 <Slereah> Ah.
22:22:48 <Slereah> UnboundLocalError: local variable 'c' referenced before assignment
22:23:22 <Sgeo[College]> lazy bird?
22:24:46 <ehird> Sgeo[College]: HMM LET'S THINJK
22:24:51 <ehird> OH COULD IT BE AN ESOLANG??
22:24:54 <ehird> WEIRD IDEA. TOTALLY.
22:24:58 <ehird> :|
22:26:18 <Sgeo[College]> Bye al;l
22:27:32 -!- Sgeo[College] has quit ("http://www.mibbit.com ajax IRC Client").
22:28:42 <ehird> Challenge:
22:28:51 <ehird> write the shortest C program that interprets a turing complete language.
22:28:52 <ehird> Anything goes.
22:29:34 <Slereah> OISC?
22:29:53 <ehird> Slereah: Hardly; a brainfuck interp would be shorter.
22:30:00 <Slereah> Orly?
22:30:16 <Slereah> Well, a bitchanger would be even shorter :o
22:30:29 * faxathisia checks the wiki for something to try
22:30:50 <Slereah> I never tried to make an OISC interpreter, but it doesn't seem bigger than BF to implement
22:31:10 <faxathisia> lol
22:31:14 <faxathisia> remember GOTO++
22:31:19 <faxathisia> Abject oriented programming
22:32:04 <ehird> oh btw -- doesn't have to be valid ansi
22:32:08 <ehird> it can be broken k&r if you want
22:32:10 <ehird> as long as it compiles
22:32:46 <ehird> oh; and it can be non-turing-complete due to e.g. integer/array limits
22:32:57 <Slereah> It would be hard otherwise!
22:33:02 <ehird> but if a platform had infinite arrays and ints; if the program was TC; then it's ok
22:33:06 <ehird> Slereah: well, no. realloc()
22:36:33 <ehird> mwahaha:
22:36:34 <ehird> l(i){R i=getc()?i?getc()+l(i);}
22:36:42 <ehird> faxathisia: are you that evil?!
22:37:00 <ehird> er
22:37:02 <ehird> s/second?/:
22:38:43 <faxathisia> no :(
22:38:51 <faxathisia> I don't even know what that does
22:39:01 <ehird> faxathisia: well, its tweaked a bit now
22:39:03 <ehird> current semantics:
22:39:08 <ehird> it reads a character
22:39:12 <ehird> if it's \0,
22:39:25 <ehird> then it reads one character, subtracts one from it, and adds it to (RECURSE)
22:39:26 <ehird> otherwise,
22:39:31 <ehird> it returns the character minus one
22:39:53 <ehird> faxathisia: basically, it lets me read in trivially as chars (i.e. no bounded buffers) but get anything that can fit into an int
22:39:55 <ehird> for example:
22:40:04 <ehird> 00 02 00 02 02
22:40:13 <ehird> is (2-1)+(2-1)+(2-1)
22:40:15 <ehird> so, it's 3
22:40:55 <ehird> the language is called 'onest'
22:40:57 <ehird> a pun on 'forth'
22:42:04 <ehird> language ext=.1st
22:43:56 <ehird> er
22:43:58 <ehird> s/getc/getchar
22:44:21 <ehird> l(i){R i=getchar()?i-1:getchar()-1+l(i);}main(a){R l(a);}
22:44:26 <ehird> current interp.
22:44:31 <faxathisia> o_____o
22:44:36 <ehird> faxathisia: it doesn't run anything yet.
22:44:37 <ehird> of course.
22:44:41 <faxathisia> I think I will be beater but trying anyway
22:44:49 <ehird> % ./onest < 3.1st; echo $?
22:44:49 <ehird> 2
22:44:52 <ehird> talk about off-by-one errors..
22:50:39 <ehird> faxathisia: ok
22:50:45 <ehird> take a look at my official reading routine :P
22:50:46 <ehird> l(i){R(i=getchar())?i-1:getchar()-1+l(i);}
22:51:09 <ehird> (R is return)
22:51:15 <ehird> let me expand that:
22:51:49 <ehird> l(i){i = getchar(); if (i) { return (i-1); } else { i2 = getchar(); return (i2-1)+l(i); } }
22:51:51 <oerjan> ehird: for your main loop: findMinWithKey . snd . split currentLineNo $ currentProgram
22:51:56 <ehird> faxathisia: basically, the i perameter is ignored
22:52:10 <ehird> faxathisia: it is just so we can assign to an integer variable (params default to int, remember?) without a declaration
22:52:18 <ehird> and we do l(i) to pass along an int to assign to, etc
22:52:20 <oerjan> er wait
22:52:24 <faxathisia> haha
22:52:26 <ehird> main() calls l with argc, which is good enough, since it's ignored
22:52:28 <faxathisia> sweet
22:52:35 <oerjan> *minViewWithKey
22:52:54 <oerjan> *fst .
22:52:58 <ehird> faxathisia: and i believe main() will be recursive
22:53:10 <faxathisia> I couldn't have main recursive :[
22:53:15 <ehird> why not
22:53:21 * faxathisia boots with main(g,v){l(g,1[(char**)v]);} instead
22:53:31 <ehird> that is pretty hardcore
22:53:32 <ehird> heh
22:53:37 <faxathisia> because I want to iterate argv[0]
22:53:39 <ehird> but ... why are you casting?
22:53:44 <faxathisia> opps I mean argv[1]
22:53:45 <ehird> that's just a warning!
22:53:59 <ehird> 1[v] should work hunky dory, i think
22:54:08 <oerjan> that is: fmap fst (minViewWithKey . snd . split currentLineNo $ currentProgram). i think.
22:54:32 <ehird> faxathisia: all my functions take an implicit integer parameter to assign to
22:54:32 <ehird> XD
22:54:41 <ehird> my execution function starts: e(i){i=l(i);...
22:54:42 <faxathisia> main(int g,char**v){l(g,1[v]);}
22:54:42 <faxathisia> main(g,v){l(g,1[(char**)v]);}
22:54:47 <faxathisia> that's why
22:54:54 <ehird> main(g,6 --- quit: timotiis ("leaving")
←2008-02-20 2008-02-21 2008-02-22→ ↑2008 ↑all