4 ms·
I'll use a bit of Haskell in my response, since that's what I'm most comfortable with and what we actually use for our work. Hopefully that's okay. We can defi
by joelburget 7y ago
I'll use a bit of Haskell in my response, since that's what I'm most comfortable with and what we actually use for our work. Hopefully that's okay.
We can define a data type of expressions in our language, with addition, multiplication, etc.
data Expr = Addition Expr Expr | Multiplication Expr Expr | ...
Then we need the type of an interpreter which consumes program inputs and produces an output. I'll leave this abstract for now.
data Interpreter = ...
By map, we just mean that we can write a Haskell function with this type
interpret :: Expr -> Interpreter
interpret (Addition a b) = (+) <$> interpret a <*> interpret b
interpret (Multiplication a b) = (*) <$> interpret a <*> interpret b
If you're curious, here's some real symbolic evaluation code I wrote doing the same https://github.com/kadena-io/pact/blob/234ba3dd01f0df8b4e462a33c1e711482e03ca99/src/Pact/Analyze/Eval/Numerical.hs#L72-L89 https://github.com/kadena-io/pact/blob/234ba3dd01f0df8b4e462...
- CalChris 7y agoWell, I'm glad I asked. I get this now. It really is a mapping. But this was a bit of shorthand that I didn't get in the post. You might want to add that.