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:
|
exposed-modules:
|
||||||
Propa.Lambda.Display
|
Propa.Lambda.Display
|
||||||
Propa.Lambda.Term
|
Propa.Lambda.Term
|
||||||
|
Propa.Prolog.Display
|
||||||
Propa.Prolog.Example
|
Propa.Prolog.Example
|
||||||
Propa.Prolog.Types
|
Propa.Prolog.Types
|
||||||
Propa.Prolog.Unify
|
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