00:03:09 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 wrapMaybeHalts :: a -> Maybe a 00:04:55 @hoogle Bool -> a -> Maybe a 00:04:56 Control.Exception.Base assert :: Bool -> a -> a 00:04:56 Control.Exception assert :: Bool -> a -> a 00:04:56 Control.OldException assert :: Bool -> a -> a 00:05:02 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 wrapMaybeHalts = -- todo: Solve the halting problem 00:05:15 Sgeo: note that error catching has nothing to do with the halting problem. 00:05:24 which environment you use for brainfuck? 00:05:44 Errors and infinite loops are semantically equivalent outside of IO 00:05:49 The highest overmate I have ever made, though, is four points. 00:05:58 -!- FishNot has quit (Ping timeout: 252 seconds). 00:06:02 Maybe you could do something with unsafePerformIO? 00:06:07 Sgeo: and therefore it's impossible to catch errors 00:06:08 ? 00:06:14 zzo38: you have explained overmate before. it's in my logs and the channel logs 00:06:28 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 in any case, i am not interested in pokemon card 00:06:29 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 zzo38, I think kallisti intends to catch bottoms 00:06:52 no 00:07:00 Some bottoms 00:07:03 you are confusing /error handling/ with /bottom/ 00:07:04 yes 00:07:15 What bottom? 00:07:29 The bottoms that are not infinite loops 00:07:35 the kind that otherwise halts the runtime unless caught 00:08:12 I'd think it's impossible without IO. Semantically, a bottom is a bottom 00:08:25 You seem to want an f such that f _|_ = might be _|_ 00:08:37 Sgeo: yes you would need to use unsafePerformIO 00:09:00 I don't like that way. You should use a macro instead. 00:09:09 it's for things like 00:09:15 > succ (maxBound :: Bool) 00:09:16 *Exception: Prelude.Enum.Bool.succ: bad argument 00:09:23 -!- roper has quit (Quit: Abandonando). 00:09:24 things that Prelude triggers runtime errors for 00:09:30 but you want to be in a Maybe instead. 00:09:33 or Either 00:09:47 You could just write new function that checks the error at first. 00:09:53 yes that's what I'm doing. 00:10:01 And then works in the Kleisli categories for Either or Maybe monads 00:11:35 (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 Is that how you do Kleisli category? 00:19:37 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 I made a list of some differences and similarities from Icosahedral RPG to D&D 3.5e 01:18:09 gopher://zzo38computer.cjb.net/0phlog*c_dnd.icosahedral-rpg-i 01:50:45 kallisti, flash edited 02:36:01 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 *PortalChess> moveSet newBoard (R7, B) 02:36:16 [(R6,B)] 02:36:16 *PortalChess> moveSet newBoard (R2, B) 02:36:16 [(R3,B)] 02:36:18 awwwww yeah 02:36:43 one piece down, six to go. 02:38:28 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 Do you know what ReactOS does in these cases? 02:42:42 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:56:23 holy monads batman. 02:57:45 Someone should totally write a game that breaks if the behavior of double-clicking the title is different 03:09:32 @hoogle (a, b) -> (b, a) 03:09:33 Data.Tuple swap :: (a, b) -> (b, a) 03:09:33 Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d) 03:09:33 Data.Graph.Inductive.Query.Monad mapSnd :: (a -> b) -> (c, a) -> (c, b) 04:06:48 Whoo, monads 04:07:03 The ultimate in unnecessary abstractions. 04:07:51 -!- FishNot has quit (Quit: A fishbot swims away). 04:34:00 linearMoves m cs ps = case step board m of 04:34:00 Just m'@(Move c' d') 04:34:00 | d /= d' -> 04:34:00 case step' m `member` ps of 04:34:00 True -> (cs, ps) 04:34:02 False -> linearMoves m' (c':cs) (insert m' ps) 04:34:05 | otherwise -> linearMoves m' (c':cs) ps 04:34:07 Nothing -> (cs, ps 04:34:10 help. 04:40:13 @hoogle unfoldr 04:40:13 Data.List unfoldr :: (b -> Maybe (a, b)) -> b -> [a] 04:40:14 Data.ByteString.Lazy.Char8 unfoldr :: (a -> Maybe (Char, a)) -> a -> ByteString 04:40:14 Data.ByteString.Char8 unfoldr :: (a -> Maybe (Char, a)) -> a -> ByteString 04:40:34 ah yes this is what I'm looking for 04:40:38 er wait 04:40:42 yes. 04:41:19 @hoogle unfold 04:41:20 Data.List unfoldr :: (b -> Maybe (a, b)) -> b -> [a] 04:41:20 Data.Tree unfoldForest :: (b -> (a, [b])) -> [b] -> Forest a 04:41:20 Data.Tree unfoldForestM :: Monad m => (b -> m (a, [b])) -> [b] -> m (Forest a) 04:41:33 hmmm no list unfold I guess. 04:41:40 er 04:41:42 set unfold I mean 04:46:57 -!- cheater has quit (Ping timeout: 248 seconds). 04:49:32 wow everything was relatively clean until I got here... :P 04:50:26 I think it would be cleaner if I used State here. 04:52:57 if you have escaped the State then you can't sell out to it now 04:53:45 just kidding 05:04:07 @src sequence 05:04:07 sequence [] = return [] 05:04:08 sequence (x:xs) = do v <- x; vs <- sequence xs; return (v:vs) 05:04:08 -- OR: sequence = foldr (liftM2 (:)) (return []) 05:14:16 :t unions 05:14:17 Not in scope: `unions' 05:21:22 -!- cheater has joined. 05:46:54 @src liftM2 05:46:54 liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) } 05:47:02 :t liftM2 05:47:03 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 http://hpaste.org/56781 this must be what crazy people write on walls. 06:28:32 I wonder what other ways I could do this. 06:28:40 instead of defining what the entire moveset is. 06:32:11 i think that state is wysiwig 06:32:28 lol 06:32:41 ^wyg 06:32:51 oh.. 06:33:33 * kallisti can't figure out what abstraction I should be using to make this better. 06:35:37 http://www.haskell.org/haskellwiki/Applications_and_libraries/Games 06:36:21 no. 06:36:54 I'm writing server code, not graphical stuff. 06:37:21 and uh.... none of those are abstractions 06:37:22 just games. 06:39:57 i am dearly attached to state 06:40:24 @unmtl State 06:40:24 Plugin `unmtl' failed with: `State' is not applied to enough arguments, giving `/\A B. A -> (B, A)' 06:40:30 @unmtl State s 06:40:31 Plugin `unmtl' failed with: `State s' is not applied to enough arguments, giving `/\A. s -> (A, s)' 06:40:33 @unmtl State s a 06:40:33 s -> (a, s) 06:40:34 i also don't see that as a fault but merely as trying to solve a different problem 06:41:33 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 a notion is a concept defined in the terms the definer best understands :> 06:44:55 Take the universe. 06:45:11 When you do something, you change the universe. 06:45:22 "fsvo universe" :P 06:45:54 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 i think the universe in this case means anything which can be changed 06:47:08 hmmmm 06:47:53 You have a variable, some_var 06:47:57 It stores 0 06:48:08 You increment some_var like this: some_var++ 06:48:11 which idiot invented variables i wonder 06:48:13 some_var now stores 1 06:48:14 he should be shot 06:48:25 itidus21: agreed 06:48:29 eek 06:48:35 ......lolwat 06:48:38 yeah stupid variables. 06:48:43 everything should be pointfree. 06:48:45 that was unexpected 06:48:46 kallisti: itidus21 there is only one of me 06:48:57 But, you could say that incrementing is just taking a number, adding 1 to it, and giving that 06:49:01 and whomever invented me deserves to get shot ! 06:49:33 Sgeo: I believe I figured out my abstraction. 06:49:35 kallisti, in \x -> x, does x count as a variable? It can't be altered within the function 06:49:45 kallisti, yay! 06:49:52 Not sure why you're telling me, but yay 06:50:05 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 s/empty list/possibly infinite list/ 06:50:26 weird typo thing. 06:50:56 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:03 Sgeo: DON'T DO IT 06:52:06 REVIEW MY CODE PLZ 06:52:07 KTHX 06:52:16 You really want me reviewing Haskell code? 06:52:19 Sure, but.. 06:52:20 yes 06:53:25 if i understood functions, which i don't, im still not convinced that i would be impressed by function notation 06:54:01 code: http://sprunge.us/EXMN associative data types: http://sprunge.us/BSDF some things are pretty some things are not. 06:54:14 i think des cartes made progress by his whatever he contributed to drawing functions 06:54:19 itidus21, ... have you never touched a non-esoteric programming language? 06:54:23 itidus21: cartesian plane? 06:54:43 Or do you mean pure functions? 06:54:48 Sgeo: he has supposedly programmed in C++ but I am skeptical. :P 06:55:20 what is the point of this channel if not to explain the value of pure functions? 06:55:39 to discuss esoteric programming languages 06:56:11 or whatever we feel like discussing, with a general relevance to computer science 06:56:47 itidus21, name a C++ function you have written that had a non-void return type and at least one argument. 06:56:48 perhaps it is the similarity between a given language and pure functions which determines how esoteric it is 06:56:53 Sgeo: is this code legible at all. :P 06:57:04 kallisti, eek, I didn't even notice the links 06:57:09 int add(int a, int b) { return a + b; } 06:57:16 itidus21, there we go 06:57:41 itidus21, that function is pure. In order to do its thing, it only relies on its arguments. 06:57:51 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 i have to infer the meaning of most words by context in here such as pure 06:58:12 Oh, sorry 06:58:19 its ok.. i like to do so 06:58:37 A pure function is a function that only looks at its arguments and returns a value based on its arguments. 06:58:40 but it gives a false impression i am familiar with some terms 06:59:01 It doesn't set global variables, it doesn't read from a file, etc. etc. 06:59:14 so untyped lambda calc is not the same thing as pure 06:59:20 Sgeo: s/arguments/arguments and free variables/ 06:59:37 kallisti, good point 06:59:37 but that's close enough 07:00:05 kallisti, Loop? 07:00:16 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:21 would i get anywhere? 07:00:24 Sgeo: it's complicated. :P 07:00:35 Sgeo: I think I've explained how loops work in portal chess? 07:00:36 both phrases relate to functions in some way 07:00:37 kallisti, what's with the Storable stuff? 07:00:51 kallisti, I haven't been paying any attention whatsoever to the portal chess stuff, sorry 07:01:05 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:32 imap? 07:01:44 yes similar to imap from Data.Vector 07:01:54 it's map but with Index -> Element -> Element 07:01:57 instead of Element -> Element 07:02:17 naming fillSquare isn't really needed there, but I can't tell if doing so helps readability 07:02:23 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:31 Sgeo: yes that's the idea. 07:02:44 I might rename it. 07:02:59 what if i said int zero(int a, int b) { return a; } 07:03:04 Sgeo: oh yes I could remove that 07:03:06 it used to be a function 07:03:18 as a way to understand 0 := λf.λx.x 07:03:33 Sgeo: edited 07:04:03 o.O at if/then/else all being at the same indentation 07:04:04 i just don't have a clue what im saying 07:04:18 Sgeo: is that not normal? 07:04:28 (No, I'm not saying that's bad, I'm saying I wasn't aware that that worked) 07:04:29 that's how haskell-mode indents it. -shrug- 07:04:59 I guess I thought DoAndIfThenElse only worked in do blocks 07:05:00 Sgeo: if then else doesn't rely on layout as far as I know 07:05:24 itidus21, it would be return b, not return a 07:05:38 Sgeo: in that particular function I found the let / if syntax clearer than the equivalent guard/where syntax 07:05:40 But that's currying stuff you're doing, which is a bit ahead of understanding purity 07:06:13 step' (Move (r, f) d) = Move <$> ((,) <$> r' <*> f') <*> pure d 07:06:16 :) 07:06:31 could <$> that 07:06:36 instead of using applicative 07:06:44 or assign some names maybe 07:07:09 Assigning names never killed anyone, except for all the people it killed. 07:07:14 step' does a basic increment on the board. so if you give a coordinate and North, it moves one space north. 07:07:27 step does that but also follows portals on the board. 07:07:30 -!- jix has quit (Ping timeout: 252 seconds). 07:08:07 I use step' in followPortal because if I used step then I could easily get in recursive loops. 07:08:10 for some board states. 07:08:21 later I intend to do some manual checking for that case. 07:08:55 Sgeo: but really if you're familiar with the f <$> x <*> y idiom that's not terribly illegible. 07:09:31 Sure 07:09:42 * Sgeo may be a bit tired right now 07:09:56 w/e total nub lulz 07:10:21 * kallisti says the person asking for help. 07:10:24 er 07:10:34 (says the person asking for help. also a person who is totally not tired also) 07:11:09 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 Sgeo: the main thing I want to work on is linearMoves 07:11:29 which describes the movesets of pieces like bishops, rooks, and queens 07:11:46 but.... I have to take into account portals 07:11:50 and avoid infinite loops 07:11:57 I note your use of State internally 07:12:02 i dont even care where its right or wrong 07:12:07 yes it made the algorithm somewhat clearer. 07:12:49 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:12:54 so State seemed well-suited 07:12:58 Ah, ok 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 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 (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 yes most monad instances have some other non-monad abstraction that defines some kind of m a -> a 07:15:38 Besides IO, which ones don't? 07:16:23 none that I can think of off the top of my head. 07:16:47 mapM linearMoves is where the state threading happens. 07:17:13 it's not strictly necessary but in some cases it will result in a faster short-circuit 07:17:17 :t cont 07:17:18 forall a r. ((a -> r) -> r) -> Cont r a 07:17:20 :t runCont 07:17:21 forall r a. Cont r a -> (a -> r) -> r 07:17:43 :t (`runCont` id) 07:17:44 forall a. Cont a a -> a 07:18:03 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 as there will be other situations where I want to do special when I encounter a portal. 07:18:21 *something special 07:19:07 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 stepLines is like linearMoves except without all the short-circuiting logic. it will walk infinitely in some cases. 07:19:23 i guess this is like saying each scope has an alphabet 07:20:07 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 De Bruijn indices make things easier by assigning numbers instead of arbitrary symbols to variable names 07:20:38 an alphabet could also be defined as "any set of distinct symbols" >:-) 07:21:23 yes, indeed, but you said something unrelated to the distinctness 07:22:12 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 thats why i am not allowed in the jedi council 07:22:29 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:22:53 0 is the "local" variable. 07:24:04 and global is infinite debrujin index then i guess 07:24:05 :P 07:24:30 Sgeo: do you think resourceT could be useful in your AW library? 07:25:00 kallisti, yes 07:25:08 Still not sure I want to expose that though 07:27:08 well, you can runResourceT 07:27:12 dunno if that helps though.. 07:30:25 * kallisti would one day like to find a use for Cont 07:30:34 as it seems to just sit around being powerful and unused. 07:31:26 delcont or whatever is supposed to be more powerful 07:31:40 Or, well, I guess Cont is delimited too 07:32:46 haven't heard of that. 07:33:23 http://hackage.haskell.org/package/CC-delcont 07:33:30 It's an Oleg thing, of course 07:33:45 Well, at least partially Oleg 07:34:30 dynamically scoped variables? whut? 07:34:57 Oleg, why so magical? 07:37:55 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:38:20 um 07:39:12 itidus21: well, at least you seem to understand currying 07:39:20 I don't know what you're trying to do though. 07:40:03 http://en.wikipedia.org/wiki/Lambda_calculus#Motivation 07:40:22 if only it could all be that easy 07:40:29 Sgeo: this delimited cont stuff reminds me of a menu system I wrote for a MUD codebase in Python. 07:40:35 that used coroutines. 07:40:55 but this is better. 07:44:14 basically, that motivation section makes perfect sense to me 07:44:33 but once it departs from that its like chinese 07:45:21 it's the same stuff just different notation 07:45:25 and more explanation 07:46:08 * Sgeo needs sleep 07:46:17 i think they could make an untyped lambda calculus written in a way imperatve programmers could understand if they really wanted 07:46:34 itidus21: yes, they have. it's called the untyped lambda calculus. :P 07:47:34 well.. imperative programmers don't tend to use the phrase function application 07:47:41 "function call" 07:48:36 though in this case the semantics are a bit different. function call usually involves a specific calling convention. 07:48:43 itidus21: but if you need silly pictoral representations check this out: http://worrydream.com/AlligatorEggs/ 07:49:32 well heres what i would do to C to make it more in line with untyped lambda calc 07:49:47 first of all, since there is only 1 type, there is no need for type differntiating keywords 07:50:03 . 07:50:23 instead of going off on that tangent 07:50:24 so something like int add(int a, int b) { return a + b; } would become... add(a, b) {return a + b;} 07:50:27 you should read that link 07:50:31 that I linked you. 07:50:34 actually 07:50:39 not only should you read the actual link text 07:50:50 i already know the alligators don't help my particular gripe 07:50:52 but you should link on it and read the information displayed in your browser,, as well. 07:51:01 ah 07:52:25 now i think what actually happens is that anonymous functions simply have a placeholder name 07:52:52 ??? 07:53:01 yes if you 07:53:13 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 assign an anonymous function a name it becomes a nonymous function. :P 07:53:28 itidus21: C++11 has lambda functions 07:53:38 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 itidus21: note necessarily a requirement in C 07:53:58 it could easily have multiple lines and a return 07:54:07 C++11 makes no requirements 07:54:30 well 07:57:58 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 itidus21: I don't really see what you're trying to accomplish 07:58:31 neither do i 07:59:14 are you trying to make lambda calculus look more like C? 07:59:17 ok i see i can go deeper here 07:59:33 making C look like untyped lambda calculus won't work because it has a static type system. 07:59:48 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 the + operator seems to break this task i am trying 08:00:51 No, that doesn't entirely make sens,e in case itidus21 was wondering, fucb i don't care. 08:00:54 *but 08:00:58 many things break the task you're trying. 08:01:05 Nogh 08:01:06 Night 08:01:14 night 08:01:27 for instance, if + = add 08:01:40 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 it is pointless to define an add function through calling + 08:01:49 for example, mentioned the "task you're trying" 08:02:07 itidus21: not to mention that in lambda calculus variables always refer to other functions 08:03:59 i guess im curious how to go from "(a) { (b) {a+b} }" to "λmnfx.m f (n f x)" 08:04:20 church encoding 08:04:23 read about that. 08:04:29 ya i copied the later off wiki 08:04:30 but first understand lambda calculus if you haven't yet. 08:06:06 essentially the idea is that you can define data by an operation that you can perform with it. 08:06:43 the act of executing the operation is equivalent to having the data to perform it. The operation is the data itself. 08:06:52 do you understand church booleans? 08:07:00 -!- zzo38 has joined. 08:09:03 so, putting it another way, you can define an answer by the questions you can solve with it 08:09:18 I guess 08:09:22 it helps to look at specific examples. 08:09:25 like church booleans 08:09:30 im weird 08:09:38 unicorns. 08:10:58 \x.\y. x 08:11:01 is true 08:11:05 \x.\y. y 08:11:06 is false 08:11:32 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 if you look at how a conditional branch works, this is basically the same idea. 08:11:57 see, i personally find the syntax "(x,y) x" makes more sense than "\x.\y. x" ... my troubles begin there 08:12:02 stop 08:12:03 fucking 08:12:04 focusing 08:12:05 on 08:12:06 the 08:12:09 syntax 08:12:11 :) 08:12:14 what else is there? 08:12:35 the core idea? the syntax is completely irrelevant. 08:12:38 -!- Ngevd has joined. 08:13:07 its meant to be a tree, right? 08:13:19 im supposed to look at \x.\y. x and see a tree :P 08:13:23 Hello 08:13:32 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 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 it is the only time i have ever encountered something i couldn't intuit 08:14:51 oops.. tat is true for all of math 08:14:52 itidus21: yes you can construct a lambda expression as a tree 08:15:03 most expression syntaxes can be viewed as trees 08:15:06 i just don't get math at all 08:15:42 but you don't have to think of it as a tree 08:15:48 just think of it however you normally think of expressions 08:15:49 kind of like a chessboard makes most sense as a 2d grid 08:15:57 instead of a 1d strip 08:16:34 I'm quite familiar with thinking of expressions without visualizing the entire syntax tree. the latter would be pretty taxing 08:16:54 I do this all the time when I program. I just think of it in terms of symbols 08:17:25 lambda calculus is a computation model focused on symbolic reasoning. 08:18:51 itidus21, what does \x.x do? (hint, this is an easy one) 08:19:58 Ngevd: so I'm guessing you've already implemented portal chess? 08:19:59 :> 08:20:10 I've made some progress since last we spoke. 08:20:31 kallisti, nah, I was just planning to get a chessboard, some matches, some string, and a webcam 08:21:01 code: http://sprunge.us/EXMN associative data types: http://sprunge.us/BSDF some things are pretty some things are not. 08:21:06 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 itidus21, How about \x y . x y? 08:22:14 uh oh you're going to get him to start using function pointers. 08:22:25 i just like to use analogies 08:22:39 i believe it is a healthy way to operate ones brain 08:22:57 Not analogies to C! 08:23:32 the neurons in ones brain which understand untyped lambda calculus can communicate with the neurons which understand apples and oranges 08:23:40 there isn't a wall 08:24:21 wow you know the secrets of the brain but can't understand lambda calculus? interesting. 08:24:38 i know... 08:25:03 (in other words.. i see notational ambiguity when i read \x y . x y 08:25:16 and.. i give up before i even begin :P 08:25:42 I don't see any notational ambiguity. what ambiguities do you see? 08:26:04 i don't know 08:26:28 \x y . x y is a short hand for the curried syntax, which is how lambda calculus actually works, and looks like: 08:26:36 \x. \y. x y 08:26:40 this means: 08:26:44 expression body vs application 08:26:45 \x. (\y. x y) 08:26:53 what if it was 08:26:58 itidus21: there is no application in this example 08:27:01 \x. (\y. x) y 08:27:05 it's one function body. 08:27:26 the whole notation is so weird >:-) 08:28:14 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 but i guess that overhead must pay off eventually 08:30:53 typically the lambda extends to the end of the line or until the end of the parenthetical expression it's in 08:30:53 Well, I'm starting to make placeholder piece graphics for portalchess 08:31:29 Being a poet/mathematician, not an artist, means they sorta scuk 08:31:35 *suck 08:32:24 it's okay Ngevd it's okay. 08:32:47 What does the C stand for in CCannon? 08:32:52 cardinal 08:32:55 Ah 08:33:12 I would have used O for Orthangonal, but that's probably wrong 08:33:19 *orthagonal 08:33:22 Can't type 08:33:32 I think that would work too 08:33:38 OCannon is kind of weird though. 08:34:16 I am mixing up my terms a bit actually 08:34:28 for compose points I should use cardinal and intercardinal 08:34:41 or ordinal 08:34:45 or intermediate 08:34:59 What format should I save the graphics? 08:35:23 uh...... 08:35:29 .png? 08:35:33 yes that's good 08:35:41 .svg would be good too if they're vector graphics. 08:35:59 Nah, pixel graphics. 08:36:06 I'm not good at vector graphics 08:36:25 I imagine arrows as little >>'s 08:36:38 Other way is use METAFONT? 08:37:12 -!- jix has joined. 08:37:23 METAFONT is also scalable although the output will be raster graphics 08:38:19 Hmm 08:40:57 Now you have Portal Direction (Maybe Coord) 08:41:05 yes 08:41:06 Are you going to display that too? 08:41:10 no 08:41:16 the reason for that 08:41:28 is that players can now have only one portal on the field 08:41:51 OK 08:44:43 -!- Vorpal has joined. 08:45:34 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:45:51 ugh 08:46:39 That's a representation of a lambda expression, not a lambda expression 08:47:57 That's me trying to make sense 08:48:22 itidus21: the wikipedia tells you what constitutes a lambda calculus expression 08:48:36 i have no allegiance to sense 08:49:03 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 i have to wonder if familiarity with mathematical functions is a useful prerequistite to LC 08:49:39 just maybe 08:50:07 not really 08:50:16 after all, some seem to dislike the disparity between an imperative language "function" and a math function 08:50:24 you may be getting confused because lambda calculus isn't "call by value". 08:50:59 kallisti, strictly speaking, lambda no wait I don't want to confuse itidus 08:51:02 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 It is two different things meaning by "function" 08:51:10 Ngevd: yes I know. 08:51:20 when church came up with this stuff, he hadn't seen imperative languages i think 08:51:26 i am not sure about this though 08:52:01 it doesn't make sense without computers to run them on 08:52:09 computers weren't really a thing in 1936 08:52:30 at least not as we know them. 08:53:16 Is this correct? ("delimit", Right $ \p @ ProgramState { psTokens = h : t } -> uncurry (:) . (Block *** tail) $ break (== h) t) 08:53:29 Or is there other function for such things? 08:54:07 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 its not really limited to LC math 08:54:29 i like to hide or deny this, but it is the truth 08:55:49 my (limited) knowledge of programming is too large out of proportion of my math knowledge 08:56:43 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 and the same is true for the little "i=1" under something 08:59:17 I think this is your problem... you probably do something like this: 08:59:47 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 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 but thats how dictionarys work too 09:02:28 maybe its for the best 09:02:48 although that should be "nearly all defined exactly in terms of each other" 09:03:08 yeah 09:03:39 the original fits better for dictionaries though 09:04:02 its probably for the best to keep me out like a shibbaleth 09:04:16 for i don't have the responsibility appropriate for knowledge 09:04:27 especially as one who cannot spell shibboleth ;P 09:04:40 kallisti, what should lenses/prisms look like? 09:05:33 dunno, symbolically I imagine them similarly to portals. 09:05:37 some kind of circular shape. 09:05:43 but that's no good. 09:05:56 -!- hagb4rd has joined. 09:08:02 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:09:17 but i end up doing neither 09:11:28 uhhh 09:11:52 -!- monqy has quit (Quit: hello). 09:12:02 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 cos i figure it's good to have a goal like that 09:13:01 kallisti, there's my placeholder graphics for pieces not in real chess 09:13:40 ^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 Gregor: MAKE THE LOGS SHOW COLORS, STAT 09:14:07 * oerjan is not entirely serious 09:14:22 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 Ngevd: you have programmed a chess game? 09:14:43 ^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 Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell Haskell ...too much output! 09:14:53 hagb4rd, nowhere near 09:15:06 kallisti has made a chess variant and I'm doing what I can to help 09:15:40 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 I haven't really thought about graphics yet. 09:16:20 so, i think about games by imagining scenes in my head 09:16:42 like a character moving about some environment 09:16:57 http://s1239.photobucket.com/albums/ff508/Taneb/Portal%20chess/ 09:17:00 and i think about what logic he is moving by 09:17:07 it would be kool to have a server to for chess board generation 09:17:29 posting a link to a graphic in the end 09:17:42 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 on demand 09:17:44 and i think about how can art assets in a game be more utilized 09:18:40 like by using skeletal animation one drawing or model of a skeleton can be extended into animations 09:18:59 aw 3d chhess? 09:19:06 or.. pallette swapping, or texture swapping is another way to utilize art assets 09:20:22 it would be nice to use it like: a4-a5 09:20:27 or sth 09:22:05 mostly text based 09:22:12 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 my thought can be written like: language CreateLanguage(boolean knowslambdacalc) { if (knowslambdacalc) return good_language; else return bad_language; } 09:25:03 ................................................................................................................................................................................................................................................................................................... 09:25:31 i figure its probably true 09:26:09 kallisti: why not use irc as network protocol? 09:26:11 LC or at least one model of computation 09:26:36 hagb4rd: what would I gain from that? 09:26:45 i don't think it's possible to make best possible language if i don't know any models of computation 09:26:50 kallisti: time 09:27:34 eh I don't know that I save any time 09:27:37 but if you want some insight into network protocols, i guess you better make it your own 09:27:47 on top of dealing with my own protocol I now have to deal with IRC. :P 09:28:16 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 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 Not knowing much about network protocols 09:32:57 !(x) Not x. (λpab.p b a) x ~x 09:33:05 is that client side? what validity checking must the client do? 09:33:13 for real one can seperate the complete game logic from the network protocol 09:33:17 kallisti, I was imagining peer to peer 09:33:25 Checking if the other client is cheating 09:33:28 ..oh 09:33:30 no 09:33:36 I'm doing client-server. :) 09:33:46 simplifies the client programs 09:33:48 its even easier in turn based games like chess 09:34:11 Hmm... client-server also makes doing rankings easier? 09:35:00 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 because I need to support the thriving portal chess community that will soon follow from its swell in popularity. 09:36:19 :> 09:36:35 :> indeed 09:37:16 Is there any GL you want me to strive for? 09:37:22 -!- Phantom_Hoover has joined. 09:37:31 not really 09:38:41 and you want to use the standard 8x8 fields chessboard 09:38:50 yep 09:39:23 > 71/26*366 09:39:24 999.4615384615385 09:40:21 iv'seen variations to that.. a chess board for 4 players.. but never played it 09:40:51 ......4 player portal chess. 09:40:52 Threechess is fun 09:40:54 4 player chess is very old 09:41:04 http://www.quadibloc.com/chess/images/fpc.gif 09:51:59 kallisti, what's fromEnumProd? 09:53:49 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 it seems to be :: (Enum a, Enum b) => a -> b -> Int 09:56:04 aha. \x y -> fromEnum x * fromEnum y then 09:57:17 I think I had a dream wherein Gregor had a child and was dressing it up in a range of suits. 09:59:03 then child protection services arrived, i can only assume. 10:02:11 Also, brb 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:43:48 oops 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:44:11 Hello 10:44:14 hi 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 freenode is so very generous when it comes to topic length. 11:37:54 390 bytes. 12:52:24 have you found elliott at last? 12:53:26 oh he's never been _far_ away 12:53:53 i hope he has not decided to stop the war in afghanistan by himself 12:54:35 i somehow don't see that as his kind of thing. i don't think afghanistan is sufficiently computerized for his methods to work. 12:55:05 true 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:17:34 Hmm 14:17:36 Hello 14:41:51 -!- Ngevd has quit (Read error: Connection reset by peer). 14:41:52 -!- Taneb has joined. 14:46:28 Well, the cloning project went wrong again 14:52:11 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 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 I break pastewisdom 15:50:23 `? Ngevd 15:50:26 ​.6M?X$UE0X.\>..of[N..qBO{\ \ .'-p)Q4XDe/u#u.Ooʷಞ@\);Ԅ@'ʣӂ.dD\v}ISk53.7HE?.ЪLR':.S*]YD>i2AR%.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. 16:56:41 Hello! 17:15:59 > 600 `div` 64 17:16:00 9 17:16:12 > 600 / 64 17:16:13 9.375 17:16:18 > 600 / 8 17:16:19 75.0 17:16:35 > 50 * 8 17:16:36 400 17:24:35 Aaargh 17:24:40 I can't picture this 17:26:17 Aaargh 17:26:19 Aaargh 17:26:55 > repeat "Aaargh\n" 17:26:56 ["Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\n","Aaargh\... 17:27:04 > concat (repeat "Aaargh\n") 17:27:04 "Aaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAaargh\nAa... 17:27:10 > concat (repeat "Aaargh") 17:27:10 "AaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAa... 17:29:32 -!- NihilistDandy has joined. 17:43:32 kallisti, I now can display an empty chessboard 17:49:54 `? kallisti 17:49:58 kallisti is a former prophet swearing off his pastry deity 17:50:06 `? CakeProphet 17:50:09 ​:> 17:50:18 `? Taneb 17:50:23 Taneb is not actually Ngevd, no matter what you may have heard. 17:50:57 brb, head 17:52:33 Back 17:52:37 fungot, I'm back 17:52:38 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 ^style 17:52:43 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 ^style iwcs 17:52:48 Selected style: iwcs (Irregular Webcomic scripts) 17:52:58 fungot, allosaurus? 17:52:59 Ngevd: what, the ability to be captured a spanish galleon! arrr!! you two had an affair? 17:53:55 ^style irc 17:53:55 Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) 17:54:01 fungot, hello 17:54:01 Ngevd: rather, i suggested for a moment. let me find another way to write that way 17:54:41 Is any other human here? 17:58:31 @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? 17:58:31 Consider it noted. 18:00:16 Now is a silly time 18:00:16 Ngevd: You have 1 new message. '/msg lambdabot @messages' to read it. 18:04:55 -!- Ngevd has quit (Quit: dog). 18:26:24 @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:26:24 Consider it noted. 18:28:36 @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:28:37 Consider it noted. 18:33:39 lambdabot: hi 18:33:56 fungot: hi 18:33:57 kallisti: hm... /me should really start complaining about that i'm unable to take advantage of 18:34:03 * kallisti agrees. 18:40:46 -!- Ngevd has joined. 18:41:17 Hello 18:41:18 Ngevd: You have 3 new messages. '/msg lambdabot @messages' to read them. 18:42:00 kallisti, hello 18:44:46 hello 18:45:19 3+ portals: thing going through the portals' choice 18:48:16 -!- ais523 has joined. 18:48:19 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 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 I can't picture this 19:30:07 wat 19:30:19 A chessboard, but magic 19:31:13 > concat (repeat "Aaargh\n") <-- cycle 19:33:28 I had a headache, I couldn't think 19:34:44 I'M SORRY, HASKELL GOLFING MUST BE PERFECT 19:35:06 It almost wants to to say... 19:35:18 > concat (repeat "Aaargh") 19:35:19 "AaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAaarghAa... 19:37:01 AAAAH ME ENGLAND FAILING AM 19:37:15 * It almost makes you want to say... 19:40:19 Back 19:40:24 Forgot how to unaway 19:40:45 try /away without argument 19:40:54 Already did 19:41:02 Already marked away: brb 19:41:02 Usage: AWAY [], sets you away 19:42:29 and /unaway, then? 19:42:41 Nothing 19:43:24 AWAY with no argument sets you unaway 19:43:27 in xchat, once you go away, you cannot return. 19:43:41 Maybe you need to enter /RAW AWAY 19:43:46 heh 19:43:50 That worked! 19:43:59 Thanks zzo38, oerjan 19:43:59 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.88 [Firefox 9.0.1/20111220165912]). 19:44:10 i have this strange doubt that's xchat's intended method 19:44:32 /away and /back 19:44:39 I use /allserv away Whatever 19:44:42 And /allserv back 19:44:55 Ngevd, ^ 19:44:57 Oooh 19:59:49 kallisti, I'm doing the very beginnings of a Portal Chess graphical client 20:02:55 the protocol will be pretty straight forward. 20:03:01 human-readable format 20:03:17 moving pieces is liking just move rf rf 20:03:24 where rf is row file in algebraic chess notation 20:03:32 er.... file row I think 20:03:33 is how it goes. 20:07:05 Also, is the Loop type used? 20:07:22 yes 20:07:25 it's in the Game type 20:07:48 I decided incorporating loops onto the board was too complicated. 20:07:53 No it isn't, that's Game Board [Set Coord] 20:07:59 oh.. 20:08:42 uh....... should be something else. 20:08:52 Nothing in either of your files I've seen 20:08:58 It's got a few instances 20:08:59 right it's not used currently 20:09:17 hm 20:09:50 -!- NihilistDandy has quit (Ping timeout: 272 seconds). 20:11:16 Clearly, this should become part of FICS 20:11:23 Ngevd: Coord needs to go into Loop 20:11:26 Hmm, it's been a while 20:11:27 and then it should be [Set Loop] 20:11:49 or...... 20:12:05 [Set Coord] and then have a Map Coord Loop.... I don't know yet. 20:12:14 I'll see what works best, I haven't got any loop code yhet. 20:12:24 working on the piece move sets whenever I have time. (today I'm focusing on school) 20:15:14 hm 20:15:26 I wonder if switching to Set for the actual move sets is better than using linked lists. 20:16:28 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 with list I can short-circuit on some cases. 20:16:45 (successful cases) 20:17:14 Can you make up a chess variant which is combined with mahjong? 20:17:24 -!- oerjan has quit (Quit: Good night). 20:17:27 I don't know mahjong very well, so no. 20:18:02 (I do have to construct the entire set to perform a lookup right? sets aren't lazy right?) 20:18:23 I prefer chess variants played with flat pieces, like how Shogi and Xiangqi are designed. 20:53:25 flip divMod 8 20:53:41 ^^^ sample of the graphical client for PortalChess 20:53:41 Ngevd: hm? 20:53:44 lol 20:53:47 yes. 20:53:59 that's a useful function for 2D grids represented by 1D grids. 20:54:24 Wait, I can replace it with (`divMod` 8) 20:54:30 I think 20:54:48 yes 20:54:54 I prefer that syntax to using flip 20:55:06 So do I, I just keep forgetting it 21:05:56 -!- comex has quit (Quit: Coyote finally caught me). 21:07:00 I am writing a complicated Haskell program which I have no way to test 21:09:12 kallisti, what format will loops be in 21:09:59 format? 21:10:23 I'm assuming not Set [Coord] or whatever 21:10:36 for now I'm just going to add a Coord field to Loop 21:10:39 and have [Set Loop] 21:10:56 I'll probably send a response to clients when a loop is formed from a cannon firing 21:10:59 with all the points. 21:11:36 -!- comex has joined. 21:11:50 Points as in where it turns, or points as in everywhere the projectile is 21:13:05 kallisti, ^^^? 21:14:19 everywhere it is. 21:14:26 Okay 21:14:51 also directions. 21:15:03 the direction of the projectile at each point. or maybe only the changes I don't know. 21:16:38 Ngevd: ah wait I know. 21:16:53 Loop will contain a set of Moves 21:17:01 which are Coord/Direction pairs 21:17:40 data Loop = Loop {loopOwner :: Player 21:17:40 loopSet :: Set Move 21:17:40 ,loopKind :: LoopKind 21:17:41 } 21:17:52 and then I just have [Loop] in Game 21:19:31 Hmm 21:19:38 I can work with that 21:19:44 -!- monqy has joined. 21:19:48 well... you're not being exposed to any of this anyway 21:19:50 just the protocol 21:20:26 I'm basing it on your PortalChess.Types 21:21:42 For reasons that make sense 21:22:20 the idea is that the client basically needs to do very little besides display what the server tells it to display 21:22:23 no need to duplicate work. 21:22:40 If the server sends the board, I can display it easy 21:22:49 Well, my future program can 21:23:08 yes I suppose that's an option 21:23:15 just send the entire board on each turn. 21:24:12 For display purpouses I can ignore loopOwner, right? 21:24:38 hm 21:24:40 you could 21:24:44 but it could be useful to know. 21:25:23 heh, if I wanted to be lazy I could, as my response, just show Game 21:25:25 and send that :P 21:25:32 makes Haskell clients easy to write. 21:25:52 You'd need Read Game as well 21:25:56 yes. 21:27:30 I'm going to ramble incoherently so I don't forget what I think for a bit 21:27:35 Circular lists? 21:27:36 sure. 21:27:36 Hmm 21:27:45 There's a prelude function for that, I think 21:27:49 as far as I can tell there are no infinite structures in Game. 21:27:53 > cycle [1,2,3] 21:27:54 [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:27:59 That's the one 21:28:29 Wait, I really just need \x:xs -> x:xs ++ [x] 21:28:49 Except for sets? 21:28:54 lol? 21:29:03 sets don't have an order 21:29:24 what on earth are you trying to do? 21:29:26 Oh no 21:29:30 Display loops 21:29:37 uh 21:29:43 the loop is a finite set of things. 21:29:54 But they're circular! 21:29:59 yes. 21:30:10 you mean you want to display a circular animation? 21:30:18 that would be some kind of recursive IO action. 21:30:21 No, I want to know what the one after each one is 21:30:29 oh 21:30:33 Or before 21:30:34 then yes just cycle it... 21:30:45 but I'll send the loop as a finite list of points obviously. 21:31:05 and currently since I represent them as sets there's no ordering to that information. 21:31:23 Will the loop definition's direction be coming into the square or going? 21:31:44 it would have to be going, I believe. 21:31:57 notice I use the going operator to write Moves 21:32:01 coordinate `going` direction 21:32:06 m = coordinate `going` direction; 21:32:20 then step' m returns the move where that move is performed. 21:32:39 or Nothing if it can't be performed. 21:32:48 So I'd need to know the previous bit of the loop 21:32:55 I'm still not really sure why you need a cyclic list 21:33:01 you just want to display the finite set of points right? 21:33:18 How do you imagine the projectiles as being displayed? 21:33:26 -shrug- client dependent. :P 21:33:31 a fancy client could do a nice cyclic animation 21:33:42 a simple one could just color the squares a shade. 21:33:43 I was imagining it as a sort of laser hang on that's an idea 21:33:57 I think it should be transparent though 21:34:02 so that you can see pieces in the loop 21:34:07 it should just overlay onto the square 21:35:19 * kallisti is not particularly interested in fancy graphics. 21:35:25 to visualize what's going on. 21:35:53 for example most computer chess games don't represent the pieces as like heroic action figures dueling each other or whatever. 21:36:16 it's just a symbolic representation 21:36:33 I'm just struggling to imagine the projectile loops 21:36:50 what would probably make it easier 21:36:52 As anything other than a length of coloured string 21:36:58 is if instead of Black and White the players were red and blue 21:37:16 then the projectile loop could just be red or blue squares 21:37:24 or red or blue squares going around in a animated loop 21:37:29 though that could be very distracting. 21:37:46 it does however 21:37:51 give you an idea of the directionality. 21:37:53 by animating it. 21:37:54 What if two differently coloured projectiles are occupying the same square? 21:37:58 can't 21:38:02 Why not? 21:38:14 projectiles cancel each other out, basically. 21:38:21 that's one of the rules of loops that I forgot to mention. 21:38:36 That makes things simpler... 21:38:40 yes it does. 21:38:55 it also makes a fair amount of intuitive sense. 21:39:06 Not if you imagine lasers! 21:39:10 true. 21:39:17 I might change that rule I dunno. 21:39:30 but two differently coloured projectiles could just turn purple on intersections, lol. -shrug- 21:39:37 but then 21:39:40 ownership rules are confusing. 21:39:45 on those squares. 21:39:56 which is only relevant for lenses 21:40:04 nothing else cares about the notion of projectile ownership. 21:42:37 * kallisti imagines changing the lens to a reflector piece. 21:42:45 directionless and just reversed the flow of a projectile 21:43:12 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 and would turn a unidirected loop into a bidirected one. :P 21:43:28 but.... no. 21:43:46 Ngevd: I think a triangle could be a good piece for a lens. 21:43:51 as that imparts a direction. 21:43:58 visually 21:44:13 -!- Vorpal has quit (Ping timeout: 252 seconds). 21:44:32 At the moment I'm using a sort of magnifying glass 21:44:46 ah yes 21:44:57 That looks a bit like the portal 21:44:57 not really sure how to represent portals. 21:45:11 I should really change the queen. :P 21:45:18 it would simplify some rules if I could make it a different kind of piece. 21:45:37 http://i1239.photobucket.com/albums/ff508/Taneb/Portal%20chess/portal_n_w.png 21:45:44 http://i1239.photobucket.com/albums/ff508/Taneb/Portal%20chess/lens_n_w.png 21:45:44 and I could remove the projectile cancelling rule and just make projectiles pass through loops 21:46:01 lol 21:46:04 top notch art dude. 21:46:30 yes it looks somewhat like a telescope eyepiece or something 21:46:31 I'm a poet mathematician, not a pixel artist 21:46:40 I think vector graphics would be easier for this. 21:46:52 also you get all the benefits of vectorized graphics. 21:46:59 I'm the one doing the client. 21:47:07 I call the graphics shots. 21:47:49 Also, it'd be hard for me to change it to Vectors, and I'm friends with a fair few pixel artists 21:47:59 lol okay. 21:48:27 * kallisti has final say on the Official Graphical Representation of Portal Chess Pieces. 21:48:44 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 ...I was just going to use normal chess piece icons for that, actually. 21:49:25 with some kind of thing for direction 21:49:30 but maybe having FANCY NEW SYMBOLS is better. 21:49:33 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 zzo38: I'm not entirely sure what I could do with that, but if you want to that would be fine. 21:50:30 kallisti: I am guessing, make rules with diagrams. 21:51:03 When we have a) an official, final ruleset and b) semi-official piece representations 21:51:24 (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 Ngevd: yeah I'll get around to that eventually. :P 21:52:02 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 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:45 bye 21:52:48 -!- Ngevd has quit (Quit: Goodbye). 21:52:55 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 Including different sizes of boards, using different fonts for piece icons, etc 21:53:10 Not sure what happened there 21:53:12 zzo38: can it show piece movesets? 21:53:27 to highlight all the locations a piece can move. 21:53:49 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 zzo38: can you render this in HTML? 21:55:51 * kallisti is a noob at TeX 21:56:05 kallisti: No. It is only for TeX. 21:56:25 seems like you should be able to render it and then take an image or something. 21:56:33 kallisti: You can do that, yes. 21:57:00 The program "dvipng" might help if you want to render it and then take an image 21:57:23 PDF? 21:57:56 * kallisti is equally clueless about PDF as he is TeX 21:58:07 I don't spend a lot of time rendering written documents in things. :P 21:58:19 does anyone actually write PDF by hand? 21:58:22 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 PostScript, yes, but PDF? 21:58:32 Probably not 21:59:05 PDF is a dumb format full of dumb things, and so is PostScript 21:59:27 wow, that's an unusually strong opinion for you 21:59:28 PDF has the advantage of commonplace web browser support 22:00:38 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 But lacks the graphics capabilities of PDF 22:01:08 Or we could just use HTML 22:01:14 Plain text support is common everywhere, including gopher 22:01:17 Which has ubiquitious browser support 22:01:33 But a range is probably best 22:01:39 Ngevd: Yes you can use HTML too, if you prefer. 22:01:43 zzo38: couldn't I just write the rules in LaTeX and then translate that to basically any other document format? 22:02:15 kallisti: I don't think so because the program TeX chess is only for Plain TeX. 22:02:35 but you can embed images in LaTeX right? I really just need the output image from such a program. 22:03:02 (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 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 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 http://zzo38computer.cjb.net/tex/texchess.zip 22:05:51 It includes a documentation. 22:08:00 I still don't know how to draw projectile loops... 22:09:18 -!- Ngevd has quit (Quit: Goodnight). 22:45:49 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 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.