On Sat, 2 May 2020, Hans Hagen wrote: > On 5/1/2020 11:38 PM, Aditya Mahajan wrote: >> On Fri, 1 May 2020, Hans Hagen wrote: >> >>> On 5/1/2020 6:12 AM, Jairo A. del Rio wrote: >>>> I've adapted the following code to make mazes in LuaLaTeX and ConTeXt: >>>> https://www.rosettacode.org/wiki/Maze_generation#Lua >>>> >>>> I defined a modified version to make content visible to TeX and I saved >>>> in a file named maze.lua: >>>> >>>> function make_maze_tex(w, h, m) >>>>    w = w or 16 >>>>    h = h or 8 >>>> >>>>    local map = initialize_grid(w*2+1, h*2+1) >>>> >>>>    function walk(x, y) >>>>      map[y][x] = false >>>> >>>>      local d = { 1, 2, 3, 4 } >>>>      shuffle(d) >>>>      for i, dirnum in ipairs(d) do >>>>        local xx = x + dirs[dirnum].x >>>>        local yy = y + dirs[dirnum].y >>>>        if map[yy] and map[yy][xx] then >>>>          map[avg(y, yy)][avg(x, xx)] = false >>>>          walk(xx, yy) >>>>        end >>>>      end >>>>    end >>>> >>>>    walk(math.random(1, w)*2, math.random(1, h)*2) >>>> >>>> ...ext/tex/texmf-context/tex/context/base/mkiv/supp-ran.lua:30: C stack >>>> overflow Why does it happen? I guess it has something to do with >>>> math.randomseed, but I don't know how to avoid this error message. >>> no, it's just lua running out of stack space so it depends on the binary >>> (and als the initial random value) >> >> But why is it running out of stack? Isn't the walk function tail >> recursive, in which case it should not cause a stack overflow >> (https://www.lua.org/pil/6.3.html). > not really tail recursive: that is only true when it's the last action and > return is used and it nests very deep > > function foo(...) > ... > return foo(...) > end > > versus > > function foo(...) > ... > if something then > foo(...) > end > end Thanks for the clarification. If you or anyone else is going to play around with generating mazes, definitely take a look at http://www.mazesforprogrammers.com/ and the live demos here: https://weblog.jamisbuck.org/2011/2/7/maze-generation-algorithm-recap Aditya