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 <ntg-context@ntg.nl> 작성:
> 
> 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
> ___________________________________________________________________________________

___________________________________________________________________________________
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
___________________________________________________________________________________

Reply via email to