Dear Florent, Wolfgang, and Hans,

Thank you for the solutions.

All solutions are working well.

I add more rows for the last solution to show the truth table of a logical function.
I may modify it for 2-variable function.

Thanks again.

Best regards,

Dalyoung


\starttext
\startluacode
function document.logicFa(p,q,r)
local p,q,r
if ((p or r) and (not q)) then
return "1"
else
return "0"
end
end

function document.logicFb(p,q)
local p,q
if ((not p) or q) then
return "1"
else
return "0"
end
end

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()
-- context.stoptabulate()
end
\stopluacode

\startluacode
a = { "x", "y","z", "\\overbar{y}(x+z)" }
document.MakeHead (a)
-- "|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(2cm)|,

for i,p in ipairs({true,false}) do
for j,q in ipairs({true,false}) do
for k,r in ipairs({true,false}) do
context.NC()
if p then val=1 else val=0 end
context(val)
context.NC()
if q then val=1 else val=0 end
context(val)
context.NC()
if r then val=1 else val=0 end
context(val)
context.NC()
con=document.logicFa(p,q,r)
context(con)
context.NC()
context.AR()
end
end
end
context.HL()
context.stoptabulate()
\stopluacode
\stoptext