RosettaCodeData/Task/Truth-table/APL/truth-table.apl

46 lines
1.6 KiB
APL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

truth{
op'~∧∨≠→('(4 3 2 2 1 0)
order{
out stk
0=:out,stk
c rst() (1)
c⎕A:((out,c)stk)rst
c'01':((out,c)stk)rst
(c'(')(op)nop[;1]c:rstout{
cnd\('(')op[op[;1];2]op[n;2]
(,cnd/)(((~cnd)/),c)
}stk
c='(':(out(stk,c))rst
c=')':rstout{
par'('=:'Missing ('⎕SIGNAL 11
n/par
(,n)((n-1))
}stk
('Invalid character ',c)⎕SIGNAL 11
}1(819)~4⎕TC
'('order:'Missing )'⎕SIGNAL 11
nvarvars(order⎕A)/order
eval{
0=:{
1:'Missing operator'⎕SIGNAL 11
}
c rst() (1)
c⎕A:([varsc],)rst
c0 1:(c,)rst
c='~':(1 0)rst 'Missing operand'⎕SIGNAL(0=)/11
cop[;1]:({
2>:'Missing operand'⎕SIGNAL 11
c='→':(/2),2
((c)/2),2
})rst
}
_(nvar/0) eval order
confs(nvar/2)¯1+2*nvar
tab'FT│'[1+(confs,2),{ eval order}¨confs]
tab,/ ' ',¨tab
hdr((,/(' ',¨vars),' '),[0.5]'─'),'│┼'
hdrhdr,(' ',,' '),[0.5]'─'
hdr(,' '(-/1¨¨hdr tab))tab
}