Hacker News new | ask | show | jobs
Show HN: Tt – a Python library/cli for Boolean expressions (github.com)
23 points by knight123 3381 days ago
5 comments

I wrote this in a few lines of TXR Lisp as just an answer to a SO question:

http://stackoverflow.com/a/34377302/1250772

All code is in the answer. Parsing the infix, and generating the "pretty" truth table over all variables.

An easy-to use declarative mechanism is there for defining operators on multiple precedence levels with different arities. (All you do is instantiate an object with new for each supported operator). Operators either have names that denote existing functions in TXR Lisp, or for any that are not existing Boolean functions, you just define the function (like I did for ->).

IMHO [[https://en.wikipedia.org/wiki/S-expression][Symbolic Expressions]] are... infinitely better.

Example: '(iff (not (and (P 1) (P 2))) (or (not (P 1)) (not (P 2))) )

It actually would not be too hard to add a separate parser for S-expressions; this would allow the existing "backend" tooling (converting to postfix, generating trees, filling tables, etc.) to be used unchanged. I actually think this would be a really powerful feature to add; thanks for the idea!

  I forgot to mention SMT-LIB[1] and pySMT[2].  I don't want to say their are optimal, I just think You might find it interesting.  

  I think it would be even better with Curryed[0] Functions.  As an example ``'(f a1 a2)'' is just a Syntactic Sugar for ``'((f a1) a2)''.  

  Don't forget something like `help' in Python :) .  
[0]: https://en.wikipedia.org/wiki/Currying [1]: http://www.smtlib.org/ [2]: https://github.com/pysmt/pysmt
A Lisp might be a better language choice for that use case than Python. Nothing against Lisps or Python.
Hi, where can I see a list of all the operators that are supported? I tried "A nor B" on the web interface to try to make it break and was surprised that it worked :)
Hi, thanks for taking the time to try it out. The operators can be found in the documentation at: http://tt.bwel.ch/en/latest/api/definitions.html#tt.definiti...

Admittedly, this is poorly formatted and I'm working on cleaning that up. The definition in the code is a little easier to read and can be found here: https://github.com/welchbj/tt/blob/develop/tt/definitions/op...

What does "tt" stand for?
Does it support outputting in LaTeX?
No, however that is a great idea I had not thought of before that I will add to the roadmap. In the meantime, if you need a somewhat-nicer looking output format, I have a basic web interface setup at http://tt-web.bwel.ch/
Might be worth supporting a few different table markup formats. Pandoc has some common ones in it's documentation.

http://pandoc.org/MANUAL.html#tables

Really interesting project though, I'll have to bookmark that web interface.

Thank you, I appreciate you taking the time to check out the project and point me towards pandoc. It looks like a great starting point for expanding into new output formats.
Seems like that might be better implemented as a different library.