# Hilbert [![Gem Version](https://badge.fury.io/rb/hilbert.svg)](http://badge.fury.io/rb/hilbert) [![Build Status](https://travis-ci.org/gogotanaka/Hilbert.svg?branch=master)](https://travis-ci.org/gogotanaka/Hilbert) [![Coverage Status](https://coveralls.io/repos/gogotanaka/Hilbert/badge.png?branch=master)](https://coveralls.io/r/gogotanaka/Hilbert?branch=master) [![Code Climate](https://codeclimate.com/github/gogotanaka/Hilbert/badges/gpa.svg)](https://codeclimate.com/github/gogotanaka/Hilbert) [![Dependency Status](https://gemnasium.com/gogotanaka/Hilbert.svg)](https://gemnasium.com/gogotanaka/Hilbert) ### Do you know the one best language in this world? #### I believe mathematics (logic) is absolutely that language. ### How can we deal something as great as mathematics in a discrete world? #### Hilbert is the answer. Hilbert lets you have a sense of mathematics using a keyboard, the same as you would with a pen. ``` +---Discrete world---+ +------Mathematics-------+ | Ruby | | axiom | | TeX |<---- Hilbert ---->| Uncountable noun | | Python | | real number topology | +--------------------+ +------------------------+ ``` ## Demo The code below is input and output for the Hilbert interpreter. (You can try it with `hilbert -i`.) ### Logic ```coffeescript P -> Q Q -> R (P -> R)? => TRUE P | Q # P or Q ~P # not P Q? # Q is TRUE? => TRUE ``` ### Differentiate ``` d/dx(cos(x)) => ( - sin( x ) ) # You can omit parentheses d/dx log(x) => ( 1 / x ) d/dy xy => ( x ) d/dx e^x => e ^ x ``` ### Integrate ``` S(log(x)dx)[0..1] => - oo S(sin(x)dx)[0..pi] => 2.0 S(cos(x)dx)[0..pi] => 0.0 ``` ### Limit ``` lim[x->oo] (1 + 1/x)^x => 2.7182682371744895 lim[x->0] 1/x => oo ``` ### Sigma ``` ∑[x=0,10] x => 55.0 ``` ### Matrix ``` (1 2 3; 4 5 6) => (1 2 3; 4 5 6) (1 2 3; 4 5 6) + (1 2 3; 4 5 6) => (2 4 6; 8 10 12) (1 2 3; 4 5 6) * (1 2 3) => (14 32) ``` ### Function ``` f(x, y) = xy f(1, 2) => 2 ``` ## How to use Install the `hilbert` gem. $ gem install hilbert Note to OS X Users: If the above `gem` command does not work with the stock version of Ruby (due to not being able to build a target indicated in the Makefile), then you will need to install a version of Ruby that includes the appropriate header files. Using [homebrew](http://brew.sh/) (`brew install ruby`) will suffice. ## Interpreter $ hilbert -i Enjoy! -> ## Use as native language ### Compile into R $ hilbert -r foo.hr ### Compile into Ruby $ hilbert -rb foo.hr ### Compile into Python $ hilbert -py foo.hr ## Use as math template within other langs ```rb class ExampleClass def example_method #your Ruby codes ...... I love mathematics. a = (1 3 4) # your Hilbert codes Q.E.D end end ``` $ hilbert -rb example.rb ```rb class ExampleClass def example_method #your Ruby codes ...... a = Vector[1, 3, 4] end end ``` ## Contributing Any PRs or issues are welcome. (Please make them to [the `develop` branch](https://github.com/gogotanaka/Hilbert/tree/develop).) You can become a committer, even if you only commit once.