[NTG-context] Lua to Context Table

Aditya Mahajan adityam at umich.edu
Sat Aug 2 06:48:45 CEST 2014


On Sat, 2 Aug 2014, luigi scarso wrote:

> On Sat, Aug 2, 2014 at 12:59 AM, John Kitzmiller <kitz at inradius.net> wrote:
>
>> Here is Lua code that prints the first nine fibonacci numbers:
>>
>> local function fib(n)
>>   f={1,1}
>>   for i=3,9 do
>>     f[i]=f[i-1]+f[i-2]
>>   end
>>   return(f[n])
>> end
>> for n=1,9 do print(fib(n)) end
>>
>> Here is Context+Lua that prints 3 x 3 table of the first nine natural
>> numbers:
>>
>> \starttext
>> \setupTABLE[each][each][frame=off,align=left,width=4em,height=2em]
>> \startluacode
>> context.bTABLE()
>> for j = 0, 2 do
>>   context.bTR()
>>     for k = 1, 3 do
>>       context.bTD()
>>         context(3*j+k)
>>       context.eTD()
>>     end
>>   context.eTR()
>> end
>> context.eTABLE()
>> \stopluacode
>> \stoptext
>>
>> How can these be combined to print a 3 x 3 table of the first nine
>> fibonacci numbers?
>>
>> I have tried a couple of ways to iterate over the lua table f in the most
>> indented line of context, looked at what pertinent threads I could find,
>> the Wiki entries, CLD, and tried Aditya's method from Stack Exchange; I am
>> missing something.
>>
>
> You have a *global* table f  that collides with the internals of context
> local function fib(n)
>  f={1,1}
>  for i=3,9 do
>    f[i]=f[i-1]+f[i-2]
>  end
>  return(f[n])
> end
>
>
> \starttext
> \setupTABLE[each][each][frame=off,align=left,width=8em,height=2em]
>
> \startluacode
> local function fib(n)
>  local f={1,1}
>  for i=3,9 do
>    f[i]=f[i-1]+f[i-2]
>  end
>  return(f[n])
> end
> context.bTABLE()
> for j = 0, 2 do
>  context.bTR()
>    for k = 1, 3 do
>      context.bTD()
>        context("fib(%s)=%s" ,3*j+k, fib(3*j+k) )
>      context.eTD()
>    end
>  context.eTR()
> end
> context.eTABLE()
> \stopluacode
> \stoptext

This version recomputes all fibnocci numbers from scrach each time. Here 
is a memoized version:

\setupTABLE[each][each][frame=off,align=left,width=8em,height=2em]
\starttext

\startluacode
local fibs = {1, 1}
local function fib(n)
   if fibs[n] == nil then
     print(">>>>", "Computing fib:" .. n)
     fibs[n] = fib(n-1) + fib(n-2)
   end

   return fibs[n]
end

context.bTABLE()
for j = 0, 2 do
   context.bTR()
     for k = 1, 3 do
       context.bTD()
         context("fib(%s)=%s" ,3*j+k, fib(3*j+k) )
       context.eTD()
     end
   context.eTR()
end
context.eTABLE()
\stopluacode
\stoptext


Aditya


More information about the ntg-context mailing list