I proud to announce that I published Logical 0.3.0 and it’s available in opam. I’m also not to proud to announce that I did a bunch of breaking changes in this release.
During development of this release, I realized that I made the biggest mistake I could do as a library maintainer, which is that I didn’t use my own library, so I made a bunch of stupid design mistakes, which I hopefully fixed in this release.
- Added both_multi goal
- Removed set from the type system
- Moved type system to separate module
- Re-factored state to be a map instead of an association list
- Added bunch of examples to the bin folder
One of my main goal with Logical was to solve the puzzles that I found in this entertaining article: https://xmonader.github.io/prolog/2018/12/21/solving-murder-prolog.html and it became a reality so hurray.
Another important thing to mention is that I can proudly say that Logical is capable of solving a mystery murder, so it’s at least a mystery murder complete language/framework.
Future plans(0.4.0 release):
- I want to introduce conditions or validations (I need to find a good name for it) on the variables, which would basically be a function, which is run when the variable gets it’s value, so it’s possible to assess if the value is a good one or not. I think this feature is extremely general, flexible and powerful, so I have to be careful how I implement it(if I will). It also means that implementing negation in Logical will become a breeze, so that’s it for being negation free.
- I’m thinking of creating a Variable module, which will by more like a syntactic sugar for creating variables. I’m not sure about this, because this would make Goal.equal “obsolete”.
- I will hide Base’s datatypes behind ours, so the user don’t have to depend on base to use the library.
Let me know if you have any suggestion or comment about Logical.