Convert terms and definitions to strings
This commit is contained in:
parent
52310c766f
commit
18e5acd693
2 changed files with 40 additions and 0 deletions
|
|
@ -22,6 +22,7 @@ library
|
|||
exposed-modules:
|
||||
Propa.Lambda.Display
|
||||
Propa.Lambda.Term
|
||||
Propa.Prolog.Display
|
||||
Propa.Prolog.Example
|
||||
Propa.Prolog.Types
|
||||
Propa.Prolog.Unify
|
||||
|
|
|
|||
39
src/Propa/Prolog/Display.hs
Normal file
39
src/Propa/Prolog/Display.hs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Propa.Prolog.Display
|
||||
( displayTerm
|
||||
, displayTerms
|
||||
, displayDef
|
||||
, displayDefs
|
||||
, displayResult
|
||||
) where
|
||||
|
||||
import qualified Data.Map as Map
|
||||
import qualified Data.Text as T
|
||||
|
||||
import Propa.Prolog.Types
|
||||
|
||||
displayStat :: T.Text -> [Term T.Text] -> T.Text
|
||||
displayStat name [] = name
|
||||
displayStat name args = name <> "(" <> T.intercalate ", " (map displayTerm args) <> ")"
|
||||
|
||||
displayTerm :: Term T.Text -> T.Text
|
||||
displayTerm (Var v) = v
|
||||
displayTerm (Stat name args) = displayStat name args
|
||||
|
||||
displayTerms :: [Term T.Text] -> T.Text
|
||||
displayTerms terms = T.intercalate ",\n" (map displayTerm terms) <> "."
|
||||
|
||||
displayDef :: Def T.Text -> T.Text
|
||||
displayDef (Def name args []) = displayStat name args <> "."
|
||||
displayDef (Def name args terms)
|
||||
= displayStat name args
|
||||
<> " :-\n"
|
||||
<> T.intercalate ",\n" (map (\t -> " " <> displayTerm t) terms)
|
||||
<> "."
|
||||
|
||||
displayDefs :: [Def T.Text] -> T.Text
|
||||
displayDefs = T.intercalate "\n" . map displayDef
|
||||
|
||||
displayResult :: Map.Map T.Text (Term T.Text) -> T.Text
|
||||
displayResult = T.intercalate "\n" . map (\(k, v) -> k <> " = " <> displayTerm v) . Map.assocs
|
||||
Loading…
Add table
Add a link
Reference in a new issue