00:03:09 <zzo38> quintopia: O, you don't know? You probably won't know overmate even if you do know about Pokemon Card, because overmate is a rule I have invented.
00:04:49 <Sgeo> wrapMaybeHalts :: a -> Maybe a
00:04:56 <lambdabot> Control.Exception.Base assert :: Bool -> a -> a
00:04:56 <lambdabot> Control.Exception assert :: Bool -> a -> a
00:04:56 <lambdabot> Control.OldException assert :: Bool -> a -> a
00:05:02 <zzo38> The theoretical maximum overmate is 8 (knock out 5 opponent's pokemons beyond your last side card, leave opponent with no cards in play, and both players have no cards in draw pile)
00:05:03 <Sgeo> wrapMaybeHalts = -- todo: Solve the halting problem
00:05:15 <kallisti> Sgeo: note that error catching has nothing to do with the halting problem.
00:05:24 <parabellum> which environment you use for brainfuck?
00:05:44 <Sgeo> Errors and infinite loops are semantically equivalent outside of IO
00:05:49 <zzo38> The highest overmate I have ever made, though, is four points.
00:05:58 -!- FishNot has quit (Ping timeout: 252 seconds).
00:06:02 <Sgeo> Maybe you could do something with unsafePerformIO?
00:06:07 <kallisti> Sgeo: and therefore it's impossible to catch errors
00:06:14 <quintopia> zzo38: you have explained overmate before. it's in my logs and the channel logs
00:06:28 <kallisti> Sgeo: no, no need. but it is something that should be possible I think. I don't know what it would break though.
00:06:28 <quintopia> in any case, i am not interested in pokemon card
00:06:29 <zzo38> Sgeo: Yes. However, you can still use Either monad to make up a kind of way of functions that can have errors values
00:06:48 <Sgeo> zzo38, I think kallisti intends to catch bottoms
00:07:03 <kallisti> you are confusing /error handling/ with /bottom/
00:07:29 <Sgeo> The bottoms that are not infinite loops
00:07:35 <kallisti> the kind that otherwise halts the runtime unless caught
00:08:12 <Sgeo> I'd think it's impossible without IO. Semantically, a bottom is a bottom
00:08:25 <Sgeo> You seem to want an f such that f _|_ = might be _|_
00:08:37 <kallisti> Sgeo: yes you would need to use unsafePerformIO
00:09:00 <zzo38> I don't like that way. You should use a macro instead.
00:09:16 <lambdabot> *Exception: Prelude.Enum.Bool.succ: bad argument
00:09:23 -!- roper has quit (Quit: Abandonando).
00:09:24 <kallisti> things that Prelude triggers runtime errors for
00:09:30 <kallisti> but you want to be in a Maybe instead.
00:09:47 <zzo38> You could just write new function that checks the error at first.
00:10:01 <zzo38> And then works in the Kleisli categories for Either or Maybe monads
00:11:35 <zzo38> (Such as, the Kleisli category for Maybe monad would be the category of partial functions, and the Kleisli category for IO monad being the category of functions with side effects.)
00:14:02 <zzo38> Is that how you do Kleisli category?
00:19:37 <Sgeo> kallisti, update
00:20:14 -!- kmc has quit (Quit: Leaving).
00:59:20 -!- Klisz has quit (Quit: SLEEP, GLORIOUS SLEEP).
01:14:04 -!- parabellum has left.
01:17:38 <zzo38> I made a list of some differences and similarities from Icosahedral RPG to D&D 3.5e
01:18:09 <zzo38> gopher://zzo38computer.cjb.net/0phlog*c_dnd.icosahedral-rpg-i
01:50:45 <Sgeo> kallisti, flash edited
02:36:01 <zzo38> Mostly using Linux at FreeGeek (they use Ubuntu there), I am using the command-line virtual console mode. But when I do use the Windows-like GUI, I sometimes get annoyed that various obscure features of Windows fail to work on the Ubuntu GUI (which is designed to be like Windows).
02:36:16 <kallisti> *PortalChess> moveSet newBoard (R7, B)
02:36:16 <kallisti> *PortalChess> moveSet newBoard (R2, B)
02:38:28 <zzo38> For example: * Double-clicking the control box will not close the window. * Dragging the scrollbar and then moving the mouse pointer away from the scrollbar before releasing the mouse button will not snap back. * At one time, double-clicking the title-bar did not maximize the window, although they fixed that, so it works now.
02:39:12 <zzo38> Do you know what ReactOS does in these cases?
02:42:42 <zzo38> It doesn't really matter if Ubuntu does differently, but ReactOS should do the same things as Windows
02:54:50 -!- zzo38 has quit (Remote host closed the connection).
02:55:27 -!- FishNot has joined.
02:57:45 <Sgeo> Someone should totally write a game that breaks if the behavior of double-clicking the title is different
03:09:33 <lambdabot> Data.Tuple swap :: (a, b) -> (b, a)
03:09:33 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
03:09:33 <lambdabot> Data.Graph.Inductive.Query.Monad mapSnd :: (a -> b) -> (c, a) -> (c, b)
04:07:03 <FishNot> The ultimate in unnecessary abstractions.
04:07:51 -!- FishNot has quit (Quit: A fishbot swims away).
04:34:00 <kallisti> linearMoves m cs ps = case step board m of
04:34:02 <kallisti> False -> linearMoves m' (c':cs) (insert m' ps)
04:34:05 <kallisti> | otherwise -> linearMoves m' (c':cs) ps
04:40:13 <lambdabot> Data.List unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
04:40:14 <lambdabot> Data.ByteString.Lazy.Char8 unfoldr :: (a -> Maybe (Char, a)) -> a -> ByteString
04:40:14 <lambdabot> Data.ByteString.Char8 unfoldr :: (a -> Maybe (Char, a)) -> a -> ByteString
04:40:34 <kallisti> ah yes this is what I'm looking for
04:41:20 <lambdabot> Data.List unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
04:41:20 <lambdabot> Data.Tree unfoldForest :: (b -> (a, [b])) -> [b] -> Forest a
04:41:20 <lambdabot> Data.Tree unfoldForestM :: Monad m => (b -> m (a, [b])) -> [b] -> m (Forest a)
04:46:57 -!- cheater has quit (Ping timeout: 248 seconds).
04:49:32 <kallisti> wow everything was relatively clean until I got here... :P
04:50:26 <kallisti> I think it would be cleaner if I used State here.
04:52:57 <itidus21> if you have escaped the State then you can't sell out to it now
05:04:08 <lambdabot> sequence (x:xs) = do v <- x; vs <- sequence xs; return (v:vs)
05:04:08 <lambdabot> -- OR: sequence = foldr (liftM2 (:)) (return [])
05:21:22 -!- cheater has joined.
05:46:54 <lambdabot> liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
05:47:03 <lambdabot> forall a1 a2 r (m :: * -> *). (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
06:03:29 -!- TeruFSX has quit (Read error: Connection reset by peer).
06:04:09 -!- TeruFSX has joined.
06:04:30 -!- MDude has changed nick to MSleep.
06:26:09 <kallisti> http://hpaste.org/56781 this must be what crazy people write on walls.
06:28:32 <kallisti> I wonder what other ways I could do this.
06:28:40 <kallisti> instead of defining what the entire moveset is.
06:33:33 * kallisti can't figure out what abstraction I should be using to make this better.
06:35:37 <itidus21> http://www.haskell.org/haskellwiki/Applications_and_libraries/Games
06:36:54 <kallisti> I'm writing server code, not graphical stuff.
06:37:21 <kallisti> and uh.... none of those are abstractions
06:40:24 <lambdabot> Plugin `unmtl' failed with: `State' is not applied to enough arguments, giving `/\A B. A -> (B, A)'
06:40:30 <Sgeo> @unmtl State s
06:40:31 <lambdabot> Plugin `unmtl' failed with: `State s' is not applied to enough arguments, giving `/\A. s -> (A, s)'
06:40:33 <Sgeo> @unmtl State s a
06:40:34 <itidus21> i also don't see that as a fault but merely as trying to solve a different problem
06:41:33 <Sgeo> The notion of a thing that "changes state" and gives back a value is just a thing that takes in a current state, and returns a value, and a different state
06:44:11 <itidus21> a notion is a concept defined in the terms the definer best understands :>
06:44:55 <Sgeo> Take the universe.
06:45:11 <Sgeo> When you do something, you change the universe.
06:45:54 <Sgeo> But another way to look at it is that you accept an unchanging universe as input, and give an unchanging universe as output.
06:45:55 <itidus21> i think the universe in this case means anything which can be changed
06:47:53 <Sgeo> You have a variable, some_var
06:48:08 <Sgeo> You increment some_var like this: some_var++
06:48:11 <itidus21> which idiot invented variables i wonder
06:48:13 <Sgeo> some_var now stores 1
06:48:43 <kallisti> everything should be pointfree.
06:48:46 <variable> kallisti: itidus21 there is only one of me
06:48:57 <Sgeo> But, you could say that incrementing is just taking a number, adding 1 to it, and giving that
06:49:01 <variable> and whomever invented me deserves to get shot !
06:49:33 <kallisti> Sgeo: I believe I figured out my abstraction.
06:49:35 <Sgeo> kallisti, in \x -> x, does x count as a variable? It can't be altered within the function
06:49:45 <Sgeo> kallisti, yay!
06:49:52 <Sgeo> Not sure why you're telling me, but yay
06:50:05 <kallisti> I should first generate the empty list I want to avoid, then define a higher-order function that allows me to plug in specific code to detect the infinite loop.
06:50:24 <kallisti> s/empty list/possibly infinite list/
06:50:56 <kallisti> similar to an unfold, in that a Nothing result will terminate the list.
06:51:56 * Sgeo is falling asleep at the switch
06:52:16 <Sgeo> You really want me reviewing Haskell code?
06:53:25 <itidus21> if i understood functions, which i don't, im still not convinced that i would be impressed by function notation
06:54:01 <kallisti> code: http://sprunge.us/EXMN associative data types: http://sprunge.us/BSDF some things are pretty some things are not.
06:54:14 <itidus21> i think des cartes made progress by his whatever he contributed to drawing functions
06:54:19 <Sgeo> itidus21, ... have you never touched a non-esoteric programming language?
06:54:43 <Sgeo> Or do you mean pure functions?
06:54:48 <kallisti> Sgeo: he has supposedly programmed in C++ but I am skeptical. :P
06:55:20 <itidus21> what is the point of this channel if not to explain the value of pure functions?
06:55:39 <kallisti> to discuss esoteric programming languages
06:56:11 <kallisti> or whatever we feel like discussing, with a general relevance to computer science
06:56:47 <Sgeo> itidus21, name a C++ function you have written that had a non-void return type and at least one argument.
06:56:48 <itidus21> perhaps it is the similarity between a given language and pure functions which determines how esoteric it is
06:56:53 <kallisti> Sgeo: is this code legible at all. :P
06:57:04 <Sgeo> kallisti, eek, I didn't even notice the links
06:57:09 <itidus21> int add(int a, int b) { return a + b; }
06:57:16 <Sgeo> itidus21, there we go
06:57:41 <Sgeo> itidus21, that function is pure. In order to do its thing, it only relies on its arguments.
06:57:51 <kallisti> itidus21: you seem to be under the mistaken impression that since we talk about Haskell a lot, it must be heavily on topic.
06:58:07 <itidus21> i have to infer the meaning of most words by context in here such as pure
06:58:37 <Sgeo> A pure function is a function that only looks at its arguments and returns a value based on its arguments.
06:58:40 <itidus21> but it gives a false impression i am familiar with some terms
06:59:01 <Sgeo> It doesn't set global variables, it doesn't read from a file, etc. etc.
06:59:14 <itidus21> so untyped lambda calc is not the same thing as pure
06:59:20 <kallisti> Sgeo: s/arguments/arguments and free variables/
06:59:37 <Sgeo> kallisti, good point
07:00:05 <Sgeo> kallisti, Loop?
07:00:16 <itidus21> i mean, if i had to explain the relationship between "int add(int a, int b) { return a + b; }" and "untyped lambda calculus"
07:00:35 <kallisti> Sgeo: I think I've explained how loops work in portal chess?
07:00:36 <itidus21> both phrases relate to functions in some way
07:00:37 <Sgeo> kallisti, what's with the Storable stuff?
07:00:51 <Sgeo> kallisti, I haven't been paying any attention whatsoever to the portal chess stuff, sorry
07:01:05 <kallisti> Sgeo: some thing elliott convinced me to do when he was helping me get started. essentially it allows me to store my board state as a contiguous Word16 array.
07:01:44 <kallisti> yes similar to imap from Data.Vector
07:01:54 <kallisti> it's map but with Index -> Element -> Element
07:02:17 <Sgeo> naming fillSquare isn't really needed there, but I can't tell if doing so helps readability
07:02:23 <kallisti> I have another module called PortalChess.Util.Enums which allows me to generate Enum instances for any 2-element product types, which I use to define the Storable instance
07:02:59 <itidus21> what if i said int zero(int a, int b) { return a; }
07:03:04 <kallisti> Sgeo: oh yes I could remove that
07:03:18 <itidus21> as a way to understand 0 := λf.λx.x
07:04:03 <Sgeo> o.O at if/then/else all being at the same indentation
07:04:04 <itidus21> i just don't have a clue what im saying
07:04:28 <Sgeo> (No, I'm not saying that's bad, I'm saying I wasn't aware that that worked)
07:04:29 <kallisti> that's how haskell-mode indents it. -shrug-
07:04:59 <Sgeo> I guess I thought DoAndIfThenElse only worked in do blocks
07:05:00 <kallisti> Sgeo: if then else doesn't rely on layout as far as I know
07:05:24 <Sgeo> itidus21, it would be return b, not return a
07:05:38 <kallisti> Sgeo: in that particular function I found the let / if syntax clearer than the equivalent guard/where syntax
07:05:40 <Sgeo> But that's currying stuff you're doing, which is a bit ahead of understanding purity
07:06:13 <Sgeo> step' (Move (r, f) d) = Move <$> ((,) <$> r' <*> f') <*> pure d
07:07:09 <Sgeo> Assigning names never killed anyone, except for all the people it killed.
07:07:14 <kallisti> step' does a basic increment on the board. so if you give a coordinate and North, it moves one space north.
07:07:27 <kallisti> step does that but also follows portals on the board.
07:07:30 -!- jix has quit (Ping timeout: 252 seconds).
07:08:07 <kallisti> I use step' in followPortal because if I used step then I could easily get in recursive loops.
07:08:21 <kallisti> later I intend to do some manual checking for that case.
07:08:55 <kallisti> Sgeo: but really if you're familiar with the f <$> x <*> y idiom that's not terribly illegible.
07:09:42 * Sgeo may be a bit tired right now
07:10:21 * kallisti says the person asking for help.
07:10:34 <kallisti> (says the person asking for help. also a person who is totally not tired also)
07:11:09 <itidus21> int zero(int f, int x) { return x; } int succ(int n, int f, int x) { return f; } int one(int f, int x) { return succ(n, zero(f, x), x); } -- this should give insight to anyone who wonders why i don't just magically "get" LC
07:11:10 <kallisti> Sgeo: the main thing I want to work on is linearMoves
07:11:29 <kallisti> which describes the movesets of pieces like bishops, rooks, and queens
07:11:46 <kallisti> but.... I have to take into account portals
07:11:57 <Sgeo> I note your use of State internally
07:12:02 <itidus21> i dont even care where its right or wrong
07:12:07 <kallisti> yes it made the algorithm somewhat clearer.
07:12:49 <kallisti> I'm keeping a set of portals I've encountered along the path, and I want to pass that bit of state on to other invocations of the function
07:13:26 * Sgeo needs to force himself to think more in terms of "yes, functions can locally use a monad then run the monad and expose something without it
07:13:27 <kallisti> if, at any point, I end up back at the same portal, then I've found a loop, at which point I terminate the walk.
07:14:02 <Sgeo> (e.g. I should probably be using ReaderT for stuff in my library which is not going to expose the fact that it's using ReaderT)
07:14:44 <kallisti> yes most monad instances have some other non-monad abstraction that defines some kind of m a -> a
07:15:38 <Sgeo> Besides IO, which ones don't?
07:16:23 <kallisti> none that I can think of off the top of my head.
07:16:47 <kallisti> mapM linearMoves is where the state threading happens.
07:17:13 <kallisti> it's not strictly necessary but in some cases it will result in a faster short-circuit
07:17:18 <lambdabot> forall a r. ((a -> r) -> r) -> Cont r a
07:17:21 <lambdabot> forall r a. Cont r a -> (a -> r) -> r
07:17:43 <Sgeo> :t (`runCont` id)
07:18:03 <kallisti> I think what I'll do is use the stepLines function I just wrote, and then have an onPortal function, which takes another function to apply whenever a portal is encountered along the walk
07:18:14 <kallisti> as there will be other situations where I want to do special when I encounter a portal.
07:19:07 <itidus21> looking at wiki i see it says "The second observation is that the specific choice of name for a function's arguments is largely irrelevant."
07:19:09 <kallisti> stepLines is like linearMoves except without all the short-circuiting logic. it will walk infinitely in some cases.
07:19:23 <itidus21> i guess this is like saying each scope has an alphabet
07:20:07 <kallisti> itidus21: it's saying that you could use any set of distinct symbols, the specific symbol doesn't matter so long as distinct variables are annotated by distinct symbols
07:20:35 <kallisti> De Bruijn indices make things easier by assigning numbers instead of arbitrary symbols to variable names
07:20:38 <itidus21> an alphabet could also be defined as "any set of distinct symbols" >:-)
07:21:23 <kallisti> yes, indeed, but you said something unrelated to the distinctness
07:22:12 <kallisti> in De Bruijn indices, the number indicates how many lambda abstractions upward you would travel in order to find the lambda abstraction that bound the variable
07:22:14 <itidus21> thats why i am not allowed in the jedi council
07:22:29 <kallisti> so 0 refers to the most deeply bound variable in that expression, 1 is the level above, 2 is the level above that, etc.
07:24:04 <itidus21> and global is infinite debrujin index then i guess
07:24:30 <kallisti> Sgeo: do you think resourceT could be useful in your AW library?
07:25:08 <Sgeo> Still not sure I want to expose that though
07:30:25 * kallisti would one day like to find a use for Cont
07:30:34 <kallisti> as it seems to just sit around being powerful and unused.
07:31:26 <Sgeo> delcont or whatever is supposed to be more powerful
07:31:40 <Sgeo> Or, well, I guess Cont is delimited too
07:33:23 <Sgeo> http://hackage.haskell.org/package/CC-delcont
07:33:30 <Sgeo> It's an Oleg thing, of course
07:33:45 <Sgeo> Well, at least partially Oleg
07:34:30 <kallisti> dynamically scoped variables? whut?
07:37:55 <itidus21> 1) int add(int a, int b) { return a + b; } 2) int (int a, int b) { return a + b; } 3) int (int foo, int bar) { return foo + bar; } 4) int (int foo) { return {int (int bar} { return foo + bar;}}; }
07:39:12 <kallisti> itidus21: well, at least you seem to understand currying
07:39:20 <kallisti> I don't know what you're trying to do though.
07:40:03 <itidus21> http://en.wikipedia.org/wiki/Lambda_calculus#Motivation
07:40:22 <itidus21> if only it could all be that easy
07:40:29 <kallisti> Sgeo: this delimited cont stuff reminds me of a menu system I wrote for a MUD codebase in Python.
07:44:14 <itidus21> basically, that motivation section makes perfect sense to me
07:44:33 <itidus21> but once it departs from that its like chinese
07:45:21 <kallisti> it's the same stuff just different notation
07:46:17 <itidus21> i think they could make an untyped lambda calculus written in a way imperatve programmers could understand if they really wanted
07:46:34 <kallisti> itidus21: yes, they have. it's called the untyped lambda calculus. :P
07:47:34 <itidus21> well.. imperative programmers don't tend to use the phrase function application
07:48:36 <kallisti> though in this case the semantics are a bit different. function call usually involves a specific calling convention.
07:48:43 <kallisti> itidus21: but if you need silly pictoral representations check this out: http://worrydream.com/AlligatorEggs/
07:49:32 <itidus21> well heres what i would do to C to make it more in line with untyped lambda calc
07:49:47 <itidus21> first of all, since there is only 1 type, there is no need for type differntiating keywords
07:50:23 <kallisti> instead of going off on that tangent
07:50:24 <itidus21> so something like int add(int a, int b) { return a + b; } would become... add(a, b) {return a + b;}
07:50:39 <kallisti> not only should you read the actual link text
07:50:50 <itidus21> i already know the alligators don't help my particular gripe
07:50:52 <kallisti> but you should link on it and read the information displayed in your browser,, as well.
07:52:25 <itidus21> now i think what actually happens is that anonymous functions simply have a placeholder name
07:53:13 <itidus21> something like: 1) int add(int a, int b) { return a + b; } 2) add(a, b) {return a + b;} 3) *(a, b) { a + b}
07:53:14 <kallisti> assign an anonymous function a name it becomes a nonymous function. :P
07:53:28 <kallisti> itidus21: C++11 has lambda functions
07:53:38 <itidus21> ok here what i have also done is remove the return keyword since the only thing which happens in the body of sucha function is a return
07:53:54 <kallisti> itidus21: note necessarily a requirement in C
07:53:58 <kallisti> it could easily have multiple lines and a return
07:57:58 <itidus21> regular C function: int add(int a, int b) { return a + b; } types stripped away: add(a, b) {return a + b;} return keyword stripped away: add(a, b) {a + b} anonymous: (a, b) {a + b} curried: (a) { (b) {a+b} }
07:58:25 <kallisti> itidus21: I don't really see what you're trying to accomplish
07:59:14 <kallisti> are you trying to make lambda calculus look more like C?
07:59:33 <kallisti> making C look like untyped lambda calculus won't work because it has a static type system.
07:59:48 <kallisti> it's not really going to be C anymore.
08:00:28 * Sgeo goes to execute a few hours in the Zzz monad
08:00:42 <itidus21> the + operator seems to break this task i am trying
08:00:51 <Sgeo> No, that doesn't entirely make sens,e in case itidus21 was wondering, fucb i don't care.
08:00:58 <kallisti> many things break the task you're trying.
08:01:40 <kallisti> for someone who doesn't know what they're trying to do, you seem to be saying things that suggest you know what you're trying to do:
08:01:43 <itidus21> it is pointless to define an add function through calling +
08:01:49 <kallisti> for example, mentioned the "task you're trying"
08:02:07 <kallisti> itidus21: not to mention that in lambda calculus variables always refer to other functions
08:03:59 <itidus21> i guess im curious how to go from "(a) { (b) {a+b} }" to "λmnfx.m f (n f x)"
08:04:29 <itidus21> ya i copied the later off wiki
08:04:30 <kallisti> but first understand lambda calculus if you haven't yet.
08:06:06 <kallisti> essentially the idea is that you can define data by an operation that you can perform with it.
08:06:43 <kallisti> the act of executing the operation is equivalent to having the data to perform it. The operation is the data itself.
08:06:52 <kallisti> do you understand church booleans?
08:07:00 -!- zzo38 has joined.
08:09:03 <itidus21> so, putting it another way, you can define an answer by the questions you can solve with it
08:09:22 <kallisti> it helps to look at specific examples.
08:11:32 <kallisti> the first one, given two arguments, returns the first one. the second one, when given the same two arguments, returns the second one.
08:11:42 <kallisti> if you look at how a conditional branch works, this is basically the same idea.
08:11:57 <itidus21> see, i personally find the syntax "(x,y) x" makes more sense than "\x.\y. x" ... my troubles begin there
08:12:35 <kallisti> the core idea? the syntax is completely irrelevant.
08:12:38 -!- Ngevd has joined.
08:13:07 <itidus21> its meant to be a tree, right?
08:13:19 <itidus21> im supposed to look at \x.\y. x and see a tree :P
08:13:32 <kallisti> the syntax is just the notation. learn the notation, and it no longer becomes a hinderance. the fact that it doesn't look like something you're not familiar with doesn't mean it's impenetrable suddenly.
08:14:18 <kallisti> if you have this mindset, you're not going to learn anything ever. you will be stuck with whatever superficial layer of syntax you prefer and not learn about anything else.
08:14:32 <itidus21> it is the only time i have ever encountered something i couldn't intuit
08:14:51 <itidus21> oops.. tat is true for all of math
08:14:52 <kallisti> itidus21: yes you can construct a lambda expression as a tree
08:15:03 <kallisti> most expression syntaxes can be viewed as trees
08:15:42 <kallisti> but you don't have to think of it as a tree
08:15:48 <kallisti> just think of it however you normally think of expressions
08:15:49 <itidus21> kind of like a chessboard makes most sense as a 2d grid
08:16:34 <kallisti> I'm quite familiar with thinking of expressions without visualizing the entire syntax tree. the latter would be pretty taxing
08:16:54 <kallisti> I do this all the time when I program. I just think of it in terms of symbols
08:17:25 <kallisti> lambda calculus is a computation model focused on symbolic reasoning.
08:18:51 <Ngevd> itidus21, what does \x.x do? (hint, this is an easy one)
08:19:58 <kallisti> Ngevd: so I'm guessing you've already implemented portal chess?
08:20:10 <kallisti> I've made some progress since last we spoke.
08:20:31 <Ngevd> kallisti, nah, I was just planning to get a chessboard, some matches, some string, and a webcam
08:21:01 <kallisti> code: http://sprunge.us/EXMN associative data types: http://sprunge.us/BSDF some things are pretty some things are not.
08:21:06 <itidus21> ok that is the identity expression.. .. in C terms i would see it as: type_t identity(type_t a1) { return a1; }
08:21:25 <Ngevd> itidus21, How about \x y . x y?
08:22:14 <kallisti> uh oh you're going to get him to start using function pointers.
08:22:39 <itidus21> i believe it is a healthy way to operate ones brain
08:22:57 <Ngevd> Not analogies to C!
08:23:32 <itidus21> the neurons in ones brain which understand untyped lambda calculus can communicate with the neurons which understand apples and oranges
08:24:21 <kallisti> wow you know the secrets of the brain but can't understand lambda calculus? interesting.
08:25:03 <itidus21> (in other words.. i see notational ambiguity when i read \x y . x y
08:25:16 <itidus21> and.. i give up before i even begin :P
08:25:42 <kallisti> I don't see any notational ambiguity. what ambiguities do you see?
08:26:28 <kallisti> \x y . x y is a short hand for the curried syntax, which is how lambda calculus actually works, and looks like:
08:26:44 <itidus21> expression body vs application
08:26:58 <kallisti> itidus21: there is no application in this example
08:27:26 <itidus21> the whole notation is so weird >:-)
08:28:14 <itidus21> if everything is explicit then its unwieldly, if it's implicit then lots of bracketing rules.. all because its expressed as a line and not a tree
08:28:38 <itidus21> but i guess that overhead must pay off eventually
08:30:53 <kallisti> typically the lambda extends to the end of the line or until the end of the parenthetical expression it's in
08:30:53 <Ngevd> Well, I'm starting to make placeholder piece graphics for portalchess
08:31:29 <Ngevd> Being a poet/mathematician, not an artist, means they sorta scuk
08:32:47 <Ngevd> What does the C stand for in CCannon?
08:33:12 <Ngevd> I would have used O for Orthangonal, but that's probably wrong
08:33:38 <kallisti> OCannon is kind of weird though.
08:34:16 <kallisti> I am mixing up my terms a bit actually
08:34:28 <kallisti> for compose points I should use cardinal and intercardinal
08:34:59 <Ngevd> What format should I save the graphics?
08:35:41 <kallisti> .svg would be good too if they're vector graphics.
08:35:59 <Ngevd> Nah, pixel graphics.
08:36:06 <Ngevd> I'm not good at vector graphics
08:36:25 <kallisti> I imagine arrows as little >>'s
08:36:38 <zzo38> Other way is use METAFONT?
08:37:12 -!- jix has joined.
08:37:23 <zzo38> METAFONT is also scalable although the output will be raster graphics
08:40:57 <zzo38> Now you have Portal Direction (Maybe Coord)
08:41:06 <zzo38> Are you going to display that too?
08:41:28 <kallisti> is that players can now have only one portal on the field
08:44:43 -!- Vorpal has joined.
08:45:34 <itidus21> it could be argued (by me) that a lambda calculus expression is of the type text-string .. "λf.λx.x\0" for example is char expression[8];
08:46:39 <Ngevd> That's a representation of a lambda expression, not a lambda expression
08:47:57 <Ngevd> That's me trying to make sense
08:48:22 <kallisti> itidus21: the wikipedia tells you what constitutes a lambda calculus expression
08:49:03 <kallisti> a string is a representation of that, and a shitty one at that. it's an unparsed lambda expression in much the same way that a text-string can also represent a "C expression"
08:49:35 <itidus21> i have to wonder if familiarity with mathematical functions is a useful prerequistite to LC
08:50:16 <itidus21> after all, some seem to dislike the disparity between an imperative language "function" and a math function
08:50:24 <kallisti> you may be getting confused because lambda calculus isn't "call by value".
08:50:59 <Ngevd> kallisti, strictly speaking, lambda no wait I don't want to confuse itidus
08:51:02 <kallisti> so when you apply a lambda abstraction to a lambda term, it substitutes the expression itself into the body of the lambda.
08:51:08 <zzo38> It is two different things meaning by "function"
08:51:20 <itidus21> when church came up with this stuff, he hadn't seen imperative languages i think
08:51:26 <itidus21> i am not sure about this though
08:52:01 <itidus21> it doesn't make sense without computers to run them on
08:52:09 <kallisti> computers weren't really a thing in 1936
08:53:16 <zzo38> Is this correct? ("delimit", Right $ \p @ ProgramState { psTokens = h : t } -> uncurry (:) . (Block *** tail) $ break (== h) t)
08:53:29 <zzo38> Or is there other function for such things?
08:54:07 <itidus21> i think it may help those who are in the itidus tarpit.. to know that i actually get this much confusion every single time i read a wiki math page
08:54:13 <itidus21> its not really limited to LC math
08:54:29 <itidus21> i like to hide or deny this, but it is the truth
08:55:49 <itidus21> my (limited) knowledge of programming is too large out of proportion of my math knowledge
08:56:43 <itidus21> like, i see a little letter above a sigma and think.. ahh here we go.. and i say it in irc like this in an anecdote and i know everyone here could tell me what it meant :P but its just an example
08:57:11 <itidus21> and the same is true for the little "i=1" under something
08:59:17 <kallisti> I think this is your problem... you probably do something like this:
08:59:47 <kallisti> a) open wikipedia article b) start reading c) see big scary maths symbols d) freak out e) go do something else
09:00:14 -!- oerjan has joined.
09:00:59 <itidus21> the main trouble with it is that math words are all nearly defined in terms of each other
09:01:44 * oerjan gets this urge to berate itidus21 for nonsense, then realizes it's actually true
09:02:02 <itidus21> but thats how dictionarys work too
09:02:48 <oerjan> although that should be "nearly all defined exactly in terms of each other"
09:03:39 <oerjan> the original fits better for dictionaries though
09:04:02 <itidus21> its probably for the best to keep me out like a shibbaleth
09:04:16 <itidus21> for i don't have the responsibility appropriate for knowledge
09:04:27 <oerjan> especially as one who cannot spell shibboleth ;P
09:04:40 <Ngevd> kallisti, what should lenses/prisms look like?
09:05:33 <kallisti> dunno, symbolically I imagine them similarly to portals.
09:05:56 -!- hagb4rd has joined.
09:08:02 <itidus21> i am artistic which really means i am keen to create representations of things lacking in utility, as contrasted with being someone who creates useful things which may or may not be representations of other things
09:09:04 -!- zzo38 has quit (Remote host closed the connection).
09:11:52 -!- monqy has quit (Quit: hello).
09:12:02 <itidus21> so my goal is to make games, that is the end, everything else, including eating breakfast, watching tv, showering, is just the means
09:12:22 <itidus21> cos i figure it's good to have a goal like that
09:13:01 <Ngevd> kallisti, there's my placeholder graphics for pieces not in real chess
09:13:40 <oerjan> <fizzie> ^ul ((15a)(14s)(1k)(2e)(12l)(11l)(10 )(3H)(9a)(8s)(7k)(5e)(4l)(13l)(6 )(0H))(~^:()SSa~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a*~:^):^
09:14:00 <oerjan> Gregor: MAKE THE LOGS SHOW COLORS, STAT
09:14:07 * oerjan is not entirely serious
09:14:22 <itidus21> i'm sure babbage would be happy to know his ideas end up being more useful for kids entertainment than war machines
09:14:41 <hagb4rd> Ngevd: you have programmed a chess game?
09:14:43 <oerjan> ^ul ((15a)(14s)(1k)(2e)(12l)(11l)(10 )(3H)(9a)(8s)(7k)(5e)(4l)(13l)(6 )(0H))(~^:()SSa~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a~*~a*~:^):^
09:14:43 <fungot> Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell ...too much output!
09:14:53 <Ngevd> hagb4rd, nowhere near
09:15:06 <Ngevd> kallisti has made a chess variant and I'm doing what I can to help
09:15:40 <hagb4rd> cool.. i always wanted to make a chess variant for icq
09:15:47 * kallisti appreciates the help, by the way. o_o
09:16:04 <kallisti> I haven't really thought about graphics yet.
09:16:20 <itidus21> so, i think about games by imagining scenes in my head
09:16:42 <itidus21> like a character moving about some environment
09:16:57 <Ngevd> http://s1239.photobucket.com/albums/ff508/Taneb/Portal%20chess/
09:17:00 <itidus21> and i think about what logic he is moving by
09:17:07 <hagb4rd> it would be kool to have a server to for chess board generation
09:17:29 <hagb4rd> posting a link to a graphic in the end
09:17:42 <kallisti> my plan is something like: a) the game itself b) network protocol c) simple text-based client for playtesting e) multi-threading / handle multiple games at once f) graphical client
09:17:44 <itidus21> and i think about how can art assets in a game be more utilized
09:18:40 <itidus21> like by using skeletal animation one drawing or model of a skeleton can be extended into animations
09:19:06 <itidus21> or.. pallette swapping, or texture swapping is another way to utilize art assets
09:20:22 <hagb4rd> it would be nice to use it like: a4-a5
09:22:12 <itidus21> and if i make my own language, the more i know about odd languages the more i am likely to think up something noone else thought of
09:24:40 <itidus21> my thought can be written like: language CreateLanguage(boolean knowslambdacalc) { if (knowslambdacalc) return good_language; else return bad_language; }
09:25:03 <kallisti> ...................................................................................................................................................................................................................................................................................................
09:26:09 <hagb4rd> kallisti: why not use irc as network protocol?
09:26:11 <itidus21> LC or at least one model of computation
09:26:36 <kallisti> hagb4rd: what would I gain from that?
09:26:45 <itidus21> i don't think it's possible to make best possible language if i don't know any models of computation
09:27:34 <kallisti> eh I don't know that I save any time
09:27:37 <hagb4rd> but if you want some insight into network protocols, i guess you better make it your own
09:27:47 <kallisti> on top of dealing with my own protocol I now have to deal with IRC. :P
09:28:16 <kallisti> hagb4rd: I would say I'm pretty familiar with network protocols already. there's no much too them.
09:29:04 -!- kmc has joined.
09:30:52 <Ngevd> I think the protocol should go Send move -> wait -> get response -> if ("invalid) goto "Send move" -> check validity -> if invalid send reject then goto "get response" -> go to "send move"
09:31:03 <Ngevd> Not knowing much about network protocols
09:33:05 <kallisti> is that client side? what validity checking must the client do?
09:33:13 <hagb4rd> for real one can seperate the complete game logic from the network protocol
09:33:17 <Ngevd> kallisti, I was imagining peer to peer
09:33:25 <Ngevd> Checking if the other client is cheating
09:33:46 <kallisti> simplifies the client programs
09:33:48 <hagb4rd> its even easier in turn based games like chess
09:34:11 <Ngevd> Hmm... client-server also makes doing rankings easier?
09:35:00 <kallisti> well, I don't know if I'll do rankings but I do want to have a multi-user game matchup system.
09:36:16 <kallisti> because I need to support the thriving portal chess community that will soon follow from its swell in popularity.
09:37:16 <Ngevd> Is there any GL you want me to strive for?
09:37:22 -!- Phantom_Hoover has joined.
09:38:41 <hagb4rd> and you want to use the standard 8x8 fields chessboard
09:40:21 <hagb4rd> iv'seen variations to that.. a chess board for 4 players.. but never played it
09:41:04 <hagb4rd> http://www.quadibloc.com/chess/images/fpc.gif
09:51:59 <Ngevd> kallisti, what's fromEnumProd?
09:53:49 <Ngevd> It's used 4 times in PortalChess.Types, but I can't find the definition
09:54:35 * oerjan takes a stab at product . map fromEnum
09:55:38 <Ngevd> it seems to be :: (Enum a, Enum b) => a -> b -> Int
09:56:04 <oerjan> aha. \x y -> fromEnum x * fromEnum y then
09:57:17 <Phantom_Hoover> I think I had a dream wherein Gregor had a child and was dressing it up in a range of suits.
09:59:03 <oerjan> then child protection services arrived, i can only assume.
10:06:15 -!- Ngevd has quit (Ping timeout: 240 seconds).
10:40:58 -!- Ngevd has joined.
10:42:55 -!- oerjan has set topic: now open for Americans to liberate | Get your esoil and esoline here! | Glorious optator institutes permanent ban penalty for power tripping | Weapons of mass banning "just monoids in the category of endomorphisms, what's the problem?" | Spotted marsh elliott suspected extinct from channel | Gregorian chants outlawed, "American" | http://codu.org/logs/_esoteric/.
10:43:09 -!- oerjan has set topic: Now open for Americans to liberate | Get your esoil and esoline here! | Glorious optator institutes permanent ban penalty for power tripping | Weapons of mass banning "just monoids in the category of endomorphisms, what's the problem?" | Spotted marsh elliott suspected extinct from channel | Gregorian chants outlawed, "American" | http://codu.org/logs/_esoteric/.
10:44:04 -!- oerjan has set topic: Now open for Americans to liberate | Get your esoil and esoline here! | Glorious optator institutes permanent ban penalty for power tripping | Weapons of mass banning "just monoids in the category of endofunctors, what's the problem?" | Spotted marsh elliott suspected extinct from channel | Gregorian chants outlawed, "American" | http://codu.org/logs/_esoteric/.
10:52:19 -!- KingOfKarlsruhe has joined.
11:14:16 -!- Ngevd has quit (Quit: Goodbye).
11:14:28 -!- KingOfKarlsruhe has quit (Remote host closed the connection).
11:35:59 <fizzie> freenode is so very generous when it comes to topic length.
12:52:24 <hagb4rd> have you found elliott at last?
12:53:26 <oerjan> oh he's never been _far_ away
12:53:53 <hagb4rd> i hope he has not decided to stop the war in afghanistan by himself
12:54:35 <oerjan> i somehow don't see that as his kind of thing. i don't think afghanistan is sufficiently computerized for his methods to work.
13:01:51 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
13:03:47 -!- hagb4rd has quit (Ping timeout: 240 seconds).
13:04:01 -!- hagb4rd has joined.
13:06:43 -!- oerjan has quit (Quit: Later).
13:33:23 -!- sebbu has quit (Read error: Connection reset by peer).
13:33:49 -!- sebbu has joined.
13:41:08 -!- Phantom_Hoover has quit (Remote host closed the connection).
14:14:01 -!- augur_ has changed nick to augur.
14:16:13 -!- Ngevd has joined.
14:41:51 -!- Ngevd has quit (Read error: Connection reset by peer).
14:41:52 -!- Taneb has joined.
14:46:28 <Taneb> Well, the cloning project went wrong again
14:52:11 <Taneb> Universities in Scandinavia.
14:54:51 -!- Ngevd has joined.
14:55:18 -!- Taneb has quit (Read error: Connection reset by peer).
15:12:37 -!- kallisti has quit (Ping timeout: 252 seconds).
15:14:34 -!- kallisti has joined.
15:14:35 -!- kallisti has quit (Changing host).
15:14:35 -!- kallisti has joined.
15:23:05 -!- Taneb has joined.
15:23:44 -!- Ngevd has quit (Read error: Connection reset by peer).
15:23:49 <Gregor> <Phantom_Hoover> I think I had a dream wherein Gregor had a child and was dressing it up in a range of suits. // I hereby forbid you from using my name, ever.
15:48:28 -!- Taneb has changed nick to Ngevd.
15:50:20 <Ngevd> I break pastewisdom
15:50:26 <HackEgo> .6M?X$UE0X.\>..of[N..qBO{\ \ .'-p)Q4XDe/u#u.Ooʷಞ@\);Ԅ@'ʣӂ.dD\v}ISk53.7HE?.ЪLR':.S*]YD>i2<N.a1UA.8Љ+w.4..v|P7c.v_`b.$>AR%.Q.*.+,c3,H.CDF·-xv'do#|F|Gpr^n%٠`EiLBC.<../K36.|.t&}..6x~....zs1(..i=.W.09..tXh.z.҅=Y-+aEЬ.lқbo
16:11:50 -!- azaq23 has joined.
16:42:07 -!- MSleep has changed nick to MDude.
16:50:36 -!- Ngevd has quit (Ping timeout: 244 seconds).
16:53:11 -!- Ngevd has joined.
17:24:40 <Ngevd> I can't picture this
17:26:55 <Ngevd> > repeat "Aaargh\n"
17:26:56 <lambdabot> ["Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\...
17:27:04 <Ngevd> > concat (repeat "Aaargh\n")
17:27:04 <lambdabot> "Aaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAa...
17:27:10 <Ngevd> > concat (repeat "Aaargh")
17:27:10 <lambdabot> "AaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAa...
17:29:32 -!- NihilistDandy has joined.
17:43:32 <Ngevd> kallisti, I now can display an empty chessboard
17:49:58 <HackEgo> kallisti is a former prophet swearing off his pastry deity
17:50:23 <HackEgo> Taneb is not actually Ngevd, no matter what you may have heard.
17:52:38 <fungot> Ngevd: mr president, commissioner, ladies and gentlemen, first of all, to resume the debate on the commission and that these are going to consult parliament before the presidential elections in kazakhstan on 10 january were a slap in the face of the violations of human rights perpetrated by both sides, the candidate for the presidency in its contacts with the chinese about how the accord could represent an fnord end to our inte
17:52:43 <fungot> Available: agora alice c64 ct darwin discworld europarl* ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack pa qwantz sms speeches ss wp youtube
17:52:48 <fungot> Selected style: iwcs (Irregular Webcomic scripts)
17:52:58 <Ngevd> fungot, allosaurus?
17:52:59 <fungot> Ngevd: what, the ability to be captured a spanish galleon! arrr!! you two had an affair?
17:53:55 <fungot> Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams)
17:54:01 <fungot> Ngevd: rather, i suggested for a moment. let me find another way to write that way
17:54:41 <Ngevd> Is any other human here?
17:58:31 <Ngevd> @ask kallisti why is the (Maybe coord) in Portal there? If it's where the other portal is, it a) restricts promotion of pawns and b) can be found by searching the map. If b) is stupid but a) is not, replace it with [coord], perhaps?
18:00:16 <Ngevd> Now is a silly time
18:00:16 <lambdabot> Ngevd: You have 1 new message. '/msg lambdabot @messages' to read it.
18:04:55 -!- Ngevd has quit (Quit: dog).
18:26:24 <kallisti> @ask Ngevd can you think of a sane method by which pawns may be promoted to portals when 2+ portals are already on the field? Also, how do you propose that portal link to multiple portals (which is what you're describing)
18:28:36 <kallisti> @tell Ngevd searching the field is an option but it seemed like a more cumbersome solution. Also, it prevents the situation you describe because without that data I can't determine which portal out of 3 or more portals corresponds to another.
18:33:57 <fungot> kallisti: hm... /me should really start complaining about that i'm unable to take advantage of
18:40:46 -!- Ngevd has joined.
18:41:18 <lambdabot> Ngevd: You have 3 new messages. '/msg lambdabot @messages' to read them.
18:45:19 <Ngevd> 3+ portals: thing going through the portals' choice
18:48:16 -!- ais523 has joined.
18:48:19 <Ngevd> This allows for players to promote a pawn to portal, and for both sides to use the portal effectively
18:55:10 -!- KingOfKarlsruhe has joined.
19:10:37 -!- zzo38 has joined.
19:24:41 <kallisti> Ngevd: I don't really like that. it works okay for simple moves but with projetiles you have to pick a specific route to take which makes the interface more complicated for a special case of the rules.
19:28:05 -!- oerjan has joined.
19:30:05 <oerjan> <Ngevd> I can't picture this
19:30:19 <Ngevd> A chessboard, but magic
19:31:13 <oerjan> <Ngevd> > concat (repeat "Aaargh\n") <-- cycle
19:33:28 <Ngevd> I had a headache, I couldn't think
19:34:44 <oerjan> I'M SORRY, HASKELL GOLFING MUST BE PERFECT
19:35:06 <Ngevd> It almost wants to to say...
19:35:18 <Ngevd> > concat (repeat "Aaargh")
19:35:19 <lambdabot> "AaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAa...
19:37:01 <Ngevd> AAAAH ME ENGLAND FAILING AM
19:37:15 <Ngevd> * It almost makes you want to say...
19:40:24 <Ngevd> Forgot how to unaway
19:40:45 <oerjan> try /away without argument
19:41:02 <Ngevd> Already marked away: brb
19:41:02 <Ngevd> Usage: AWAY [<reason>], sets you away
19:43:24 <zzo38> AWAY with no argument sets you unaway
19:43:27 <oerjan> in xchat, once you go away, you cannot return.
19:43:41 <zzo38> Maybe you need to enter /RAW AWAY
19:43:59 <Ngevd> Thanks zzo38, oerjan
19:43:59 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.88 [Firefox 9.0.1/20111220165912]).
19:44:10 <oerjan> i have this strange doubt that's xchat's intended method
19:44:32 <Sgeo> /away and /back
19:44:39 <Sgeo> I use /allserv away Whatever
19:44:42 <Sgeo> And /allserv back
19:59:49 <Ngevd> kallisti, I'm doing the very beginnings of a Portal Chess graphical client
20:02:55 <kallisti> the protocol will be pretty straight forward.
20:03:17 <kallisti> moving pieces is liking just move rf rf
20:03:24 <kallisti> where rf is row file in algebraic chess notation
20:07:05 <Ngevd> Also, is the Loop type used?
20:07:48 <kallisti> I decided incorporating loops onto the board was too complicated.
20:07:53 <Ngevd> No it isn't, that's Game Board [Set Coord]
20:08:42 <kallisti> uh....... should be something else.
20:08:52 <Ngevd> Nothing in either of your files I've seen
20:08:58 <Ngevd> It's got a few instances
20:09:50 -!- NihilistDandy has quit (Ping timeout: 272 seconds).
20:11:16 <Sgeo> Clearly, this should become part of FICS
20:11:23 <kallisti> Ngevd: Coord needs to go into Loop
20:11:26 <Sgeo> Hmm, it's been a while
20:11:27 <kallisti> and then it should be [Set Loop]
20:12:05 <kallisti> [Set Coord] and then have a Map Coord Loop.... I don't know yet.
20:12:14 <kallisti> I'll see what works best, I haven't got any loop code yhet.
20:12:24 <kallisti> working on the piece move sets whenever I have time. (today I'm focusing on school)
20:15:26 <kallisti> I wonder if switching to Set for the actual move sets is better than using linked lists.
20:16:28 <kallisti> my reasoning was that it probably takes more time to construct the data set than it does to perform the lookup, and with set I have to construct the entire thing
20:16:36 <kallisti> with list I can short-circuit on some cases.
20:17:14 <zzo38> Can you make up a chess variant which is combined with mahjong?
20:17:24 -!- oerjan has quit (Quit: Good night).
20:17:27 <kallisti> I don't know mahjong very well, so no.
20:18:02 <kallisti> (I do have to construct the entire set to perform a lookup right? sets aren't lazy right?)
20:18:23 <zzo38> I prefer chess variants played with flat pieces, like how Shogi and Xiangqi are designed.
20:53:41 <Ngevd> ^^^ sample of the graphical client for PortalChess
20:53:59 <kallisti> that's a useful function for 2D grids represented by 1D grids.
20:54:24 <Ngevd> Wait, I can replace it with (`divMod` 8)
20:54:54 <kallisti> I prefer that syntax to using flip
20:55:06 <Ngevd> So do I, I just keep forgetting it
21:05:56 -!- comex has quit (Quit: Coyote finally caught me).
21:07:00 <Ngevd> I am writing a complicated Haskell program which I have no way to test
21:09:12 <Ngevd> kallisti, what format will loops be in
21:10:23 <Ngevd> I'm assuming not Set [Coord] or whatever
21:10:36 <kallisti> for now I'm just going to add a Coord field to Loop
21:10:56 <kallisti> I'll probably send a response to clients when a loop is formed from a cannon firing
21:11:36 -!- comex has joined.
21:11:50 <Ngevd> Points as in where it turns, or points as in everywhere the projectile is
21:15:03 <kallisti> the direction of the projectile at each point. or maybe only the changes I don't know.
21:16:53 <kallisti> Loop will contain a set of Moves
21:17:01 <kallisti> which are Coord/Direction pairs
21:17:40 <kallisti> data Loop = Loop {loopOwner :: Player
21:17:52 <kallisti> and then I just have [Loop] in Game
21:19:38 <Ngevd> I can work with that
21:19:44 -!- monqy has joined.
21:19:48 <kallisti> well... you're not being exposed to any of this anyway
21:20:26 <Ngevd> I'm basing it on your PortalChess.Types
21:21:42 <Ngevd> For reasons that make sense
21:22:20 <kallisti> the idea is that the client basically needs to do very little besides display what the server tells it to display
21:22:40 <Ngevd> If the server sends the board, I can display it easy
21:22:49 <Ngevd> Well, my future program can
21:23:08 <kallisti> yes I suppose that's an option
21:23:15 <kallisti> just send the entire board on each turn.
21:24:12 <Ngevd> For display purpouses I can ignore loopOwner, right?
21:24:44 <kallisti> but it could be useful to know.
21:25:23 <kallisti> heh, if I wanted to be lazy I could, as my response, just show Game
21:25:32 <kallisti> makes Haskell clients easy to write.
21:25:52 <Ngevd> You'd need Read Game as well
21:27:30 <Ngevd> I'm going to ramble incoherently so I don't forget what I think for a bit
21:27:45 <Ngevd> There's a prelude function for that, I think
21:27:49 <kallisti> as far as I can tell there are no infinite structures in Game.
21:27:54 <lambdabot> [1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,...
21:28:29 <Ngevd> Wait, I really just need \x:xs -> x:xs ++ [x]
21:29:24 <kallisti> what on earth are you trying to do?
21:29:43 <kallisti> the loop is a finite set of things.
21:29:54 <Ngevd> But they're circular!
21:30:10 <kallisti> you mean you want to display a circular animation?
21:30:18 <kallisti> that would be some kind of recursive IO action.
21:30:21 <Ngevd> No, I want to know what the one after each one is
21:30:45 <kallisti> but I'll send the loop as a finite list of points obviously.
21:31:05 <kallisti> and currently since I represent them as sets there's no ordering to that information.
21:31:23 <Ngevd> Will the loop definition's direction be coming into the square or going?
21:31:44 <kallisti> it would have to be going, I believe.
21:31:57 <kallisti> notice I use the going operator to write Moves
21:32:06 <kallisti> m = coordinate `going` direction;
21:32:20 <kallisti> then step' m returns the move where that move is performed.
21:32:39 <kallisti> or Nothing if it can't be performed.
21:32:48 <Ngevd> So I'd need to know the previous bit of the loop
21:32:55 <kallisti> I'm still not really sure why you need a cyclic list
21:33:01 <kallisti> you just want to display the finite set of points right?
21:33:18 <Ngevd> How do you imagine the projectiles as being displayed?
21:33:31 <kallisti> a fancy client could do a nice cyclic animation
21:33:42 <kallisti> a simple one could just color the squares a shade.
21:33:43 <Ngevd> I was imagining it as a sort of laser hang on that's an idea
21:33:57 <kallisti> I think it should be transparent though
21:34:02 <kallisti> so that you can see pieces in the loop
21:34:07 <kallisti> it should just overlay onto the square
21:35:19 * kallisti is not particularly interested in fancy graphics.
21:35:53 <kallisti> for example most computer chess games don't represent the pieces as like heroic action figures dueling each other or whatever.
21:36:16 <kallisti> it's just a symbolic representation
21:36:33 <Ngevd> I'm just struggling to imagine the projectile loops
21:36:50 <kallisti> what would probably make it easier
21:36:52 <Ngevd> As anything other than a length of coloured string
21:36:58 <kallisti> is if instead of Black and White the players were red and blue
21:37:16 <kallisti> then the projectile loop could just be red or blue squares
21:37:24 <kallisti> or red or blue squares going around in a animated loop
21:37:29 <kallisti> though that could be very distracting.
21:37:51 <kallisti> give you an idea of the directionality.
21:37:54 <Ngevd> What if two differently coloured projectiles are occupying the same square?
21:38:14 <kallisti> projectiles cancel each other out, basically.
21:38:21 <kallisti> that's one of the rules of loops that I forgot to mention.
21:38:36 <Ngevd> That makes things simpler...
21:38:55 <kallisti> it also makes a fair amount of intuitive sense.
21:39:06 <Ngevd> Not if you imagine lasers!
21:39:17 <kallisti> I might change that rule I dunno.
21:39:30 <kallisti> but two differently coloured projectiles could just turn purple on intersections, lol. -shrug-
21:39:40 <kallisti> ownership rules are confusing.
21:39:56 <kallisti> which is only relevant for lenses
21:40:04 <kallisti> nothing else cares about the notion of projectile ownership.
21:42:37 * kallisti imagines changing the lens to a reflector piece.
21:42:45 <kallisti> directionless and just reversed the flow of a projectile
21:43:12 <kallisti> has the interesting property that if you place it in a loop it will ambiguously cut a bidirected loop in half to one of the sides
21:43:26 <kallisti> and would turn a unidirected loop into a bidirected one. :P
21:43:46 <kallisti> Ngevd: I think a triangle could be a good piece for a lens.
21:44:13 -!- Vorpal has quit (Ping timeout: 252 seconds).
21:44:32 <Ngevd> At the moment I'm using a sort of magnifying glass
21:44:57 <Ngevd> That looks a bit like the portal
21:44:57 <kallisti> not really sure how to represent portals.
21:45:11 <kallisti> I should really change the queen. :P
21:45:18 <kallisti> it would simplify some rules if I could make it a different kind of piece.
21:45:37 <Ngevd> http://i1239.photobucket.com/albums/ff508/Taneb/Portal%20chess/portal_n_w.png
21:45:44 <Ngevd> http://i1239.photobucket.com/albums/ff508/Taneb/Portal%20chess/lens_n_w.png
21:45:44 <kallisti> and I could remove the projectile cancelling rule and just make projectiles pass through loops
21:46:30 <kallisti> yes it looks somewhat like a telescope eyepiece or something
21:46:31 <Ngevd> I'm a poet mathematician, not a pixel artist
21:46:40 <kallisti> I think vector graphics would be easier for this.
21:46:52 <kallisti> also you get all the benefits of vectorized graphics.
21:46:59 <Ngevd> I'm the one doing the client.
21:47:07 <Ngevd> I call the graphics shots.
21:47:49 <Ngevd> Also, it'd be hard for me to change it to Vectors, and I'm friends with a fair few pixel artists
21:48:27 * kallisti has final say on the Official Graphical Representation of Portal Chess Pieces.
21:48:44 <kallisti> but currently I don't see a need to have one, except for the purposes of writing nice diagrams in the rules.
21:49:06 <kallisti> ...I was just going to use normal chess piece icons for that, actually.
21:49:25 <kallisti> with some kind of thing for direction
21:49:30 <kallisti> but maybe having FANCY NEW SYMBOLS is better.
21:49:33 <zzo38> kallisti: Well, yes. I made TeX chess program which can be used with many variants, in case it help. It include normal chess icons. I can also make up METAFONT files and macros for Portal Chess if you wanted to
21:50:08 <kallisti> zzo38: I'm not entirely sure what I could do with that, but if you want to that would be fine.
21:50:30 <zzo38> kallisti: I am guessing, make rules with diagrams.
21:51:03 <Ngevd> When we have a) an official, final ruleset and b) semi-official piece representations
21:51:24 <zzo38> (If you are using HTML to write the rules, you can still use it I wrote a program to combine METAFONT with ImageMagick so that you can make PNG file)
21:51:49 <kallisti> Ngevd: yeah I'll get around to that eventually. :P
21:52:02 <Ngevd> I don't want to be the person who creates the de facto representation of pieces by virtue of being the first person to create a graphical client
21:52:19 <kallisti> honestly I think that's some months away. I need to build up some savings so I can afford a webserver. (not just for portal chess, but for other things)
21:52:41 -!- Ngevd has left ("Goodbye").
21:52:48 -!- Ngevd has quit (Quit: Goodbye).
21:52:55 <zzo38> But my TeX chess program does allow making diagrams of chessboards, with or without checkerboard, and writing move notations too.
21:53:00 -!- Ngevd has joined.
21:53:07 <zzo38> Including different sizes of boards, using different fonts for piece icons, etc
21:53:10 <Ngevd> Not sure what happened there
21:53:12 <kallisti> zzo38: can it show piece movesets?
21:53:27 <kallisti> to highlight all the locations a piece can move.
21:53:49 <zzo38> kallisti: Yes; you simply need to use one icon to represent the locations you can mov eto
21:55:14 -!- Phantom_Hoover has joined.
21:55:42 <kallisti> zzo38: can you render this in HTML?
21:56:05 <zzo38> kallisti: No. It is only for TeX.
21:56:25 <kallisti> seems like you should be able to render it and then take an image or something.
21:56:33 <zzo38> kallisti: You can do that, yes.
21:57:00 <zzo38> The program "dvipng" might help if you want to render it and then take an image
21:57:56 * kallisti is equally clueless about PDF as he is TeX
21:58:07 <kallisti> I don't spend a lot of time rendering written documents in things. :P
21:58:19 <ais523> does anyone actually write PDF by hand?
21:58:22 <zzo38> I think if you have the correct addons you can use ImageMagick to convert PDF to other formats, but there is no need to do that. You can use TeX to create a DVI file and then convert it to PNG if you want to include the image in a HTML file
21:58:23 <ais523> PostScript, yes, but PDF?
21:59:05 <zzo38> PDF is a dumb format full of dumb things, and so is PostScript
21:59:27 <ais523> wow, that's an unusually strong opinion for you
21:59:28 <Ngevd> PDF has the advantage of commonplace web browser support
22:00:38 <zzo38> Ngevd: Yes, it does have that. Still, I suggest not using PDF, or at least offering other formats too (such as plain text, DVI etc; plain text also has commonplace web browser support)
22:01:03 <Ngevd> But lacks the graphics capabilities of PDF
22:01:08 <Ngevd> Or we could just use HTML
22:01:14 <zzo38> Plain text support is common everywhere, including gopher
22:01:17 <Ngevd> Which has ubiquitious browser support
22:01:33 <Ngevd> But a range is probably best
22:01:39 <zzo38> Ngevd: Yes you can use HTML too, if you prefer.
22:01:43 <kallisti> zzo38: couldn't I just write the rules in LaTeX and then translate that to basically any other document format?
22:02:15 <zzo38> kallisti: I don't think so because the program TeX chess is only for Plain TeX.
22:02:35 <kallisti> but you can embed images in LaTeX right? I really just need the output image from such a program.
22:03:02 <zzo38> (There are also other problems, with both Plain TeX and LaTeX, that prevents proper conversion to other formats, other than output-only formats (such as DVI, PostScript, and PDF))
22:03:39 <zzo38> TeX chess can be used to create the diagrams, and then if you need the output image you can use dvipng now you have the PNG file usable in HTML and so on
22:04:38 <zzo38> There are also other programs for chess diagrams specifically in HTML, although some of them might not have as many features as TeX chess
22:05:40 <zzo38> http://zzo38computer.cjb.net/tex/texchess.zip
22:05:51 <zzo38> It includes a documentation.
22:08:00 <Ngevd> I still don't know how to draw projectile loops...
22:09:18 -!- Ngevd has quit (Quit: Goodnight).
22:45:49 <zzo38> Please tell me if this program has a thing missing or wrong that you think it is: http://sprunge.us/WQKG
22:48:23 -!- Klisz has joined.
22:50:09 <ais523> <frymaster> you're unlikely to find sourced assertions of "there was absolutely nothing out of the ordinary about geiger counter availability in the USSR"
23:15:11 -!- Patashu has joined.