latex truth table: easy part

This commit is contained in:
hi 2025-07-31 11:29:43 +00:00
parent 1a2c2fb50f
commit d7d1e0cb05

32
Main.hs
View file

@ -1,6 +1,7 @@
import Control.Applicative (Applicative, Alternative(..)) import Control.Applicative (Applicative, Alternative(..))
import Data.Char (isAlphaNum) import Data.Char (isAlphaNum)
import Data.Functor (Functor) import Data.Functor (Functor)
import Data.List (intercalate)
import Data.Maybe (fromJust) import Data.Maybe (fromJust)
import qualified Data.Map as M import qualified Data.Map as M
import qualified Data.Set as S import qualified Data.Set as S
@ -205,3 +206,34 @@ serialize = aux
latex (Iff s1 s2) = connective "\\leftrightarrow " (latex s1) (latex s2) latex (Iff s1 s2) = connective "\\leftrightarrow " (latex s1) (latex s2)
connective token s1 s2 = "(" <> s1 <> token <> s2 <> ")" connective token s1 s2 = "(" <> s1 <> token <> s2 <> ")"
truthtable :: Statement -> String
truthtable s = open <> header <> "\\hline\n" <> body <> close
where
open =
"\\begin{tabular}{" <>
replicate (length atomsList) 'c' <>
"|" <>
replicate (length serial) 'c' <>
"}\n"
close = "\\end{tabular}\n\n"
serial = serialize Latex s
atomsList :: [String]
atomsList = S.toAscList $ atoms s
header :: String
header = intercalate "&" atomsList <> " \\\\\n"
body = concat $ map line $ enumerate atomsList
line assignments =
intercalate "&" (bools assignments) <>
intercalate " & " (parts assignments) <>
" \\\\\n"
bools assignments = [if bool then "1" else "0" | (key, bool) <- assignments]
parts assignments = [""]