Question about building an array of values with Lua
Hi, I'm trying to fill an array using lua. So far it works but then I don't know if it's possible. Thanks Fabrice \startluacode context.startxtable({"align={middle,lohi},bodyfont=9pt,framecolor=black"}) context.startxrow({"background=color, backgroundcolor=lightgray"}) context.startxcell({"nx=4"}) context("Units digit of") context.stopxcell() context.stopxrow() context.startxrow() context.startxcell({"width=1cm"}) context("\\im{a}") context.stopxcell() context.startxcell({"width=1cm"}) context("\\im{a²}") context.stopxcell() context.startxcell({"width=1cm"}) context("\\im{b}") context.stopxcell() context.startxcell({"width=1cm"}) context("\\im{2b²}") context.stopxcell() context.stopxrow() for i = 0, 9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.stopxrow() end context.stopxtable() \stopluacode
Fabrice Couvreur schrieb am 23.08.2023 um 19:28:
Hi, I'm trying to fill an array using lua. So far it works but then I don't know if it's possible.
Where do you have problems (look into cld-mkiv.pdf for hins)? \starttext \startluacode context.startxtable{ align = "middle,lohi", bodyfont = "9pt", framecolor = "black" } context.startxrow{ background = "color", backgroundcolor = "lightgray" } context.startxcell{ nx = 4 } context("Units digit of") context.stopxcell() context.stopxrow() context.startxrow() context.startxcell{ width = "1cm" } context.im("a") context.stopxcell() context.startxcell{ width = "1cm" } context.im("a^2") context.stopxcell() context.startxcell{ width = "1cm" } context.im("b") context.stopxcell() context.startxcell{ width = "1cm" } context.im("2b^2") context.stopxcell() context.stopxrow() for i = 0,9 do context.startxrow() for j = 1,4 do context.startxcell() if j == 1 then context(i) end context.stopxcell() end context.stopxrow() end context.stopxtable() \stopluacode \stoptext Wolfgang
Hi Fabrice, As Wolfgang points out, it is indeed possible to fill-in your table with Lua: maybe you were wondering how to fill the columns 2, 3 and 4. In this case you need to use the Lua function math.mod as in the following, which is a completed version of what Wolfgang sent: %% begin filling-with-lua.tex \starttext \startluacode context.startxtable{ align = "middle,lohi", bodyfont = "9pt", framecolor = "black" } context.startxrow{ background = "color", backgroundcolor = "lightgray" } context.startxcell{ nx = 4 } context("Units digit of") context.stopxcell() context.stopxrow() context.startxrow() context.startxcell{ width = "1cm" } context.im("a") context.stopxcell() context.startxcell{ width = "1cm" } context.im("a^2") context.stopxcell() context.startxcell{ width = "1cm" } context.im("b") context.stopxcell() context.startxcell{ width = "1cm" } context.im("2b^2") context.stopxcell() context.stopxrow() for i = 0,9 do context.startxrow() for j = 1,4 do context.startxcell() if j == 1 then context(i) elseif j == 2 then context(math.mod(i*i,10)) elseif j == 3 then context(i) else context(math.mod(2*i*i,10)) end context.stopxcell() end context.stopxrow() end context.stopxtable() \stopluacode \stoptext %% end filling-with-lua.tex Best regards: Otared
On 23 Aug 2023, at 17:48, Wolfgang Schuster
wrote: Fabrice Couvreur schrieb am 23.08.2023 um 19:28:
Hi, I'm trying to fill an array using lua. So far it works but then I don't know if it's possible.
Where do you have problems (look into cld-mkiv.pdf for hins)?
\starttext
\startluacode context.startxtable{ align = "middle,lohi", bodyfont = "9pt", framecolor = "black" } context.startxrow{ background = "color", backgroundcolor = "lightgray" } context.startxcell{ nx = 4 } context("Units digit of") context.stopxcell() context.stopxrow() context.startxrow() context.startxcell{ width = "1cm" } context.im("a") context.stopxcell() context.startxcell{ width = "1cm" } context.im("a^2") context.stopxcell() context.startxcell{ width = "1cm" } context.im("b") context.stopxcell() context.startxcell{ width = "1cm" } context.im("2b^2") context.stopxcell() context.stopxrow() for i = 0,9 do context.startxrow() for j = 1,4 do context.startxcell() if j == 1 then context(i) end context.stopxcell() end context.stopxrow() end context.stopxtable() \stopluacode
\stoptext
Wolfgang
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context webpage : https://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : https://contextgarden.net ___________________________________________________________________________________
Otared Kavian e-mail: otared@gmail.com Phone: +33 6 88 26 70 95
Otared Kavian schrieb am 24.08.2023 um 01:04:
Hi Fabrice,
As Wolfgang points out, it is indeed possible to fill-in your table with Lua: maybe you were wondering how to fill the columns 2, 3 and 4. In this case you need to use the Lua function math.mod as in the following, which is a completed version of what Wolfgang sent:
I guess I completely missed the units digit part :)
%% begin filling-with-lua.tex \starttext
\startluacode context.startxtable{ align = "middle,lohi", bodyfont = "9pt", framecolor = "black" } context.startxrow{ background = "color", backgroundcolor = "lightgray" } context.startxcell{ nx = 4 } context("Units digit of") context.stopxcell() context.stopxrow() context.startxrow() context.startxcell{ width = "1cm" } context.im("a") context.stopxcell() context.startxcell{ width = "1cm" } context.im("a^2") context.stopxcell() context.startxcell{ width = "1cm" } context.im("b") context.stopxcell() context.startxcell{ width = "1cm" } context.im("2b^2") context.stopxcell() context.stopxrow() for i = 0,9 do context.startxrow() for j = 1,4 do context.startxcell() if j == 1 then context(i) elseif j == 2 then context(math.mod(i*i,10)) elseif j == 3 then context(i) else context(math.mod(2*i*i,10)) end context.stopxcell() end context.stopxrow() end
I would drop the column check in this case. for i = 0,9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(i*i,10)) context.stopxcell() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(2*i*i,10)) context.stopxcell() context.stopxrow() end Wolfgang
On 24 Aug 2023, at 06:03, Wolfgang Schuster
wrote: […]
I would drop the column check in this case.
for i = 0,9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(i*i,10)) context.stopxcell() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(2*i*i,10)) context.stopxcell() context.stopxrow() end
Wolfgang
Indeed this is much more elegant… It feels so good to be on this list and learn from such insights :-) Best regards: Otared
Otared Kavian schrieb am 24.08.2023 um 12:50:
On 24 Aug 2023, at 06:03, Wolfgang Schuster
mailto:wolfgang.schuster.lists@gmail.com> wrote: […]
I would drop the column check in this case.
for i = 0,9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(i*i,10)) context.stopxcell() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(2*i*i,10)) context.stopxcell() context.stopxrow() end
Wolfgang
Indeed this is much more elegant… It feels so good to be on this list and learn from such insights :-)
We don't even need the math.mod function because Lua added with version 5.1 a modulo operator, the loop to create the row can now be changed to for i = 0,9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.startxcell() context(i * i % 10) context.stopxcell() context.startxcell() context(i) context.stopxcell() context.startxcell() context(2 * i * i % 10) context.stopxcell() context.stopxrow() end Wolfgang
Hi Wolfgang, Thank you so much Fabrice Le jeu. 24 août 2023 à 19:46, Wolfgang Schuster < wolfgang.schuster.lists@gmail.com> a écrit :
Otared Kavian schrieb am 24.08.2023 um 12:50:
On 24 Aug 2023, at 06:03, Wolfgang Schuster < wolfgang.schuster.lists@gmail.com> wrote:
[…]
I would drop the column check in this case.
for i = 0,9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(i*i,10)) context.stopxcell() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(2*i*i,10)) context.stopxcell() context.stopxrow() end
Wolfgang
Indeed this is much more elegant… It feels so good to be on this list and learn from such insights :-)
We don't even need the math.mod function because Lua added with version 5.1 a modulo operator, the loop to create the row can now be changed to
for i = 0,9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.startxcell() context(i * i % 10) context.stopxcell() context.startxcell() context(i) context.stopxcell() context.startxcell() context(2 * i * i % 10) context.stopxcell() context.stopxrow() end
Wolfgang
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context webpage : https://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : https://contextgarden.net
___________________________________________________________________________________
Hi Otared and Wolgang, Thanks for the answers. In fact, being familiar with Python and not at all with Lua, I didn't have the reflex to think of using a mathematical function which gives the remainder in the Euclidean division by 10, it's strange !! Fabrice Le jeu. 24 août 2023 à 04:06, Wolfgang Schuster < wolfgang.schuster.lists@gmail.com> a écrit :
Otared Kavian schrieb am 24.08.2023 um 01:04:
Hi Fabrice,
As Wolfgang points out, it is indeed possible to fill-in your table with Lua: maybe you were wondering how to fill the columns 2, 3 and 4. In this case you need to use the Lua function math.mod as in the following, which is a completed version of what Wolfgang sent:
I guess I completely missed the units digit part :)
%% begin filling-with-lua.tex \starttext
\startluacode context.startxtable{ align = "middle,lohi", bodyfont = "9pt", framecolor = "black" } context.startxrow{ background = "color", backgroundcolor = "lightgray" } context.startxcell{ nx = 4 } context("Units digit of") context.stopxcell() context.stopxrow() context.startxrow() context.startxcell{ width = "1cm" } context.im("a") context.stopxcell() context.startxcell{ width = "1cm" } context.im("a^2") context.stopxcell() context.startxcell{ width = "1cm" } context.im("b") context.stopxcell() context.startxcell{ width = "1cm" } context.im("2b^2") context.stopxcell() context.stopxrow() for i = 0,9 do context.startxrow() for j = 1,4 do context.startxcell() if j == 1 then context(i) elseif j == 2 then context(math.mod(i*i,10)) elseif j == 3 then context(i) else context(math.mod(2*i*i,10)) end context.stopxcell() end context.stopxrow() end
I would drop the column check in this case.
for i = 0,9 do context.startxrow() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(i*i,10)) context.stopxcell() context.startxcell() context(i) context.stopxcell() context.startxcell() context(math.mod(2*i*i,10)) context.stopxcell() context.stopxrow() end
Wolfgang
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context webpage : https://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : https://contextgarden.net
___________________________________________________________________________________
participants (3)
-
Fabrice Couvreur
-
Otared Kavian
-
Wolfgang Schuster