Dear Hans, Thank you for your suggestions. I changed the code without the intermediate variables. I works well. Best regards, Dalyoung
2025. 1. 5. 오후 7:42, Hans Hagen via ntg-context
작성: On 1/4/2025 12:27 AM, Jeong Dal via ntg-context wrote:
Dear Florent, Wolfgang, and Hans, I modify the code given by Hans as following: 1. Place the function definition ab the beginning of the file. I use if function to check the number of element of a and apply it to the number of columns. 2. And call the functions in the text. It works! It draw the truth table of the given logic functions. Thanks a lot. Best regards, Dalyoung \startluacode function document.MakeHead(p,a) if not a then local t = p p = string.rep("|mcw(1cm)",#p-1) .. "|mcw(1.5cm)|" a = t end context.starttabulate { p } context.FL() for i=1,#a do context.NC() context(a[i]) end context.NC() context.NR() context.LL() end function document.truthTable(a) document.MakeHead (a) for i,s in ipairs({true,false}) do for j,t in ipairs({true,false}) do for k,u in ipairs({true,false}) do if s then val=1 else val=0 end context.NC() context(val) context.NC() if t then val=1 else val=0 end context(val) context.NC() if #a == 3 then break end if u then val=1 else val=0 end context(val) context.NC() con=document.logicFa(s,t,u) context(con) context.NC() context.AR() end if #a == 3 then con=document.logicF2(s,t) context(con) context.NC() context.AR() end end end context.HL() context.stoptabulate() end \stopluacode In the text call the functions as following: \startplacetable[location=here,reference=tbl:Fxyz] \startluacode function document.logicFa(p,q,r) if ((not p or not q) and r) or (p and (q or not r)) then return "1" else return "0" end end a = { "p", "q", "r","f(p,q,r)"} document.truthTable(a) \stopluacode \stopplacetable
Best use 'local' for val, con, a etc or do this:
\startluacode function document.MakeHead(p,a) if not a then local t = p p = string.rep("|mcw(1cm)",#p-1) .. "|mcw(1.5cm)|" a = t end context.starttabulate { p } context.FL() for i=1,#a do context.NC() context(a[i]) end context.NC() context.NR() context.LL() end
function document.MakeFooter() context.HL() context.stoptabulate() end
function document.truthTable(a) document.MakeHead(a) for i,s in ipairs({true,false}) do for j,t in ipairs({true,false}) do for k,u in ipairs({true,false}) do context.NC() context(s and "1" or "0") context.NC() context(t and "1" or "0") context.NC() if #a == 3 then break end context(u and "1" or "0") context.NC() context(document.logicFa(s,t,u)) context.NC() context.AR() end if #a == 3 then context(document.logicF2(s,t)) context.NC() context.AR() end end end document.MakeFooter() end \stopluacode
\startplacetable[location=here,reference=tbl:Fxyz] \startluacode function document.logicFa(p,q,r) if ((not p or not q) and r) or (p and (q or not r)) then return "1" else return "0" end end document.truthTable { "p", "q", "r","f(p,q,r)" } \stopluacode \stopplacetable
you don't need the intermediate variables
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________