Hi Dalyoung, I tested your code: it works fine with both definitions of the variable tt in your code. I am using the current LMTX version 2020.04.08 14:38. Best regards: Otared
On 11 Apr 2020, at 14:32, Jeong Dal
wrote: Dear all,
I draw Pascal’s triangle with the label of each point created by using lua functions. As you see in the code below, I defined fact(n) and combi(n,r) using lua. For the calculation tt, I used two different methods. Both are working well when I run the given code.
But I got an error, when I added this code to a ConTeXt file composed product and components, and using the second method, i.e. combi(n,r). The first method is still working well. The error message is as following:
metapost log > loading metafun, including plain.mp version 1.004 for metafun iv and xl metapost log > luatex warning > mplib: run script: [string "return mp.print(combi(0,0 ))"]:1: attempt to call a nil value (global 'combi')
metapost log > >> tt metapost log > >> vacuous metapost log > ! Equation cannot be performed (numeric=vacuous). metapost log > <to be read again> metapost log > ; metapost log >
...&decimal(0)&","&decimal(EXPR0)&" ))"); metapost log > now:=start+(EXPR0)*right*d... metapost log > ....now--(now+A);draw.now--(now+B);endfor metapost log > ; ENDFOR metapost log > <*> ...now+A); draw now -- (now+B); endfor; endfor metapost log > ;; I don’t know why the same code treated differently. I think that I have to do something more in luacode which I don’t know. Comments are wellcome!
Best regards,
Dalyoung
%%%%%%%
\startluacode function fact (n) if n <= 0 then return 1 else return n * fact(n-1) end end function combi(n,r) return fact(n)/(fact(r)*fact(n-r)) end \stopluacode \startbuffer[fig121] numeric n,r,s,u,dx,dy,tt; u := 1.8cm; path p, q; pair A,B,start,now; A := dir(210)*u; B := dir(-30)*u; dy := sind(30)*u; dx := 2*cosd(30)*u; for n=0 upto 4: start := n*dir(210)*u; for r=0 upto n: s := n-r; % tt := lua("mp.print(fact(" & decimal n & ")/(fact(" & decimal r & ")*fact(" & decimal s &" )))"); tt := lua("mp.print(combi(" & decimal n & "," & decimal r & " ))");
now := start+r*right*dx; dotlabel.top(textext("$\displaystyle {" & decimal n & "\choose" & decimal r & "} = "& decimal tt & "$"),now); draw now -- (now+A); draw now -- (now+B); endfor; endfor; \stopbuffer \starttext \switchtobodyfont[11pt] \processMPbuffer[fig121] \switchtobodyfont[12pt] \stoptext
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___________________________________________________________________________________