Newest at the top
2024-05-16 18:45:56 +0200 | <lambdabot> | Ix a => (a, a) -> [a] |
2024-05-16 18:45:55 +0200 | <ski> | @type range |
2024-05-16 18:45:45 +0200 | <lambdabot> | [(0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(1,3)] |
2024-05-16 18:45:44 +0200 | <ski> | > range ((0,0),(1,3)) |
2024-05-16 18:45:20 +0200 | <ski> | (there are instances like `(Ix a,Ix b,Ix c) => Ix (a,b,c)') |
2024-05-16 18:44:55 +0200 | hueso | (~root@user/hueso) (Read error: Connection reset by peer) |
2024-05-16 18:43:30 +0200 | <ski> | the above should work |
2024-05-16 18:39:44 +0200 | <Guest13> | do I need to define my own 3d tabulate? |
2024-05-16 18:37:48 +0200 | <Guest13> | I will try this now thank you for the help ski |
2024-05-16 18:37:05 +0200 | <Guest13> | I think I get it though, my program will query 0 0 0 in the table which will spawn recursive calls and the base case is n m 0 = 1 |
2024-05-16 18:35:55 +0200 | <Guest13> | yeah, for some reason it being in a table confused me |
2024-05-16 18:35:53 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-05-16 18:35:38 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
2024-05-16 18:35:20 +0200 | <mauke> | dead ends are where the recursion dies :-) |
2024-05-16 18:35:09 +0200 | <Guest13> | this would be setting the value to 0 |
2024-05-16 18:34:55 +0200 | <ski> | base cases / dead ends, i guess |
2024-05-16 18:33:11 +0200 | <Guest13> | and you have some calls where you say it has gone wrong and ways = 0 |
2024-05-16 18:32:56 +0200 | <Guest13> | its basically a "ways if go left" + "ways if go right" recursion |
2024-05-16 18:32:25 +0200 | <Guest13> | I need to think about how to implement the "dead ends" of the recursive call |
2024-05-16 18:32:10 +0200 | <Guest13> | I will have a go at this |
2024-05-16 18:31:37 +0200 | <ski> | (i guess you actually meant `f x (y-1) z + f (x-1) y z', btw) |
2024-05-16 18:30:11 +0200 | <Guest13> | im trying to count the ways of doing something |
2024-05-16 18:29:25 +0200 | <Guest13> | I think I get how to do it |
2024-05-16 18:29:20 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2024-05-16 18:28:58 +0200 | <Guest13> | so I can do a \(x,y,z) -> f x y-1 z + f x-1 y z |
2024-05-16 18:28:54 +0200 | <ski> | oh, you said "yes, but I am probably framing it badly" just after i asked "are you sure dynamic programming would make sense, for your problem, then ?", so i was taking that for granted |
2024-05-16 18:28:06 +0200 | <ski> | you can use `listArray' (or `array'), or the `tabulate' i defined above, to (lazily) populate the array with elements, based on their indices |
2024-05-16 18:28:03 +0200 | <Guest13> | im not really doing dp |
2024-05-16 18:27:57 +0200 | <Guest13> | I understand the map f [1..] for fib, and even the tabulate version you showed me but I don't understand this one |
2024-05-16 18:27:45 +0200 | manwithluck | (~manwithlu@149.102.244.20) |
2024-05-16 18:27:35 +0200 | tomboy64 | (~tomboy64@user/tomboy64) |
2024-05-16 18:27:31 +0200 | <Guest13> | ok, how can I use this to cache |
2024-05-16 18:27:21 +0200 | <ski> | so, maybe try `Array (Int,Int,Int) Result' ? |
2024-05-16 18:27:20 +0200 | <Guest13> | at most like 20 |
2024-05-16 18:27:00 +0200 | <Guest13> | the ranges aren't large |
2024-05-16 18:26:32 +0200 | <ski> | but if your ranges (?) of `Int's are large, the array would contain a lot of elements, take a lot of space (the array itself would be allocated eagerly, only the array elements would be lazily evaluated) |
2024-05-16 18:26:10 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2024-05-16 18:25:27 +0200 | <ski> | if you're okay with a dense caching space, you could try caching with an array |
2024-05-16 18:25:20 +0200 | <Guest13> | I don't know upfront which triples are needed |
2024-05-16 18:24:55 +0200 | <Guest13> | can be sparse or dense depending on input |
2024-05-16 18:24:49 +0200 | <ski> | (or `Map Int (Map Int (Map Int Result))', i guess ..) |
2024-05-16 18:24:35 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 268 seconds) |
2024-05-16 18:24:25 +0200 | <ski> | ok, maybe it would make sense to cache in a three-dimensional array, or (if you only need sparse inputs) maybe use a `Map (Int,Int,Int) Result' or something like that (that'd still require you to know upfront which triples would be needed, which might not be ideal) |
2024-05-16 18:22:53 +0200 | <ski> | (for each new toplevel call, you'd generate a fresh/new cache, from scratch, whose results would only be reused for recursive calls stemming from that particular toplevel call) |
2024-05-16 18:22:38 +0200 | <Guest13> | I can formulate it as Int Int Int, with constant [Int] and String |
2024-05-16 18:22:35 +0200 | cfricke | (~cfricke@user/cfricke) (Ping timeout: 256 seconds) |
2024-05-16 18:22:24 +0200 | <Guest13> | this would be ideal |
2024-05-16 18:22:10 +0200 | <ski> | if only some of the parameters changed in recursive calls, then you could, within a single toplevel call, only cache for the changing parameters, thereby simplifying the datastructure needed to cache results |
2024-05-16 18:21:26 +0200 | <Guest13> | I could frame it as Int Int Int and have [Int] and String as references |
2024-05-16 18:20:53 +0200 | <Guest13> | the recursive call changes all of the above, and the top call I believe will start at 0 0 [Int] String |